diff options
author | Karl Berry <karl@freefriends.org> | 2016-04-07 20:49:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-04-07 20:49:10 +0000 |
commit | ddfe3a4eaf95167482e923d4da3de2917a7dbfbb (patch) | |
tree | 0acc1bb60b37392451f5e79e00c33c487c19abcf /Master/texmf-dist/source/latex/stex/bin | |
parent | a04ae5a947a6b06bc717719f6ad63e6de5cb5af6 (diff) |
stex (7apr16)
git-svn-id: svn://tug.org/texlive/trunk@40320 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/stex/bin')
25 files changed, 33 insertions, 3092 deletions
diff --git a/Master/texmf-dist/source/latex/stex/bin/Makefile b/Master/texmf-dist/source/latex/stex/bin/Makefile deleted file mode 100644 index c603315a964..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -all: - -clean: - rm -f *~ - diff --git a/Master/texmf-dist/source/latex/stex/bin/README b/Master/texmf-dist/source/latex/stex/bin/README index 6af84e42bab..d548decafc7 100644 --- a/Master/texmf-dist/source/latex/stex/bin/README +++ b/Master/texmf-dist/source/latex/stex/bin/README @@ -1,93 +1,13 @@ -msplit -"Module Split" - -Usage: - msplit <input filename> [options] - -Options: - --output <filename> filename of new main .tex file; default stdout - --path <path> path where to write the module files; - --header <filename> filename of header file to be included in all new .tex files - --verbose verbose on - --stop stop when \end{document} is found, not at EOF - --help show help screen - - -NOTE: All options '--xoption' can be replaced by '-x' as long as there is only one option starting with 'x' - -This program splits the .tex file given at input into: - one main .tex file, that includes - more .tex files, each containing one module - -The name of the new main .tex file is specified by output option. The path to the inputted -files can be specified by path. The name of one generated input file is "name of the -module it contains".tex Running on one already split file will just make a copy. Example -usage: ./msplit slides.tex -o sl.tex -p ./modules -s - -Interpretation: "Split the file slides.tex; wite the new main file as sl.tex and the -inputted files should be placed in ./modules; if path does not exist, it is automatically -created; stop when (uncommented) \end{document} is found." - - - -rf -"Reuse Factor" - -Usage: - rf [options] - -Options: - --input <filename> .tex input file. stdin by default - --stop stop when \end{document} is found, not at EOF - --verbose verbose on - --help show help screen - - -This program computes the reuse factor for the .tex document given at input. This number -represents the ratio of latex processed lines of code to actual lines contained in file -given at input. This number will always be 1 for files that have no \input or \include. - -Example usage: -./rf -v -i slides.tex -Interpretation: "Compute the reuse factor of slides.tex and show all processed files(verbose mode)." - - - -sgraph -"Slides graph [representation]" - -Usage: - sgraph [options] - -Options: - --input <filename> .tex input file; stdin by default - --output <filename> output file; out.dot by default - --format <ps|png|jpg|...> output format; .ps by default; for available formats, see dot --help - --nodot do not generate .dot file, just target format - --root <string> the 'root' of the graph. (name of course) - --theory <string> generate a subgraph for the theory - --sliderange <begin:end> only look at the given slide range; (2:16 for example) - --stop stop reading data when \end{document} is found, not at EOF - --verbose verbose on - --help show help screen - -This program generates a .dot file readable by graphviz, containing a graph of the module -usage in the .tex file given at input, optionally looking at a specific theory and/or -slide range; it also adds a dummy 'root' for the graph, so one can see where everything -starts. It then converts the .dot file to a given format (.ps by default) using graphviz -and optionally deletes the intermediary .dot file. - -Example usage: -./sgraph -i slides.tex -o graph -f ps -n -t TCN --sliderange 20:10000 -r GenCS -v - -Interpretation: "Generate the graph of slides.tex in .ps format, write it in graph.ps, do -not keep the .dot file; include only the part needed for the theory 'TCN' and in the slide -range 20 to 10000; use as root for the graph the string 'GenCS' and show all processed -files." +This directory contains the binaries for sTeX. We have four utilities and a perl libray. +- sms generates sTeX module signatures +- filedate and checksum are for managing metadata in the + DTX files of the sTeX distribution +- installFonts.sty is for chinese font support. +============== Details ================= sms -?? + "genreate sTeX Module Signatures" Usage: sms [options] @@ -107,45 +27,24 @@ Example usage: Interpretation: "Generate the slides.sms file for slides.tex; Stop when \end{document} is found." - - -bms -"Build Module Structure" +checksum + "enable, update, and disable checksums in DTX files" Usage: - bms [options] + checksum [options] Options: - --input <filename> .tex file to read from - --graph <filename> if mentioned, produce the suggested module structure as - a graphviz digraph (.dot file) - --path <pathname> if mentioned, produce same input file/s (including - dependencies) in specified path with suggested - module structure. - --output <filename> the new name of the main .tex file in specified path - --root <string> if mentioned, a father module is included, so that all - other modules descend from it. generally the course name - --stop stop when \end{document} is found; default is to go on - --definitions show a list of all definitions - --verbose verbose on - --help show help screen - - -This program has the purpose of computing a default module structure, such that a module -uses another module if and only if it needs that module and does not need another -descendant of it. First, the prgram reads all necessary data from the input .tex file, -computes the minimal strictly required module usage structure, and writes it as a graphviz -digraph, and/or writes a copy of the input .tex file (and maybe inputted files by the .tex -file) with the new module structure in the given path. All paths are created if not -existing. + -- disable disable the checksum by wrapping in \iffalse ... \fi + -- enable remove those again + -- update update to the correct checksum -Example usage: -./bms -i slides.tex -s -g - | dot -Tps > out.ps; ggv out.ps -./bms -i slides.tex -g out.dot -p ./new -Interpretation: "Build default module structure for slides.tex and write it to out.dot; -also use the obtained module structure and copy the input file to given path with changed -module usage." +filedate <input filename> <newdate> + +Purpose: + Update the dates for a \ProvidePackage invocation in a given .dtx source + +Example: + filedate omdoc.dtx + -rng2dot -Convert Relax NG Compact form to Graphviz dot file diff --git a/Master/texmf-dist/source/latex/stex/bin/TexId.pm b/Master/texmf-dist/source/latex/stex/bin/TexId.pm deleted file mode 100644 index d0f28ccbce5..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/TexId.pm +++ /dev/null @@ -1,464 +0,0 @@ -# package for handling .tex IDs - -package TexId; - -use File::Basename; -use strict; - -# error messages markers - -use constant ERR => '[X]'; # error can't be fixed - -################### 'public' members ################### - -sub new{ - my ($class, %options) = @_; - my $self = {}; - - @{$self->{ENVIRONMENTS}} = qw(module note omtext example - definition problem proof - solution program); # the environments to look at - - @{$self->{ENV_PREFIXES}} = qw(mod not txt ex def prob pf sol prg); # the prefixes for environments - - - @{$self->{ENV_DEF}} = qw(id); # environment arguments that define new environments - @{$self->{ENV_USAGE}} = qw(use uses for from); # environment arguments that - # specify usage of other environments - - # options for the class - %{$self->{OPTIONS}} = %options; - - # in case \snippath{} is encountered, prepend this to the filename - $self->{OPTIONS}{snippath} = 'snippets/' unless defined $self->{OPTIONS}{snippath}; - - - # show progress while reading data - $self->{OPTIONS}{progress} = 1 unless defined $self->{OPTIONS}{progress}; - - bless ($self, $class); -} - -# check/set list of environments to look at -sub environments{ - my ($self, $new_environments, $new_prefixes) = @_; - if (defined $new_environments and defined $new_prefixes){ - @{$self->{ENVIRONMENTS}} = split(/,/, $new_environments); - @{$self->{ENV_PREFIXES}} = split(/,/, $new_prefixes); - die "Invalid argument combination (both arguments must have same number of elements)" - if $#{$self->ENVIRONMENTS} != $#{$self->ENV_PREFIXES}; - } - else { - return (join(',', @{$self->{ENVIRONMENTS}}), join(',', @{$self->{ENV_PREFIXES}})); - } -} - -# define/read environment definition arguments -sub env_def{ - my ($self, $new_env_def) = @_; - if (defined $new_env_def){ - @{$self->{ENV_DEF}} = split(/,/, $new_env_def); - } - else { - return join(',', @{$self->{ENV_DEF}}); - } -} - -# define/read the environment usage arguments -sub env_usage{ - my ($self, $new_env_usage) = @_; - if (defined $new_env_usage){ - @{$self->{ENV_USAGE}} = split(/,/, $new_env_usage); - } - else { - return join(',', @{$self->{ENV_USAGE}}); - } -} - -# define/read the snippets path -sub snippath{ - my ($self, $new_snippath) = @_; - if (defined $new_snippath){ - $new_snippath.='/' if ($new_snippath !~ /\/$/); - $self->{OPTIONS}{snippath} = $new_snippath; - } - else { - return $self->{OPTIONS}{snippath}; - } -} - - -# check all the definitions and module usages -# in all files referenced by base file -sub parse{ - - my ($self, $basefile) = @_; - - # recursive local function to go through each file - local *run_parse = sub - { - my ($filename) = @_; - - # read current .tex file - print STDERR "Loading $filename...\n" if ($self->{OPTIONS}{progress} == 1); - $filename = $self->load_file_data($filename); - my @text = @{$self->{FILEDATA}}; - my $line_no = 0; - - # go through every line of the read file - # depends on: \requiremodules, \snippath - # ignores \end{document} - - foreach (@text){ - # delete newline character, comments and redundant white space - - $line_no++; - /([^%]*)((%.*)?)/; - $_ = $1; - s/\s+//g; - - # see if an environment that has some arguments is defined - my ($possible_env, $env_args) = (undef, undef); - ($possible_env, $env_args) = ($1, $2) if (/\\begin\{([^\}]+)\}\[([^\]]+)\]/); - - # if it is, search it through the list of environments we want to look at - if (defined $possible_env){ - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless ($environment eq $possible_env); - - # if we found an anvironment we want to look at, - # go through the list of arguments - $env_args = $self->swap_exterior_char(',', ';', $env_args); - foreach (split(/;/, $env_args)){ - # we want arguments of type name=value - next unless /([^=]+)=(.+)/; - my ($arg_name, $arg_value) = ($1, $2); - - # see if the argument defines an environment - foreach my $current_env_arg(@{$self->{ENV_DEF}}){ - next unless ($arg_name eq $current_env_arg); - my @to_add = split(/,/, $arg_value); - push(@{$self->{'DEF'}->{$environment}}, @to_add); - foreach my $added_element(@to_add){ - $self->{'DEF'}->{LOCATION}{$added_element}.=$line_no.':'.$filename."\n"; - } - last; - } - - # see if the argument uses an environment - foreach my $current_env_arg(@{$self->{ENV_USAGE}}){ - next unless ($arg_name eq $current_env_arg); - my @to_add = split(/,/, $arg_value); - push(@{$self->{'USE'}->{$environment}}, @to_add); - foreach my $added_element(@to_add){ - $self->{'USE'}->{LOCATION}{$added_element}.=$line_no.':'.$filename."\n"; - } - last; - } - } - last; - } - } - # reference to another file - if (/\\requiremodules(\[(include|exclude)\])?\{([^\}]+)\}/){ - if (defined $2 && $2 eq 'include'){ - $_ = $3; - $_ = $self->{OPTIONS}{snippath}.$1 if (/\\snippath\{(.+)/); - $_ = $self->{path}.$_; - run_parse($_); - } - } - - # see definition of snippath - $self->snippath($1) if (/\\def\\snippath\#1\{([^\#]+)\#1\}$/); - } - }; - - run_parse($basefile); - -} - -# this is the first checking step to be done -sub check_uniq{ - - my ($self) = @_; - - my $error = 0; - - # sort environment definitions and see whether they are uniquely defined - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless defined $self->{'USE'}->{$environment}; - - my @list1 = sort @{$self->{'DEF'}->{$environment}}; - my @list2 = $self->uniq(@list1); - @{$self->{'DEF'}->{$environment}} = @list2; - - # some environments are defined multiple times - if ($#list1 != $#list2){ - my $j = 0; - for (my $i = 0; $i<=$#list2; $i++){ - my $start_j = $j; - while ($j<=$#list1 && $list1[$j] eq $list2[$i]){ - $j++; - } - if ($j - $start_j != 1){ - print STDERR ERR, " Environment '$list2[$i]' is defined multiple times ", - "within same environment type: \n"; - print STDERR $self->{'DEF'}->{LOCATION}{$list2[$i]}, "\n"; - $error = 1; - } - } - } - } - - # see that all environment references are unique (and sort them) - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless defined $self->{'USE'}->{$environment}; - @{$self->{'USE'}->{$environment}} = sort $self->uniq(@{$self->{'USE'}->{$environment}}); - } - - return $error; -} - -sub check_prefix{ - - my ($self) = @_; - - my $count = $#{$self->{ENVIRONMENTS}}+1; - - for (my $i = 0; $i < $count; $i++){ - my $environment = ${$self->{ENVIRONMENTS}}[$i]; - my $envprefix = ${$self->{ENV_PREFIXES}}[$i]; - next unless defined $self->{'DEF'}->{$environment}; - - foreach my $elem (@{$self->{'DEF'}->{$environment}}){ - - my $proper = undef; - if ($elem =~ /^([^:]+):(.+)/){ - $proper = $envprefix.':'.$2 if $1 ne $envprefix; - } else { - $proper = $envprefix.':'.$elem; - } - - if (defined $proper){ - print STDERR ERR, " $environment '$elem' has no prefix ($envprefix). Add it? [ <y>, n ]"; - my $answer = <STDIN>; - chomp($answer); - if ($answer eq 'y' or $answer eq ''){ - $self->add_change('DEF', $elem, $proper); - } - } - } - } -} - - -sub check_defs{ - my ($self) = @_; - - my $error = 0; - - # combine all definitions - my @defs; - map {push(@defs, @{$self->{'DEF'}->{$_}}) if defined @{$self->{'DEF'}->{$_}}} @{$self->{ENVIRONMENTS}}; - @defs = sort @defs; - - # combine all used environments - my @uses; - map {push(@uses, @{$self->{'USE'}->{$_}}) if defined @{$self->{'USE'}->{$_}}} @{$self->{ENVIRONMENTS}}; - @uses = sort @uses; - - - # for all environments - - foreach my $used_env(@uses){ - # if used environment is not defined - if ($self->find_elem($used_env, @defs) < 0){ - # maybe it is a typo - print STDERR ERR, " '$used_env' was not found. Replace options:\n"; - foreach my $definition(@defs){ - print STDERR "\t$definition\n" if $self->edit_dist($used_env,$definition)<4; - $error = 1; - } - } - } - - return $error; -} - - -sub add_change{ - my ($self, $location, $from, $to) = @_; - if ($self->{$location}->{LOCATION}{$from} =~ /([^:]+):([^\n]+)\n/){ - push(@{$self->{CHANGE}->{$2}}, ($1, $from, $to)); - } -} - -# write the stored changes -sub apply_changes{ - my ($self) = @_; - while (my ($filename, $changes) = each %{$self->{CHANGE}}){ - $filename = $self->load_file_data($filename); - my $count = int(($#{$changes}+1)/3); - for (my $i = 0; $i<$count ; $i++){ - my ($line, $from, $to) = (${$changes}[$i*3]-1, - ${$changes}[$i*3+1], ${$changes}[$i*3+2]); - ${$self->{FILEDATA}}[$line] =~ s/\Q$from/$to/; - } - print STDERR "Writing $filename\n" if ($self->{OPTIONS}{progress} == 1); - $self->write_file_data($filename); - } -} - -sub load_file_data{ - my ($self, $filename) = @_; - - # try to give proper file extension if file is not found - $filename = $self->add_ext($self->drop_ext($filename)) unless -e $filename; - - open(FIN, $filename) or die "Cannot open $filename\n"; - @{$self->{FILEDATA}} = <FIN>; - close(FIN); - - $self->{path} = dirname($filename).'/' unless defined $self->{path}; - - return $filename; -} - -sub write_file_data{ - my ($self, $filename) = @_; - - open(FOUT, ">$filename") or die "Cannot write $filename\n"; - print FOUT @{$self->{FILEDATA}}; - close(FOUT); -} - - -################### 'protected' members ################### - -sub def_env_list{ - my ($self, $env_name) = @_; - return @{$self->{'DEF'}->{$env_name}}; -} - -sub use_env_list{ - my ($self, $env_name) = @_; - return @{$self->{'USE'}->{$env_name}}; -} - - -################### 'private' members ################### - -sub drop_ext{ - my ($self, $filename) = @_; - while ($filename =~ /\.tex$/){ - while ($filename !~ /\.$/ ) { chop($filename); } - chop($filename); - } - return $filename; -} - -sub add_ext{ - my ($self, $filename) = @_; - $filename.='.tex' if $filename !~ /\.tex$/; - return $filename; -} - -# look at $word, and swap all occurances of $char_find with -# $new_char if they are not in a {...} environment - -sub swap_exterior_char{ - my ($self, $char_find, $new_char, $word) = @_; - my @new_word = (); - my $exterior = 0; - foreach (split('', $word)){ - if ($_ eq '{'){ - $exterior++; - next; - } - - if ($_ eq '}'){ - $exterior--; - next; - } - - if ($exterior == 0 && $_ eq $char_find){ - push(@new_word, $new_char); - } - else{ - push(@new_word, $_); - } - } - return join('',@new_word); -} - -# return unique elements from a list -sub uniq{ - my ($self, @list) = @_; - my %seen = (); - my @uniqu = grep { ! $seen{$_} ++ } @list; - return @uniqu; -} - - -# binary search -sub find_elem{ - my ($self, $elem, @list) = @_; - - local *search_elem = sub - { - my ($a, $b) = @_; - my $m = int(($a + $b)/2); - return $m if $list[$m] eq $elem; - return -1 if ($a >= $b); - return ($list[$m] le $elem)?search_elem($m+1,$b):search_elem($a,$m-1); - }; - - return search_elem(0, $#list); -} - -# edit distance between two strings -# insertions, deletions, replacement, transposition -sub edit_dist{ - my ($self, $s1, $s2) = @_; - my $m = length($s1); - my $n = length($s2); - my @w1 = split(//, $s1); - my @w2 = split(//, $s2); - - # add dummy char so we can have nicer indeces - unshift(@w1, '*'); - unshift(@w2, '*'); - - # distances matrix - my @d; - - # initialize - $d[0][0] = 0; - for (my $i = 1; $i <= $m ; $i++) { $d[$i][0] = $i;} - for (my $i = 1; $i <= $n ; $i++) { $d[0][$i] = $i;} - - # compute - for (my $i = 1; $i <= $m ; $i++){ - for (my $j = 1; $j <= $n ; $j++){ - my @possibilities = ($d[$i-1][$j-1] + ($w1[$i] ne $w2[$j]), - $d[$i-1][$j] + 1, $d[$i][$j-1] + 1); - - push(@possibilities, $d[$i-2][$j-2] + 1) - if ($i>1 && $j>1 && $w1[$i] eq $w2[$j-1] && $w1[$i-1] eq $w2[$j]); - - $d[$i][$j] = $self->minimum(@possibilities); - } - } - return $d[$m][$n]; -} - -sub minimum{ - my ($self, @list) = @_; - my $result = shift(@list); - map {$result = $_ if $result ge $_} @list; - return $result; -} - - -1; diff --git a/Master/texmf-dist/source/latex/stex/bin/allgen b/Master/texmf-dist/source/latex/stex/bin/allgen deleted file mode 100755 index 4728d89ee56..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/allgen +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -if [[ -z $STEX_CONTENT_HOME ]] -then - echo "STEX_CONTENT_HOME is not set; please set it in your ~/.bashrc" - exit 1 -fi - -LIB="$STEX_CONTENT_HOME/slides/lib" -cat <<'EOF' -% this file is automatically generated by allgen -% Note: This hack is needed to make mikoslides and problems work together. -\PassOptionsToPackage{solutions,notes,pts,min}{problems} -EOF - -sed -e '/\\begin{document}/ i\ -\\usepackage{problems} -' $LIB/pre.tex | \ - grep -v '^\\def\\snippets' - -cat <<'EOF' -EOF - -for file in *.tex -do - prefix=${file%.tex} # file name without .tex suffix - [[ $prefix != "all" ]] && echo -e "\\subsection{${prefix//_/\\\\_}} \n \\input{$prefix}" # in subsection replace "_" by "\_" -done - -cat $LIB/post.tex diff --git a/Master/texmf-dist/source/latex/stex/bin/bms b/Master/texmf-dist/source/latex/stex/bin/bms deleted file mode 100755 index 52f1002c0d9..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/bms +++ /dev/null @@ -1,340 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for building a default module usage structure. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/bms$ # -# $Date: 2005-10-04 10:47:41 -0500 (Tue, 04 Oct 2005) $ $Rev: 4371 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use File::Path; -use Pod::Usage; -use Modparse; - - -########################################## -# Command Line processing -########################################## - -my $input="-", my $graph_output='', my $graph_root='', -my $verbose=0, my $stop_at_end=0; -my $show_definitions=0, my $show_modules = 0; -my %arg_snippath; my @snippathList; - -$main::path_new=''; -$main::new_name=''; - -GetOptions("path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "graph=s" => \$graph_output, - "opath=s" => \$main::path_new, - "output=s" => \$main::new_name, - "root=s" => \$graph_root, - "definitions" => sub {$show_definitions = 1;}, - "modules" => sub {$show_modules = 1;}, - "stop" => sub {$stop_at_end = 1;}, - "verbose" => sub {$verbose = 1;}, - "help" => sub {pod2usage(2);}); - -$input = $ARGV[0] if ($#ARGV>=0); - -########################################## -# .tex data reading -########################################## - -$main::no_name_modules = 0; -%main::definition_module = (); -@main::definitions_list = (); - -%main::module_definitions = (); -%main::used_modules = (); -@main::modules_list = (); - -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - requireStatus=>'exclude', - onlyModuleLines=>1, - onBeginModule=>sub { - if (!defined $_[0]->{module_id}) { - $_[0]->{module_id} = "MOD".$main::no_name_modules; - $main::no_name_modules++; } - $_[0]->{defines} = ''; - }, - onEveryLine=>sub { - if ($_[0]->{simple_tex} =~ /\\(sym|abbr|ell)def\{\\([^\}]+)\}/) { - my $data = $2; - $_[0]->{defines} .= "$data;"; - $main::definition_module{$data} = $_[0]->{module_id}; - push(@main::definitions_list, $data); - } elsif ($_[0]->{simple_tex} =~ /\\STRlabel\{([^\}]*)\}/){ - my $data = "L:$1"; - $_[0]->{defines} .= "$data;"; - $main::definition_module{$data} = $_[0]->{module_id}; - push(@main::definitions_list, $data); - } - $_[0]->{module_content} .= $_[0]->{simple_tex}; - }, - onEndModule=>sub { - chop($_[0]->{defines}) if $_[0]->{defines}; - $main::module_definitions{$_[0]->{module_id}} = $_[0]->{defines}; - push(@main::modules_list, $_[0]->{module_id}); - my $module_refs = ''; - foreach my $def(@main::definitions_list){ - next if $main::definition_module{$def} eq $_[0]->{module_id}; - next unless $module_refs !~ /$main::definition_module{$def}/; - if ($def =~ /^L\:(.*)/){ - $module_refs .= "$main::definition_module{$def};" - if ($_[0]->{module_content} =~ /\\STRcopy\{$1\}/); - } else { - $module_refs .= "$main::definition_module{$def};" - if ($_[0]->{module_content} =~ /\\$def/); - } - } - chop($module_refs) if $module_refs; - $main::used_modules{$_[0]->{module_id}} = $module_refs; - }); - -################################################################## -# Internal routines for BMS -################################################################## - -%main::bms = (); - -# add a dummy module that uses nothig, such that any other module uses at least something -sub addroot { - foreach my $module(@main::modules_list){ - next if $main::used_modules{$module}; - $main::used_modules{$module} = $graph_root; - } - push(@main::modules_list, $graph_root); - $main::module_definitions{$graph_root}=''; - $main::used_modules{$graph_root}=''; -} -# end addroot - -sub included { - my ($a1_ref, $a2_ref) = @_; - my $ok; - foreach my $elem (@$a1_ref){ - $ok = 0; - foreach (@$a2_ref){ - if ($elem eq $_){ - $ok=1; - last; }} - return 0 unless $ok;} - return 1; -} - -# find if a module uses another module -sub can_go{ - my ($src,$dest) = @_; - return 1 if $src eq $dest; - foreach (split(/;/, $main::bms{$src})){ - return 1 if can_go($_,$dest); - } - return 0; -} -# end can_go - -# find the actual module structure -sub find_bms{ - my @added_modules, my @can_add, my @to_look, my @next_step; - - %main::bms=(); - @to_look = @main::modules_list; - @added_modules = (); - - while($#main::modules_list != $#added_modules){ - - @can_add=(); @next_step=(); - - foreach my $module(@to_look){ - my @temp = split(/;/, $main::used_modules{$module}); - included(\@temp,\@added_modules)?push(@can_add,$module):push(@next_step,$module); - } - @to_look = @next_step; - - foreach my $module(@can_add){ - - my @uses = split(/;/,$main::used_modules{$module}); - my $change = 1; - while ($change){ - $change = 0; - foreach my $f1(@uses){ - foreach my $f2(@uses){ - next if $f1 eq $f2; - if (can_go($f1,$f2)){ # i.e. f2 used by f1 => can remove f2 - my @new_uses; - foreach (@uses){ - push(@new_uses,$_) unless ($_ eq $f2); - } - @uses = @new_uses; - $change = 1; - last; - } - } - last if $change; - } - } - $main::bms{$module} = join(";",@uses); - push(@added_modules,$module); - } - } -} -# end find_bms - -# print the content of %bms in a .dot file; note: may change %bms by adding dummy root -sub printgraph { - my $out = shift; - - addroot if $graph_root; - - open(FOUT,">$out") or die "Can't write $out\n"; - print FOUT "digraph MS {\n"; - while (my ($module, $uses) = each %main::bms){ - $uses =~ s/-/_/g; - $module =~ s/-/_/g; - if ($uses){ - if ($uses =~ /;/){ - print FOUT "$module -> {$uses};\n"; - } else { - print FOUT "$module -> $uses;\n"; - } - } else { - print FOUT "$module [shape=box color=red];\n"; - } - } - print FOUT "}\n"; - close(FOUT); -} -# end printgraph - -# print the list of definitions -sub printdefinitions{ - while (my ($module,$def) = each %main::module_definitions){ - print "$module:\n" if $def; - foreach (split(/;/,$def)){ - print "\t$_\n"; - } - }} -# end printdefinitions - -#print the list of modules -sub printmodules{ - while (my ($module,$uses) = each %main::used_modules){ - print "'$module' uses:\n $uses\n\n\n"; - }} -#end printmodules - - -# wite the new .tex file, with found module usage, in given path -sub writenew { - my ($filename) = @_; - $main::no_name_modules = 0; - my $wmp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - requireStatus=>'exclude', - onlyModuleLines=>0, - onBeginFile=> sub { - $_[0]->{'new_content'.$_[0]->{depth}} = ''; - }, - onBeginModule=>sub { - if (!defined $_[0]->{module_id}) { - $_[0]->{module_id} = "MOD".$main::no_name_modules; - $main::no_name_modules++; } - my $new_uses = $main::bms{$_[0]->{module_id}}; - if (defined $new_uses) { - $new_uses =~ s/;/,/g; - $new_uses="{$new_uses}" if $new_uses =~ /,/; - my $arg = $_[0]->{module_args}; - my @new_arg=(); - my $done = 0; - while ($arg =~ /^([\w-]+)=(([\w-]+)|(\{[\w,-]+\}))/){ - if ($1 eq 'uses'){ - push(@new_arg,"$1=$new_uses")if $new_uses; - $done = 1; - } else { - push(@new_arg,"$1=$2"); - } - $arg=substr($arg,length($1)+length($2)+1); - $arg=substr($arg,1) if ($arg =~ /^,/); - } - if ($new_uses) { - push(@new_arg,"uses=$new_uses") unless $done; } - $_[0]->{original} = "\\begin{module}\[".join(',',@new_arg)."\] ". $_[0]->{comment}. "\n"; - } - }, - onEveryLine=>sub { - $_[0]->{'new_content'.$_[0]->{depth}} .= $_[0]->{original}; - }, - onEndFile=> sub { - my $filename = ($main::path_new).'/'.$_[0]->{filename}; - my $path = $filename; - while ($path !~ m!\/$!) { chop($path); } - mkpath($path); - $filename = $path.'/'.$main::new_name if ($main::new_name && $_[0]->{depth} == 1); - print "Writing $filename\n" if $_[0]->{pack}->{verbose}; - open(FS, ">$filename") or die "Cannot write $filename\n"; - print FS $_[0]->{'new_content'.$_[0]->{depth}}; - close(FS); - }); - - $wmp->execute($filename); -} - - -############################################################# -# Start program -############################################################# - -$mp->execute($input); - -printdefinitions if $show_definitions; -printmodules if $show_modules; - -if ($graph_output || $main::path_new){ - find_bms; - writenew($input) if $main::path_new; - printgraph($graph_output) if $graph_output; -} - -__END__ - - -=head1 SYNOPSIS - -bms <input filename> [options] - -Options: - - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --graph <filename> if mentioned, produce the suggested module structure as - a graphviz digraph. (.dot file) - --opath <pathname> if mentioned, produce same input file/s (including - dependencies) in specified path with suggested - module structure. - --output <name> the new name of the main .tex file in specified path. - --root <name> if mentioned, a father module is included, so that all - other modules descend from it. generally the course name. - --stop stop when \end{document} is found; default is to go on. - --definitions show a list of all definitions. - --modules show a list of all modules. - --verbose verbose on. - --help this screen. - - - This program has the purpose of computing a default module structure, according -to actual necessities. - Example: - ./bms -i slides.tex -g out.dot - ./bms -i slides.tex -s -g - | dot -Tps > out.ps; ggv out.ps diff --git a/Master/texmf-dist/source/latex/stex/bin/convert-paths b/Master/texmf-dist/source/latex/stex/bin/convert-paths deleted file mode 100755 index 55ee72a2370..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/convert-paths +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/perl -w -# -# A script that converts paths in sTeX files from the old \Foosnipppath{bar} -# to \snippets{foo/bar}, according to the definition of those path macros in -# paths.sty. -# -# Syntax: convert-paths path/to/paths.sty FILES -# -# © 2008 Christoph Lange, KWARC, Jacobs University - -use File::Copy; - -my %map; - -my $SNIPPATHRE = '\\\\[[:alnum:]]+(?i:snip|pic)path'; - -if (open(P, shift(@ARGV))) { - print STDERR "Mapping:\n"; - while (<P>) { - if (/^\\def($SNIPPATHRE)#1\{(\\KWARCslides\{[^#]+)#1\}/o) { - printf STDERR "\t%s -> %s\n", $1, $2; - $map{$1} = $2; - } - } - close(P); -} -else { - die "Could not open paths.sty"; -} - -print STDERR "Processing files:\n"; -while ($#ARGV >= 0) { - my $filename = shift(@ARGV); - print STDERR "\t$filename\n"; - copy($filename, "$filename~") || print STDERR "\t\tWARN: could not create backup\n"; - if (open(T, $filename)) { - # slurp the file into a string - local $/; - $data = <T>; - $data =~ s/($SNIPPATHRE)\{([^}]+)\}/ - $map{$1} ? "$map{$1}$2\}" - : ((print STDERR "\t\tWARN: could not replace $1\n"), "$1\{$2}") - /oxge; - close T; - if (open(T, ">$filename")) { - print T $data; - close T; - } - else { - print STDERR "\t\tWARN: could not save replacement\n"; - } - } - else { - print STDERR "\t\tWARN: could not open file\n"; - } -} diff --git a/Master/texmf-dist/source/latex/stex/bin/filedate b/Master/texmf-dist/source/latex/stex/bin/filedate index 6ea1a5d6870..af49b6550dd 100755 --- a/Master/texmf-dist/source/latex/stex/bin/filedate +++ b/Master/texmf-dist/source/latex/stex/bin/filedate @@ -14,9 +14,9 @@ use Pod::Usage; use Cwd qw(abs_path); my ($file) = @ARGV; -my $date = `svn info $file`; -$date =~ /Last Changed Date: (\d+)-(\d+)-(\d+)/; -$date = $1.'/'.$2.'/'.$3; +my $date = `git log --format='%ai' $file`; +$date = substr($date, 0, index($date, ' ')); +$date =~ s/-/\//g; $file = abs_path($file); open(IN,"<$file"); my @lines = (); diff --git a/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl b/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl deleted file mode 100755 index cd6da0dc06a..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/perl -use Cwd; - -die 'Set your environment variable "KWARC_HOME" and try again.' if !($ENV{KWARC_HOME}); - -open(PATH_STY,"$ENV{KWARC_HOME}/projects/stex/sty/paths.sty") || die "can't open path.sty"; -while ($line=<PATH_STY>) { - $line =~ m/\\def\\(\w*).*\/([\w-]*)\/#1/; - $macros{$2}=$1; # dir -> macro -} -close(PATH_STY); - -print <<PRE_TEX; -\\documentclass[notes]{mikoslides} -\\usepackage{amssymb} -\\usepackage{latexml,stex,program} -\\usepackage{ded,calbf,myindex} -\\usepackage{tikz,multicol} -\\usepackage{paths} -\\usepackage[show]{ed} -\\def\\bsp{\\sl\\color{green}} -\\def\\hrcr#1#2{#2} - -\\begin{document} -PRE_TEX - -chdir("$ENV{KWARC_HOME}/teaching/snippets/"); - -foreach $dir (<*/>) { - $dir = substr($dir,0,-1); - if (@ARGV){ # take all dirs listet in @ARGV - next if !(grep(/$dir/,@ARGV)) - } else { # take all dirs but those listed here - # next if $dir lt "b"; #test break - # next if $dir gt "comb"; #test break - next if grep(/$dir/,qw(PIC activemath admin eLearning lib kwarc mathweb mbase old.assignments omdoc openmath physml quantumcomputing sTex search semweb setthy spl1 term-indexing trs varia xml)); #skip these - next if grep(/$dir/,qw(ai codeml fa graphs-trees kr mws nlfrags pl0 pl1 prolog regexp)); #broken dirs - } - print "\\begin{omgroup}{$dir}\n"; - foreach $file (<${dir}/en/*.sms>) { - $file =~ m/([^\/]*).sms/; - $prefix = $1; - next if grep(/$prefix/,qw(all admin)); - print "\\begin{omgroup}{$prefix}\n"; - print "\\requiremodules[exclude]{\\$macros{$dir}\{en/$prefix}\}\n"; - open (FILE,"./$file") || die "can't open $file"; - while ($line=<FILE>) { - $line =~ s/%.*//; - if ($line =~ m/begin{module}/) { # many "begin{module}" in one line yields invalid stex!!! - $uses = ($line =~ m/id=([\w-]*)/) ? "[uses=$1]" : ""; - print "\\begin{module}$uses\n"; # symbols after inner modules yields stex errors!!! - print "\\begin{verbatim}\n"; - print "\\requiremodules[exclude]{\\$macros{$dir}\{en/$prefix}\}\n"; - print "\\begin{module}$uses\n"; - print "\\end{verbatim}\n"; -# print "\\begin{multicols}{2}\n"; - } - if ($line =~ m/\\symdef{([^}]*)}(?:\[(\d)\])?({\\assoc\[)?/) { - $symb = $1; - $arity = $2; - $isAssoc = $3 ne ""; - $defArity = $isAssoc ? 4 : $arity; - $exampleArity = $arity eq "" ? 0 : $defArity; - $arityOrAssoc = $isAssoc ? "assoc" : $arity; - $dummy_args = join("",map {"{$_}"} (qw(a b c d e f g h m)[0..$exampleArity-1])); - $dummy_args = "{a,b,c,d}" if $isAssoc; - $escaped_dummy_args = $dummy_args; - $escaped_dummy_args =~ s/{/\\{/g; - $escaped_dummy_args =~ s/}/\\}/g; -# print "{\\tt{$symb\[$arityOrAssoc\]}} $escaped_dummy_args\\hfill"; - print "{\\tt{$symb$escaped_dummy_args}} \\hfill "; - print "\$\\$symb$dummy_args\$\\\\\n"; - } - if ($line =~ m/end{module}/) { # several "end{mdoule}" allowed!!! -# print "\\end{multicols}\n"; - print $line; - } - } - close(FILE); - print "\\end{omgroup}\n"; - } - print "\\end{omgroup}\n"; -} - -print "\\end{document}"; diff --git a/Master/texmf-dist/source/latex/stex/bin/grep-rerun b/Master/texmf-dist/source/latex/stex/bin/grep-rerun deleted file mode 100755 index f73ef082fbb..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/grep-rerun +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for updating .dtx files with a correspodning checksum counter # -# Copyright (c) 2010, Deyan Ginev, released under the Gnu General Public License (GPL)# -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: https://svn.kwarc.info/repos/stex/trunk/bin/gre-rerun$ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Pod::Usage; -use File::Spec; -use Cwd qw(abs_path); - -####### start of program ####### -my ($errlog,$pattern)=@ARGV; -my %rerun_set = (); -open(IN,"<",$errlog); -my ($errvol,$errdir)=File::Spec->splitpath($errlog); -my $currpath=abs_path($errdir); -while (<IN>) { - #Entering, update path - if (/^Entering (.+)$/) { - $currpath.="/$1"; - } - #Leaving, update path - elsif (/^Leaving (.+)$/) { - $currpath =~ s/(\/$1)$//; - } - #Matching error, note source - elsif (/$pattern/) { - my ($name) = split(/:/,$_); - ($name) = split(/\./,$name); - $rerun_set{$currpath."/".$name.".tex"}=1; - } -} -#Perform rerun of affected sources: -print STDERR scalar(keys %rerun_set)." sources to rerun:\n"; -foreach (sort keys %rerun_set) { - my ($vol,$dir,$file) = File::Spec->splitpath( $_ ); - print STDERR "Trying $_\n"; - $file=~s/\.tex$/.omdoc/; - print STDERR `cd $dir; make $file -B`; -} -close(IN); - - -__END__ - - -=head1 SYNOPSIS - -grep-rerun <errlog filename> <grep pattern> - -Purpose: - Given an error log file, generated via the sTeX Makefiles, and an error pattern, fetches and reconverts all sources that suffered this error. -Example: - grep-rerun latex.errlog "Fatal:" diff --git a/Master/texmf-dist/source/latex/stex/bin/idcheck b/Master/texmf-dist/source/latex/stex/bin/idcheck deleted file mode 100755 index d832ac7788e..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/idcheck +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -use Getopt::Long; -use File::Path; -use Pod::Usage; -use TexId; - - - -my $tex = TexId->new(progress => 1); - - - -$tex->load_file_data('../GenCS/notes.tex'); - -my ($a, $b) = $tex->environments(); -print $b, "\n"; - -print $tex->snippath(), "\n"; - -$tex->parse('../GenCS/notes.tex'); -#print join(', ', $tex->use_env_list('omtext')), "\n"; - -#print $tex->edit_dist('anaIU', 'aanUI'), "\n"; - -$tex->check_uniq; -$tex->check_prefix; -$tex->apply_changes; diff --git a/Master/texmf-dist/source/latex/stex/bin/installFonts.sh b/Master/texmf-dist/source/latex/stex/bin/installFonts.sh new file mode 100755 index 00000000000..a9a6b1bb303 --- /dev/null +++ b/Master/texmf-dist/source/latex/stex/bin/installFonts.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# execute as root (via sudo) +fontdir="$(dirname $0)/../lib/fonts" +mkdir -p /usr/share/fonts/opentype/Fandol +mkdir -p /usr/share/fonts/truetype/cwTeX +cp "${fontdir}/FandolFang-Regular.otf" /usr/share/fonts/opentype/Fandol/ +cp "${fontdir}/cwTeXQKai-Medium.ttf" /usr/share/fonts/truetype/cwTeX/ +exec fc-cache diff --git a/Master/texmf-dist/source/latex/stex/bin/msplit b/Master/texmf-dist/source/latex/stex/bin/msplit deleted file mode 100755 index cf178ce9b5f..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/msplit +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/perl -w -############################################################################################## -# Program: msplit (a utility for splitting STeX documents along module boundaries) -############################################################################################## -# $URL: svn://kwarc.faculty.iu-bremen.de/kohlhase/kwarc/projects/content/bin/msplit$ -# $Rev: 3722 $; last modified by $Author: $ -# $Date: 2005-07-27 03:22:19 +0200 (Wed, 27 Jul 2005) $ -# Copyright (c) 2005 Ioan Sucan -############################################################################################## -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License [http://www.gnu.org/copyleft/gpl.html] -# for more details. -############################################################################################## -use strict; -use Getopt::Long; -use File::Path; -use Pod::Usage; - -my $input='-', my $output='-', my $path='', my $verbose=0, my $stop_at_end=0; -my $flag = "include"; -my $header='', my @hdr_data; - -sub texf { - my $fn = shift; - $fn.='.tex' if $fn !~ /\.tex$/; - return $fn; } - -sub write_file_data{ - my $filename = shift; - open(FS,$filename) or die "Cannot write $filename\n"; - print FS @_; - close(FS); } - -# remove the last component in a path -sub justpath{ - my $arg = shift; - return '' if ($arg !~ m!\/!); - while ($arg !~ m!\/$!) {chop($arg);} - return $arg; } -# end justpath - - -sub go { - my ($input, $output) = @_; - my $path = justpath($output); - - my @module_file=(); - my @out_data=(); - - print "Splitting $input...\n" if $verbose; - `mv $output $output~` if (-e $output); - $input="$input~" if ($input eq $output); - - open(FIN,$input) or die "Can't open $input\n"; - my $in_module=0; my $path_name; - foreach (<FIN>){ - chomp; - /([^%]*)((%.*)?)/; - ($_,my $comment)=($1,$2); - if (/\\begin\s*\{module\}/){ - $_ =~ s/\s//g; - /id=([\w-]*)/; - my $module_name = $1; - $path_name = "$path$module_name.tex"; - print "$path_name\n" if $verbose; - `mv $path_name $path_name~` if (-e $path_name); - push(@module_file,@hdr_data) if $header; - push(@module_file,"\n$_$comment\n"); - push(@out_data,"\\requiremodules[$flag]{$module_name}\n"); - $in_module=1; - next; } - if (/\\end\s*\{module\}/){ - $_ =~ s/\s//g; - push(@module_file,"$_$comment\n"); - mkpath(justpath($path_name)); - write_file_data(">$path_name",@module_file); - $in_module=0; - next; } - if ($stop_at_end && /\\end\s*\{document\}/){ - $_ =~ s/\s//g; - push(@out_data,"$_$comment\n"); - last; } - $_="$_$comment\n"; - if ($in_module) {push(@module_file,$_);} - else {push(@out_data,$_); }} - close(FIN); - mkpath($path) if $path; - write_file_data(">$output",@out_data); } - -GetOptions("output=s" => \$output, - "path=s" => \$path, - "header=s" => \$header, - "exclude" => sub { $flag = "exclude"; }, - "verbose" => sub { $verbose=1; }, - "stop" => sub { $stop_at_end=1; }, - "help" => sub { pod2usage(2)}); - -$input = $ARGV[0] if ($#ARGV>=0); -die "Input file does not exist\n" if (! defined $input || ! -e $input); -$output = $input if (! defined $output); - -if ($header && -e $header) { - open(HDR,$header); - @hdr_data = <HDR>; - close(HDR); } - -$path.='/' if $path && $path !~ m!\/$!; -go($input,$path.$output); -print "Done.\n" if $verbose; - -__END__ - - -=head1 SYNOPSIS - -msplit <inputfile> [options] - -Options: - - --output filename of new main .tex file; default: same as input - --path path where to generate the new documents; '.' by default - --header file to be copied at beginning of all new module files - --exclude modules exluded by default; if not mentioned, modules - are included by default - --verbose verbose on - --stop stop when \end{document} is found; default is to go on - --help this screen - - - - This program splits a .tex file into more files, each containing a module. - Example usage: - ./msplit slides.tex -o sl.tex -p ./modules -s diff --git a/Master/texmf-dist/source/latex/stex/bin/old/Makefile b/Master/texmf-dist/source/latex/stex/bin/old/Makefile deleted file mode 100644 index d2ae41c6401..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: src exec - -src: idcheck.l defcon.l modstr.l - flex -ft idcheck.l > idcheck.yy.c - flex -ft defcon.l > defcon.yy.c - flex -f+t modstr.l > modstr.yy.cc - -idcheck: idcheck.l - flex -f $< - gcc lex.yy.c -lfl -o idcheck - -defcon: defcon.l - flex -f $< - gcc lex.yy.c -lfl -o defcon - -modstr: modstr.l - flex -f+ $< - g++ lex.yy.cc -lfl -o modstr - -exec: idcheck.yy.c defcon.yy.c modstr.yy.cc - gcc idcheck.yy.c -lfl -o idcheck - gcc defcon.yy.c -lfl -o defcon - g++ modstr.yy.cc -lfl -o modstr - -clean: - rm -f *.yy.c *.yy.cc *~ - -distclean: clean diff --git a/Master/texmf-dist/source/latex/stex/bin/old/defcon.l b/Master/texmf-dist/source/latex/stex/bin/old/defcon.l deleted file mode 100644 index ad758086145..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/defcon.l +++ /dev/null @@ -1,91 +0,0 @@ -%{ - -#include <string.h> - -char ltxml[100]; -char fext[6] = ".ltxml"; - -char symstr[200]; -char ltxmlstr[200]; - -int i,t,c,tmp,q; -FILE *lt; - -%} - -ID [a-zA-Z0-9._:\|-]* -NR [0-9]* - -%s idenv env sym - -%% - -"\\begin{module}"(" ")*"[" BEGIN(idenv); -<idenv>"]" BEGIN(INITIAL); - -<idenv>"id="{ID} { - for (i=3; i<yyleng; i++) ltxml[i-3]=yytext[i]; - t=yyleng-3; - tmp=strlen(fext); - for (i=0; i<tmp; i++) ltxml[t+i]=fext[i]; - t=t+tmp; - ltxml[t]=0; - if (!q) printf("File %s\n",ltxml); - lt = fopen(ltxml,"w"); - BEGIN(env); -} - -<env>"symdef{\\"{ID}"}"(.)* { -i=7; -while (yytext[i]!='}'){ - symstr[i-7]=yytext[i]; - i++; -} -symstr[i-7]=0; -BEGIN(sym); -} - -<sym>"latexmldef{"(.)* { -i=11; -while (i<yyleng){ - ltxmlstr[i-11]=yytext[i]; - i++; -} -ltxmlstr[i-12]=0; -fprintf(lt,"DefConstructor('\%s{}...{}','%s')\n",symstr,ltxmlstr); -BEGIN(env); -} - -<env,sym>"\\end{module}" { -fclose(lt); -BEGIN(INITIAL); -} - -\n c++; -. c++; - -%% - -main(argc, argv) - int argc; - char **argv; -{ - if (argc==1) { - printf("arguments expected: [-q] filename(s)\n"); - } else { - q=0; - i=1; - if (argv[1][0]=='-'){ - i++; - if (argv[1][1]=='q') q=1; - } - while (i<argc){ - if (!q) printf("Processing %s...\n",argv[i]); - yyin = fopen(argv[i], "r"); - c=0; - yylex(); - fclose(yyin); - i++; - } - } -} diff --git a/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l b/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l deleted file mode 100644 index 9b1603527d2..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l +++ /dev/null @@ -1,130 +0,0 @@ -%{ -#include <string.h> -int ur,ok,a,lin,i,j,c,n,m,d,s,q,fe,f,for_ok,curr_lin; -typedef char idstr[50]; -idstr l[5000], r[5000]; -%} - -ID [a-zA-Z0-9._:\|-]* -WS [\n\t ]* - -%s env inenv fid foc - -%% - -"\\begin"{WS}"{"("proof"|"example")"}"{WS}"[" { -fe=1; -for_ok=0; -curr_lin=lin; -BEGIN(env); // stuff that "for" keyval is recommended for -} - -"\\begin"{WS}"{"("proof"|"example")"}" if (f) printf("Missing 'for' at line %d\n",lin); - -("\\begin"{WS}"{"("definition"|"assertion"|"proof"|"omtext"|"example"|"step"|"pfcase"|"module")"}"{WS}"[")|("\\justification"{WS}"[") { -fe=0; -BEGIN(env); -} - -<env>"]" { -if (fe && !for_ok && f) printf("Missing 'for' at line %d\n",curr_lin); -BEGIN(INITIAL); -} - -<env>"id"{WS}"="{WS} BEGIN(fid); - -<fid>{ID} { -for (i=0; i<yyleng; i++) l[n][i]=yytext[i]; -l[n][yyleng]=0; -if (s) printf("%s\n",l[n]); -n++; -BEGIN(env); -} - -<env>("for"){WS}"="{WS} { -for_ok=1; -BEGIN(foc); -} -<env>("continues"|"for"|"uses"|"premises"){WS}"="{WS} BEGIN(foc); - -<foc>{ID} { -for (j=0; j<yyleng; j++) r[m][j]=yytext[j]; -r[m][yyleng]=0; -m++; -BEGIN(env); -} - -<env>("premises"|"uses"){WS}"="{WS}"{" BEGIN(inenv); - -<inenv>{ID} { -strncpy(r[m],yytext,yyleng); -r[m][yyleng]=0; -m++; -} - -<inenv>"}" BEGIN(env); - -\n {c++;lin++;} -. c++; - -%% - -main(argc, argv) - int argc; - char **argv; -{ - if (argc==1) { - printf("Usage: idcheck [-q | -s | -f] filename(s)\n"); - printf("Option -s shows all detected IDs. \n"); - printf("Option -f shows line numbers for examples and proofs\n that have 'for' keyval missing. \n"); - printf("Option -q for quiet mode.\n"); - } else{ - s=0; q=0; - a=1; - if (argv[1][0]=='-') { - a++; - for (j=1; j<strlen(argv[1]); j++) - if (argv[1][j]=='s') s=1; else - if (argv[1][j]=='q') q=1; else - if (argv[1][j]=='f') f=1; - } - d=0; - while (a<argc){ - if (!q) printf("Parsing %s...\n",argv[a]); - yyin = fopen(argv[a] , "r"); - c = 0; - lin = 1; - n = 0; - m = 0; - yylex(); - fclose(yyin); - if (!q) printf("%d characters skipped. Found %d IDs. \n",c,n); - if (!q) printf("Checking for duplicates...\n"); - for (i=0; i<n; i++) - for (j=i+1; j<n; j++) - if (strcmp(l[i],l[j])==0) { - printf("ID=%s is a duplicate in %s\n",l[i],argv[a]); - d++; - } - if (!q) printf("Found %d duplicates.\n",d); - if (!q) printf("Checking references... (found %d)\n",m); - ur=0; - for (i=0;i<m; i++){ - ok=0; - for (j=0; j<n; j++) - if (strcmp(r[i],l[j])==0){ - ok=1; - break; - } - if (!ok) { - printf("Unmatched reference for ID=%s\n",r[i]); - ur++; - } - } - if (!q) printf("Found %d unmatched references.\n",ur); - a++; - } - return d+ur; - } - return 1; -} diff --git a/Master/texmf-dist/source/latex/stex/bin/old/modstr.l b/Master/texmf-dist/source/latex/stex/bin/old/modstr.l deleted file mode 100644 index ae0101147c5..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/modstr.l +++ /dev/null @@ -1,137 +0,0 @@ -%{ -#include <iostream> -#include <string> -#include <map> -#include <vector> -using namespace std; - - -const int indent = 4; -const char start_char = '*'; - -typedef struct { - vector<string> defs,list; - int father; -} nodetype; - -map<string,nodetype> g; - -string vertex, data; -int d, miss, skip; - -int max(int, int); - -%} - -ID [a-zA-Z0-9._:\|-]* -SEP [,;]* -WS [\n\t ]* -M [^}]* - -%x in_module found_vertex in_module_cont mdef -%x found_one_child found_more_children - -%% - -<INITIAL>"\\begin"{WS}"{module}"{WS}"[" BEGIN(in_module); - -<in_module>"id"{WS}"=" BEGIN(found_vertex); -<found_vertex>{ID} { -vertex = YYText(); -g[vertex].father=0; -if (miss) cout << endl << "<-------- Module '" << vertex - << "' -------->" << endl << endl; -BEGIN(in_module); -} -<in_module>"uses"{WS}"=" BEGIN(found_one_child); -<found_one_child>"{" BEGIN(found_more_children); -<found_more_children>"}" BEGIN(in_module); -<found_one_child>{ID} { -data=YYText(); -if (g[data].list.empty()) - g[vertex].father=g[data].father+1; -else - g[vertex].father=max(g[data].father+1,g[vertex].father); -g[data].list.push_back(vertex); -BEGIN(in_module); -} -<found_more_children>{ID} { -data=YYText(); -if (g[data].list.empty()) - g[vertex].father=g[data].father+1; -else - g[vertex].father=max(g[data].father+1,g[vertex].father); -g[data].list.push_back(vertex); -} - -<found_one_child,found_more_children,found_vertex>{SEP}|{WS} - -<in_module>"]" BEGIN(in_module_cont); - -<in_module,in_module_cont>(.|\n) - -<in_module_cont>"\\"("symdef"|"abbrdef"|"elldef"|"aliasdef"){WS}"{"{WS} BEGIN(mdef); -<mdef>{M} { -data = YYText(); -g[vertex].defs.push_back(data); -} -<mdef>"}" BEGIN(in_module_cont); -<in_module_cont>"\\end"{WS}"{module}" BEGIN(INITIAL); - -<INITIAL>(.|\n) if (miss) cout << YYText(); - -<*>{WS}(%)(.)*(\n)* - -%% - -void spc(int n){ - for(int i=0; i<n; i++) cout << " "; -} - -int max(int a, int b){ - return a>b?a:b; -} - -void go(map<string, nodetype > ::iterator node, int depth){ -if (skip && node->second.father!=depth) return; -spc(d); -cout << start_char << " " << node->first << "{"; -int tmp = node->second.defs.size()-1; -for (int j=0; j<=tmp; j++){ - cout << node->second.defs[j]; - if (j!=tmp) cout << ","; -} -cout << "}" << endl; -d+=indent; -for (int i=0; i<node->second.list.size(); i++) - go(g.find(node->second.list[i]),depth+1); -d-=indent; -} - -int main(int argc, char** argv){ -miss=0; -skip=0; -if (argc==2) - if (argv[1][0]=='-') - for (int z=1; argv[1][z]!=0; z++) - if (argv[1][z]=='m') miss=1; else - if (argv[1][z]=='s') skip=1; else - if (argv[1][z]=='h') { - cout << " Usage: modstr [-s|m|h]\n Input: stdin\n Output: stdout\n"; - cout << " Options: -s Show module usage only at the deepest level\n"; - cout << " -m Show text not within a module\n"; - cout << " -h This help screen\n"; - return 0; - } -if (miss) cout << "Text NOT within a module:\n" << endl; -FlexLexer* lex = new yyFlexLexer; -lex->yylex(); -d=0; -map<string, nodetype > ::iterator start = g.begin(); -map<string, nodetype > ::iterator stop = g.end(); -cout << endl; -for(;stop!=start;start++) - if (!start->second.father) go(start,0); -cout << endl; -return 0; -} diff --git a/Master/texmf-dist/source/latex/stex/bin/old/symdef b/Master/texmf-dist/source/latex/stex/bin/old/symdef deleted file mode 100755 index b5c789a1c72..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/symdef +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Long; -use Pod::Usage; - -my $output = "-"; -my $input = "-"; - -GetOptions("output=s",\$output); - -$input = $ARGV[0] if @ARGV; - -open(FIN,$input) or die "Can't open input file."; -open(FOUT,">$output"); - -my $line; - -while ($line=<FIN>){ - if ($line !~ m/symdef/ && $line !~ m/elldef/ && $line !~ m/abbrdef/){ - print FOUT $line; - next; - } - if ($line =~ m/\}\[\d,/){ - print FOUT $line; - next; - } - - if ($line =~ m/\\(sym|abbr|ell)def\{\\([^\}]+)\}\[(\d)\]([^\n\%]+)(.*)/){ - print FOUT "\\$1def{\\$2}[$3,name=$2]$4$5\n"; - } else { - if ($line =~ m/\\(sym|ell|abbr)def\{\\([^\}]+)\}([^\n\%]+)(.*)/){ - print FOUT "\\$1def{\\$2}[0,name=$2]$3$4\n"; - } - } -} - -close(FIN); -close(FOUT); - - -__END__ - -=head1 SYNOPSIS - -symdef [--output=outputfile] [texfile] diff --git a/Master/texmf-dist/source/latex/stex/bin/rf b/Master/texmf-dist/source/latex/stex/bin/rf deleted file mode 100755 index 7de36042620..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rf +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for computing the module reuse factor for TEX files. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/rf$ # -# $Date: 2005-06-29 23:08:10 +0200 (Wed, 29 Jun 2005) $ $Rev: 3147 $ # -####################################################################################### - -use strict; -use Getopt::Long; -use Modparse; -use Pod::Usage; - -my $input = "-", my $verbose=0, my $stop_at_end=0; -my %arg_snippath; my @snippathList; - -GetOptions("path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "verbose" => sub { $verbose=1; }, - "stop" => sub { $stop_at_end=1; }, - "help" => sub { pod2usage(2)}); - -$input = $ARGV[0] if ($#ARGV>=0); - -$main::lc1 = 0; $main::lc2 = 0; -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - onEveryLine=>sub { - $main::lc1++; - $main::lc2++ if $_[0]->{depth}==1; }); - -$mp->execute($input); -my $f = ($main::lc2>0)?$main::lc1/$main::lc2:0; -print "Reuse factor: $f\n"; - -__END__ - - -=head1 SYNOPSIS - -rf <input filename> [options] - - This program computes the reuse factor for a .tex document - - Options: - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --stop stop when \end{document} is found; default is to go on - --verbose verbose on - --help this screen - - - Example usage: - ./rf slides.tex -d snippath -v - - Interpretation: - compute the reuse factor for the file slides.tex, look for definitions - of \snippath, in verbose mode diff --git a/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm b/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm deleted file mode 100644 index 53673e37dc8..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm +++ /dev/null @@ -1,770 +0,0 @@ -# anything that starts with # is removed until \n (considered as a comment) -# except in literals; -# -# NCName is limited to a-zA-Z0-9.-_ -# -# no proper support for except nameClass -# no support for exceptPatterns - -package ModelRNC; - -use strict; -use File::Basename; - -my $DOCUMENT = '_Document_'; - -sub new{ - my ($class) = @_; - my $self = {}; - $self->{literalCount} = 0; - bless($self, $class); -} - -# this is the main method of the package -# it should be called right after new -sub process{ - my ($self, $filename) = @_; - $self->readfile($filename); - $self->clean_rnc; - $self->read_topLevel; - $self->build_info; - # free some memory - $self->{DATA} = ''; $self->{FILEPATH} = ''; $self->{GRAPH} = ''; -} - -sub Error{ - my ($self, $msg) = @_; - print "'$self->{DATA}'\n"; - die $msg."\n"; -} - -# read a file into $storage; -# or $self->{DATA} if $storage not given -sub readfile{ - my ($self, $filename, $storage) = @_; - - # NOTE: this is not exactly perfect - if ($self->{FILEPATH}){ - $filename = $self->{FILEPATH}.$filename unless -e $filename; } - my $basepath = dirname($filename); - $basepath .= '/' if ($basepath && $basepath !~ m|/$|); - $self->{FILEPATH} = $basepath; - - open(FIN, $filename) or $self->Error("Cout not open '$filename'"); - my @data = <FIN>; - close(FIN); - - # for use in namespace set selection - push(@{$self->{LOADEDFILES}}, $filename); - - if (defined $storage){ $$storage = join('',@data); } - else { $self->{DATA} = join('',@data); } -} - -# remove lines after ## -sub remove_annotations{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - do {} while ($$data =~ s/\[[^\]\[]*\]//g); - $$data =~ s/\#\#[^\n]*//g; -} - -# remove all lines that start with # except -# the ones that start with ## -sub remove_comments{ - my ($self, $data) =@_; - $data = \$self->{DATA} unless $data; - $$data =~ s/\#[^\#\n][^\n]*//g; - $$data =~ s/\#\n/\n/g; -} - -sub scan_literals{ - my ($self, $data) = @_; - my @litseg; my $seg = 0; - $data = \$self->{DATA} unless $data; - while ($$data =~ s/\"\"\"((\"{0,2}[^\"])*)\"\"\"/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\'\'\'((\'{0,2}[^\'])*)\'\'\'/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\"([^\"\n]*)\"/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\'([^\'\n]*)\'/_LITSEG$seg/) { $litseg[$seg++] = $1; } - - while ($$data =~ s/_LITSEG(\d+)\s*~\s*_LITSEG(\d+)/_LITSEG$seg/) - { $litseg[$seg++] = $litseg[$1].$litseg[$2]; } - - while ($$data =~ s/_LITSEG(\d+)/!LIT$self->{literalCount}/) - { $self->{literals}[$self->{literalCount}++] = $litseg[$1]; } -} - -# remove \x{N} sections -sub special_chars{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - while ($$data =~ m/\\x\{([a-fA-F0-9x]+)\}/g){ - my $lng = length($&); my $p = pos($$data) - $lng; - substr($$data, $p, $lng) = chr(hex($1)); - pos($$data) = $p + 1; - } -} - -# remove redundant data from loaded file -sub clean_rnc{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - $self->scan_literals($data); - $self->special_chars($data); - $self->remove_annotations($data); - $self->remove_comments($data); - # add a newline, just in case the last word is a keyword - # and for nice printing; - $$data.="\n"; -} - -# in the processing of the data, the data is destroyed -# provide two methods for resolving that -sub backup{ - my ($self) = @_; - $self->{BACKUP_DATA} = $self->{DATA}; -} - -sub restore{ - my ($self) = @_; - $self->{DATA} = $self->{BACKUP_DATA} if defined $self->{BACKUP_DATA}; -} - -# set or retrieve stored data -sub data{ - my ($self, $newdata) = @_; - if (defined $newdata){ $self->{DATA} = $newdata; } - else { return $self->{DATA}; } -} - -# put back some extracted string from DATA -sub put_back{ - my ($self, $back) = @_; - substr($self->{DATA}, 0, 0) = $back; -} - -# try to match a keyword; return 1 on success; 0 on failure -# NOTE: this implies that the used keywords should be followed by -# some non alphanumeric or space character -sub read_keyword{ - my ($self, $keyword) = @_; - return 0 if ($self->{DATA} !~ /^\s*\Q$keyword\E\s*[^a-zA-Z0-9_\-\.]/); - substr($self->{DATA}, 0, length($&)-1) = ''; - return 1; -} - -# same as read_keyword, except it dies not expect a non-word character -# after the word it searches -sub read_controlword{ - my ($self, $controlword) = @_; - return 0 if ($self->{DATA} !~ /^\s*\Q$controlword\E\s*/); - substr($self->{DATA},0,length($&)) = ''; - return 1; -} - -# expect a keyword; if the word is found, it is extracted -# otherwise, the program dies (the grammar is incorrect) -sub expect_keyword{ - my ($self, $keyword) = @_; - $self->Error("Expected keyword '$keyword' was not found") - if ($self->{DATA} !~ /^\s*\Q$keyword\E\s*/); - substr($self->{DATA}, 0, length($&)) = ''; -} - - -# Does not include Extender and CombiningChar -# (as in XML Namespaces: http://www.w3.org/TR/REC-xml/) -sub read_NCName{ - my ($self, $terminators) = @_; - my $termin_exists = 1; - if (defined $terminators) { $terminators = "[$terminators]"; } - else { $terminators = ''; $termin_exists = 0; } - if ($self->{DATA} =~ /^\s*([_a-zA-Z][_a-zA-Z0-9\.\-]*)\s*$terminators/){ - substr($self->{DATA}, 0, length($&)-$termin_exists) = ''; - return $1; - } - return undef; -} - -# try to match an identifierOrKeyword; return it in case -# of success; return undef in case of failure; -sub read_identifierOrKeyword{ - my ($self, $terminators) = @_; - $self->read_controlword('\\'); - return $self->read_NCName($terminators); -} - -# see if the argument is in the set of defined keyword of RelaxNG -sub isRNCKeyword{ - my ($word) = @_; - return ($word =~ /^\s*(attribute|default|datatypes|div|element|empty|external|grammar|include|inherit|list|mixed|namespace|notAllowed|parent|start|string|text|token)\s*$/); -} - -# read an identifier; return undef if no identifier can be read -sub read_identifier{ - my ($self, $terminators) = @_; - my $quote = $self->read_controlword('\\'); - my $ident = $self->read_NCName($terminators); - if (!$quote && $ident && isRNCKeyword($ident)){ - $self->put_back($ident); - return undef; - } - return $ident; -} - -# read a literal in any form given; -# segments are taken into account -sub read_literal{ - my ($self) = @_; - if ($self->{DATA} =~ /^\s*!LIT(\d+)\s*/){ - substr($self->{DATA}, 0, length($&)) = ''; - return $self->{literals}[$1]; - } - return undef; -} - -# read a namespace URI literal -sub read_namespaceURILiteral{ - my ($self, $inherited_namespace) = @_; - return $inherited_namespace if $self->read_keyword('inherit'); - return $self->read_literal; -} - -# read any URI literal -sub read_anyURILiteral{ - my ($self) = @_; - $self->read_literal; } - -sub getNS{ - my ($self, $nspref) = @_; - $self->{${$self->{LOADEDFILES}}[$#{$self->{LOADEDFILES}}]}->{NAMESPACE}{$nspref}; } - -sub setNS{ - my ($self, $nspref, $nsval) = @_; - $self->{${$self->{LOADEDFILES}}[$#{$self->{LOADEDFILES}}]}->{NAMESPACE}{$nspref} = $nsval; } - -# read all declarations, until none can be read -sub read_decl{ - my ($self, $inherited_namespace) = @_; - $inherited_namespace = '' unless defined $inherited_namespace; - $self->setNS('default',$inherited_namespace) unless $self->getNS('default'); - my $found = 1; - while ($found){ - if ($self->read_keyword('namespace')){ - my $namespace_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined namespace name') unless $namespace_name; - $self->expect_keyword('='); - my $namespace_value = - $self->read_namespaceURILiteral($inherited_namespace); - $self->Error('Undefined namespace URI') - unless defined $namespace_value; - $self->setNS($namespace_name, $namespace_value); - } - elsif ($self->read_keyword('default') && - $self->read_keyword('namespace')){ - my $namespace_name = undef; - if (!$self->read_controlword('=')){ - $namespace_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined namespace name') - unless $namespace_name; - $self->expect_keyword('='); - } - my $namespace_value = - $self->read_namespaceURILiteral($inherited_namespace); - $self->Error('Undefined namespace URI') - unless defined $namespace_value; - $self->setNS('default', $namespace_value); - $self->setNS($namespace_name, $namespace_value) - if $namespace_name; - } - elsif ($self->read_keyword('datatypes')){ - my $datatype_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined datatype name') unless $datatype_name; - $self->expect_keyword('='); - my $datatype_value = $self->read_literal; - $self->Error('Undefined datatype value') - unless defined $datatype_value; - } - else { $found = 0; } - } -} - -# ignore an annotation definition; -# (assumes annotation content does not exist) -# (it has been removed by clean_rnc) -sub ignore_annotation{ - my ($self) = @_; - $self->read_CName; } - -# read a name (CName) of the form NCName:NCName -sub read_CName{ - my ($self, $terminators) = @_; - $terminators = '\s' unless defined $terminators; - my $name = $self->read_NCName(':'); - if ($name){ - $self->expect_keyword(':'); - my $part2 = $self->read_NCName($terminators); - $self->Error('Incomplete CName definition') unless $part2; - $name .= ":$part2"; - } - return $name; -} - -# read a datatype name -sub read_datatypeName{ - my ($self, $terminators) = @_; - $terminators = '\s' unless defined $terminators; - if ($self->{DATA} =~ /^\s*string\s*[$terminators]/){ - substr($self->{DATA},0,length($&)-1) = ''; - return 'string'; - } - elsif ($self->{DATA} =~ /^\s*token\s*[$terminators]/){ - substr($self->{DATA},0,length($&)-1) = ''; - return 'token'; - } else { - return $self->read_CName($terminators); - } -} - -# read a datatype value -sub read_datatypeValue{ - my ($self) = @_; - return $self->read_literal; -} - -# return the set of names an element or an attribute can have -# this does not work well on complicated name classes -sub read_nameClassEx{ - my ($self, $terminators) = @_; - - my @result; - - if ($self->read_controlword('(')){ - @result = $self->read_nameClassEx($terminators.'\)'); - $self->expect_keyword(')'); - } else { - - #anyName - if ($self->read_controlword('*')){ - push(@result, '*'); - if ($self->read_controlword('-')){ - print STDERR "Warning: USE OF EXCEPT NAMECLASS NOT IMPLEMENTED\n"; - push(@result, $self->read_nameClassEx($terminators)); - } - } - # nsName or name(CName) - elsif (my $part1 = $self->read_NCName(':')){ - $self->expect_keyword(':'); - if ($self->read_controlword('*')){ - push(@result, "$part1:*"); - if ($self->read_controlword('-')){ - print STDERR - "Warning: USE OF EXCEPT NAMECLASS NOT IMPLEMENTED\n"; - push(@result, '-', - $self->read_nameClassEx($terminators)); - } - } else { - push(@result, $part1.':'.$self->read_NCName($terminators.'\|')); - } - } - # name(identifierOrKeyword) - else { - my $name = $self->read_identifierOrKeyword($terminators.'\|'); - $self->Error('Incomplete name class given') unless $name; - push(@result, $name); - } - } - - $self->Error('No name class provided') unless @result; - - # see if we have more possible names: - push(@result, $self->read_nameClassEx($terminators)) - if ($self->read_controlword('|')); - - return @result; -} - -sub read_nameClass{ - my ($self, $terminators, @parents) = @_; - $terminators = '\s' unless defined $terminators; - my @result = $self->read_nameClassEx($terminators); - my @finalRes; - - if (@parents && @result){ - - my @nsList, my %saw = (); - foreach (@parents){ - if (/\{(.*)\}:.+/){ - next if $saw{$1}; - push(@nsList, $1); $saw{$1} = 1; } - else { - next if $saw{'default'}; - push(@nsList, $self->getNS('default')); $saw{'default'} = 1; } - } - - foreach my $res(@result){ - if ($res =~ /(.+):(.+)/){ - push(@finalRes, $self->ns_prepend($2, $1)); } - else { - map(push(@finalRes, "{$_}:$res"), @nsList); } - } - } else { - map(push(@finalRes, (/(.+):(.+)/)? - $self->ns_prepend($2, $1):$self->ns_prepend($_)), @result); - } - return @finalRes; -} - - -# read a parameter declaration, if one exists -sub read_param{ - my ($self) = @_; - my $id = $self->read_identifierOrKeyword('='); - return (undef, undef) unless $id; - $self->expect_keyword('='); - my $val = $self->read_literal; - $self->Error('No parameter value specified') unless defined $val; - return ($id, $val); -} - -sub begin_read_newfile{ - my ($self) = @_; - my $file = $self->read_anyURILiteral; - my $inherit = 'default'; - if ($self->read_keyword('inherit')){ - $self->expect_keyword('='); - $inherit = $self->read_identifierOrKeyword; } - $inherit = $self->getNS($inherit); - my $newdata = ''; - $self->readfile($file, \$newdata); - $self->clean_rnc(\$newdata); - $self->put_back($newdata.'#'); - $self->read_decl($inherit); } - -sub end_read_newfile{ - my ($self) = @_; - pop(@{$self->{LOADEDFILES}}); - $self->expect_keyword('#'); } - -# read a pattern -sub read_pattern{ - my ($self, $grammarPath, $grammarIdent, @parentElements) = @_; - my $found = 1; my $grammarCount = 0; - my $DEF = $grammarPath.':'.$grammarIdent; - - if ($self->read_keyword('element')){ - my @elementNames = $self->read_nameClass('{', @parentElements); - $self->Error('Unspecified element name') unless @elementNames; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{ELEMENTS}}, - @elementNames), @parentElements); - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @elementNames); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('attribute')){ - my @attributeNames = $self->read_nameClass('{'); - $self->Error('Unspecified attribute name') unless @attributeNames; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{ATTRIBUTES}}, - @attributeNames), @parentElements); - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('list') || $self->read_keyword('mixed')){ - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_controlword('(')){ - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword(')'); - } - elsif (my $datatypeValue = - $self->read_datatypeValue){ - # do nothing - } - elsif (my $datatypeName = - $self->read_datatypeName('\s\{\}\-!')){ - my $datatypeValue = $self->read_datatypeValue; - - # read parameters; ignore them for now - if ($self->read_controlword('{')){ - my ($ident, $val); - do{ - ($ident, $val) = $self->read_param; - } while ($ident && $val); - $self->expect_keyword('}'); - } - # read possible exceptPattern - if ($self->read_controlword('-')){ - print STDERR "Warning: USE OF EXCEPT PATTERN NOT IMPLEMENTED\n"; - $self->Error('exceptPattern expected but not found') - unless $self->read_pattern($grammarPath, $grammarIdent, - @parentElements); - } - } - elsif ($self->read_keyword('external')){ - $self->begin_read_newfile; - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->end_read_newfile; - } - elsif ($self->read_keyword('grammar')){ - my $ident = $DEF.$grammarCount++; - $self->expect_keyword('{'); - $self->read_grammarContent($ident, @parentElements); - $ident .= ':start'; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('parent')){ - my $ident = $self->read_identifier; - if ($grammarPath =~ /^([.]+:)[^:]+$/){ - $ident = $1.$ident; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - } - } - elsif ($self->read_keyword('empty') || $self->read_keyword('text') - || $self->read_keyword('notAllowed')){ - # do nothing - } - elsif (my $ident = $self->read_identifier){ - # check if we did not enter a grammar by mistake: - my $asg = $self->read_assignMethod(1); - if ($ident && $asg){ - $self->put_back($ident.$asg); - } else { - $ident = $grammarPath.':'.$ident; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - } - - } else { $found = 0; } - - if ($self->read_controlword('?') || $self->read_controlword('*') - || $self->read_controlword('+')){ - # ignore - } - - if ($self->read_controlword(',') || $self->read_controlword('|') - || $self->read_controlword('&')){ - Error('Pattern expected') unless - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - } - - return $found; -} - -sub read_assignMethod{ - my ($self, $asString) = @_; - if ($asString){ - return '&=' if ($self->read_controlword('&=')); - return '|=' if ($self->read_controlword('|=')); - return '=' if ($self->read_controlword('=')); - return undef; - } - return 3 if ($self->read_controlword('&=')); - return 2 if ($self->read_controlword('|=')); - return 1 if ($self->read_controlword('=')); - return 0; -} - -# read a grammar pattern -sub read_grammarPattern{ - my ($self, $DEF, @parentElements) = @_; - if ($self->read_keyword('grammar')){ - $self->expect_keyword('{'); - $self->read_grammarContent($DEF, @parentElements); - $self->expect_keyword('}'); } - else{ - $self->read_grammarContent($DEF, @parentElements);} -} - -# read all possible grammar contents -sub read_grammarContent{ - my ($self, $DEF, @parentElements) = @_; - my ($div, $found) = (0, 1); - - while ($found){ - if ($self->read_keyword('div')){ - $div++; - $self->expect_keyword('{'); - $self->read_grammarContent($DEF.':_G'.$div, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('include')){ - $self->begin_read_newfile; - $self->read_grammarPattern($DEF, @parentElements); - $self->end_read_newfile; - if ($self->read_controlword('{')){ - $self->read_grammarContent($DEF, @parentElements); - $self->expect_keyword('}'); } - } - elsif ($self->read_keyword('start')){ - my $asg = $self->read_assignMethod; - $self->Error('Invalid assign method') unless $asg; - @{$self->{GRAPH}->{$DEF.':start'}->{PARENTS}} = @parentElements; - $self->read_pattern($DEF, 'start', @parentElements); - } - elsif (my $ident = $self->read_identifier('=\|\&')){ - my $asg = $self->read_assignMethod; - $self->Error('Invalid assign method') unless $asg; - my $ref = $DEF.':'.$ident; - %{$self->{GRAPH}->{$ref}} = () if $asg == 1; - @{$self->{GRAPH}->{$ref}->{PARENTS}} = @parentElements; - $self->read_pattern($DEF, $ident, @parentElements); - } - elsif ($self->ignore_annotation) {} - else { $found = 0; } - } -} - -sub ns_prepend{ - my ($self, $tag, $ns_pref) = @_; - my $ns = $ns_pref?$self->getNS($ns_pref):undef; - $ns = $self->getNS('default') unless $ns; - return "{$ns}:$tag"; -} - -# this should match the whole file -sub read_topLevel{ - my ($self) = @_; - $self->read_decl; - $self->read_pattern($DOCUMENT, 'start', $DOCUMENT); - - my ($after, $before) = (0, 1); - while ($before != $after){ - $before = length($self->{DATA}); - $self->read_grammarContent($DOCUMENT, $DOCUMENT); - $after = length($self->{DATA}); - } - $self->{DATA} = trim($self->{DATA}); - $self->Error('Unable to completely process data') - unless $self->{DATA} eq ''; -} - -# remove leading and trailing white space -sub trim{ - my ($arg) = @_; - $arg =~ s/^\s+//; - $arg =~ s/\s+$//; - return $arg; -} - -sub build_info{ - my ($self) = @_; - - my %seen = (); - local *go = sub { - my ($reference, $node) = @_; - - my $ident = $reference.'#'.$node; - return if defined $seen{$ident}; - $seen{$ident} = 1; - - map($self->{ATTR}->{$node}{$_} = 1, - @{$self->{GRAPH}->{$reference}->{$node}{ATTRIBUTES}}) - if defined $self->{GRAPH}->{$reference}->{$node}{ATTRIBUTES}; - - my @sons; - map(push(@sons, ($reference, $_)), - @{$self->{GRAPH}->{$reference}->{$node}{ELEMENTS}}) - if defined $self->{GRAPH}->{$reference}->{$node}{ELEMENTS}; - - if (defined $self->{GRAPH}->{$reference}->{$node}{REFS}){ - my @refs = @{$self->{GRAPH}->{$reference}->{$node}{REFS}}; - foreach my $ref(@refs){ - next unless $self->{GRAPH}->{$ref}->{PARENTS}; - foreach my $son(@{$self->{GRAPH}->{$ref}->{PARENTS}}){ - map(push(@sons, ($ref, $_)), - @{$self->{GRAPH}->{$ref}->{$son}{ELEMENTS}}) - if defined $self->{GRAPH}->{$ref}->{$son}{ELEMENTS}; - push(@refs, @{$self->{GRAPH}->{$ref}->{$son}{REFS}}) - if defined $self->{GRAPH}->{$ref}->{$son}{REFS}; - # if a reference has attributes defined, - # they will appear as attributes to $DOCUMENT - # if the reference is not defined within some element - map($self->{ATTR}->{$node}{$_} = 1, - @{$self->{GRAPH}->{$ref}->{$son}{ATTRIBUTES}}) - if ($self->{GRAPH}->{$ref}->{$son}{ATTRIBUTES} && - ($son eq $DOCUMENT)); - } - } - } - my $sonCount = ($#sons+1)/2; - for (my $i = 0; $i < $sonCount; $i++){ - my ($ref, $son) = ($sons[2*$i], $sons[2*$i+1]); - go($sons[2*$i], $sons[2*$i+1]); - $self->{NODES}->{$node}{$son} = 1; - } - }; - - go($DOCUMENT.':start', $DOCUMENT); - - %seen = (); - local *gnodes = sub { - my ($node) = @_; - return if $seen{$node}; - $seen{$node} = 1; - foreach my $son(keys %{$self->{NODES}->{$node}}){ - map($self->{GNODES}->{$node}{$_} = $son, - keys %{$self->{NODES}->{$son}}); - gnodes($son); } - }; - - gnodes($DOCUMENT); - @{$self->{TAGLIST}} = keys %seen; -} - -sub getTagList { - my ($self) = @_; - return @{$self->{TAGLIST}}; -} - -sub tagChildren { - my ($self, $tag) = @_; - keys %{$self->{NODES}->{$tag}}; } - -# given a tag and a childtag, return whether -# tag can contain childtag -sub canContain() -{ - my ($self, $tag, $childtag) = @_; - return ($self->{NODES}->{$tag}{$childtag} || - $self->{NODES}->{$tag}{'*'})?1:0; -} - -# there can be more results: list ? -# there can be no result, but a class of results.. like a nsName -# choose representative? -sub canContainIndirect() -{ - my ($self, $tag, $childtag) = @_; - return $self->{GNODES}->{$tag}{$childtag} if - $self->{GNODES}->{$tag}{$childtag}; - - if ($self->{NODES}->{$tag}{'*'}){ - foreach (@{$self->{TAGLIST}}){ - return $_ if $self->{NODES}->{$_}{$childtag}; - } - } -} - -# given a tag and an attribute return whether -# the tag can have that attribute -sub canHaveAttribute() -{ - my ($self, $tag, $attr) = @_; - return ($self->{ATTR}->{$tag}{$attr} || - $self->{ATTR}->{$tag}{'*'})?1:0; -} - -sub canContainSomehow() -{ - my ($self, $tag, $childtag) = @_; - return ($self->canContain($tag, $childtag) || - $self->canContainIndirect($tag, $childtag)); -} - -1; diff --git a/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot b/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot deleted file mode 100755 index 588b8827c63..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/perl -w - -use ModelRNC; - -die "No input file\n" unless $ARGV[0]; -my $opt = $ARGV[1] || ''; - -my $rnc = ModelRNC->new(); -$rnc->process($ARGV[0]); -print STDERR 'Unable to properly parse ('.$rnc->data.")\n" if $rnc->data; - -my %seen = (); -sub make_graph { - my ($node) = @_; - my @children = $rnc->tagChildren($node); - my $pnode = $node; - $pnode =~ s/^\{[^\}]*\}://; $pnode =~ s/\-|\+|\*|\s/_/g; - my @pchildren = @children; - for (my $i = 0 ; $i < @pchildren; $i++) { - $pchildren[$i] =~ s/^\{[^\}]*\}://; - $pchildren[$i] =~ s/\-|\+|\*|\s/_/g; } - if ($opt eq 'txt') { - print "$pnode: ".join(', ', @pchildren)."\n\n"; } - else { - for (my $i = 0 ; $i < @pchildren; $i++) { - print "$pnode -> ".$pchildren[$i].";\n"; }} - return 0 if $seen{$node}; - $seen{$node} = 1; - foreach my $child(@children) { - make_graph($child); } - 1; } - -print "digraph RNC {\n" unless $opt eq 'txt'; -make_graph('_Document_'); -print "}\n" unless $opt eq 'txt'; - -__END__ diff --git a/Master/texmf-dist/source/latex/stex/bin/sgraph b/Master/texmf-dist/source/latex/stex/bin/sgraph deleted file mode 100755 index c4e709db476..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/sgraph +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for creating graphs of module usage patterns based on graphviz. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/sgraph$ # -# $Date: 2005-10-04 19:31:43 +0200 (Tue, 04 Oct 2005) $ $Rev: 4376 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Modparse; -use Pod::Usage; - -my $input = "-", my $output = "out", my $format = "ps"; -my $root, my $stop_at_end=0, my $use_grouping = 0; -my $rmdot = 0, my $verbose=0, my $theory = '', my $srange = ''; -my %arg_snippath; my @snippathList; - -sub group_name{ - my ($st) = @_; - if ($st =~ /^(.*[\/\\])?([^\/\\]+)\.[^\.\/\\]*$/) { $st = $2; } - elsif ($st =~ /^(.*[\/\\])?([^\.\/\\]+)$/) { $st = $2; } - $st =~ s/-/_/g; - return $st; } - -GetOptions("output=s" => \$output, - "format=s" => \$format, - "nodot" => sub {$rmdot = 1;}, - "root=s" => \$root, - "theory=s" => \$theory, - "sliderange=s" => \$srange, - "path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "verbose" => sub {$verbose = 1;}, - "grouping" => sub {$use_grouping = 1}, - "stop" => sub {$stop_at_end = 1}, - "help" => sub {pod2usage(2)}); - -$output = $1 if ($output =~ m/([^.]+)\..*/); -$input = $ARGV[0] if ($#ARGV>=0); -$root = group_name($input) unless $root; - - -my %data = (); my %group = (); -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - onBegin=>sub { $_[0]->{perm}->{slide} = 0; $_[0]->{perm}->{linecount} = 0; - if ($srange =~ /(\d+)\:(\d+)/){ - ($_[0]->{perm}->{sbegin}, $_[0]->{perm}->{send}) = ($1, $2); - $_[0]->{perm}->{in_sliderange} = ($_[0]->{perm}->{sbegin}<1); - } else { $_[0]->{perm}->{in_sliderange} = 1; }}, - onBeginFile=>sub { $_[0]->{grp} = group_name($_[0]->{filename}); }, - onBeginModule=>sub { - if ($_[0]->{perm}->{in_sliderange} && (my $id = $_[0]->{module_id})){ - $id =~ s/[:-]/_/g; - my $uses = ''; - if ($_[0]->{module_args} =~ /uses=(([\w-]+)|(\{[\w,-]+\}))/){ - $uses = $1; - $uses =~ s/,/;/g; $uses =~ s/[:-]/_/g; } - $data{$id}=$uses; - $group{$id}=$_[0]->{perm}->{grp}; - }}, - onEveryLine=>sub { - $_[0]->{perm}->{linecount}++; - print ". " if ($_[0]->{pack}->{verbose} && ($_[0]->{perm}->{linecount} % 1000==0)); - $_[0]->{perm}->{slide}++ if $_[0]->{simple_tex} =~ /\\begin\{slide\}/; - $_[0]->{perm}->{in_sliderange}=($_[0]->{perm}->{slide}<=$_[0]->{perm}->{send} && - $_[0]->{perm}->{slide}>=$_[0]->{perm}->{sbegin}) - if ($_[0]->{perm}->{sbegin} && $_[0]->{perm}->{send}); - }); - -print "\nGenerating graph...\n" if $verbose; - -$mp->execute($input); - -my @queue=(); - -if ($theory){ - $theory =~ s/-/_/g; - if ($data{$theory}){ - my $start = 0, my $end = 1, my %already_in; - $queue[0] = $theory; - $already_in{$theory} = 1; - while ($start<$end){ - my $idx, my $usesx; - $idx = $queue[$start]; - $usesx = $data{$queue[$start]}; - $start++; - if ($usesx){ - $usesx =~ s/\{//; - $usesx =~ s/\}//; - foreach (split(/;/,$usesx)){ - next if $already_in{$_}; - $queue[$end] = $_; - $already_in{$_} = 1; - $end++; - } - } - } - } -} else{ - @queue = keys %data; -} - -open(FOUT,">$output.dot") or die "Can't open output file\n"; -print FOUT "digraph TEX {\n"; -print FOUT "$root [shape=box];\n"; - -if ($use_grouping){ - my %subgraph = (); - foreach (@queue){ - $subgraph{$group{$_}}.="$_;"; - } - foreach my $subgr (keys %subgraph){ - print FOUT "subgraph cluster_$subgr {\n"; - print FOUT "color = blue;\n"; - print FOUT "label = $subgr;\n"; - print FOUT "$subgraph{$subgr}\n"; - print FOUT "}\n"; - } -} - -my $lk = 0; -for my $idx (@queue){ - my $usesx = $data{$idx}; - $lk=$lk+($usesx =~ tr/;//)+1; - if ($usesx){ - print FOUT "$idx -> $usesx;\n"; - } else { - print FOUT "$idx -> $root;\n"; - } -} - -print "Number of links: $lk\n" if $verbose; - - -print FOUT "}\n"; -close(FOUT); - -`dot -T$format -o $output.$format $output.dot`; -unlink "$output.dot" if ($rmdot==1); - -print "Done.\n" if $verbose; - -__END__ - -=head1 SYNOPSIS - -sgraph <filename> [options] - - <filename> .tex input file; stdin by default - - Options: - --output output file; out.dot by default - --format output format; .ps by default; for available formats, see dot --help - --nodot do not generate .dot file, just target format - --root the 'root' of the graph. (name of course) - --theory generate a subgraph for the theory - --sliderange only look at the given slide range; (2:16 for example) - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --stop stop reading data when \end{document} is found, not at EOF - --grouping group modules within sections. - --verbose verbose on - --help this screen - -Example: -./sgraph slides.tex -o graph -f ps -n -t TCN --sliderange 20:10000 -r GenCS -v diff --git a/Master/texmf-dist/source/latex/stex/bin/sms b/Master/texmf-dist/source/latex/stex/bin/sms index 3d95e710180..5ea7a1afa91 100755 --- a/Master/texmf-dist/source/latex/stex/bin/sms +++ b/Master/texmf-dist/source/latex/stex/bin/sms @@ -90,7 +90,7 @@ my $mp = Modparse->new(snippathList=>\@snippathList, if ($_[0]->{simple_tex} =~ /\\(symvariant|(sym|abbr|ell|key|listkey)def)\{([^\}]+)\}/ || $_[0]->{simple_tex} =~ /\\symdef\[([^\]]+)\]/); push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\importmodule/); + if ($_[0]->{simple_tex} =~ /\\(importmodule|gimport|adoptmodule)/); if ($_[0]->{simple_tex} =~ /\\begin{importmodulevia}/) { my $impvia = $_[0]->{original}; $impvia =~ s/\\begin\{importmodulevia\}/\\importmodule/g; diff --git a/Master/texmf-dist/source/latex/stex/bin/stexml b/Master/texmf-dist/source/latex/stex/bin/stexml deleted file mode 100755 index 2c0586b9130..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/stexml +++ /dev/null @@ -1,2 +0,0 @@ -exec latexmlc $1 --path=../../../stex/sty --path=../../../stex/rnc --path=../../../stex/rnc/omdoc --path=../../../stex/sty/modules --path=../../../stex/sty/statements --path=../../../stex/sty/sproof --path=../../../stex/sty/omtext --path=../../../stex/sty/omdoc --path=../../../stex/sty/sref --path=../../../stex/sty/presentation --path=../../../stex/sty/dcm --path=../../../stex/sty/reqdoc --path=../../../stex/sty/metakeys --path=../../../stex/sty/mikoslides --path=../../../stex/sty/problem --path=../../../stex/sty/assignment --path=../../../stex/sty/etc --path=../../../sty --path=../../../sty/ded --path=../../../sty/ed --local --mode=standard --destination=#dir/#name.tex.xml --postdest=#dir/#name.omdoc --log=#dir/#name.ltxlog --post --stylesheet=../../../stex/xsl/omdocpost.xsl \ - --openmath --pmml
\ No newline at end of file diff --git a/Master/texmf-dist/source/latex/stex/bin/stexmlmod b/Master/texmf-dist/source/latex/stex/bin/stexmlmod deleted file mode 100755 index 55dd1f6ab37..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/stexmlmod +++ /dev/null @@ -1,2 +0,0 @@ -exec latexmlc --preamble=../../../lib/pre.tex $1 --path=../../../stex/sty --path=../../../stex/rnc --path=../../../stex/rnc/omdoc --path=../../../stex/sty/modules --path=../../../stex/sty/statements --path=../../../stex/sty/sproof --path=../../../stex/sty/omtext --path=../../../stex/sty/omdoc --path=../../../stex/sty/sref --path=../../../stex/sty/presentation --path=../../../stex/sty/dcm --path=../../../stex/sty/reqdoc --path=../../../stex/sty/metakeys --path=../../../stex/sty/mikoslides --path=../../../stex/sty/problem --path=../../../stex/sty/assignment --path=../../../stex/sty/etc --path=../../../sty --path=../../../sty/ded --path=../../../sty/ed --local --mode=fragment --destination=#dir/#name.tex.xml --postdest=#dir/#name.omdoc --log=#dir/#name.ltxlog --post --stylesheet=../../../stex/xsl/omdocpost.xsl \ - --openmath --pmml diff --git a/Master/texmf-dist/source/latex/stex/bin/termin b/Master/texmf-dist/source/latex/stex/bin/termin deleted file mode 100755 index 0589be09c2f..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/termin +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for automatized replacement of plain words with their \termin macros. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/termin$ # -# $Date: 2005-10-04 17:47:41 +0200 (Tue, 04 Oct 2005) $ $Rev: 4371 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Term::ANSIColor; -use Pod::Usage; - -my $verbose = 0; -my $wordDefs={}, my $twinDefs={}, my $atwinDefs={}; - -use constant twin => 'T'; -use constant word => 'W'; -use constant atwin => 'A'; - -my $before_chars = 128; -my $after_chars = 128; - -sub loadDefs{ - my ($tex_file) = @_; - - # read file - open(FIN, $tex_file) or die "Cannot read $tex_file\n"; - my @contentLines = <FIN>; - close(FIN); - - my $content = join('',@contentLines); - $content =~ s/\s+//g; - $content =~ s/%[^\n]*\n//g; - pos($content) = 0; - - my %modules = (); - while ($content =~ m/\\begin\{module\}\[([^\]]+)\]/g){ - next unless $1 =~ /id=([^\],]+)/; - $modules{pos($content)} = $1; - } - my @posList = keys %modules; - my $modIndex, my $current_module; - - # see definiens of form \definiens[bar]{foobar} - # word 'foobar', concept 'bar', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\]\-]+)\]\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$wordDefs->{modules}}, $current_module); - push(@{$wordDefs->{concepts}}, $1); - push(@{$wordDefs->{words}}, $2); - print word, " ==> $current_module: $1: $2\n" if $verbose>=2; - } - - # see definiens of form \definiens[aaa-bbb]{\twin{ccc}{ddd}} - # words 'ccc ddd', concept 'aaa-bbb', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\-\]]+)\-([^\]]+)\]\{\\twin\{([^\}]+)\}\{([^\}]+)\}\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$twinDefs->{modules}}, $current_module); - push(@{$twinDefs->{concepts}}, "$1-$2"); - push(@{$twinDefs->{words}}, $3); - push(@{$twinDefs->{twins}}, $4); - print twin, " ==> $current_module: $1-$2: $3 $4\n" if $verbose>=2; - } - - # \twindef{aaa}{bbb} - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\twindef\{([^\}]+)\}\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$twinDefs->{modules}}, $current_module); - push(@{$twinDefs->{concepts}}, "$1-$2"); - push(@{$twinDefs->{words}}, $1); - push(@{$twinDefs->{twins}}, $2); - print twin, " ==> $current_module: $1-$2: $1 $2\n" if $verbose>=2; - } - - # see definiens of form \definiens[aaa-bbb-ccc]{\twin{ddd}{eee}{fff}} - # words 'ddd eee fff', concept 'aaa-bbb-ccc', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\-\]]+)\-([^\-\]]+)\-([^\]]+)\]\{\\atwin\{([^\}]+)\}\{([^\}]+)\}\{([^\}]+)\}\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$atwinDefs->{modules}}, $current_module); - push(@{$atwinDefs->{concepts}}, "$1-$2-$3"); - push(@{$atwinDefs->{words}}, $4); - push(@{$atwinDefs->{twins}}, $5); - push(@{$atwinDefs->{adjs}}, $6); - print atwin, " ==> $current_module: $1-$2-$3: $4 $5 $6\n" if $verbose>=2; - } - - # \atwindef{aaa}{bbb}{ccc} - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\atwindef\{([^\}]+)\}\{([^\}]+)\}\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$atwinDefs->{modules}}, $current_module); - push(@{$atwinDefs->{concepts}}, "$1-$2-$3"); - push(@{$atwinDefs->{words}}, $1); - push(@{$atwinDefs->{twins}}, $2); - push(@{$atwinDefs->{adjs}}, $3); - print atwin, " ==> $current_module: $1-$2-$3: $1 $2 $3\n" if $verbose>=2; - } - -} - -sub max{ - my ($max, @values) = @_; - foreach (@values) { $max = $_ if $_ gt $max;} - return $max; -} - -sub nospace{ - my ($str) = @_; - $str =~ s/\s+/ /g; - $str =~ s/^\s//; - $str =~ s/\s$//; - return $str; -} - -sub replaceDefs{ - my ($in_tex_file, $out_tex_file) = @_; - - open(FIN, $in_tex_file) or die "Cannot read $in_tex_file\n"; - my @content_lines = <FIN>; - close(FIN); - - my $content = join('',@content_lines); - my $lcont = length($content); - - local *go_word = sub { - - my ($word, $new_word1_ex, $new_word2_ex) = @_; - $new_word2_ex = $new_word1_ex unless defined $new_word2_ex; - - while ($content =~ m/([^\{\s]?)(\s*$word\s*)[^\}\s]?/gi){ - my $p = pos($content); - my $ahead_len = length($1); my $matched_word = $2; - my $wlen = length($matched_word); - my $trail_len = length($&) - $wlen - $ahead_len; - - if (($ahead_len != 0 || $trail_len != 0) || - ($ahead_len == 0 && $trail_len == 0 && ($p == $wlen || $p == $lcont))){ - my $start_pos = max(0, $p - $wlen - $trail_len - $before_chars); - my $new_word1 = $new_word1_ex; my $new_word2 = $new_word2_ex; - - my $word_count = 0; - while ($matched_word =~ /\s*([^\s]+)\s*/g){ - my $replace = $1; - $new_word1 =~ s/W%$word_count/$replace/g; - $new_word2 =~ s/W%$word_count/$replace/g; - $word_count++; - } - - print "\nAnnotate '"; - print color 'bold blue'; print nospace($matched_word); print color 'reset'; - print "' with \n Y = '"; print color 'red bold'; print $new_word2; - print color 'reset'; print "'\n y = '"; print color 'red bold'; - print $new_word1; print color 'reset'; print "'\n in: \n<<< "; - print color 'green'; - print substr($content, $start_pos, $before_chars); - print color 'bold blue'; - print substr($content, $start_pos + $before_chars, $wlen); - print color 'reset green'; - print substr($content, $start_pos + $before_chars + $wlen, $after_chars); - print color 'reset'; - print " >>> ?\n"; - print "Options: <Y, y, [n]> "; - - my $answer = <STDIN>; - chomp($answer); - - if ($answer eq 'y'){ - substr($content, $p - $wlen - $trail_len, $wlen) = $new_word1; - $lcont = length($content); - pos($content) = $p + length($new_word1) - $wlen; - print "PROGRESS: Matched text was replaced with '$new_word1'\n" if $verbose; - } elsif ($answer eq 'Y'){ - substr($content, $p - $wlen - $trail_len, $wlen) = $new_word2; - $lcont = length($content); - pos($content) = $p + length($new_word2) - $wlen; - print "PROGRESS: Matched text was replaced with '$new_word2'\n" if $verbose; - } - - } - pos($content) = $p - $trail_len; - } - }; - - my $we = "(s|(ing))?"; # word endings - if (defined $wordDefs->{words}){ - my $wordDefsCount = $#{$wordDefs->{words}} + 1; - for (my $j = 0 ; $j < $wordDefsCount; $j++){ - my $word = "${$wordDefs->{words}}[$j]$we"; - my $new_word = " {\\termin[cd=${$wordDefs->{modules}}[$j],name=${$wordDefs->{concepts}}[$j]]". - "{W%0} "; - go_word($word, $new_word); - } - } - - if (defined $twinDefs->{words}){ - my $twinDefsCount = $#{$twinDefs->{words}} + 1; - for (my $j = 0 ; $j < $twinDefsCount; $j++){ - my $word = "${$twinDefs->{words}}[$j]$we\\s+${$twinDefs->{twins}}[$j]$we"; - my $new_word1 = " {\\termin[cd=${$twinDefs->{modules}}[$j],name=${$twinDefs->{concepts}}[$j]]". - "{W%0 W%1}} "; - my $new_word2 = " {\\termin[cd=${$twinDefs->{modules}}[$j],name=${$twinDefs->{concepts}}[$j]]". - "{\\twin{W%0}{W%1}}} "; - go_word($word, $new_word1, $new_word2); - } - } - - if (defined $atwinDefs->{words}){ - my $atwinDefsCount = $#{$atwinDefs->{words}} + 1; - for (my $j = 0 ; $j < $atwinDefsCount; $j++){ - my $word = "${$atwinDefs->{words}}[$j]$we\\s+${$atwinDefs->{twins}}[$j]$we\\s+${$atwinDefs->{adjs}}[$j]$we"; - my $new_word1 = " {\\termin[cd=${$atwinDefs->{modules}}[$j],name=${$atwinDefs->{concepts}}[$j]]". - "{W%0 W%1 W%2}} "; - my $new_word2 = " {\\termin[cd=${$atwinDefs->{modules}}[$j],name=${$atwinDefs->{concepts}}[$j]]". - "{\\atwin{W%0}{W%1}{W%2}}} "; - go_word($word, $new_word1, $new_word2); - } - } - - open(FOUT, ">$out_tex_file") or die "Cannot write $out_tex_file\n"; - print FOUT $content; - close(FOUT); - -} - -my @background, my @main, my @output; - -GetOptions("verbose" => sub {$verbose++;}, - "background=s" => \@background, - "main=s" => \@main, - "output=s" => \@output, - "help" => sub { pod2usage(2)}); - -foreach (@background) { loadDefs($_); } - -for (my $i = 0 ; $i <= $#main; $i++) { - replaceDefs($main[$i], $output[$i] || $main[$i]); -} - - -__END__ - -=head1 SYNOPSIS - -termin [options] - -Options: - - --verbose verbose on - --background background file to read \termin{} definitions from - --main main file to process - --output output file; the modified content of the main file will - be written here - --help this screen - -Purpose: - Read the \termin definitions from a background file and update a specific main file; - output will be written to the specified the output file. - Note: multiple background/main/output files may be specified. - -Example: - termin --background a.tex --background b.tex --main slides.tex --output new_slides.tex |