sobota 1. července 2023

transliterate.js Manuál ke skriptu Charles Lodera

1. Krátký přehled objektů

Tyto splitovací funkce Charles Lodera, které jsem modifikoval, jsou důležité, protože nejprve musí dojít k rozdělení veškerého textu na hebrejské slova a na zakomentované části. Tyto funkce nejsou součástí webpacku. Splitování slov se provádí ve funkci transliterate() kde výsledkem je pole array.


Přehled objektů uložených pod indexy 1 až 10, 43 a 44:

Krátký přehled objektů:
  • Index 0: funkce sequence (odkaz na 2. díl manuálu)

    • Načte se funkce sequence ř. (#111)
    • volá se anonymní funkce události onclick() -> transliterate() -> sequence()
     // sequence():
    /***/ 0:
    /***/ (function(module, options, exports) {

    /***
     * @param {string} text - sequences the text according to SBL Hebrew Font manual
     * @returns {string}
     */

    module.exports = text => {    
        let splits = /(?=[\u05D0-\u05F2, \uFB20-\uFB4F])/;
        let consonants = /[\u05D0-\u05F2, \uFB20-\uFB4F]/;
        let ligature = /[\u05C1-\u05C2]/;
        let dagesh = /[\u05BC, \u05BF]/; // includes rafe
        let vowels = /[\u05B0-\u05BB, \u05C7]/;
        let accents = /[\u0590-\u05AF, \u05BD-\u05BE, \u05C0, \u05C3]/;
        // console.log(text.split(splits));
        return text.split(splits).map(e => {           
              if ( comments.checked )
                if ( e.charAt(0)=='{' )
                   return e;
              return e.splitSecond().sort((a,b) => {
                // since the str is split at consonants, the first a is always const, thus never flip             
                 if(consonants.test(a) ) {return 0}
                 // if a is anything except a consonant and b is a ligature, then flip
                 if(!consonants.test(a) && ligature.test(b)){return 1}
                 if(vowels.test(a) && dagesh.test(b)) {return 1}
                 if(accents.test(a) && dagesh.test(b)) {return 1}
            }).join('');

          }).join('');
    }

    split('') rozdělí slovo na písmena, pak dojde k přemapování pomocí map, které má definovanou vlastní funkci, při které, pokud nejde o komentář, dojde k provedení "třídění" podle definované funkce sort. Zdá se, že javascript narozdíl od bashe a awk neumí načíst hebrejský řetězec ve směru sleva doprava a tak sort() má změnit směr písmen. Zohledňuje přítomnost ligarur, tedy dagešů a teček za šin, které byly přepsány do latinky jako dvouznaková forma: znak+číslice.

  • Index 1: JQuery

    • Načtení knihovny JQuery.
  • Index 2: funkce heb()

    • Funkce heb() exportuje několik funkcí, včetně transliterate, sequence a remove. Tyto funkce slouží k převodu hebrejských znaků na latinské znaky, sekvencování textu a odstranění určitých prvků ze vstupního textu.

    Index 3: funkce transliterate()

    • Funkce transliterate() slouží k převodu hebrejských znaků na latinské znaky. Přebírá vstupní text a volitelné konfigurační možnosti, rozplituje text na slova, provede analýzu a záměnu slov pomocí testEach() a vrací převedený text.
  • Index 4: funkce titForTat()

    • Funkce titForTat() nahrazuje hebrejské znaky latinkou ve stylu "tit-for-tat". Přebírá vstupní text a vrací text, ve kterém byly hebrejské znaky nahrazeny příslušnými latinskými znaky.
  • Index 5: objekt mapy hebChars

    • Funkce hebChars obsahuje pole - mapu znaků, která popisuje, jak se mají měnit hebrejské znaky na latinku.
  • Index 6: funkce testEach

    • Funkce testEach provádí testování na každém slově v poli. Přijímá pole slov a volitelné konfigurační možnosti a vrací výsledek testu pro každé slovo.
  • Index 7: funkce changeElementSplit()

    • Funkce changeElementSplit() je alias pro changeElementSubstr(). Přebírá vstupní text, oddělovač a nový prvek. Následně provádí rozdělení textu pomocí zadaného oddělovače a nahrazuje prvek na daném indexu za nový prvek.
  • Index 8: funkce remove

    • Funkce je zavedena ihned po spuštění programu funkcí heb().
    • Funkce remove slouží k odstranění určitých prvků ze vstupního textu. Přebírá vstupní text a volitelné konfigurační možnosti a vrací text bez odstraněných prvků.
    • Tato funkce slouží k nahrazování hebrejských znaků v textu odpovídajícími latinskými znaky na základě určeného mapování. Volitelný parametr options umožňuje specifikovat další nastavení, jako například odstranění samohlásek.
  • Index 9: pole s kantilací hebCharsRC

    • Pole hebCharsRC obsahuje kantilaci hebrejských znaků v podobě mapy znaků. Toto pole je používáno v rámci skriptu pro kantilaci.
  • Index 10: pole s kantilací hebCharsRV

    • Pole hebCharsRV obsahuje kantilaci hebrejských znaků bez samohlásek v podobě mapy znaků. Toto pole je používáno v rámci skriptu pro kantilaci.
  • Index 43: funkce pro modul

    • Funkce pod indexem 43 slouží k vyžádání modulu s indexem 44. Jejím účelem je získat příslušný modul pro konfiguraci skriptu.
  • Index 44: konfigurace a event listener

    • Funkce se zavede jako událost do knihovny jQuery a je spouštěna v reakci na kliknutí uživatele na tlačítko.
    • Funkce pod indexem 44 slouží k přípravě konfigurace skriptu. Tato funkce je vyžadována funkcí pod indexem 43 pro získání konfiguračních informací.

2. Krátký přehled volání

Přehled volání funkcí v rámci programu:

  1. Začátek programu
  2. Volání funkce heb()
    • Funkce heb() načte potřebné moduly (včetně transliterate, sequence, a remove) a exportuje je.
    • Není zde žádné volání dalších funkcí.
  3.  Zavedení události do knihovny jQuery
    • Funkce se zavede jako událost do knihovny jQuery.
    • Událost je spouštěna v reakci na kliknutí uživatele na tlačítko.
    • Tímto způsobem se umožní spuštění programu po kliknutí na tlačítko.
  4. Obslužná funkce události (kliknutí na tlačítko, spustí se fnc index )
    • Funkce přijímá vstupní parametry a provádí následující operace:
    • Načte hodnoty různých prvků na stránce (qametsQatan, hebText, hashem, uppercase_tet, remove_border_alef, uppercase, comments, alphanum, wawholem, lang).
    • Volá funkci transliterate() s předanými parametry (hebText, qametsQatan, lang, uppercase_tet, remove_border_alef, wawholem, uppercase, comments, alphanum).
    • Zobrazuje převedený text ve výstupním poli: $('#output').val(transText).
  5. Podmíněné volání funkcí text.splitAndReplaceBraces() a následně newSeq = sequence(modifiedText, options) z funkce transliterate()
  6. Volání funkce titForTat() z funkce transliterate() na ř. #2010 -> #2025
    • Funkce titForTat() nahradí znaky za latinku.
    • Nahrazuje hebrejské znaky latinkou ve stylu "tit-for-tat".
    • Vrací text v latince.
  7. Volání funce .split(' ') nebo .splitFirst(' ') a výsledekem je pole array.
  8. Volání funkce testEach z funkce transliterate()
    • Po provedení .split řetězce v latince se provede testEach(array, options)
  9. Volání dalších pomocných funkcí (pokud je používají)
    • Funkce remove, hebChars, hebCharsRC, hebCharsRV, atd.
    • Tyto funkce provádějí další operace, jako testování slov, sekvencování textu, odstraňování prvků a definování mapy znaků pro převod.
  10. Konec programu

Toto je zjednodušený přehled volání funkcí v rámci programu. Skutečný call stack a postup volání funkcí může být komplexnější v závislosti na způsobu použití a interakcí mezi funkcemi.

3. Podrobnější přehled volání funkcí v rámci programu:

  1. Začátek programu
  2. Načtení modulu s indexem 2 (heb())
    • Exportované funkce: transliterate, sequence, remove
    • Není zde žádné volání dalších funkcí.
  3. Načtení modulu s indexem 3 (transliterate())
    • Exportovaná funkce transliterate
    • Proměnné:
      • newSeq
      • modifiedText
      • titTat (výsledek volání funkce titForTat(newSeq))
      • array (jednotlivá slova v latince)
      • modArray (výsledek volání funkce testEach(array, options))
      • transliteration (výsledek volání modArray.join(' ') pro spojení transliterovaných slov do řetězce)
    • Funkce transliterate() vrací proměnnou transliteration.
    • Provádí přípravu proměnných a konstant a provádí převod hebrejských znaků na latinské znaky.
    • Pokud jsou v textu přítomny komentáře nebo čísla, odstraňuje z textu složené závorky.
  4. Načtení modulu s indexem 4 (titForTat)
    • Exportovaná funkce titForTat
    • Proměnná hebChars (obsahuje mapu znaků pro převod hebrejských znaků na latinské znaky ve stylu "tit-for-tat")
    • Funkce titForTat() nahrazuje hebrejské znaky v textu latinskými znaky podle mapy hebChars.
  5. Načtení modulu s indexem 6 (testEach)
    • Exportovaná funkce testEach
    • Další operace prováděné touto funkcí pro testování slov.
  6. Načtení modulu s indexem 8 (hebChars)
    • Exportované proměnné hebCharsRC (pole s kantilací) a hebCharsRV (pole s kantilací bez samohlásek).
  7. Načtení modulu s indexem 7 (changeElementSplit)
    • Exportované funkce:
      • changeElementSplit - provádí změnu prvků v řetězci nahrazením daného oddělovače
      • changeElementSubstr - provádí změnu prvku v řetězci na zadaném indexu nahrazením znaku
  8. Načtení modulu s indexem 9 (hebcharsRC)
    • Exportované pole s kantilací hebcharsRC
  9. Načtení modulu s indexem 10 (hebcharsRV)
    • Exportované pole s kantilací bez samohlásek hebcharsRV
  10. Načtení modulu s indexem 43
  • Další modul, který není zde podrobně popsán.
  1. Načtení modulu s indexem 44
  • Obslužná funkce události (kliknutí na tlačítko)
  • Funkce přijímá vstupní parametry a provádí následující operace:
    • Načte hodnoty různých prvků na stránce (qametsQatan, hebText, hashem, uppercase_tet, remove_border_alef, uppercase, comments, alphanum, wawholem, lang).
    • Volá funkci transliterate() s předanými parametry (hebText, qametsQatan, lang, uppercase_tet, remove_border_alef, wawholem, uppercase, comments, alphanum).
    • Zobrazuje převedený text ve výstupním poli: $('#output').val(transText).
  1. Konec programu

Toto je podrobnější přehled volání funkcí a načítání modulů v rámci programu.

Cesta volání funkcí

  1. Index 3: funkce transliterate()

    • Call path: heb() -> transliterate() -> titForTat()
  2. Index 4: funkce titForTat()

    • Call path: transliterate() -> titForTat()

Více detailů

transliterate()

Tento kód definuje funkci transliterate, která přijímá text a volitelné možnosti jako parametry. Funkce provádí transliteraci textu z hebrejštiny do latinky. Zde je přehled možností, které mohou být předány funkcí:

  • isSeqeunced (výchozí hodnota: true): Pokud je nastaveno na true, funkce sekvencuje text podle manuálu pro písmo SBL Hebrew Font.
  • qametsQatan (výchozí hodnota: false): Kontroluje přítomnost Qamets Qatan (specifického znaku v hebrejštině).
  • lang (výchozí hodnota: lang): Specifikuje cílový jazyk transliterace.
  • uppercase_tet (výchozí hodnota: true): Rozlišuje mezi znaky thav (t) a tet (T).
  • remove_border_alef (výchozí hodnota: remove_border_alef): Odstraňuje mezery na okraji znaku alef.
  • wawholem (výchozí hodnota: wawholem): Nastavuje specifické chování pro kombinaci znaků "waw" a "holem".
  • uppercase (výchozí hodnota: true): Rozlišuje nepodporované znaky pro německý, francouzský a španělský jazyk.
  • comments (výchozí hodnota: true): Používá složené závorky k vynechání alfanumerických znaků.
  • alphanum (výchozí hodnota: true): Automaticky přidává a odebírá složené závorky pro účely komentářů.

V kódu se také objevuje volání funkcí sequence, titForTat a testEach, které jsou pravděpodobně importovány z jiných modulů.

Při zavolání funkce transliterate se provádí transliterace textu z hebrejštiny na latinku titTat = titForTat(newSeq), přičemž se uplatňují nastavené možnosti. Funkce vrací výslednou transliteraci textu. Následně se volá titTat.split nebo titTat.splitFirst, které rozdělí text latinky na slova. Nakonec se provedou testy a záměny pomocí funkce testEach(pole array, objekt options). Výsledkem je modArray.

titForTat()       #2025

Tento kód definuje funkci titForTat, která nahrazuje hebrejské znaky latinskými znaky v tit-for-tat (jeden za jeden) způsobem. Funkce přijímá text jako vstup a vrací text s nahrazenými znaky.

Kód provádí import modulu hebChars, který obsahuje mapování mezi hebrejskými a latinskými znaky

Existují dvě verze implementace funkce titForTat. První verze (zastaralá) je zakomentována a používá regulární výraz pro nahrazení znaků. Druhá (aktuální) verze používá metodu map pro každý znak textu a provádí nahrazení pomocí objektu hebChars. Výsledek je pak spojen zpět do jednoho řetězce pomocí metody reduce.

Kód nahrazuje hebrejské znaky v textu pomocí mapování RC nebo hebCharsRV v závislosti na nastavení přepínače options.removeVowels. Pokud je options.removeVowels nastaveno na false, používá se mapování RC, jinak se používá mapování hebCharsRV. Nahrazení se provádí pomocí metody replace() a regulárních výrazů.

V kódu [...text] tři tečky představují rozložení textu na jednotlivé znaky pomocí operátoru rozložení (spread operator). Tento operátor umožňuje rozložit iterovatelný objekt, jako je řetězec, pole nebo jiná kolekce, na jednotlivé prvky.

V kontextu kódu titForTat, [...text] rozloží vstupní text na jednotlivé znaky a vytvoří z nich pole. Tím se umožní aplikovat operace na každý znak zvlášť, jako je například kontrola, zda je znak přítomen v mapování hebChars a případné nahrazení.

Následně je použita metoda map() na tomto poli znaků. Metoda map() iteruje přes každý prvek pole a aplikuje na něj danou funkci. V případě titForTat je funkce zapsána jako char => char in hebChars ? hebChars[char] : char. Tato funkce zkontroluje, zda je znak přítomen v mapování hebChars. Pokud ano, použije odpovídající nahrazení z hebChars, jinak ponechá znak beze změny.

Celkově tedy [...text].map(char => char in hebChars ? hebChars[char] : char) aplikuje operaci na každý znak vstupního textu, který je rozložen na pole. Následně je výsledek těchto operací uložen ve formě nového pole, které obsahuje nahrazené znaky.

* * *

[titForTat] využívá tu funkci (#2723, index funkce: 8)

module.exports = (text, options = {'removeVowels':false}) => {
    if (!options.removeVowels) {
        return text.replace(/[\u0591-\u05F4, \uFB1D-\uFB4F]/g, i =>     RC[i]);
    } else {
        return text.replace(/[\u0591-\u05F4, \uFB1D-\uFB4F]/g, i => hebCharsRV[i]);
    }
}

* * * 
Staré využití:

Funkce indexu 43

Tento kód je relativně jednoduchý. Definuje modul, který exportuje výsledek zavolání funkce __webpack_require__(44).

Modul __webpack_require__ je součástí systému sestavování modulů Webpack. Tento systém slouží k sestavení a balení JavaScriptových modulů do jediného souboru pro použití ve webových aplikacích.

Funkce s indexem 44 - konfigurace

Kód, je částí upraveného modulu, není součástí původního kodu Charles Lodera, je to modifikovaná verze. Exportuje jednu funkci. Zde je popis jednotlivých částí kódu:

  • var $ = __webpack_require__(1);: Importuje modul $ (pravděpodobně knihovnu jQuery) ze závislosti s identifikátorem 1.
  • var heb = __webpack_require__(2);: Importuje modul heb ze závislosti s identifikátorem 2.
  • var transliterate = heb.transliterate;: Přiřazuje funkci transliterate z modulu heb do proměnné transliterate.

Následuje event listener #2058 $('#input_button').click(function () {}); $('#input_button').click() pro kliknutí na prvek s ID input_button. Když se stane kliknutí, spustí se anonymní funkce:

  • var qametsQatan = $('#qametsQatan').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID qametsQatan a uloží ji do proměnné qametsQatan.
  • var hebText = $('#input').val();: Získá hodnotu vstupního pole s ID input a uloží ji do proměnné hebText.
  • var hashem = $('#hashem').val();: Získá hodnotu prvku s ID hashem a uloží ji do proměnné hashem.
  • var uppercase_tet = $('#uppercase_tet').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID uppercase_tet a uloží ji do proměnné uppercase_tet.
  • var remove_border_alef = $('#remove_alef').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID remove_alef a uloží ji do proměnné remove_border_alef.
  • var uppercase = $('#uppercase').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID uppercase a uloží ji do proměnné uppercase.
  • var comments = $('#comments').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID comments a uloží ji do proměnné comments.
  • var alphanum = $('#alphanum').prop('checked');: Získá hodnotu vlastnosti checked prvku s ID alphanum a uloží ji do proměnné alphanum.
  • var wawholem = 0;: Inicializuje proměnnou wawholem s hodnotou 0.
  • Podmínky pro nastavení hodnoty proměnné wawholem na základě stavu příslušných prvků s ID wawholem2 a wawholem3.
  • var lang = 0;: Inicializuje proměnnou lang s hodnotou 0.
  • Podmínky pro nastavení hodnoty proměnné lang na základě stavu příslušných prvků s ID lang2, lang3, lang4, lang5 a lang6.
  • var transText = transliterate(hebText, { 'isSeqeunced': true, 'qametsQatan': qametsQatan, 'lang': lang, 'uppercase_tet': uppercase_tet, 'remove_border_alef': remove_border_alef, 'wawholem': wawholem, 'uppercase': uppercase, 'comments': comments, 'alphanum': alphanum });: Volá funkci transliterate s předanými parametry a uloží její návratovou hodnotu do proměnné transText.
  • $('#output').val(transText);: Nastavuje hodnotu výstupního pole s ID output na hodnotu transText.

Celý kód je svázán s událostí kliknutí na prvek s ID input_button a provádí transliteraci textu na základě zadaných voleb. Výsledný text je pak zobrazen ve výstupním poli s ID output.

hebChars

hebChars je objekt (mapa) obsahující mapování hebrejských znaků na odpovídající latinské znaky. Toto mapování slouží jako základní sada pravidel pro nahrazení hebrejských znaků odpovídajícími latinskými znaky při transliteraci hebrejského textu.

Kód exportuje objekt obsahující mapování hebrejských znaků na odpovídající latinské znaky.

  • Objekt obsahuje klíče a hodnoty, kde klíče jsou hebrejské znaky a hodnoty jsou odpovídající latinské znaky.
  • Například 'ב':'b' znamená, že hebrejský znak bet (ב) je nahrazen latinským znakem b.
  • Mapování obsahuje jak jednotlivé znaky, tak i ligatury a kombinace znaků, které se v hebrejštině používají.
  • V kódu jsou také komentáře s popisem jednotlivých hebrejských znaků.

Uvnitř funkce titForTat se pracuje s mapou hebChars takto:

titForTat: text => [...text].map(char => char in hebChars ? hebChars[char] : char) .reduce((a, c) => a + c) })

Nahrazuje hebrejské znaky v textu odpovídajícími latinskými znaky na základě mapování definovaného v objektu hebChars.

  1. text => [...text] převede vstupní text na pole jednotlivých znaků. Tím se text rozdělí na samostatné znaky, které mohou být zpracovány nezávisle.

  2. .map(char => char in hebChars ? hebChars[char] : char) prochází každý znak v poli a používá ternární operátor pro zjištění, zda je znak obsažen v objektu hebChars. Pokud je znak v mapování, použije se odpovídající latinský znak z hebChars, jinak se ponechá původní znak.

  3. .reduce((a, c) => a + c) sloučí všechny znaky zpět do jednoho řetězce. Tím se získá konečný výsledek nahrazeného textu.

 

testEach() - transformace

Funkce testEach hraje klíčovou roli, protože slouží k testování a transformaci různých sekvencí znaků v poli array. Jejím úkolem je iterovat přes všechny prvky pole a aplikovat na ně testy a transformace.

Funkce testEach přijímá několik parametrů, včetně pole array, ve kterém jsou uloženy prvky, které mají být testovány a transformovány. Další parametry jsou v podobě funkcí, které provádějí konkrétní testy a transformace na jednotlivých prvcích.

Ve funkci testEach se postupně aplikují různé testy a transformace na jednotlivé prvky pole array. Jednou z funkcí, kterou funkce testEach využívá, je changeElementSplit() (alias changeElementSubstr()), která přijímá vstupní řetězec, rozdělovač a spojovací řetězec. Tato funkce provede transformaci prvku pole array pomocí rozdělení vstupního řetězce na části na základě rozdělovače a následném spojení těchto částí s použitím spojovacího řetězce.

Celkově řečeno, funkce testEach je odpovědná za provedení různých testů a transformací na prvky pole array, včetně použití funkce changeElementSplit(), aby dosáhla požadovaných změn v jednotlivých prvcích pole.

Funkce testEach() je definována jako anonymní funkce, která bere dva parametry: array a options. Tato funkce používá několik podfunkcí, které jsou importovány ze souboru s cestou __webpack_require__(7).

V této funkci je provedeno několik testů a transformací na každý prvek pole array. Zde je stručný přehled těchto testů a transformací:

  1. Pro každý prvek element v poli array:

    • Pokud element obsahuje znak 'p', je provedena transformace pomocí funkce changeElementSplit(), která nahrazuje 'p' za 'f'.
    • Pokud element obsahuje znak 'k', je provedena transformace pomocí funkce changeElementSplit(), která nahrazuje 'k' za '[kh]'.
    • Pokud je zapnutý přepínač comments nebo alphanum a element začíná '{', je přerušena iterace a přejde se na další prvek.
  2. Testy na jednotlivé znaky:

    • Testuje se výskyt znaku '8' (shin-dot), a pokud je nalezen, je provedena transformace pomocí funkce changeElementSplit(), která odstraní tento znak.
    • Testuje se výskyt znaku '7' (sin-dot), a pokud je nalezen, je provedena transformace pomocí funkce changeElementSplit(), která tento znak nahradí za 's'.
    • Testuje se výskyt sekvencí 'iy' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'iy' nahradí za 'í'.
    • Testuje se výskyt sekvencí 'éy' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'éy' nahradí za 'é'.
    • Testuje se výskyt sekvencí 'ey' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'ey' nahradí za 'é'.
    • Testuje se výskyt sekvencí 'wó' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'wó' nahradí za 'ó'. Dále se testuje, zda je tento znak součástí slova, které končí na 'w', a pokud je nalezena shoda, je provedena další transformace pomocí changeElementSplit(), která 'wó' nahradí za 'ô'.
    • Testuje se výskyt sekvencí 'ów' (nebo 'ôw') následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'ów' (nebo 'ôw') nahradí za 'ů'.

     

    1. Další testy a transformace:

      • Testuje se výskyt sekvencí 'sh' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'sh' nahradí za 'š'.
      • Testuje se výskyt sekvencí 'ch' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'ch' nahradí za 'č'.
      • Testuje se výskyt sekvencí 'gh' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'gh' nahradí za 'ǧ'.
      • Testuje se výskyt sekvencí 'ng' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'ng' nahradí za 'ŋ'.
      • Testuje se výskyt sekvencí 'th' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'th' nahradí za 'θ'.
      • Testuje se výskyt sekvencí 'ph' následovaných některými znaky, a pokud je nalezena shoda, je provedena transformace pomocí funkce changeElementSplit(), která 'ph' nahradí za 'φ'.
    2. Testy a transformace pro čísla:

      • Pokud je zapnutý přepínač comments nebo alphanum a element začíná '{', je přerušena iterace a přejde se na další prvek.
      • Testuje se výskyt znaků '0' až '9' a pokud je nějaké číslo nalezeno, je provedena transformace pomocí funkce changeElementSplit(), která odstraní tato čísla.

    Na konci funkce je vráceno pole array, které prošlo všemi testy a transformacemi.

changeElementSplit()

Funkce changeElementSplit() (alias changeElementSubstr()) v rámci celého programu slouží k transformaci vstupního řetězce. Tato funkce umožňuje rozdělit řetězec na části na základě specifikovaného rozdělovače a následně tyto části spojit pomocí spojovacího řetězce.

Pomocí funkce changeElementSplit() je možné provádět různé úpravy řetězců, například nahrazení určitého podřetězce jiným podřetězcem nebo rozdělení řetězce na části a jejich přeformátování. Tímto způsobem může být dosaženo požadovaného výsledku transformace řetězce.

Funkce changeElementSplit() (alias changeElementSubstr()) je součástí objektu, který je exportován modulem. Tato funkce slouží k transformaci vstupního řetězce input pomocí rozdělení řetězce na části na základě specifikovaného rozdělovače (split) a následném spojení těchto částí s použitím spojovacího řetězce (join).

Funkce changeElementSplit() má následující parametry:

  • input: Řetězec, který má být transformován.
  • split: Řetězec, který slouží jako rozdělovač. Řetězec input je rozdělen na části na místech, kde se vyskytuje tento rozdělovač.
  • join: Řetězec, který slouží jako spojovací prvek. Rozdělené části řetězce input jsou spojeny za použití tohoto spojovacího řetězce.

Funkce changeElementSplit() používá metody split() a join() nad řetězcem input, které jsou vestavěné funkcionality v jazyce JavaScript. Metoda split() rozdělí řetězec na části na základě zadaného rozdělovače a vrátí pole obsahující tyto části. Metoda join() spojí prvky pole do jednoho řetězce, přičemž odděluje jednotlivé prvky spojovacím řetězcem.

Je také důležité zmínit, že funkce changeElementSplit() je také dostupná pod alternativním názvem changeElementSubstr(), což je zřejmě záměrné, aby byla zajištěna kompatibilita s jiným kódem nebo pro jednodušší použití v různých scénářích.

Remove()

Kód, který jste poskytl (kód č. 8), se zabývá odstraněním kantilace. Funkce remove() je exportována a slouží k odstranění kantilačních značek z textu.

Funkce remove() přijímá dva parametry: text a volitelný objekt options. text je vstupní text, ze kterého se mají odstranit kantilační značky. options je objekt s možnostmi, přičemž jedna z možností je removeVowels, která určuje, zda se mají odstranit také samohlásky spolu s kantilačními značkami (výchozí hodnota je false).

Samotná funkce provádí náhradu kantilačních značek v textu pomocí regulárního výrazu a funkce zvané replace(). V závislosti na hodnotě removeVowels jsou použity různé mapovací tabulky (hebCharsRC nebo hebCharsRV), které obsahují přepisy znaků s kantilačními značkami. Tímto způsobem jsou kantilační značky nahrazeny odpovídajícími znaky bez kantilace.

Celkově lze tedy říci, že role funkce remove() je odstranit kantilační značky z textu a případně i samohlásky, pokud je taková možnost aktivována volbou removeVowels.

hebCharsRC()

Funkce hebCharsRC() je modul, který exportuje objekt obsahující mapování mezi kantilačními znaky a jejich odpovídajícími znaky bez kantilace. Tento objekt je použit v rámci funkce remove(), která je definována v kódu č. 8.

V rámci funkce remove() se volá metoda replace() na vstupním textu. Regulární výraz /[\u0591-\u05F4, \uFB1D-\uFB4F]/g vyhledává všechny kantilační znaky ve vstupním textu. Pokud volba options.removeVowels není nastavena na true, používá se objekt hebCharsRC (který je vytvořený funkcí hebCharsRC()) k nahrazení těchto znaků odpovídajícími znaky bez kantilace. Pokud je volba options.removeVowels nastavena na true, používá se objekt hebCharsRV (který nebyl v kódu uveden) k nahrazení kantilačních znaků a také samotných samohlásek.

Takže funkce hebCharsRC() poskytuje mapování mezi kantilačními znaky a odpovídajícími znaky bez kantilace, které je používáno ve funkci remove() k odstranění kantilace z textu.

Žádné komentáře:

Okomentovat

Jak zkopírovat styly jako font a odstavec v LibreOffice Write?

V dokumentu Write píšu CV. Někde uprostřed mám nadpisy a chci zkopírovat jeden nadpis v četně stylů a vložit ho jinde. Když použiju např ct...

Štítky

.profile adm AI alfa transparence AND any aplikace asociativní pole atomicity audio awk bash benchmark bezpečnost biblehub BJT boolean buffering Cache-Conrol Cloudflare code Collector Cut-off colorpicker compare cookies css CSS3 curl cut čas data loss data lost data transfer reliability datasheet datetime.strptime development dioda diody EBO Emitter Cut-off Current ETag exclude exec Expires fflock fflush ffmpeg file read file write file_get_contents file_get_contents/file_put_contents file_put_contents filter find first_install.sh flock Fly-back dioda font-face fóra fotorezistor fread functions funkce fwrite gate gate drive geolokace gradient-background grep grub grub update hebrejština history hlavičky HS html html 5 https hudba charakterizace chroot ICES IGBT img sizes img srcset impedance implementace imshow inference inrush current install jalový výkon javascript javescript jednocení seznamů js kapacita součástek koeficient zesílení komunikace se serverem konfigurace Krita KSF Last-Modified lazy caching led LEFT JOIN librosa ligatury linux list log manuál masky matplotlib Max-Age measure memory měření MFCC MFCC koeficienty mint míry modules moralizace morphologie MOSFET mount moviepy mysql náběhový proud napěťová ochrana návod nel Network Error Logging NLP not nth-child oblékání ochrana okruhy přátel OpenVINO IR formát optočlen ořezové masky OSHB otázky otázky_jazyky otázky_moralismu_řešení parsování path personifikace photorec php php 4 php 5 php 6 php 7 php 8 phpbb phpBB3 pitch PN přechody pnp pole práva profilování program prune průraz přepěťová ochrana přepolování pseudokódd PWM regulátory pydub python python3 pytorch RBE RDSon read reaktance rectifier regulace vstupního napětí relyability remount replace restore reverzní geolokace RIGHT JOIN rm role rozvržení disků pro OS linux a data databází řešení samba sdílení Sec-Fetch-Dest Sec-Fetch-Mode Sec-Fetch-Site Sec-Fetch-User Secure Shell sed Set Cookie shunt schottka skript sloupce song sort soubory soundfile spínané zdroje spínání split SQL ssh stabilizace napětí stahování stream string strojové učení stropové učení syntax T5 tabulky tepelná ztráta test text-shadow thermal runaway time timestamp tkinter tr transistor transition tranzistor tranzistory tuple tvorba otázek TVS účiník update va charakteristika Vgs video Vth vynechání adresářů vývoj while wrapovací funkce XOR zdánlivý výkon zdroj zenerka zenerovo napětí zip zip archiv zkratky zpomalení zpracování textu Žalmy