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