Silna funkce Search & Replace
Josef Svoboda
xsvoj09 at vse.cz
Sat Nov 21 15:33:48 CET 1998
Dekuji vsem, kteri mi odepsali. Zajem mne velmi potesil. Ovsem
asi nektere z vas zklamu. Univerzalni konvertor, jak jsem program
ve sve pyse oznacil, z toho asi nebude -- na to se necitim.
Vsechno neprevede. Posudte sami mnozinu navrhovanych funkci
uvedenou nize.
V uvodnim prispevku jsem se dopustil chyby, kdyz jsem mluvil o
prevodu mezi strukturovanymi jazyky. Mel jsem skromneji rici
,strukturovany zapis`. Chci svuj program orientovat predevsim na
uzivatele neprogramatory,* jichz je mezi TeXisty snad taky dost.
-----------------
* Nebudu popirat, ze ten program delam predevsim pro sebe. Kdyz
delam korekturu textu, stavam se taky ,neprogramatorem`. Nechci
prerusovat praci, abych si napsal jednoucelovy program. Citelne
mi chybel nastroj, ktery by zvladl takove ukoly jako napr.
sjednotit malo strukturovany zpusob zapisu, jehoz ukazky
prikladam na konci.
-----------------
Program budu vyvijet v DOSu v C, mam kompilator Turbo C. Budu se
snazit, aby byl prenositelny, ale nemam v tomhle smeru
zkusenosti. (Je mi v DOSu stale jeste nejpohodlneji, i kdyz
trochu tesno. :) )
Nyni uvedu zamyslene
Podporovane funkce (co je s hvezdickou, je az ve druhe vlne
kandidatu :) )
------------------
Znaky
-----
- Znak uvozujici prikazy \
- Znak pro zapsani \ \\
Zakladni
--------
- Znak urceny ASCII hodnotou
desitkovy zaklad \013 -- povinne triznakovy
sestnactkovy zaklad \x0D
- Znak oddelujici cast ,search` od casti ,replace`
\-
- Znak uvozujici hlavicku a zaver tabulky
\TABLE \TABLEEND \TABLESUB
,Masky` podle grepu:
--------------------
- Negace \[!a]
- Alternativa \[ab]
- Interval \[a-z]
- Slouceni dvou intervalu \[a-zA-Z]
- Negace alternativy \[! \013]
- Negace intervalu \[!a-zA-Z]
,Masky` podle grepu a joe:
--------------------------
- zadny znak \@
- jeden jakykoli znak \.
(jeste nevim, zda se funkce ,zmnozujici` urcity znak
budou uvadet pred znakem, nebo za znakem)
- nulkrat nebo vicekrat urcity znak \*
- nulkrat nebo jednou urcity znak \?
(nasledujici 2 funkce jsou redundantni)
- jednou nebo vicekrat urcity znak \+
- nulkrat nebo vicekrat kterykoli znak
* zavorkovany vyraz v zavorkach \( \)
predchozi funkce by byly schopne pracovat s celym timto retezcem
misto
s pouhym jednim znakem
,Masky` podle grepu a joe, v nichz je nutno osetrit zacatek/konec
souboru:
----------------------------------------------------------------------
----
* zacatek radky \^
* konec radky \$
* zacatek slova \<
* konec slova \>
Nahrazovaci sekvence podle joe:
-------------------------------
- cela cast ,search` \&
- n-ta maska v casti ,search` \0 .. \9
* ,Makra`
-------
- libovolna desitkova cislice \#
Nasledujici vyzaduje definici pismen a paru male/velke [v hlavicce
tabulky]
- libovolne pismeno
- male pismeno \a
- velke pismeno \A
- prevedeni na mala, na velka, zamena
- prepinac case sensitive/insensitive
- whitespace \w
- newline jako \[\@\x0D]\x0A (alternativa retezcu 0D0A a 0A)
- newline podle konvenci OS, pro ktery byl program zkompilovan
ktery z nich? (nebo snad oba?)
* ,Advanced` funkce
-----------------
- prazdny prikaz
- komentar
- nemen retezec, jen najdi
- zjisteni radky, sloupce ve zpracovavanem souboru
- zapis do logoveho souboru [otevreni souboru v hlavicce]
- vypis poctu provedenych zamen
- omezeni poctu provedenych zamen
- prevod retezce na cislo (ord <-> chr)
- manipulace s cisly (pricteni konstanty)
- prikaz ,proved na zacatku souboru` [definice v hlavicce]
- prikaz ,proved na konci souboru` [definice v hlavicce]
- vstup/vystup pravidel ve formatu, v nemz jsou ulozeny v pameti
* Mody
------
- prepinani dlouheho/kratkeho zapisu [v hlavicce]
(dlouhy je standardni, v kratkem zapisu by se
misto \* \+ \[ psalo * + [ )
- mod automaticke interpretace mezer v casti ,search` jako whitespace
- mod otevreni souboru binarne/textove [v hlavicce]
- moznost volby postupu pri prekryvani nalezenych retezcu:
1. (standardni) ,cisty stul` -- kdyz naleznes a nahradis retezec,
vynuluj vsechny ostatni castecne nalezene retezce.
2. ,zeru praci` -- jako 1., ale opakuj zpracovani souboru dokolecka,
dokud se v nem da neco nahradit. Prip. s omezenim poctu pruchodu.
3. ,nic se nestalo` -- nic nenuluj. Vypada nesmyslne, ale je
jednoducha na implementaci a treba ji nekdo chytre vyuzije.
* Nasledujici funkce davaji urcite moznosti programovani:
---------------------------------------------------------
- blokace/odblokovani urciteho pravidla
- prepinani podtabulek
* Funkce na prikazove radce:
--------------------------
- nacteni jedineho pravidla ze std. vstupu
- soubory zadane maskou
Priklad: sjednoceni malo strukturovaneho zapisu
-----------------------------------------------
zmenit
\leftline {\varstrut \bigbf 80 \rm (resena varianta)}%A 09
\upo ...
\leftline {\varstrut \bigbf 81} %A 10
\upo ...
\leftline {\varstrut \bigbf 82}%A 54
\upo ...
na
\varianta 80 \par ...
\varianta 81 \par ...
\variantaR 82 \par ...
nebo sjednotit na neco rozumneho ruzne mezery okolo interpunkce
\quad\,\quad \,,\ \, , \ \,,\; \,, \; \;,\; \,,\<CR>
nebo ve vysazenem mat. rezimu
,\\ zmenit na \,,\\
, \\
. \endalign zmenit na \,.\endalign
nebo \quad \Rightarrow \quad (s moznymi radkovymi zlomy v mezerach)
zmenit na \iff.
* Josef Svoboda -- student FIS VSE *
* mailto: xsvoj09 at vse.cz *
More information about the csTeX
mailing list