1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#!/bin/perl 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#Used to prepare the book "tommath.src" for LaTeX by pre-processing it into a .tex file 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#Essentially you write the "tommath.src" as normal LaTex except where you want code snippets you put 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#EXAM,file 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#This preprocessor will then open "file" and insert it as a verbatim copy. 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project# 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#Tom St Denis 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#get graphics type 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectif (shift =~ /PDF/) { 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $graph = ""; 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} else { 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $graph = ".ps"; 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectopen(IN,"<tommath.src") or die "Can't open source file"; 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectopen(OUT,">tommath.tex") or die "Can't open destination file"; 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectprint "Scanning for sections\n"; 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project$chapter = $section = $subsection = 0; 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project$x = 0; 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectwhile (<IN>) { 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "."; 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++$x % 80)) { print "\n"; } 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #update the headings 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (~($_ =~ /\*/)) { 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($_ =~ /\\chapter{.+}/) { 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$chapter; 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $section = $subsection = 0; 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ /\\section{.+}/) { 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$section; 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $subsection = 0; 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ /\\subsection{.+}/) { 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$subsection; 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($_ =~ m/MARK/) { 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @m = split(",",$_); 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project chomp(@m[1]); 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $index1{@m[1]} = $chapter; 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $index2{@m[1]} = $section; 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $index3{@m[1]} = $subsection; 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectclose(IN); 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectopen(IN,"<tommath.src") or die "Can't open source file"; 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project$readline = $wroteline = 0; 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project$srcline = 0; 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectwhile (<IN>) { 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$readline; 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$srcline; 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($_ =~ m/MARK/) { 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ m/EXAM/ || $_ =~ m/LIST/) { 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($_ =~ m/EXAM/) { 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $skipheader = 1; 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $skipheader = 0; 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # EXAM,file 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project chomp($_); 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @m = split(",",$_); 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project open(SRC,"<$m[1]") or die "Error:$srcline:Can't open source file $m[1]"; 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "$srcline:Inserting $m[1]:"; 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $line = 0; 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $tmp = $m[1]; 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $tmp =~ s/_/"\\_"/ge; 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\\vspace{+3mm}\\begin{small}\n\\hspace{-5.1mm}{\\bf File}: $tmp\n\\vspace{-3mm}\n\\begin{alltt}\n"; 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $wroteline += 5; 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($skipheader == 1) { 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # scan till next end of comment, e.g. skip license 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (<SRC>) { 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $text[$line++] = $_; 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project last if ($_ =~ /math\.libtomcrypt\.com/); 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <SRC>; 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $inline = 0; 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (<SRC>) { 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project next if ($_ =~ /\$Source/); 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project next if ($_ =~ /\$Revision/); 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project next if ($_ =~ /\$Date/); 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $text[$line++] = $_; 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$inline; 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project chomp($_); 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/\t/" "/ge; 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/{/"^{"/ge; 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/}/"^}"/ge; 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/\\/'\symbol{92}'/ge; 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/\^/"\\"/ge; 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project printf OUT ("%03d ", $line); 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for ($x = 0; $x < length($_); $x++) { 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT chr(vec($_, $x, 8)); 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($x == 75) { 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\n "; 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$wroteline; 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\n"; 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$wroteline; 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $totlines = $line; 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\\end{alltt}\n\\end{small}\n"; 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project close(SRC); 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "$inline lines\n"; 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $wroteline += 2; 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ m/@\d+,.+@/) { 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # line contains [number,text] 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # e.g. @14,for (ix = 0)@ 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = $_; 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while ($txt =~ m/@\d+,.+@/) { 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @m = split("@",$txt); # splits into text, one, two 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @parms = split(",",$m[1]); # splits one,two into two elements 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # now search from $parms[0] down for $parms[1] 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found1 = 0; 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found2 = 0; 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for ($i = $parms[0]; $i < $totlines && $found1 == 0; $i++) { 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($text[$i] =~ m/\Q$parms[1]\E/) { 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline1 = $i + 1; 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found1 = 1; 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # now search backwards 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for ($i = $parms[0] - 1; $i >= 0 && $found2 == 0; $i--) { 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($text[$i] =~ m/\Q$parms[1]\E/) { 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline2 = $i + 1; 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found2 = 1; 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # now use the closest match or the first if tied 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($found1 == 1 && $found2 == 0) { 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found = 1; 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline = $foundline1; 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($found1 == 0 && $found2 == 1) { 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found = 1; 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline = $foundline2; 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($found1 == 1 && $found2 == 1) { 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found = 1; 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (($foundline1 - $parms[0]) <= ($parms[0] - $foundline2)) { 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline = $foundline1; 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $foundline = $foundline2; 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $found = 0; 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # if found replace 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($found == 1) { 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $delta = $parms[0] - $foundline; 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "Found replacement tag for \"$parms[1]\" on line $srcline which refers to line $foundline (delta $delta)\n"; 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/@\Q$m[1]\E@/$foundline/; 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "ERROR: The tag \"$parms[1]\" on line $srcline was not found in the most recently parsed source!\n"; 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # remake the rest of the line 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $cnt = @m; 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = ""; 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for ($i = 2; $i < $cnt; $i++) { 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = $txt . $m[$i] . "@"; 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT $_; 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$wroteline; 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ /~.+~/) { 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # line contains a ~text~ pair used to refer to indexing :-) 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = $_; 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while ($txt =~ /~.+~/) { 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @m = split("~", $txt); 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # word is the second position 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $word = @m[1]; 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $a = $index1{$word}; 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $b = $index2{$word}; 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $c = $index3{$word}; 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # if chapter (a) is zero it wasn't found 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($a == 0) { 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "ERROR: the tag \"$word\" on line $srcline was not found previously marked.\n"; 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # format the tag as x, x.y or x.y.z depending on the values 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = $a; 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = $str . ".$b" if ($b != 0); 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = $str . ".$c" if ($c != 0); 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($b == 0 && $c == 0) { 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # its a chapter 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($a <= 10) { 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if ($a == 1) { 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter one"; 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 2) { 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter two"; 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 3) { 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter three"; 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 4) { 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter four"; 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 5) { 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter five"; 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 6) { 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter six"; 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 7) { 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter seven"; 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 8) { 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter eight"; 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 9) { 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter nine"; 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($a == 10) { 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter ten"; 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "chapter " . $str; 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "section " . $str if ($b != 0 && $c == 0); 232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $str = "sub-section " . $str if ($b != 0 && $c != 0); 233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project #substitute 236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $_ =~ s/~\Q$word\E~/$str/; 237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print "Found replacement tag for marker \"$word\" on line $srcline which refers to $str\n"; 239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # remake rest of the line 242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $cnt = @m; 243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = ""; 244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for ($i = 2; $i < $cnt; $i++) { 245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $txt = $txt . $m[$i] . "~"; 246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT $_; 249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$wroteline; 250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } elsif ($_ =~ m/FIGU/) { 251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project # FIGU,file,caption 252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project chomp($_); 253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project @m = split(",", $_); 254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\\begin{center}\n\\begin{figure}[here]\n\\includegraphics{pics/$m[1]$graph}\n"; 255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT "\\caption{$m[2]}\n\\label{pic:$m[1]}\n\\end{figure}\n\\end{center}\n"; 256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project $wroteline += 4; 257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project print OUT $_; 259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ++$wroteline; 260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectprint "Read $readline lines, wrote $wroteline lines\n"; 263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectclose (OUT); 265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectclose (IN); 266