Laciné RE

2007-2008 - vbr
Provizorní skript pro víceřádkové nahrazování v PSPadu
Experimentální minimálně testovaná verze k použití jen na vlastní riziko.
Skript je zamýšlen jako "nízkonákladová" pracovní náhrada některých funkcí v PSPadu (zvláště při práci s víceřádkovými řetězci).
Alternativou s podobným účelem je phReplace s více funkcemi a přátelským uživatelským rozhraním - s podporou RE.
Skript vyžaduje verzi PSPadu alespoň 4.5.3 (minimálně betaverzi build 2262 či vyšší).
Použití je možné s aktivní podporou skriptování (PSPad :: Nastavení :: Nastavení programu :: Integrace do systému :: [x] Podpora skriptování pomocí WSH) po nakopírování do adresáře ...\PSPad\Script\JScript\ a zkompilování (Skripty :: Rekompilace skriptů).
(Přímo v kódu je možné v závěrečné funkci Init() upravit uspořádání menu nebo přenastavit klávesové zkratky (také v případě kolize s individuálním nastavením).

Vzhledem ke skriptovacímu rozhraní editoru je aktuálně bezproblémová pouze práce se znaky v rámci windows ANSI (podle systémového nastavení národního prostředí). - Ostatní znaky jsou náhradou ztrátově zaměněny za otazníky! - v takovém případě se zobrazuje varování a je vygenerována náhradní HTML verze zpracovaného textu (nebo vybrané části) s použitím číselných entit unicode jako kód webové stránky. Text lze vykopírovat po zobrazení náhledu (F10) nebo otevření v prohlížeči; je vhodném jím nahradit (patrně poškozený) upravený text.
Naposledy vložený text dialogu je zapamatován pouze v rámci daného spuštění editoru (resp. do rekompilování skriptů).

Skript neobsahuje validaci (kromě chybových hlášení systému při vzniklé chybě kompilace).
Ve všech funkcích je třeba zachovávat formát vstupu a zadávat bez uvozovek hledaný výraz mezi / / a nahrazovací výraz mezi " ". Flagy g (nezbytné pro nahrazení všech nálezů) a i (ignorování velikosti písma) případně gi se zadávají za hledaný text mezi / / ; zpětné lomítko \ je třeba předřadit před vlastní / resp. " pokud jsou součástí hledaného výrazu).

Dostupné funkce: (Poznámky:
Nelze přímo hledat ani nahrazovat unicode znaky mimo ANSI; je třebo použít literály zobrazené např. funkcí "literály unic. (výb.)". Znaky mimo národní znakovou sadu vložené přímo do dialogu jsou interpretovány jako otazníky - metaznak v RE!)

Obvyklé užití skriptu (pro ostatní funkce nahrazování jsou vhodnější standardní funkce PSPadu)
víceřádkové hledání a nahrazování
nahrazení konce řádky (newline) jiným textem - zpravidla "\r\n"
samostatné "\r" je za posledním (běžným) znakem dané řádky (pokud je přítomen konec řádky)
samostatné "\n" je před prvním znakem řádky (pokud předchází konec řádky)
nahrazení textu koncem řádky - pouze "\r\n" nebo "\n" nebo "\r"
libovolný znak včetně konce řádky např.: "(?:.|\n)" (".") zahrnuje "\r", ale ne "\n"
pro hledání libovolného znaku je vhodnější např. (?:[^\r]|(?:\r\n)) zamezující nálezu na rozhraní mezi \r a \n, pro libovolný znak kromě konce řádky je vhodnější [^\r\n] místo běžné tečky . zahrnující i \r
podpora tzv. lookahead assertions: pozitivní "(?=abc)" a negativní "(?!abc)" (tj. podmínky na (ne)následující text vůči předcházejícímu výrazu
podpora většího počtu uzávorkovaných částí výrazu (až 99 backreferencí)
místo nahrazovacího řetězce je možné zadat i anonymní funkci v javascriptu; např. výraz:
/-?[0-9]+(?:\.[0-9]+)*/g, function($0){return $0 - 7;}
odečte od všech čísel v textu 7; příp. výraz:
/([a-z])([0-9]+)([a-z])/g, function(match, paren1, paren2, paren3){ return paren1.toUpperCase() + paren2 + paren3;}
převede začáteční písmeno nalezeného výrazu na velké. (Jako parametry lze předat text celého nálezu - vždy - případně i obsahy podvýrazů v závorkách backreferencí, vždy v počtu, v jakém jsou použity; function($0,$1,$2,$3,...){...}; lze používat i vlastní názvy proměnných.)
jednoduchý výpis znaků a slov s volitelným nastavením výrazu pro požadované položky
nastavitelný posun kurzoru po hranicích slov (příp. s výběrem) (lze nastavit re výraz pro "slovo", mezislovní mezeru, případně kombinaci obojího; začátek a konec nálezu je vyhodnocen jako hranice slov)

Nevýhody (oproti vestavěným funkcím PSPadu případně oproti skriptu phReplace):
absence jednotného grafického uživatelského rozhraní (pouze jednotlivé prompty - maximální délka výrazu je 255 znaků)
z toho vyplývající velké množství položek menu a klávesových zkratek (lze editovat v kódu - sekce - Init)
znaky mimo ANSI jsou podporovány jen jako literály unicode (na vstupu) a HTML entity (na výstupu)
abcence validace vstupu (viz výše)
u delších textů můžou být některé funkce časově náročnější (statistika, výpis HTML kódu ...)


Kód ke stažení
Česká verze skriptu Laciné RE:
0.0.11 (10. 1. 2009) - re-repl-c.js (lze uložit kliknutím pravým tlačítkem myši a vybráním uložit cíl ...)
zazipovaný soubor: re-repl-c.zip
vyžaduje alespoň PSPad 4.5.3 (nejméně build 2262, beta)


Poor man's REplace

2007 - by vbr
A temporary rough "low cost" multiline replacement tool for PSPad (Freeware text editor)
An experimental version - not thoroughly tested! Meant as temporary rough "low cost" tool; without any warranty.
An alternative with similar focus is phReplace with more functions and with an user friendly interface - with partial support of RE.

The script requires a newer (version of PSPad at least 4.5.3 (2262 beta and above)

WSH must be enabled in PSPad in order to use scripts (Settings :: Program settings :: System integration :: [x] Integrated scripting support (WSH)). The file should be copied into ...\PSPad\Script\JScript\ and activated using (Scripts :: Recompile scripts).
Some settings can be changed in the Init() function in the source (e.g. menu order, labels and shortcuts).
In particular, the scripts work with ANSI characters only ! - in case, something went wrong, a warning is displayed but the text itself is corrupted !! Non ANSI characters are replaced with ?s. The suplementary HTML file consisting of unicode entities is created: This source is to be displayed as web page using the HTML preview in PSPad (F10) or a normal web browser. The text can be copied back into the editor window - the selection or the whole text respectively - replacing the probably corrupted parts.
The dialog fields are remembered only within each run of PSPad - or untill recompiling the scripts.

The tool doesn't contain any input validation (except of the builtin error messages indicating errors in compilation).
In particular the reReplace or RE search functions require an exact formated input - expression without quotes between slashes / / in the search pattern and between quotes " " in the replace pattern. Flags g (necessary for the global replacement of all matches), i (ignore case) or gi should be inserted after the searched expression / /. (slashes in the search pattern or quotes in the replace pattern must be escaped with a backslash \)

Available functions:
(Notes:
Unicode characters above the ANSI set cannot be used directly in search/replace; they have to be substituted with unicode literals returned e.g. by "unicode literals (sel.)". Such characters would be evaluated as questionmarks - a RE metacharacter!)

Usual uses of Poor man's REplace (for other replace tasks the standard functions of PSPad are more preferable)
multiline search and replace
replacing a newline with something - mostly using "\r\n"
a single "\r" matches after the last character of the line (if the newline is present)
a single "\n" matches before the first character of the line (if the newline preceedes)
replacing something with newline - "\r\n" or "\n" or "\r" in the replacement pattern
any character including newline e.g.: "(?:.|\n)" (".") matches "\r", but not "\n"
for searching any character e.g. (?:[^\r]|(?:\r\n)) may be better - preventing matches between \r and \n, for any character except newline: [^\r\n] rather than a simple dot . which also matches \r
support of the lookahead assertions: positive "(?=abc)" and negative "(?!abc)"
a simple word and character statistics with adjustable setting
support for up to 99 backreferences in the regular expression (also for replacements)
instead of the replacement string in quotes also an anonymous javascript function can be passed; e.g. the expression:
/-?[0-9]+(?:\.[0-9]+)*/g, function($0){return $0 - 7;}
subtracts 7 from all numbers of the text; or:
/([a-z])([0-9]+)([a-z])/g, function(match, paren1, paren2, paren3){ return paren1.toUpperCase() + paren2 + paren3;}
converts the first letter of the matched strings to uppercase.
the parameters of the function can be: the matched text (in all cases) and optionally the content of parenthesised subexpressions (in the respective number as used in the expression); function($0,$1,$2,$3,...){...} custom variable names are also possible)

Disadvantages of this tool (comparing to the built-in PSPad functions or phReplace):
no compact user iterface (except of the native script prompts - maximal length - 255 characters)
many single menu items and shortcuts (may be edited in the script - Init section)
non-ANSI characters are supported only via unicode literals (input) and HTML entities (output)
no input validation (see above)
for larger texts some functions (statistics, generating of HTML outputs) may need some time to finish


Download the script source:
English version of Poor man's REplace:
0.0.11 (10. 1. 2009) - re-repl-e.js (can be saved by right clicking and selecting Save as...)
zipped file: re-repl-e.zip
requires at least PSPad 4.5.3 (build 2262, beta and above)