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:
- "nahradit RE" - obecné nahrazení textu pomocí regul[éá]rních výrazů
- "nahradit ve všech otevřených oknech" - provede nahrazení v celém textu všech otevřených oken editoru
- "nahradit sekvenci" - vyhodnocení řady nahrazovacích výrazů podle zadaného (nastavitelného) separátoru
- "spojit řádky" - nahrazení "\r\n|\r|\n" zadaným oddělovačem
- "rozdělit řádky" - nahrazení zadaného oddělovače (RE) za "\n"
- "hledání RE" ("najít předchozí", "najít další", "počet nálezů", "výpis nálezů", "výpis nevyhovujících")
- "hranice slov" ("předchozí slovo", "další slovo", přesune kurzor na další hranici slov - na případně s výběrem textu; možnost nastavení reg. výrazu pro slovo, mezislovní mezeru, skupinu obojího ...)
- "kódy znaků (tab.)" - vytvoří zdrojový kód HTML s tabulkou znaků vstupního textu (výběr nebo celý text) - vlastní znak, literál unicode (hex.), decimální znakové entity HTML, hexadecimální znakové entity HTML
- "text stat" - jednoduché HTML výpisy statistiky textu - počet slov a znaků; řazení: abecedně, frekvenčně; vzestupně, sestupně; s případným převedením na malá písmena; nastavitelný re výraz pro "slovo" a "znak"
- "literály unic. (výb.)" - převede vybraný text na literály unicode - použitelné např. pro nahrazování funkcí "nahradit RE"
- "hex entity (výb.)" - převede vybraný text na hexadecimální znakové entity HTML
- "dec entity (výb.)" - převede vybraný text na decimální znakové entity HTML
- "text (výb.)" - zobrazí vybraný text jako prostý jednořádkový řetězec (jen ANSI)
- "eval" - vyhodnotí pomocí eval(); primárním vstupem je vybraný text; výsledek je vložen na pozici kurzoru a zvýrazněn výběrem (předtím vybraný text zůstává zachován)
- "ev. znaky - dec unic." - znak podle hodnoty unicode (decimální)
- "ev. zn. - dec unic. - řada" - zobrazí řadu znaků v zadaném intervalu hodnot unicode (decimální)
- "ev. řada čísel" - vytvoří číselnou řadu
- další funkce: vytvoření nového textového souboru (bez výběru formátu); vertikální posun kursoru při zachování nastaveného sloupce textu; kopírování do schránky s přidáním čísel řádků; duplikování tabu
(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:
- "reReplace" - general usage replace - evaluating the given pattern
- "replace all open windows" - performs simple re replacements in all open editors (whole texts)
- "sequence replace" - multiple re replacements - evaluating the supplied pattern list using the given (adjustable) separator
- "joinLines" - replacing "\r\n|\r|\n" with the given separator
- "splitLines" - replacing the given separator (RE) with "\n"
- "RE search" ("find previous", "find next", "count", "search - list", "list - excluded")
- "word boundaries" ("prev. word bound.", "next word bound.", sets the caret to the next word boundary, also in select-mode; - according to the given re pattern - "word", "non-word" or both)
- "character codes" - creates a HTML source file containing a table with character properties of the input text - character, unicode literal (hex.), unicode HTML entity (dec.), unicode HTML entity (hex.)
- "text stat" - provides simple text statistics (a HTML source file - tables) word and character count; sorting: alphabetically,numerically; ascending, descending; with an optional conversion to lower case; RE for "word" and "character" are adjustable
- "unicode literals (sel.)" - converts the selected text to unicode literals - usable eg. as an input for RE replacements using reReplace
- "hex entities (sel.)" - converts the selected text to hexadecimal character entities HTML
- "dec entities (sel.)" - converts the selected text to decimal character entities HTML
- "plain text (sel.)" - converts the selected text to a simple string (1 line - ANSI only)
- "eval" - evaluates the input via eval(); text selection is the default pattern; if not present, the last pattern is used; the result is inserted at the caret position and highlighted/selected (the previously selected text remains intact)
- "ev. fromCharCode" - returns character with a given charCode Value (decimal, unicode)
- "ev. charCode seq." - function for displaying characters within a given interval of charCodes Value (decimal, unicode)
- "ev. number seq." - returns a sequence of numbers
- additional functions: directly create an empty text file (without the format selection dialog); vertically moving the caret retaining the specified column position; copy to clipboard with added line numbers; tab duplication
(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)