diff options
-rw-r--r-- | Build/source/utils/vlna/vlna.dvi | bin | 82840 -> 91064 bytes | |||
-rw-r--r-- | Build/source/utils/vlna/vlna.idx | 268 | ||||
-rw-r--r-- | Build/source/utils/vlna/vlna.scn | 54 | ||||
-rw-r--r-- | Build/source/utils/vlna/vlna.tex | 391 |
4 files changed, 422 insertions, 291 deletions
diff --git a/Build/source/utils/vlna/vlna.dvi b/Build/source/utils/vlna/vlna.dvi Binary files differindex c536533c3a9..0ed7d863a22 100644 --- a/Build/source/utils/vlna/vlna.dvi +++ b/Build/source/utils/vlna/vlna.dvi diff --git a/Build/source/utils/vlna/vlna.idx b/Build/source/utils/vlna/vlna.idx index 6e2804cc03c..6cd07a75cf5 100644 --- a/Build/source/utils/vlna/vlna.idx +++ b/Build/source/utils/vlna/vlna.idx @@ -1,135 +1,143 @@ -\I\.{ANY}, \[15], 22, 23, 34, 37, 39, 46, 50. -\I\.{ANY\_NOT}, \[15], 23. -\I\\{ap}, \[26], 27, 29, 31. -\I\\{argc}, \[5], 8, 12, 13. -\I\\{argv}, \[5], 8, 12, 13, 14. -\I\\{backslash}, \[33], 39. -\I\\{backup}, \[9], 13, 14. -\I\.{BAD\_OPTIONS}, \[4], 8, 12, 13. -\I\.{BAD\_PROGRAM}, \[4], 17, 26, 31. +\I\.{ANY}, \[17], 25, 26, 37, 40, 42, 49, 53. +\I\.{ANY\_NOT}, \[17], 26. +\I\\{ap}, \[29], 30, 32, 34. +\I\\{argc}, \[5], 9, 14, 15. +\I\\{argv}, \[5], 9, 14, 15, 16. +\I\\{backslash}, \[36], 42. +\I\\{backup}, \[11], 15, 16. +\I\.{BAD\_OPTIONS}, \[4], 9, 10, 14, 15. +\I\.{BAD\_PROGRAM}, \[4], 20, 29, 34. \I\.{BANNER}, \[2], 5, 6. -\I\\{blanks}, \[33], 34, 36, 37, 38, 39, 46. -\I\\{blankscr}, 22, \[33], 38, 40, 41, 50. -\I\\{buff}, \[16], 26, 27, 28, 36, 38, 45, 49, 52, 53. -\I\.{BUFI}, \[16], 26. -\I\|{c}, \[16]. -\I\\{charset}, \[7], 8, 15, 34, 37, 39. +\I\\{blanks}, \[36], 37, 39, 40, 41, 42, 49. +\I\\{blankscr}, 25, \[36], 41, 43, 44, 53. +\I\\{buff}, \[18], 19, 29, 30, 31, 39, 41, 44. +\I\\{buffnz}, \[19], 29, 30, 31, 48, 52, 55, 56. +\I\.{BUFI}, \[18], 29. +\I\|{c}, \[10], \[18]. +\I\\{charset}, \[7], 9, 17, 37, 40, 42. \I\\{charsetdefault}, \[7]. -\I\\{checkmode}, 26, 46, \[47]. -\I\\{commentlist}, \[16], 26, 54. -\I\\{cr}, \[33], 37, 39, 46. -\I\\{displayin}, 48, \[49]. -\I\.{DISPLAYMODE}, \[25], 45, 49, 53. -\I\\{displayout}, 48, \[49]. -\I\\{dolar}, \[33], 43. -\I\.{EOF}, 26. -\I\\{exit}, 8, 12, 13, 17, 26, 31. -\I\|{f}, \[10]. -\I\\{fclose}, 12, 13. -\I\\{feof}, 26. -\I\\{filename}, 12, 13, \[25], 32, 42. -\I\\{flag}, \[15], \[19], 20, 23. -\I\\{fopen}, 12, 13, 14. -\I\.{FOUND}, \[23], 24, 29, 30. -\I\\{fprintf}, 5, 6, 10, 14, 17, 26, 31, 32, 42. -\I\\{fputs}, 28. -\I\\{getc}, 26. -\I\|{i}, \[20], \[38], \[52]. -\I\\{ic}, \[26]. -\I\\{ind}, \[16], 26, 27, 28, 36, 38, 45, 49, 52, 53. -\I\\{infile}, \[9], 12, 13, 14, 25. -\I\\{input}, \[26]. -\I\.{IO\_ERR}, \[4], 12. -\I\\{ioerr}, \[10], 12, 13. -\I\\{isfilter}, \[7], 8, 11, 12, 13, 14. -\I\|{j}, \[9], \[22], \[38]. -\I\|{k}, \[26]. -\I\\{lapi}, \[16], 27, 29, 30, 31. -\I\\{lapt}, \[16], 29, 31. -\I\\{lastpi}, \[16], 18, 19. -\I\\{lastpt}, \[16], 18, 19, 54. -\I\\{latex}, \[7], 8, 43, 48, 50. -\I\\{letters}, \[33], 39. -\I\\{listpatt}, \[16], 26, 30, 35, 44, 47, 49, 51, 52, 53. -\I\|{m}, \[23], \[26]. +\I\\{checkmode}, 29, 49, \[50]. +\I\\{commentlist}, \[18], 29, 57. +\I\\{cr}, \[36], 40, 42, 49. +\I\\{displayin}, 51, \[52]. +\I\.{DISPLAYMODE}, \[28], 48, 52, 56. +\I\\{displayout}, 51, \[52]. +\I\\{dolar}, \[36], 46. +\I\.{EOF}, 29. +\I\\{exit}, 9, 10, 14, 15, 20, 29, 34. +\I\|{f}, \[12]. +\I\\{fclose}, 14, 15. +\I\\{feof}, 29. +\I\\{filename}, 14, 15, \[28], 35, 45. +\I\\{flag}, \[17], \[22], 23, 26. +\I\\{fopen}, 14, 15, 16. +\I\.{FOUND}, \[26], 27, 32, 33. +\I\\{fprintf}, 5, 6, 12, 16, 20, 29, 34, 35, 45. +\I\\{fwrite}, 31. +\I\\{getc}, 29. +\I\\{hexnum}, \[10]. +\I\|{i}, \[10], \[23], \[39], \[41], \[55]. +\I\\{ic}, \[29]. +\I\\{ind}, \[18], 29, 30, 31, 39, 41. +\I\\{infile}, \[11], 14, 15, 16, 28. +\I\\{input}, \[29]. +\I\\{inz}, \[19], 29, 30, 48, 52, 55, 56. +\I\.{IO\_ERR}, \[4], 14. +\I\\{ioerr}, \[12], 14, 15. +\I\\{isfilter}, \[7], 9, 13, 14, 15, 16. +\I\|{j}, \[10], \[11], \[25], \[41]. +\I\|{k}, \[29]. +\I\\{lapi}, \[18], 30, 32, 33, 34. +\I\\{lapt}, \[18], 32, 34. +\I\\{lastpi}, \[18], 21, 22. +\I\\{lastpt}, \[18], 21, 22, 57. +\I\\{latex}, \[7], 9, 46, 51, 53. +\I\\{letters}, \[36], 42. +\I\\{listpatt}, \[18], 29, 33, 38, 47, 50, 52, 54, 55, 56. +\I\|{m}, \[26], \[29]. \I\\{main}, \[5]. -\I\\{malloc}, 17. -\I\\{match}, \[23], 24, 29, 30. -\I\\{mathin}, 43, \[44], 45. -\I\\{mathlist}, \[33], 43, 44, 53. -\I\.{MATHMODE}, \[25], 44, 53. -\I\\{mathout}, 43, \[44], 45. -\I\.{MAXBUFF}, \[16], 26. -\I\.{MAXLEN}, \[9], 14. -\I\.{MAXPATT}, \[16], 27, 31. -\I\\{mode}, \[25], 26, 27, 44, 45, 47, 49, 51, 52, 53. -\I\\{myalloc}, \[17], 18, 19. -\I\|{n}, \[26]. -\I\\{next}, \[15], 18, 19, 23, 24, 29, 30, 31, 51, 52, 53. -\I\\{nochar}, \[33], 34, 37, 39. -\I\.{NOFOUND}, \[23], 24, 29, 30. -\I\\{nomath}, \[7], 8, 43, 48. -\I\\{normallist}, \[16], 26, 34, 35, 44, 47, 49, 51, 52, 53, 55. -\I\\{normalpattern}, 17, 20, \[22], 40, 43, 48, 50, 54. -\I\\{noverb}, \[7], 8, 50. -\I\\{numchanges}, \[25], 27, 32, 36, 38. -\I\\{numline}, \[25], 26, 27, 32, 38, 42. +\I\\{malloc}, 20. +\I\\{match}, \[26], 27, 32, 33. +\I\\{mathin}, 46, \[47], 48. +\I\\{mathlist}, \[36], 46, 47, 56. +\I\.{MATHMODE}, \[28], 47, 56. +\I\\{mathout}, 46, \[47], 48. +\I\.{MAXBUFF}, \[18], 29. +\I\.{MAXLEN}, 8, 10, \[11], 16. +\I\.{MAXPATT}, \[18], 30, 34. +\I\\{mode}, \[28], 29, 30, 47, 48, 50, 52, 54, 55, 56. +\I\\{myalloc}, \[20], 21, 22. +\I\|{n}, \[29]. +\I\\{next}, \[17], 21, 22, 26, 27, 32, 33, 34, 54, 55, 56. +\I\\{nochar}, \[36], 37, 40, 42. +\I\.{NOFOUND}, \[26], 27, 32, 33. +\I\\{nomath}, \[7], 9, 46, 51. +\I\\{normallist}, \[18], 29, 37, 38, 47, 50, 52, 54, 55, 56, 58. +\I\\{normalpattern}, 20, 23, \[25], 43, 46, 51, 53, 57. +\I\\{noverb}, \[7], 9, 53. +\I\\{numchanges}, \[28], 30, 35, 39, 41. +\I\\{numline}, \[28], 29, 30, 35, 41, 45. \I\.{OK}, \[4], 5. -\I\.{ONE}, \[15], 20, 22, 23, 34, 37, 39, 40, 43, 46, 50. -\I\.{ONE\_NOT}, \[15], 23, 34, 37, 39, 43, 50. -\I\\{onedollar}, 43, \[45]. -\I\\{openbrace}, \[33], 39. -\I\\{outfile}, \[9], 12, 13, 25. -\I\\{output}, \[26], 28. -\I\|{p}, \[17], \[19], \[23], \[36], \[38]. -\I\\{parcheck}, \[33], 46, 49, 53. -\I\&{PATITEM}, \[15], 16, 19, 23, 26. -\I\\{patt}, \[15], 18, 19, 30, 31. -\I\&{PATTERN}, \[15], 16, 18, 19, 22, 26, 33, 51. -\I\\{pi}, \[26], 31. -\I\\{pp}, \[18], \[22], \[26], 30, 31. -\I\\{prefixes}, \[33], 34, 37, 39. -\I\\{prevlist}, \[51], 52, 53. -\I\\{prevmode}, \[51], 52, 53. -\I\\{printusage}, \[6], 8, 12, 13. -\I\\{printwarning}, \[42], 44, 45, 47, 49. -\I\\{proc}, 15, 16, 18, 22, 29, 30. -\I\\{prog\_name}, \[4], 5, 10, 14, 17. -\I\\{pt}, \[16]. -\I\\{remove}, 13, 14. -\I\\{rename}, 13, 14. -\I\\{rmbackup}, \[7], 8, 13, 14. -\I\\{setpattern}, 17, \[18], 22, 34, 37, 39, 43, 46, 50. -\I\\{setpi}, 17, 18, \[19], 22, 34, 37, 39, 40, 43, 46, 50. -\I\\{silent}, 5, \[7], 8, 14, 25, 26, 42. -\I\\{size}, \[17]. -\I\\{status}, \[4], 5, 13, 42. -\I\\{stderr}, 5, 6, 10, 14, 17, 26, 31, 32, 42. -\I\\{stdin}, 12. -\I\\{stdout}, 12. -\I\\{str}, \[15], \[19], \[22], 23. -\I\\{strchr}, 23, 36, 38. -\I\\{strcpy}, 14. -\I\\{strings}, \[20], 21, 22. -\I\\{strlen}, 14. -\I\\{tblanks}, \[33], 34, 37. -\I\\{tblankscr}, \[33], 34, 37, 39. -\I\.{TEXTMODE}, \[25], 27, 44, 45, 47, 49, 53. -\I\\{tie}, 12, 13, 25, \[26], 32. -\I\\{tielock}, 40, \[41]. -\I\\{tieoff}, 54, \[55]. -\I\\{tieon}, 54, \[55]. -\I\\{twodollars}, 48, \[49]. -\I\\{verbchar}, 50, \[51]. -\I\\{verbin}, 50, 51, \[52]. -\I\\{verbinchar}, 50, \[51]. -\I\\{verblist}, \[33], 50. -\I\.{VERBMODE}, \[25], 26, 51, 52, 53. -\I\\{verbout}, 50, \[53]. -\I\\{verboutlist}, 50, \[51], 52. -\I\\{vlnkacr}, 37, \[38], 39. -\I\\{vlnkain}, 34, \[36], 39. -\I\\{vlnkalist}, \[33], 34, 35, 44, 47, 49, 53, 55. -\I\.{WARNING}, \[4], 13, 42. -\I\\{web}, \[7], 8, 26, 50, 53. +\I\.{ONE}, \[17], 23, 25, 26, 37, 40, 42, 43, 46, 49, 53. +\I\.{ONE\_NOT}, \[17], 26, 37, 40, 42, 46, 53. +\I\\{onedollar}, 46, \[48]. +\I\\{openbrace}, \[36], 42. +\I\\{outfile}, \[11], 14, 15, 28. +\I\\{output}, \[29], 31. +\I\|{p}, \[20], \[22], \[26], \[39], \[41]. +\I\\{parcheck}, \[36], 49, 52, 56. +\I\&{PATITEM}, \[17], 18, 22, 26, 29. +\I\\{patt}, \[17], 21, 22, 33, 34. +\I\&{PATTERN}, \[17], 18, 21, 22, 25, 29, 36, 54. +\I\\{pi}, \[29], 34. +\I\\{pp}, \[21], \[25], \[29], 33, 34. +\I\\{prefixes}, \[36], 37, 40, 42. +\I\\{prevlist}, \[54], 55, 56. +\I\\{prevmode}, \[54], 55, 56. +\I\\{printusage}, \[6], 9, 10, 14, 15. +\I\\{printwarning}, \[45], 47, 48, 50, 52. +\I\\{proc}, 17, 18, 21, 25, 32, 33. +\I\\{prog\_name}, \[4], 5, 12, 16, 20. +\I\\{pt}, \[18]. +\I\\{remove}, 15, 16. +\I\\{rename}, 15, 16. +\I\\{rmbackup}, \[7], 9, 15, 16. +\I\|{s}, \[10]. +\I\\{setpattern}, 20, \[21], 25, 37, 40, 42, 46, 49, 53. +\I\\{setpi}, 20, 21, \[22], 25, 37, 40, 42, 43, 46, 49, 53. +\I\\{settiestr}, 9, \[10]. +\I\\{silent}, 5, \[7], 9, 16, 28, 29, 45. +\I\\{size}, \[20]. +\I\\{status}, \[4], 5, 15, 45. +\I\\{stderr}, 5, 6, 12, 16, 20, 29, 34, 35, 45. +\I\\{stdin}, 14. +\I\\{stdout}, 14. +\I\\{str}, \[17], \[22], \[25], 26. +\I\\{strchr}, 26, 39, 41. +\I\\{strcpy}, 16. +\I\\{strings}, \[23], 24, 25. +\I\\{strlen}, 10, 16. +\I\\{tblanks}, \[36], 37, 40. +\I\\{tblankscr}, \[36], 37, 40, 42. +\I\.{TEXTMODE}, \[28], 30, 47, 48, 50, 52, 56. +\I\\{tie}, 14, 15, 28, \[29], 35. +\I\\{tielock}, 43, \[44]. +\I\\{tieoff}, 57, \[58]. +\I\\{tieon}, 57, \[58]. +\I\\{tiestr}, \[8], 9, 10, 39, 41. +\I\\{tiestrlen}, \[8], 9, 10, 39, 41. +\I\\{twodollars}, 51, \[52]. +\I\\{verbchar}, 53, \[54]. +\I\\{verbin}, 53, 54, \[55]. +\I\\{verbinchar}, 53, \[54]. +\I\\{verblist}, \[36], 53. +\I\.{VERBMODE}, \[28], 29, 54, 55, 56. +\I\\{verbout}, 53, \[56]. +\I\\{verboutlist}, 53, \[54], 55. +\I\\{vlnkacr}, 40, \[41], 42. +\I\\{vlnkain}, 37, \[39], 42. +\I\\{vlnkalist}, \[36], 37, 38, 47, 50, 52, 56, 58. +\I\.{WARNING}, \[4], 15, 45. +\I\\{web}, \[7], 9, 29, 53, 56. +\I\|{z}, \[39], \[41]. diff --git a/Build/source/utils/vlna/vlna.scn b/Build/source/utils/vlna/vlna.scn index e15f1743d10..04038aa9e76 100644 --- a/Build/source/utils/vlna/vlna.scn +++ b/Build/source/utils/vlna/vlna.scn @@ -1,42 +1,42 @@ -\I\X4, 7, 15, 16, 20, 25, 33:Globální deklarace\X +\I\X4, 7, 8, 17, 18, 19, 23, 28, 36:Globální deklarace\X \U1. \I\X3:Hlavičkové soubory k načtení\X \U1. \I\X5:Hlavní program\X \U1. -\I\X21, 34, 37, 39, 40, 43, 46, 48, 50, 54:Inicializace datových struktur\X +\I\X24, 37, 40, 42, 43, 46, 49, 51, 53, 57:Inicializace datových struktur\X \U5. -\I\X27, 35:Inicializace proměnných při startu funkce \PB{\\{tie}}\X -\U26. -\I\X9:Lokální proměnné funkce \PB{\\{main}}\X +\I\X30, 38:Inicializace proměnných při startu funkce \PB{\\{tie}}\X +\U29. +\I\X11:Lokální proměnné funkce \PB{\\{main}}\X \U5. -\I\X8:Načtení parametrů příkazového řádku\X +\I\X9:Načtení parametrů příkazového řádku\X \U5. -\I\X30:Otevři nové patterny\X -\U26. -\I\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej +\I\X33:Otevři nové patterny\X +\U29. +\I\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako \PB{\\{infile}}\X -\U13. -\I\X6, 10, 17, 18, 19, 22, 23, 36, 38, 41, 42, 44, 45, 47, 49, 51, 52, 53, -55:Pomocné funkce\X +\U15. +\I\X6, 10, 12, 20, 21, 22, 25, 26, 39, 41, 44, 45, 47, 48, 50, 52, 54, 55, 56, +58:Pomocné funkce\X \U1. -\I\X29:Projdi otevřené patterny\X -\U26. -\I\X32:Tiskni závěrečnou zprávu\X -\U26. -\I\X26:Vlnkovací funkce \PB{\\{tie}}\X +\I\X32:Projdi otevřené patterny\X +\U29. +\I\X35:Tiskni závěrečnou zprávu\X +\U29. +\I\X29:Vlnkovací funkce \PB{\\{tie}}\X \U1. -\I\X24:Vrať hodnotu podle následující pozice patternu\X -\U23. -\I\X28:Vyprázdni buffer\X +\I\X27:Vrať hodnotu podle následující pozice patternu\X \U26. -\I\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X -\U30. -\I\X11:Zpracování souborů\X +\I\X31:Vyprázdni buffer\X +\U29. +\I\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X +\U33. +\I\X13:Zpracování souborů\X \Q6. \U5. -\I\X13:Zpracování všech souborů příkazové řádky\X -\U11. -\I\X12:Zpracování v režimu filter\X -\U11. +\I\X15:Zpracování všech souborů příkazové řádky\X +\U13. +\I\X14:Zpracování v režimu filter\X +\U13. diff --git a/Build/source/utils/vlna/vlna.tex b/Build/source/utils/vlna/vlna.tex index b28f72cfa88..ee18bfffdef 100644 --- a/Build/source/utils/vlna/vlna.tex +++ b/Build/source/utils/vlna/vlna.tex @@ -21,7 +21,7 @@ Program sestává z těchto hlavních celků: \Y\B\X3:Hlavičkové soubory k načtení\X\6 \X4:Globální deklarace\X\6 \X6:Pomocné funkce\X\6 -\X26:Vlnkovací funkce \PB{\\{tie}}\X\6 +\X29:Vlnkovací funkce \PB{\\{tie}}\X\6 \X5:Hlavní program\X\par \fi @@ -35,8 +35,8 @@ Tu cestinu si vynutil fakt, že DOS-ovská varianta \.{tangle} a \.{weave} se nesnáší s~akcentovanými písmeny v~/* komentářích */. A~nyní už slíbený (vícejazyčný) \PB{\.{BANNER}}. \Y\B\4\D$\.{BANNER}$ \5 -\.{"This\ is\ program\ vln}\)\.{a,\ version\ 1.2,\ (c)\ }\)\.{1995,\ 2002\ Petr% -\ Olsa}\)\.{k\\n"}\par +\.{"This\ is\ program\ vln}\)\.{a,\ version\ 1.5,\ (c)\ }\)\.{1995,\ 2002,\ +2009,\ 20}\)\.{10\ Petr\ Olsak\\n"}\par \fi \M{3}V programu jsou použity knihovní funkce, jejíchž prototypy jsou @@ -68,7 +68,7 @@ nultého parametru příkazové řádky. \Y\B\4\X4:Globální deklarace\X${}\E{}$\6 \&{char} ${}{*}\\{prog\_name};{}$\6 \&{int} \\{status};\par -\As7, 15, 16, 20, 25\ETs33. +\As7, 8, 17, 18, 19, 23, 28\ETs36. \U1.\fi \M{5}Základní rozvržení funkce \PB{\\{main}}. @@ -76,14 +76,14 @@ nultého parametru příkazové řádky. \&{int} \\{main}(\&{int} \\{argc}${},\39{}$\&{char} ${}{*}{*}\\{argv}){}$\1\1\2% \2\6 ${}\{{}$\1\6 -\X9:Lokální proměnné funkce \PB{\\{main}}\X;\6 +\X11:Lokální proměnné funkce \PB{\\{main}}\X;\6 ${}\\{prog\_name}\K\\{argv}[\T{0}];{}$\6 ${}\\{status}\K\.{OK};{}$\6 -\X8:Načtení parametrů příkazového řádku\X;\6 +\X9:Načtení parametrů příkazového řádku\X;\6 \&{if} ${}(\R\\{silent}){}$\1\5 ${}\\{fprintf}(\\{stderr},\39\.{BANNER});{}$\2\6 -\X21:Inicializace datových struktur\X;\6 -\X11:Zpracování souborů\X;\6 +\X24:Inicializace datových struktur\X;\6 +\X13:Zpracování souborů\X;\6 \&{return} \\{status};\6 \4${}\}{}$\2\par \U1.\fi @@ -93,7 +93,7 @@ Program čte z~příkazového řádku postupně (nepovinné) parametry, které začínají znakem \uv{\.{-}}. Pak následují jména vstupních a výstupních souborů. \begitems -* \.{-f} \dots\ program pracuje jako filtr (viz sekce \PB{$\X11:Zpracování +* \.{-f} \dots\ program pracuje jako filtr (viz sekce \PB{$\X13:Zpracování souborů\X$}). Není-li tento parametr použit, program pracuje v tzv. standardním režimu, kdy jednotlivé soubory jsou vstupní i výstupní. * \.{-s} \dots\ program nevypíše \PB{\.{BANNER}}, ani sumarizaci, ani varování, @@ -107,6 +107,10 @@ tento parametr vliv. interpretovány jako neslabičné předložky. Např. \.{-v KkSsVvZzOoUuAI}. Pokud není parametr uveden, je použita skupina uvedená v tomto příkladě. +* \.{-x} \dots\ parametr vymezuje pomocí hexadecimálního zápisu string, +který program vkládá na vyhledaná místa. Implicitně vkládá vlnku. +Například \.{-x C2A0} způsobí, že program bude vkládat místo vlnky dva byty, +první s kódem \.{C2} a druhý s kódem \.{A0}. * \.{-m} \dots\ program neprovádí kontrolu math/text módů, tj. vlnkuje i uvnitř matematického módu \TeX{}u. (Implicite tam nevlnkuje). * \.{-n} \dots\ prorgram neprovádí kontrolu verbatim módu, tj. vlnkuje i @@ -119,7 +123,7 @@ používanými v dokumentech WEB (např. tento dokument). Důsledek: program vlnkuje dokumentační část každé sekce, ale nikoli kód. \enditems -Definujeme funkci \PB{\\{printusage}}, které tiskne (při chybě) stručný přehled +Definujeme funkci \PB{\\{printusage}}, která tiskne (při chybě) stručný přehled možných parametrů. Nepodařilo se mi zjistit, jak se ve WEBu napíše kulturně dlouhý string obsahující \.{\char92n} s formátovacími požadavky. Byl jsem nucen to takto nehezky zapsat. @@ -136,12 +140,13 @@ file1\ \ \ \ \ \ \ ..}\)\.{.\ file1->stdout\\n"}\.{"\ \ \ \ \ \ \ \ \ \ \ \ \ \ messages\ to\ stde}\)\.{rr\\n"}\.{"\ \ \ \ \ \ -r\ :\ \ rmbacku}\)\.{p:\ if\ nofilter,\ remo}\)\.{ves\ temporary\ files\\}\)\.{n"}\.{"\ \ \ \ \ \ -v\ charset\ :\ }\)\.{\ set\ of\ lettres\ to\ a}\)\.{dd\ tie,\ default:\ KkS}\)% -\.{sVvZzOoUuAI\\n"}\.{"\ \ \ \ \ \ -m\ :\ \ nomath:}\)\.{\ ignores\ math\ modes% -\\}\)\.{n"}\.{"\ \ \ \ \ \ -n\ :\ \ noverb:}\)\.{\ ignores\ verbatim\ mo}\)% -\.{des\\n"}\.{"\ \ \ \ \ \ -l\ :\ \ LaTeX\ m}\)\.{ode\\n"}\.{"\ \ \ \ \ \ -w\ :% -\ \ web\ mod}\)\.{e\\n"});{}$\6 +\.{sVvZzOoUuAI\\n"}\.{"\ \ \ \ \ \ -x\ code\ :\ cod}\)\.{e\ for\ tie\ symbol,\ +de}\)\.{fault:\ 7E,\ example\ -}\)\.{x\ C2A0\\n"}\.{"\ \ \ \ \ \ -m\ :\ \ +nomath:}\)\.{\ ignores\ math\ modes\\}\)\.{n"}\.{"\ \ \ \ \ \ -n\ :\ \ noverb:}% +\)\.{\ ignores\ verbatim\ mo}\)\.{des\\n"}\.{"\ \ \ \ \ \ -l\ :\ \ LaTeX\ m}\)% +\.{ode\\n"}\.{"\ \ \ \ \ \ -w\ :\ \ web\ mod}\)\.{e\\n"});{}$\6 \4${}\}{}$\2\par -\As10, 17, 18, 19, 22, 23, 36, 38, 41, 42, 44, 45, 47, 49, 51, 52, 53\ETs55. +\As10, 12, 20, 21, 22, 25, 26, 39, 41, 44, 45, 47, 48, 50, 52, 54, 55, 56\ETs58. \U1.\fi \M{7}Proměnné \PB{\\{isfilter}}, \PB{\\{silent}}, \PB{\\{rmbackup}}, \PB{% @@ -159,7 +164,19 @@ použití parametru \.{-v}) na text uvedený v příkazovém řádku. \&{char} ${}{*}\\{charset}\K\\{charsetdefault}{}$;\par \fi -\M{8}\B\X8:Načtení parametrů příkazového řádku\X${}\E{}$\6 +\M{8}String \PB{\\{tiestr}} obsahuje string, kterým se má nahradit vyhledané +místo. Pokud není použit parametr \.{-u}, je tento string jadnoznakový +a obsahuje vlnku. Jinak obsahuje string konvertovaný z parametru \.{-u}. +String má délku \PB{\\{tiestrlen}} bez ohledu na to, zda obsahuje nebo +neobsahuje nulové znaky (C-čková konvence pro stringy není použita). +\Y\B\4\X4:Globální deklarace\X${}\mathrel+\E{}$\6 +\&{unsigned} \&{char} \\{tiestr}[\.{MAXLEN}];\6 +\&{int} \\{tiestrlen};\par +\fi + +\M{9}\B\X9:Načtení parametrů příkazového řádku\X${}\E{}$\6 +$\\{tiestr}[\T{0}]\K\.{'\~'};{}$\6 +${}\\{tiestrlen}\K\T{1};{}$\6 \&{while} ${}(\\{argc}>\T{1}\W\\{argv}[\T{1}][\T{0}]\E\.{'-'}){}$\5 ${}\{{}$\1\6 \&{if} ${}(\\{argv}[\T{1}][\T{2}]\I\T{0}){}$\1\5 @@ -182,6 +199,13 @@ ${}\\{argv}\PP;{}$\6 ${}\\{argc}\MM;{}$\6 ${}\\{charset}\K\\{argv}[\T{1}];{}$\6 \&{break};\6 +\4\&{case} \.{'x'}:\6 +\&{if} ${}(\\{argc}<\T{2}){}$\1\5 +${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6 +${}\\{argv}\PP;{}$\6 +${}\\{argc}\MM;{}$\6 +\\{settiestr}(\\{argv}[\T{1}]);\6 +\&{break};\6 \4\&{case} \.{'m'}:\5 ${}\\{nomath}\K\T{1};{}$\6 \&{break};\6 @@ -203,18 +227,48 @@ ${}\\{argv}\PP;{}$\6 \4${}\}{}$\2\par \U5.\fi -\N{1}{9}Zpracování souborů. Parametr \PB{\.{MAXLEN}} definuje maximální možnou +\M{10}Vyřešíme konverzi kódu zapsaného za parametrem \.{-x} na string \PB{% +\\{tiestr}}. +\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\&{unsigned} \&{char} \\{hexnum}(\&{char} \|c)\1\1\2\2\6 +${}\{{}$\1\6 +\&{if} ${}(\|c\G\.{'0'}\W\|c\Z\.{'9'}){}$\1\5 +\&{return} \|c${}-\.{'0'};{}$\2\6 +\&{if} ${}(\|c\G\.{'A'}\W\|c\Z\.{'F'}){}$\1\5 +\&{return} \|c${}-\.{'A'}+\T{10};{}$\2\6 +\&{if} ${}(\|c\G\.{'a'}\W\|c\Z\.{'f'}){}$\1\5 +\&{return} \|c${}-\.{'a'}+\T{10};{}$\2\6 +${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\6 +\4${}\}{}$\2\7 +\&{void} \\{settiestr}(\&{char} ${}{*}\|s){}$\1\1\2\2\6 +${}\{{}$\1\6 +\&{int} \|i${},{}$ \|j${},{}$ \|c;\7 +${}\|i\K\\{strlen}(\|s);{}$\6 +\&{if} ${}((\|i>\T{2}*\.{MAXLEN})\V\|i\MOD\T{2}\E\T{1}){}$\1\5 +${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6 +${}\\{tiestrlen}\K\|i/\T{2};{}$\6 +${}\|j\K\T{0};{}$\6 +\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\5 +${}\{{}$\1\6 +${}\\{tiestr}[\|i]\K\\{hexnum}(\|s[\|j\PP])\LL\T{4};{}$\6 +${}\\{tiestr}[\|i]\MRL{+{\K}}\\{hexnum}(\|s[\|j\PP]);{}$\6 +\4${}\}{}$\2\6 +\4${}\}{}$\2\par +\fi + +\N{1}{11}Zpracování souborů. Parametr \PB{\.{MAXLEN}} definuje maximální +možnou délku jména souboru, který vytvoříme jako přechodný, nebo zálohový. Dále deklarujeme proměnné typu \uv{stream}. \Y\B\4\D$\.{MAXLEN}$ \5 \T{120}\par -\Y\B\4\X9:Lokální proměnné funkce \PB{\\{main}}\X${}\E{}$\6 +\Y\B\4\X11:Lokální proměnné funkce \PB{\\{main}}\X${}\E{}$\6 \&{FILE} ${}{*}\\{infile},{}$ ${}{*}\\{outfile};{}$\6 \&{char} \\{backup}[\.{MAXLEN}];\6 \&{int} \|j;\par \U5.\fi -\M{10}Definujeme funkci pro výpis chybového hlášení při neúspěšném otevření +\M{12}Definujeme funkci pro výpis chybového hlášení při neúspěšném otevření souboru. \Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{ioerr}(\&{char} ${}{*}\|f){}$\1\1\2\2\6 @@ -224,14 +278,14 @@ ${}\\{fprintf}(\\{stderr},\39\.{"\%s:\ cannot\ open\ fil}\)\.{e\ \%s\\n"},\39% \4${}\}{}$\2\par \fi -\M{11}Způsob zpracování souborů rozlišíme podle režimu daným přepínačem \.{-f}. -\Y\B\4\X11:Zpracování souborů\X${}\E{}$\6 -\&{if} (\\{isfilter}) \X12:Zpracování v režimu filter\X\6 -\&{else} \X13:Zpracování všech souborů příkazové řádky\X\par +\M{13}Způsob zpracování souborů rozlišíme podle režimu daným přepínačem \.{-f}. +\Y\B\4\X13:Zpracování souborů\X${}\E{}$\6 +\&{if} (\\{isfilter}) \X14:Zpracování v režimu filter\X\6 +\&{else} \X15:Zpracování všech souborů příkazové řádky\X\par \Q6. \U5.\fi -\M{12}V režimu \PB{$\\{isfilter}\E\T{1}$} je další zpracování závislé na počtu +\M{14}V režimu \PB{$\\{isfilter}\E\T{1}$} je další zpracování závislé na počtu souborů v příkazové řádce: \begitems @@ -240,7 +294,7 @@ příkazové řádce: * dva soubory -- první je vstupní, druhý výstupní, * více souborů -- program skončí s chybou. \enditems -\Y\B\4\X12:Zpracování v režimu filter\X${}\E{}$\6 +\Y\B\4\X14:Zpracování v režimu filter\X${}\E{}$\6 ${}\{{}$\1\6 \&{if} ${}(\\{argc}>\T{3}){}$\1\5 ${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6 @@ -264,9 +318,9 @@ ${}\\{tie}(\\{infile},\39\\{outfile});{}$\6 \&{if} ${}(\\{infile}\I\\{stdin}){}$\1\5 \\{fclose}(\\{infile});\2\6 \4${}\}{}$\2\par -\U11.\fi +\U13.\fi -\M{13}V~režimu \PB{$\\{isfilter}\E\T{0}$} jsou jednotlivé soubory v~příkazovém +\M{15}V~režimu \PB{$\\{isfilter}\E\T{0}$} jsou jednotlivé soubory v~příkazovém řádku interpretovány jako vstupní i výstupní. Více souborů v~příkazovém řádku má stejný efekt, jako opakované volání programu na jednotlivé soubory. @@ -275,7 +329,7 @@ všech souborů s~příponou~\.{tex}. Toto neplatí v~DOSu, protože interpretace masky je v~\UNIX/u starostí shellu a nikoli programu samotného. Náš program masku nebude interpretovat. Je-li v~tomto režimu nulový počet souborů, program se ukončí s~chybou. -\Y\B\4\X13:Zpracování všech souborů příkazové řádky\X${}\E{}$\6 +\Y\B\4\X15:Zpracování všech souborů příkazové řádky\X${}\E{}$\6 ${}\{{}$\1\6 \&{if} ${}(\\{argc}\E\T{1}){}$\1\5 ${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6 @@ -283,7 +337,7 @@ ${}\\{printusage}(\,),\39\\{exit}(\.{BAD\_OPTIONS});{}$\2\6 ${}\{{}$\1\6 ${}\\{argc}\MM;{}$\6 ${}\\{argv}\PP;{}$\6 -\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako % +\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako % \PB{\\{infile}}\X;\6 \&{if} ${}(\\{infile}\E\NULL){}$\5 ${}\{{}$\1\6 @@ -305,9 +359,9 @@ ${}\\{fclose}(\\{outfile}),\39\\{fclose}(\\{infile});{}$\6 \\{remove}(\\{backup});\2\6 \4${}\}{}$\2\6 \4${}\}{}$\2\par -\U11.\fi +\U13.\fi -\M{14}Při \PB{$\\{isfilter}\E\T{0}$} program přejmenuje každý zpracovávaný +\M{16}Při \PB{$\\{isfilter}\E\T{0}$} program přejmenuje každý zpracovávaný soubor tak, že změní poslední písmeno názvu souboru na znak \.{\char126}. Tento přejmenovaný soubor bude otevřen jako vstupní a výstupem bude původní @@ -317,7 +371,7 @@ záloha. Proč vlnku nepřidáváme na konec názvu souboru, ale měníme ji za poslední znak souboru? Protože chceme, aby program fungoval i v tak nemožných systémech, jako je DOS. -\Y\B\4\X14:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej +\Y\B\4\X16:Přejmenuj vstup \PB{\\{argv}[\T{0}]} na \PB{\\{backup}} a otevři jej jako \PB{\\{infile}}\X${}\E{}$\6 $\\{infile}\K\NULL;{}$\6 ${}\|j\K\\{strlen}(\\{argv}[\T{0}])-\T{1};{}$\6 @@ -336,9 +390,9 @@ ${}\|j\K\\{rename}(\\{argv}[\T{0}],\39\\{backup});{}$\6 \&{if} ${}(\|j\E\T{0}){}$\1\5 ${}\\{infile}\K\\{fopen}(\\{backup},\39\.{"r"});{}$\2\6 \4${}\}{}$\2\par -\U13.\fi +\U15.\fi -\N{1}{15}Patterny. Abychom mohli účelně definovat chování programu +\N{1}{17}Patterny. Abychom mohli účelně definovat chování programu v~různých situacích, zavedeme datovou strukturu \PB{\.{PATTERN}}. Zhruba řečeno, budeme sledovat vstup znak po znaku a pokud bude část vstupu souhlasit s~definovaným patternem, provedeme námi požadovanou @@ -392,7 +446,7 @@ patternu }\2\6 ${}\}{}$ \&{PATTERN};\par \fi -\M{16}Deklarujeme některé globální proměnné pro práci s~patterny. \PB{\\{lapi}} +\M{18}Deklarujeme některé globální proměnné pro práci s~patterny. \PB{\\{lapi}} je pole obsahující ukazatele na aktuální pozice v~otevřených patternech. Říkáme, že \uv{pattern je otevřen}, pokud zkoumaný řetězec s~ním {\it začíná\/} @@ -453,7 +507,24 @@ patterny }\6 \&{int} \\{ind};\C{ aktualni pozice prechodneho bufferu }\par \fi -\M{17}Nyní definujeme pomocné funkce \PB{\\{setpattern}}, \PB{\\{setpi}} a \PB{% +\M{19}Dne 30. 4. 2009 jsem přidal možnost čtení vstupu, který obsahuje nulové +byty. +Takové nuly se přepisují do výstupu, ale program si jich nevšímá při +procházení patternů. Tím je možno program použít na soubory kódované +v UTF16, ačkoli patterny obsahují jen jednobytové ASCII znaky. +Buffer \PB{\\{buff}} může obsahovat i nulové byty, které je třeba přepsat do +výstupu. +Na druhé straně buffer \PB{\\{buffnz}} obsahuje jen nenulové byty, na které se +někdy ptáme při pohledu dozadu. Nejdelší pohled dozadu je o čtyři byty. +Udělám tedy \PB{\\{buffnz}} osmibytový, začnu jej plnit od \PB{\\{buffnz}}[4] +a kdykoli je buffer zcela zaplněn, přesunu horní čtyři byty na spodní a dále +pokračuji v plnění bufferu od pozice \PB{\\{buffnz}}[4]. +\Y\B\4\X4:Globální deklarace\X${}\mathrel+\E{}$\6 +\&{char} \\{buffnz}[\T{8}];\6 +\&{int} \\{inz};\par +\fi + +\M{20}Nyní definujeme pomocné funkce \PB{\\{setpattern}}, \PB{\\{setpi}} a \PB{% \\{normalpattern}}. Tyto funkce alokují paměť pomocí standardní funkce \PB{\\{malloc}}. Abychom mohli @@ -474,7 +545,7 @@ ${}\\{fprintf}(\\{stderr},\39\.{"\%s,\ no\ memory,\ mall}\)\.{oc\ failed\\n"},% \4${}\}{}$\2\par \fi -\M{18}Funkce \PB{\\{setpattern}} alokuje paměťové místo struktury \PB{% +\M{21}Funkce \PB{\\{setpattern}} alokuje paměťové místo struktury \PB{% \&{PATTERN}} a napojí ji pomocí proměnné \PB{\\{lastpt}} na už alokovaný řetěz patternů. Vrátí ukazatel na nově alokované místo. Jednotlivé pozice patternu se musí @@ -496,7 +567,7 @@ ${}\\{lastpi}\K\NULL;{}$\6 \4${}\}{}$\2\par \fi -\M{19}Funkce \PB{\\{setpi}} alokuje paměťové místo pro jednu pozici patternu. +\M{22}Funkce \PB{\\{setpi}} alokuje paměťové místo pro jednu pozici patternu. Provede zřetězení tak, aby první pozice řetězu pozic byla zaznamenána v položce \PB{\\{patt}} ve struktuře \PB{\&{PATTERN}} a další byly provázány položkou % @@ -519,7 +590,7 @@ ${}\\{lastpi}\K\|p;{}$\6 \4${}\}{}$\2\par \fi -\M{20}Připravme si půdu pro funkci \PB{\\{normalpattern}}. Tato funkce alokuje +\M{23}Připravme si půdu pro funkci \PB{\\{normalpattern}}. Tato funkce alokuje strukturu pro jeden pattern včetně pozic patternu na základě vstupního stringu. Každá pozice patternu obsahuje v~množině znaků jediný znak a má \PB{$\\{flag}\K\.{ONE}$}. Znaky ve vstupním stringu odpovídají po řadě @@ -535,17 +606,17 @@ Nejdříve deklarujeme pole všech možných jednopísmenných stringů. \&{int} \|i;\par \fi -\M{21}Inicializujeme toto pole (znak, nula, znak, nula, atd...). -\Y\B\4\X21:Inicializace datových struktur\X${}\E{}$\6 +\M{24}Inicializujeme toto pole (znak, nula, znak, nula, atd...). +\Y\B\4\X24:Inicializace datových struktur\X${}\E{}$\6 \&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\T{256};{}$ ${}\|i\PP){}$\5 ${}\{{}$\1\6 ${}\\{strings}[\T{2}*\|i]\K{}$(\&{char}) \|i;\6 ${}\\{strings}[\T{2}*\|i+\T{1}]\K\T{0};{}$\6 \4${}\}{}$\2\par -\As34, 37, 39, 40, 43, 46, 48, 50\ETs54. +\As37, 40, 42, 43, 46, 49, 51, 53\ETs57. \U5.\fi -\M{22}Definujme funkci \PB{\\{normalpattern}}. +\M{25}Definujme funkci \PB{\\{normalpattern}}. \Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{PATTERN} ${}{*}\\{normalpattern}(\&{void}({*}\\{proc})(\&{void}),% \39{}$\&{const} \&{char} ${}{*}\\{str}){}$\1\1\2\2\6 @@ -572,7 +643,7 @@ ${}\|j\PP;{}$\6 \4${}\}{}$\2\par \fi -\M{23}Funkce \PB{\\{match}}. Definujeme funkci, která na základě hodnoty znaku % +\M{26}Funkce \PB{\\{match}}. Definujeme funkci, která na základě hodnoty znaku % \PB{\|c} (proměnná \PB{\|c} je definována jako globální), a pozice patternu \PB{\|p} (parametr @@ -615,16 +686,16 @@ ${}\{{}$\1\6 \4\&{case} \.{ONE\_NOT}:\5 \&{return} \.{NOFOUND};\C{ Nesouhlas }\6 \4\&{case} \.{ANY\_NOT}:\5 -\X24:Vrať hodnotu podle následující pozice patternu\X;\6 +\X27:Vrať hodnotu podle následující pozice patternu\X;\6 \4${}\}{}$\2\6 \&{return} \T{0};\C{ Tady bychom nikdy nemeli byt, return pro potlaceni varovani }\6 \4${}\}{}$\2\par \fi -\M{24}O kolik pozic je třeba se posunout a s jakým výsledkem zjistíme +\M{27}O kolik pozic je třeba se posunout a s jakým výsledkem zjistíme rekurzivním voláním funkce \PB{\\{match}}. -\Y\B\4\X24:Vrať hodnotu podle následující pozice patternu\X${}\E{}$\6 +\Y\B\4\X27:Vrať hodnotu podle následující pozice patternu\X${}\E{}$\6 \&{switch} ${}(\|m\K\\{match}(\|p\MG\\{next})){}$\5 ${}\{{}$\1\6 \4\&{case} \.{NOFOUND}:\5 @@ -634,9 +705,9 @@ ${}\{{}$\1\6 \4\&{default}:\5 \&{return} \T{1}${}+\|m;{}$\6 \4${}\}{}$\2\par -\U23.\fi +\U26.\fi -\N{1}{25}Vlnkovací funkce. +\N{1}{28}Vlnkovací funkce. Nejprve připravíme globální deklarace pro \uv{vlnkovací} funkci \PB{\\{tie}}. Funkce \PB{\\{tie}} \uv{ovlnkuje} vstupní soubor \PB{\\{infile}} a vytvoří soubor @@ -664,12 +735,12 @@ statistiku }\6 \&{int} \\{mode};\par \fi -\M{26}Nyní definujeme vlnkovací funkci \PB{\\{tie}}. Veškerá činnost se opírá o +\M{29}Nyní definujeme vlnkovací funkci \PB{\\{tie}}. Veškerá činnost se opírá o strukturu patternů. Výhodné je (z důvodu rychlosti) \uv{natvrdo} zde implementovat jen přepínání mezi stavem čtení z oblasti komentáře (\PB{$\\{listpatt}\E\\{commentlist}$}) a mimo komentář (\PB{$\\{listpatt}\E% \\{normallist}$}); -\Y\B\4\X26:Vlnkovací funkce \PB{\\{tie}}\X${}\E{}$\6 +\Y\B\4\X29:Vlnkovací funkce \PB{\\{tie}}\X${}\E{}$\6 \&{static} \&{void} \\{tie}(\&{FILE} ${}{*}\\{input},\39{}$\&{FILE} ${}{*}% \\{output}){}$\1\1\2\2\6 ${}\{{}$\1\6 @@ -678,12 +749,12 @@ ${}\{{}$\1\6 \&{int} \\{ic};\6 \&{PATTERN} ${}{*}\\{pp};{}$\6 \&{PATITEM} ${}{*}\\{pi};{}$\7 -\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X;\6 +\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X;\6 \&{while} ${}(\R\\{feof}(\\{input})){}$\5 ${}\{{}$\1\6 -\X30:Otevři nové patterny\X;\6 \&{if} ${}(\\{ap}\E\T{0}\W\\{ind}>\.{BUFI}\W\|c\I\.{'\\\\'}){}$\1\5 -\X28:Vyprázdni buffer\X;\2\6 +\X31:Vyprázdni buffer\X;\2\6 +\X33:Otevři nové patterny\X;\C{ 1. 2. 2010: prohozene poradi }\6 \&{if} ${}(\\{ind}\G\.{MAXBUFF}){}$\5 ${}\{{}$\1\6 ${}\\{fprintf}(\\{stderr},\39\.{"Operating\ buffer\ ov}\)\.{erflow,\ is\ @@ -694,34 +765,47 @@ anything\ }\)\.{wrong?\\n"});{}$\6 \1\6 \&{break};\2\6 ${}\\{buff}[\\{ind}\PP]\K\|c\K\\{ic};{}$\6 +\&{if} ${}(\|c\E\T{0}){}$\1\5 +\&{continue};\C{ 30. 4. 2009 }\2\6 +\&{if} ${}(\\{inz}\G\T{8}){}$\5 +${}\{{}$\1\6 +\&{for} ${}(\\{inz}\K\T{0};{}$ ${}\\{inz}<\T{4};{}$ ${}\\{inz}\PP){}$\1\5 +${}\\{buffnz}[\\{inz}]\K\\{buffnz}[\\{inz}+\T{4}];{}$\2\6 +${}\\{inz}\K\T{4};{}$\6 +\4${}\}{}$\2\6 +${}\\{buffnz}[\\{inz}\PP]\K\|c;{}$\6 \&{if} ${}(\|c\E\.{'\\n'}){}$\1\5 ${}\\{numline}\PP,\39\\{listpatt}\K\\{normallist};{}$\2\6 -\&{if} ${}(\|c\E\.{'\%'}\W\\{mode}\I\.{VERBMODE}\W\\{buff}[\\{ind}-\T{2}]\I\.{'% -\\\\'}){}$\1\5 +\&{if} ${}(\|c\E\.{'\%'}\W\\{mode}\I\.{VERBMODE}\W\\{buffnz}[\\{inz}-\T{2}]\I% +\.{'\\\\'}){}$\1\5 ${}\\{listpatt}\K\\{commentlist};{}$\2\6 -\X29:Projdi otevřené patterny\X;\6 +\X32:Projdi otevřené patterny\X;\6 \4${}\}{}$\2\6 -\X28:Vyprázdni buffer\X;\6 +\X31:Vyprázdni buffer\X;\6 \&{if} ${}(\R\\{web}){}$\1\5 \\{checkmode}(\,);\C{ zaverecna kontrola modu }\2\6 \&{if} ${}(\R\\{silent}){}$\1\5 -\X32:Tiskni závěrečnou zprávu\X;\2\6 +\X35:Tiskni závěrečnou zprávu\X;\2\6 \4${}\}{}$\2\par \U1.\fi -\M{27}\B\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}\E{}$\6 +\M{30}\B\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}\E{}$\6 \&{for} ${}(\|k\K\T{0};{}$ ${}\|k<\.{MAXPATT};{}$ ${}\|k\PP){}$\1\5 ${}\\{lapi}[\|k]\K\NULL;{}$\2\6 ${}\|c\K\.{'\\n'};{}$\6 -${}\\{buff}[\T{0}]\K\\{mode}\K\\{ap}\K\T{0};{}$\6 +${}\\{buff}[\T{0}]\K\T{1};{}$\6 +${}\\{mode}\K\\{ap}\K\T{0};{}$\6 ${}\\{ind}\K\T{1};{}$\6 +\&{for} ${}(\\{inz}\K\T{0};{}$ ${}\\{inz}<\T{4};{}$ ${}\\{inz}\PP){}$\1\5 +${}\\{buffnz}[\\{inz}]\K\T{0};{}$\2\6 +${}\\{inz}\K\T{4};{}$\6 ${}\\{numline}\K\T{1};{}$\6 ${}\\{numchanges}\K\T{0};{}$\6 ${}\\{mode}\K\.{TEXTMODE}{}$;\par -\A35. -\U26.\fi +\A38. +\U29.\fi -\M{28}Při manipulaci s bufferem byl použit jeden trik. Veškeré načtené znaky +\M{31}Při manipulaci s bufferem byl použit jeden trik. Veškeré načtené znaky začínají až od \PB{\\{buff}[\T{1}]}, zatímco \PB{\\{buff}[\T{0}]} je rovno nule. Je to proto, že některé algoritmy se vrací o jeden znak zpět za svůj pattern, aby zjistily, @@ -730,16 +814,19 @@ zda tam není symbol \uv{\.{\char92}} (například na výskyt sekvence procenta). Kdybychm zazačali od \PB{\\{buff}[\T{0}]}, v některých situacích bychom se ptali, zda \PB{$\\{buff}[{-}\T{1}]\E\.{'\\\\'}$}, tj. sahali bychom na neošetřené -místo v paměti. -\Y\B\4\X28:Vyprázdni buffer\X${}\E{}$\6 +místo v paměti. Od 30. 4. 2009 tento problém pominul, protože se ptáme dozadu +pouze +v~\PB{\\{buffnz}}, ale vlastnost dříve implementovanou v \PB{\\{buff}} jsem +ponechal beze změny. +\Y\B\4\X31:Vyprázdni buffer\X${}\E{}$\6 ${}\{{}$\1\6 -${}\\{buff}[\\{ind}]\K\T{0};{}$\6 -${}\\{fputs}({\AND}\\{buff}[\T{1}],\39\\{output});{}$\6 +${}\\{fwrite}({\AND}\\{buff}[\T{1}],\39\\{ind}-\T{1},\39\T{1},\39% +\\{output});{}$\6 ${}\\{ind}\K\T{1};{}$\6 \4${}\}{}$\2\par -\U26.\fi +\U29.\fi -\M{29}Při procházení otevřenými patterny posunujeme v poli \PB{\\{lapi}} pozice +\M{32}Při procházení otevřenými patterny posunujeme v poli \PB{\\{lapi}} pozice jednotlivých patternů podle pokynů funkce \PB{\\{match}}, případně pattern zavřeme a případně vyvoláme proceduru patternu. @@ -747,7 +834,7 @@ a případně vyvoláme proceduru patternu. Některé patterny v poli \PB{\\{lapi}} už mohou být zavřeny, takže je nutno s tímto polem pracovat jako s jakýmsi děravým sýrem. -\Y\B\4\X29:Projdi otevřené patterny\X${}\E{}$\6 +\Y\B\4\X32:Projdi otevřené patterny\X${}\E{}$\6 $\|n\K\\{ap};{}$\6 ${}\|k\K\T{0};{}$\6 \&{while} (\|n)\5 @@ -770,15 +857,16 @@ ${}\\{lapi}[\|k]\K\\{lapi}[\|k]\MG\\{next}{}$;\C{ dalsi pozice patternu }\2\6 ${}\|k\PP;{}$\6 ${}\|n\MM;{}$\6 \4${}\}{}$\2\par -\U26.\fi +\U29.\fi -\M{30}Při otevírání nových patternů, které nejsou v tuto chvíli zablokovány, +\M{33}Při otevírání nových patternů, které nejsou v tuto chvíli zablokovány, se hned vypořádáme s takovými patterny, které nám dávají rovnou odpověď typu \PB{\.{FOUND}} nebo \PB{\.{NOFOUND}}. V takových případech ani nezanášíme ukazatel na pozici do pole \PB{\\{lapi}}. -\Y\B\4\X30:Otevři nové patterny\X${}\E{}$\6 +\Y\B\4\X33:Otevři nové patterny\X${}\E{}$\6 $\\{pp}\K\\{listpatt};{}$\6 +\&{if} (\|c)\1\6 \&{while} ${}(\\{pp}\I\NULL){}$\5 ${}\{{}$\1\6 \&{switch} ${}(\|m\K\\{match}(\\{pp}\MG\\{patt})){}$\5 @@ -788,18 +876,18 @@ ${}({*}\\{pp}\MG\\{proc})(\,){}$;\C{ spustit proceduru }\6 \4\&{case} \.{NOFOUND}:\5 \&{break};\6 \4\&{default}:\5 -\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X;\6 +\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X;\6 \4${}\}{}$\2\6 ${}\\{pp}\K\\{pp}\MG\\{next};{}$\6 -\4${}\}{}$\2\par -\U26.\fi +\4${}\}{}$\2\2\par +\U29.\fi -\M{31}Není-li hned známa odpověď, zda pattern vyhovuje či nikoli, +\M{34}Není-li hned známa odpověď, zda pattern vyhovuje či nikoli, překontrolujeme nejdříve, zda už není pattern ve stejné pozici otevřený. Pak najdeme první \uv{díru} v tabulce \PB{\\{lapi}} a tam uhnízdíme nový ukazatel na pozici v patternu. -\Y\B\4\X31:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X${}\E{}$\6 +\Y\B\4\X34:Vytvoř ukazatel na nový pattern a \PB{\&{break}}\X${}\E{}$\6 $\\{pi}\K\\{pp}\MG\\{patt};{}$\6 \&{while} ${}(\|m\MM){}$\1\5 ${}\\{pi}\K\\{pi}\MG\\{next};{}$\2\6 @@ -827,17 +915,17 @@ ${}\\{lapt}[\|k]\K\\{pp};{}$\6 ${}\\{lapi}[\|k]\K\\{pi};{}$\6 ${}\\{ap}\PP;{}$\6 \4${}\}{}$\2\par -\U30.\fi +\U33.\fi -\M{32}Poslední věcí ve funci \PB{\\{tie}} je tisk závěrečné statistiky +\M{35}Poslední věcí ve funci \PB{\\{tie}} je tisk závěrečné statistiky zpracování. -\Y\B\4\X32:Tiskni závěrečnou zprávu\X${}\E{}$\6 +\Y\B\4\X35:Tiskni závěrečnou zprávu\X${}\E{}$\6 $\\{fprintf}(\\{stderr},\39\.{"\~\~\~\ file:\ \%s\\t\ \ lin}\)\.{es:\ \%ld,\ changes:\ \%l}\)\.{d\\n"},\39\\{filename},\39\\{numline},\39\\{numchanges}){}$;% \par -\U26.\fi +\U29.\fi -\N{1}{33}Inicializace patternů. +\N{1}{36}Inicializace patternů. Po vytvoření předchozího kódu opírajícího se o~patterny máme nyní v~ruce poměrně silný nástroj na definování různých činností programu prostým vytvořením patternu a příslušné jeho procedury. Pokud budeme chtít @@ -862,7 +950,7 @@ Nejprve deklarujeme některé často používané skupiny znaků v~patternech. \\{parcheck},{}$ ${}{*}\\{verblist}{}$;\par \fi -\M{34}Začneme definicí nejčastěji používaného patternu na vlnkování uvnitř +\M{37}Začneme definicí nejčastěji používaného patternu na vlnkování uvnitř řádku. Připomeňme, že opakované volání funkce \PB{\\{setpattern}} vytváří interně seznam patternů, přičemž o~jejich propojení se nemusíme starat. Vyzvedneme @@ -870,7 +958,7 @@ si z~návratového kódu funkce pouze ukazatel na první položku seznamu \PB{\\{normallist}}. Stejně tak opakované volání funkce \PB{\\{setpi}} vytváří seznam pozic pro naposledy deklarovaný pattern. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 $\\{vlnkalist}\K\\{setpattern}(\\{vlnkain});{}$\6 ${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6 ${}\\{setpi}(\\{tblanks},\39\.{ANY});{}$\6 @@ -881,29 +969,54 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6 ${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par \fi -\M{35}\B\X27:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}% +\M{38}\B\X30:Inicializace proměnných při startu funkce \PB{\\{tie}}\X${}% \mathrel+\E{}$\6 $\\{listpatt}\K\\{normallist}\K\\{vlnkalist}{}$;\par \fi -\M{36}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{39}Vložení vlnky znamená vykonat následující práci: Zapamatovat si znak za +skupinou mezer +(do proměnné \PB{\|p}). Pokud před tímto znakem předchází nulový byte, +použijeme ho později, proto +si jej uložíme do proměnné \PB{\|z}. Dále se posuneme v bufferu vlevo přes +všechny mezery, tabelátory +(přesněji \PB{\\{blanks}}) a přeskakujeme přitom všechny nulové byty. Index % +\PB{\\{ind}} se zastaví +na předložce. Posuneme jej doprava za předložku (++\PB{\\{ind}}) a pokud tam je +nulový byte a první znak +\PB{\\{tiestr}} není nulový, posuneme se až za tento nulový byte. Dále vložíme +string \PB{\\{tiestr}}, +neboli vlnku. Nakonec připojíme zapamatovaný znak \PB{\|p}, ovšem pokud před +ním byla nula, +vložíme ji ještě před znak \PB{\|p}. +\Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{vlnkain}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 -\&{char} \|p;\7 +\&{int} \|i;\6 +\&{char} \|p${},{}$ \|z;\7 ${}\\{ind}\MM;{}$\6 ${}\|p\K\\{buff}[\\{ind}\MM];{}$\6 -\&{while} ${}(\\{strchr}(\\{blanks},\39\\{buff}[\\{ind}])\I\NULL){}$\1\5 +${}\|z\K\\{buff}[\\{ind}];{}$\6 +\&{while} ${}(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blanks},\39\\{buff}[\\{ind}])% +\I\NULL)){}$\1\5 ${}\\{ind}\MM;{}$\2\6 -${}\\{ind}\PP;{}$\6 -${}\\{buff}[\\{ind}\PP]\K\.{'\~'};{}$\6 +\&{if} ${}(\R\\{buff}[\PP\\{ind}]\W\\{tiestr}[\T{0}]){}$\1\5 +${}\\{ind}\PP;{}$\2\6 +\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\1\5 +${}\\{buff}[\\{ind}\PP]\K\\{tiestr}[\|i];{}$\2\6 +${}\|i\K\\{tiestrlen}{}$;\C{ nulu pred p vlozime, pokud je z==0 a }\6 +\&{if} ${}(\R\\{tiestr}[\T{0}]){}$\1\5 +${}\|i\MM{}$;\C{ pocet vlozenych znaku z tiestr }\2\6 +\&{if} ${}(\R\|z\W(\|i\MOD\T{2})){}$\1\5 +${}\\{buff}[\\{ind}\PP]\K\T{0}{}$;\C{ je sudy }\2\6 ${}\\{buff}[\\{ind}\PP]\K\|p;{}$\6 ${}\\{numchanges}\PP;{}$\6 \4${}\}{}$\2\par \fi -\M{37}Podobně pro tvorbu vlnky \uv{přes řádek} vytvoříme pattern a kód +\M{40}Podobně pro tvorbu vlnky \uv{přes řádek} vytvoříme pattern a kód procedury. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 \\{setpattern}(\\{vlnkacr});\6 ${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6 ${}\\{setpi}(\\{tblanks},\39\.{ANY});{}$\6 @@ -915,7 +1028,7 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6 ${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par \fi -\M{38}V proceduře k tomuto patternu musíme ošetřit případ typu +\M{41}V proceduře k tomuto patternu musíme ošetřit případ typu \uv{\.{a\char126v\char92np}}, kdy nelze prostě přehodit \uv{\.{\char92n}} za \uv{\.{v}}, protože bychom roztrhli @@ -931,19 +1044,21 @@ nebudeme vytvářet nové. Na výstupu bude soubor o jeden řádek kratší. \Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{vlnkacr}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 -\&{char} \|p;\6 +\&{char} \|p${},{}$ \|z;\6 \&{int} \|i${},{}$ \|j;\7 ${}\\{ind}\MM;{}$\6 ${}\|p\K\\{buff}[\\{ind}\MM];{}$\6 -\&{while} ${}(\\{strchr}(\\{blankscr},\39\\{buff}[\\{ind}])\I\NULL){}$\1\5 +${}\|z\K\\{buff}[\\{ind}];{}$\6 +\&{while} ${}(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blankscr},\39\\{buff}[% +\\{ind}])\I\NULL)){}$\1\5 ${}\\{ind}\MM;{}$\2\6 ${}\|i\K\\{ind}{}$;\C{ misto predlozky, kterou chceme vazat }\6 \&{while} ${}(\|i\G\T{0}\W(\\{strchr}(\\{blankscr},\39\\{buff}[\|i])\E% \NULL)){}$\1\5 ${}\|i\MM;{}$\2\6 ${}\|j\K\|i;{}$\6 -\&{while} ${}(\|i\G\T{0}\W(\\{strchr}(\\{blanks},\39\\{buff}[\|i])\I\NULL)){}$% -\1\5 +\&{while} ${}(\|i\G\T{0}\W(\R\\{buff}[\\{ind}]\V(\\{strchr}(\\{blanks},\39% +\\{buff}[\|i])\I\NULL))){}$\1\5 ${}\|i\MM;{}$\2\6 \&{if} ${}(\|i\G\T{0}\W\\{buff}[\|i]\E\.{'\\n'}){}$\1\5 ${}\|j\K{-}\T{1};{}$\2\6 @@ -951,16 +1066,23 @@ ${}\|j\K{-}\T{1};{}$\2\6 ${}\\{buff}[\|j]\K\.{'\\n'};{}$\2\6 \&{else}\1\5 ${}\\{numline}\MM;{}$\2\6 -${}\\{ind}\PP;{}$\6 -${}\\{buff}[\\{ind}\PP]\K\.{'\~'};{}$\6 +\&{if} ${}(\R\\{buff}[\PP\\{ind}]\W\\{tiestr}[\T{0}]){}$\1\5 +${}\\{ind}\PP;{}$\2\6 +\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\\{tiestrlen};{}$ ${}\|i\PP){}$\1\5 +${}\\{buff}[\\{ind}\PP]\K\\{tiestr}[\|i];{}$\2\6 +${}\|i\K\\{tiestrlen};{}$\6 +\&{if} ${}(\R\\{tiestr}[\T{0}]){}$\1\5 +${}\|i\MM;{}$\2\6 +\&{if} ${}(\R\|z\W(\|i\MOD\T{2})){}$\1\5 +${}\\{buff}[\\{ind}\PP]\K\T{0};{}$\2\6 ${}\\{buff}[\\{ind}\PP]\K\|p;{}$\6 ${}\\{numchanges}\PP;{}$\6 \4${}\}{}$\2\par \fi -\M{39}Nyní vytvoříme patterny pro případy typu \.{\char92uv\char`\{v lese\char`% +\M{42}Nyní vytvoříme patterny pro případy typu \.{\char92uv\char`\{v lese\char`% \}}. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 \\{setpattern}(\\{vlnkain});\C{ na radku }\6 ${}\\{setpi}(\\{tblankscr},\39\.{ONE});{}$\6 ${}\\{setpi}(\\{backslash},\39\.{ONE});{}$\6 @@ -986,21 +1108,22 @@ ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6 ${}\\{setpi}(\\{nochar},\39\.{ONE\_NOT}){}$;\par \fi -\M{40}Vytvoříme patterny a proceduru pro potlatčení tvorby vlnky u písmen těsně +\M{43}Vytvoříme patterny a proceduru pro potlatčení tvorby vlnky u písmen těsně následujících sekvence \.{\char92TeX} a \.{\char92LaTeX}. Tj. nechceme, aby např z textu \uv{\.{Vlastnosti~\char92TeX~u~jsou...}} jsme dostali text s nesprávně vázaným písmenem \uv{\.{Vlastnosti~\char92TeX~u\char126jsou...}}. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 $\\{normalpattern}(\\{tielock},\39\.{"\\\\TeX"});{}$\6 ${}\\{setpi}(\\{blankscr},\39\.{ONE});{}$\6 ${}\\{normalpattern}(\\{tielock},\39\.{"\\\\LaTeX"});{}$\6 ${}\\{setpi}(\\{blankscr},\39\.{ONE}){}$;\par \fi -\M{41}Procedura \PB{\\{tielock}} obsahuje nečistý trik. Při provádění procedury +\M{44}Procedura \PB{\\{tielock}} obsahuje nečistý trik. Při provádění procedury je -právě načten znak z \PB{\\{blankscr}} a je uložen do buff. Testy na otevírání +právě načten znak z \PB{\\{blankscr}} a je uložen do \PB{\\{buff}}. Testy na +otevírání nových patternů pro tento znak teprve budou následovat a testují se na hodnotu proměnné \PB{\|c}. Stačí tedy změnit hodnotu \PB{\|c} a vlnkovací patterny se @@ -1012,7 +1135,7 @@ ${}\|c\K\T{1};{}$\6 \4${}\}{}$\2\par \fi -\M{42}Ošetříme nyní přechod do/z matematického režimu \TeX{}u. Uvnitř math +\M{45}Ošetříme nyní přechod do/z matematického režimu \TeX{}u. Uvnitř math módu vlnky neděláme. Při zjištěném nesouladu v přechodech mezi math-módy spustíme následující proceduru. \Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 @@ -1026,11 +1149,11 @@ ${}\\{status}\K\.{WARNING};{}$\6 \4${}\}{}$\2\par \fi -\M{43}Začneme patterny pro přechod do/z matematického režimu, ohraničeného +\M{46}Začneme patterny pro přechod do/z matematického režimu, ohraničeného jedním dolarem, nebo v La\TeX{}u příslušnými sekvencemi. Sekvence La\TeX{}u \.{\char92(} a \.{\char92)} nejsou zahrnuty, protože bývají často předefinovány k jiným užitečnějším věcem. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 \&{if} ${}(\R\\{nomath}){}$\5 ${}\{{}$\1\6 ${}\\{mathlist}\K\\{setpattern}(\\{onedollar});{}$\6 @@ -1044,7 +1167,7 @@ ${}\\{normalpattern}(\\{mathout},\39\.{"\\\\end.\{math\}"});{}$\6 \4${}\}{}$\2\par \fi -\M{44}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{47}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{mathin}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 \&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\1\5 @@ -1061,7 +1184,7 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6 \4${}\}{}$\2\par \fi -\M{45}Při programování procedury \PB{\\{onedollar}} nesmíme zapomenout na +\M{48}Při programování procedury \PB{\\{onedollar}} nesmíme zapomenout na výskyt sekvence \.{\char92\$}. V tom případě akci ignorujeme. Podobně u sekvence \.{\$\$} souhlasí ten druhý dolar s naším patternem, ale to už jsme uvnitř @@ -1069,8 +1192,8 @@ display módu. V takovém případě také nic neděláme. \Y\B\4\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{onedollar}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 -\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'\\\\'}\V(\\{buff}[\\{ind}-\T{3}]\E\.{'% -\$'}\W\\{buff}[\\{ind}-\T{4}]\I\.{'\\\\'})){}$\1\5 +\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'\\\\'}\V(\\{buffnz}[\\{inz}-\T{3}]\E% +\.{'\$'}\W\\{buffnz}[\\{inz}-\T{4}]\I\.{'\\\\'})){}$\1\5 \&{return};\2\6 \&{if} ${}(\\{mode}\E\.{DISPLAYMODE}){}$\1\5 \\{printwarning}(\,);\2\6 @@ -1084,16 +1207,16 @@ ${}\{{}$\1\6 \4${}\}{}$\2\par \fi -\M{46}Pokud najdeme prázdný řádek, překontrolujeme, zda náhodou nejsme v +\M{49}Pokud najdeme prázdný řádek, překontrolujeme, zda náhodou nejsme v math-módu. Pokud ano, vypíšeme varování a přejdeme do textového módu. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 $\\{parcheck}\K\\{setpattern}(\\{checkmode});{}$\6 ${}\\{setpi}(\\{cr},\39\.{ONE});{}$\6 ${}\\{setpi}(\\{blanks},\39\.{ANY});{}$\6 ${}\\{setpi}(\\{cr},\39\.{ONE}){}$;\par \fi -\M{47}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{50}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{checkmode}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 \&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\5 @@ -1105,12 +1228,12 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6 \4${}\}{}$\2\par \fi -\M{48}Nyní ošetříme výskyt dvou dolarů, tj. vstup do/z display módu. +\M{51}Nyní ošetříme výskyt dvou dolarů, tj. vstup do/z display módu. Rovněž mysleme na La\TeX{}isty a jejich prostředí pro display-mód. Protože je možná alternativa s hvězdičkou na konci názvu prostředí, raději už uzavírací závorku do patternu nezahrnujeme. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 \&{if} ${}(\R\\{nomath}){}$\5 ${}\{{}$\1\6 ${}\\{normalpattern}(\\{twodollars},\39\.{"\$\$"});{}$\6 @@ -1124,7 +1247,7 @@ ${}\\{normalpattern}(\\{displayout},\39\.{"\\\\end.\{equation"});{}$\6 \4${}\}{}$\2\par \fi -\M{49}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{52}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{displayin}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 \&{if} ${}(\\{mode}\I\.{TEXTMODE}){}$\1\5 @@ -1141,7 +1264,7 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6 \4${}\}{}$\2\7 \&{static} \&{void} \\{twodollars}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 -\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'\\\\'}){}$\1\5 +\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'\\\\'}){}$\1\5 \&{return};\2\6 \&{if} ${}(\\{mode}\E\.{DISPLAYMODE}){}$\1\5 \\{displayout}(\,);\2\6 @@ -1150,11 +1273,11 @@ ${}\{{}$\1\6 \4${}\}{}$\2\par \fi -\M{50}Následuje ošetření tzv. verbatim módu. Pro plain i La\TeX{} jsou +\M{53}Následuje ošetření tzv. verbatim módu. Pro plain i La\TeX{} jsou nejčastější závorky pro verbatim mod tyto (variantu s \.{\char92begtt} používám s oblibou já). -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 \&{if} ${}(\R\\{noverb}){}$\5 ${}\{{}$\1\6 ${}\\{verblist}\K\\{normalpattern}(\\{verbinchar},\39\.{"\\\\verb"});{}$\6 @@ -1187,7 +1310,7 @@ ${}\\{normalpattern}(\\{verbout},\39\.{"@>|"});{}$\6 \4${}\}{}$\2\par \fi -\M{51}Procedura \PB{\\{verbinchar}} se od \uv{společné} procedury \PB{% +\M{54}Procedura \PB{\\{verbinchar}} se od \uv{společné} procedury \PB{% \\{verbin}} liší v tom, že zavede do stringu \PB{\\{verbchar}} momentální hodnotu proměnné \PB{% \|c}. @@ -1208,7 +1331,7 @@ ${}\\{mode}\K\.{VERBMODE};{}$\6 \4${}\}{}$\2\par \fi -\M{52}Při programování \uv{obecné} funkce \PB{\\{verbin}} musíme dbát na to, +\M{55}Při programování \uv{obecné} funkce \PB{\\{verbin}} musíme dbát na to, aby zůstal aktivní pouze odpovídající \uv{výstupní} pattern k danému vstupnímu. Také si zapamatujeme mód, ze kterého jsme do verbatim @@ -1233,7 +1356,7 @@ ${}\|i\K\T{2};{}$\6 ;\6 \4\&{case} \.{'d'}:\5 ${}\|i\K\T{3};{}$\6 -\&{if} ${}(\\{buff}[\\{ind}-\T{3}]\E\.{'@'}){}$\1\5 +\&{if} ${}(\\{buffnz}[\\{inz}-\T{3}]\E\.{'@'}){}$\1\5 \&{return};\C{ dvojity @ ignorovat }\2\6 \&{break};\6 \4${}\}{}$\2\6 @@ -1245,13 +1368,13 @@ ${}\\{mode}\K\.{VERBMODE};{}$\6 \4${}\}{}$\2\par \fi -\M{53}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{56}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{verbout}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 \&{if} ${}(\\{mode}\I\.{VERBMODE}){}$\1\5 \&{return};\2\6 -\&{if} ${}(\\{web}\W\\{buff}[\\{ind}-\T{2}]\E\.{'@'}\W\\{buff}[\\{ind}-\T{3}]\E% -\.{'@'}){}$\1\5 +\&{if} ${}(\\{web}\W\\{buffnz}[\\{inz}-\T{2}]\E\.{'@'}\W\\{buffnz}[\\{inz}-% +\T{3}]\E\.{'@'}){}$\1\5 \&{return};\2\6 ${}\\{mode}\K\\{prevmode};{}$\6 ${}\\{normallist}\MG\\{next}\K\\{prevlist};{}$\6 @@ -1270,16 +1393,16 @@ ${}\\{normallist}\K\\{listpatt}\K\\{vlnkalist};{}$\6 \4${}\}{}$\2\par \fi -\M{54}Nyní implementujeme vlastnost dříve používaného programu vlnka, tj. že +\M{57}Nyní implementujeme vlastnost dříve používaného programu vlnka, tj. že lze jeho činnost vypnout a opět zapnout v komentářích. Vytváříme druhý nezávislý seznam patternů a proto nejprve pronulujeme \PB{\\{lastpt}}. -\Y\B\4\X21:Inicializace datových struktur\X${}\mathrel+\E{}$\6 +\Y\B\4\X24:Inicializace datových struktur\X${}\mathrel+\E{}$\6 $\\{lastpt}\K\T{0};{}$\6 ${}\\{commentlist}\K\\{normalpattern}(\\{tieoff},\39\.{"\%.\~.-"});{}$\6 ${}\\{normalpattern}(\\{tieon},\39\.{"\%.\~.+"}){}$;\par \fi -\M{55}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 +\M{58}\B\X6:Pomocné funkce\X${}\mathrel+\E{}$\6 \&{static} \&{void} \\{tieoff}(\&{void})\1\1\2\2\6 ${}\{{}$\1\6 ${}\\{normallist}\K\NULL;{}$\6 @@ -1290,7 +1413,7 @@ ${}\\{normallist}\K\\{vlnkalist};{}$\6 \4${}\}{}$\2\par \fi -\M{56}Další plánovaná vylepšení. Program by mohl číst definici svého chování +\M{59}Další plánovaná vylepšení. Program by mohl číst definici svého chování nejen z~příkazové řádky, ale v~mnohem kompletnější podobě, včetně uživatelsky definovaných patternů, z komentářové oblasti ve čteném souboru. Parametry zde uvedené by mohly mít vyšší prioritu, než parametry @@ -1300,7 +1423,7 @@ písmena nemají být vázana vlnkou (zatím je implemenováno na pevno jen \fi -\N{1}{57}Rejstřík. +\N{1}{60}Rejstřík. \fi |