Sub LingeaHeslo()
'
'Předpřipraví aktuální řádek tabulky pro zanesení do uživatelského slovníku
'Lingea Lexiconu. Některé změny je nutno dodělat ručně.
'
'CHYBY
'* dává o jedno "
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.text = "^p"
.Replacement.text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.text = " "
.Replacement.text = " "
.Forward = True
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.text = "
http://mujweb.cz/www/david.zbiral/jazyky.htm
" zaco = "David Zbíral
" zaco = "Charakteristika:" zaco = "^p
Charakteristika:" Call Nahradit(co, zaco) 'Postup na samotnou hlavičku titulu funguje, ale v dlouhém dokumentu dělal 'problémy - asi problém funkce NahrazovaciFunkce; patrně nekonečný cyklus. '(Nicméně před dodáním Neobsahuje Chr(13) do prvního postupu; teď už by to 'možná fungovalo správně). 'Vyřazeno a tuto část hlavičky je nutné dodělat ručně. Zpracováno 'jen to, kde je možné přesně určit syntaxi, jednodušším postupem. co = "KÝ SLOVNÍK ^#
" zaco = "^&" Call NahraditCase(co, zaco) co = "ČESKO-" zaco = "
" 'Pravy = "KÝ SLOVNÍK ^#
" 'NahraditCo = "" 'NahraditZaCo = "" 'Neobsahuje = Chr(13) 'Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje) 'Pravy = "" 'NahraditCo = "" 'NahraditZaCo = "" & Chr(13) & Chr(13) & Chr(13) & "
?" Pravy = "
" NahraditCo = "=" NahraditZaCo = "" Neobsahuje = Chr(13) Obsahuje = "" Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje) 'Bez rovnítka; jen pokud již neobsahuje , tj. pokud neproběhl minulý krok. Levy = "?" Pravy = "
" NahraditCo = "" NahraditZaCo = "" Neobsahuje = "" Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje) 'Nyní vlastní značka příkladu. Levy = "?" Pravy = "
" NahraditCo = "?" NahraditZaCo = "
"
Neobsahuje = Chr(13)
Obsahuje = ""
'Funkci zavoláme dvakrát; nefungovalo to nějak dobře.
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
'Segmenty, jež jsou součástí hlavičky hesla, nemají být ve výsledném kódu
'uzavřeny do a
"
For Each Levy In Leve
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Next
'HESLOVÉ SLOVO. Ani to nebude uzavřeno ve značce .
Levy = " #"
Pravy = " #"
NahraditZaCo = "" '
'Abych nezapomněl, že bylo použito "a href", které je určeno vzhledem
'k tomu, že to dělá problémy, jen pro mně, přidám to do hlášení na konci.
hlaseni = ""
If InStr(NahraditZaCo, "") <> 0 Then hlaseni = " Bylo použito hypertextové označení hesla."
Neobsahuje = Chr(13)
Obsahuje = ""
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Levy = ""
NahraditCo = " pro span p, q, w (bude tam
'větší odsazení zleva a menší písmo).
Dim TridaP As New Collection
With TridaP
.Add ("p")
.Add ("q")
.Add ("w")
End With
For Each i In TridaP
With Selection.Find
.text = " "
.Replacement.text = " "
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next
'span="1" nefunguje; je třeba tam mít písmeno, jak jsem zjistil (chyba nebyla
've stylopise, měnil jsem to tam paralelně).
With Selection.Find
.text = ""
.Replacement.text = ""
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
'Závěrečná nahrazení z makra LingeaHTMLVýznamyOčíslovat
co = "@43@43@"
zaco = ""
.Replacement.text = ""
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next i
'Také heslové slovo má speciální třídu.
With Selection.Find
.text = ""
.Replacement.text = ""
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
'span="1" nefunguje; je třeba tam mít písmeno (chyba nebyla
've stylopise, měnil jsem to tam paralelně).
With Selection.Find
.text = ""
.Replacement.text = ""
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
'U valence ale nahradíme nadbytečné spany za speciální třídu span.vr.
'Musíme to provést pro uvozovky typu Chr(34) i uvozovky typu Chr(8222), které Word
'patrně při nahrazeních použil.
Levy = ""
Pravy = ""
NahraditCo = ""
NahraditZaCo = ""
Neobsahuje = Chr(13)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Levy = ""
NahraditCo = ""
NahraditZaCo = ""
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Levy = ""
NahraditCo = ""
NahraditZaCo = ""
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Levy = ""
NahraditCo = ""
NahraditZaCo = ""
'NahraditCo = ""
'NahraditZaCo = ""
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
'Poznámka latinkou v nitru textu psaného jiným písmem; automatizovaně dodáme
'pro znak paragrafů, který v řecko-české databázi zastupuje závorky (zabrané v řeckém
'fontu přízvuky). Vzniká tak dost škaredý segment kódu, nicméně vše je vymezeno
'takovými značkami, jak má: výstup má přehlednější datovou strukturu.
Levy = ""
Pravy = ""
NahraditCo = "§§"
NahraditZaCo = "(&"
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
'Funkci voláme třikrát, protože nahradí jen první výskyt; pokud je mezi týmiž
'dvěma vymezovači více výskytů, je nutné akci opakovat.
Levy = "" 'Ostatní proměnné zůstanou.
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
NahraditCo = "§"
NahraditZaCo = ")&"
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Levy = ""
'Ostatní proměnné zůstanou.
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
Call NahrazovaciFunkce(Levy, Pravy, NahraditCo, NahraditZaCo, Obsahuje, Neobsahuje)
co = "&"
zaco = ""
Call Nahradit(co, zaco)
'Synonymum: vlnovka působí zmatek.
With Selection.Find
.text = "~"
.Replacement.text = ""
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
'Apostrof musíme vrátit zpátky na rovný; v SPIonic musí být rovný.
With Selection.Find
.text = "’"
.Replacement.text = "'"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
'Vložení tvrdých mezer před příklonné české předložky s, v, z.
Call TvrdeMezeryHTMLPredPredlozky
'Oprava.
co = " "
zaco = " "
Call Nahradit(co, zaco)
co = " "
zaco = " "
Call Nahradit(co, zaco)
co = ">"
zaco = ""
Call Nahradit(co, zaco)
'Nahrazení §§ za závorky nějak nefungovalo správně. Ale jinde se znak
'asi nevyskytuje, takže zvolíme jednodušší postup.
co = "§§"
zaco = "("
Call Nahradit(co, zaco)
co = "§"
zaco = ")"
Call Nahradit(co, zaco)
StatusBar = "Hotovo."
End Sub
Sub LingeaHTMLSpeciálníZnaky()
'Změní lingeovské kódy speciálních znaků na příslušné znaky či kódy v HTML.
'Důraz je kladen na francouzské znaky (ač se zdaleka neomezuje jen na ně);
'nezpracovány všechny kódy LL. Také velká písmena byla zpracována jen velmi výběrově.
'Postupovat budeme voláním funkce Nahradit pro každý prvek dvou paralelních polí
'(v rámci úspornosti kódu a kvůli snadnosti opačného použití pole pro převod znaků
'z HTML do kódů Lingea). Pozor při přidávání prvků - je třeba se nesplést,
'segment nahrazující musí být na místě paralelním se segmentem k nahrazení
'(musejí mít stejný index).
'Písmena s tečkami, pak s accentus gravis, pak s tildou a další, ligatury a nakonec
'stříšky.
'Připravíme si písmena se stříškou, která dělají problémy, protože stříšku si
'vyhrazuje Word jako zástupný znak.
co = "^"
zaco = "@&@12"
Call Nahradit(co, zaco)
'Dělení pole na několik řádků sice editor neopravoval, ale dělalo vážné problémy:
'první a poslední prvek každého řádku se ignoroval.
poleco = Array("\:a", "\:e", "\:i", "\:o", "\:u", "\:y", "\`a", "\`e", "\`i", "\`o", "\`u", "\~n", "\~a", "\~e", "\~i", "\~o", "\~u", "\~y", "\,c", "\,C", "\@a", "\@o", "\:A", "\:E", "\:I", "\:O", "\:U", "\`A", "\`E", "\`I", "\`O", "\`U", "\@&@12a", "\@&@12e", "\@&@12i", "\@&@12o", "\@&@12u", "\@&@12A", "\@&@12E", "\@&@12I", "\@&@12O", "\@&@12U")
polezaco = Array("ä", "ë", "ï", "ö", "ü", "ÿ", "à", "è", "ì", "ò", "ù", "ñ", "ã", "ẽ", "ĩ", "õ", "ũ", "ỹ", "ç", "Ç", "æ", "œ", "Ä", "Ë", "Ï", "Ö", "Ü", "À", "È", "Ì", "Ò", "Ù", "â", "ê", "î", "ô", "û", "Â", "Ê", "Î", "Ô", "Û")
If UBound(poleco) <> UBound(polezaco) Then
MsgBox ("Pole Nahradit co a pole Nahradit za co mají různý počet prvků. Zkontrolujte kód procedury, je v něm zřejmě chyba. Makro se nyní ukončí.")
Exit Sub
End If
For i = 0 To UBound(poleco)
co = poleco(i)
zaco = polezaco(i)
Call NahraditCase(co, zaco)
Next i
'Nahrazení těch stříšek, které byly značkami homonym.
co = "@&@12"
zaco = "{" 'Tento znak je potřeba, nový znak totiž musí být pro daný účel
'přijatelný i v řec. fontu Grenet.
Call Nahradit(co, zaco)
End Sub
Sub LingeaHTMLSpeciálníZnakyDoLingea()
'Převede znaky z HTML do lingeovských kódů.
poleco = Array("ä", "ë", "ï", "ö", "ü", "ÿ", "à", "è", "ì", "ò", "ù", "ñ", "ã", "ẽ", "ĩ", "õ", "ũ", "ỹ", "ç", "Ç", "æ", "œ", "Ä", "Ë", "Ï", "Ö", "Ü", "À", "È", "Ì", "Ò", "Ù", "â", "ê", "î", "ô", "û", "Â", "Ê", "Î", "Ô", "Û")
polezaco = Array("\:a", "\:e", "\:i", "\:o", "\:u", "\:y", "\`a", "\`e", "\`i", "\`o", "\`u", "\~n", "\~a", "\~e", "\~i", "\~o", "\~u", "\~y", "\,c", "\,C", "\@a", "\@o", "\:A", "\:E", "\:I", "\:O", "\:U", "\`A", "\`E", "\`I", "\`O", "\`U", "\@&@12a", "\@&@12e", "\@&@12i", "\@&@12o", "\@&@12u", "\@&@12A", "\@&@12E", "\@&@12I", "\@&@12O", "\@&@12U")
If UBound(poleco) <> UBound(polezaco) Then
MsgBox ("Pole Nahradit co a pole Nahradit za co mají různý počet prvků. Zkontrolujte kód procedury, je v něm zřejmě chyba. Makro se nyní ukončí.")
Exit Sub
End If
For i = 0 To UBound(poleco)
co = poleco(i)
zaco = polezaco(i)
Call NahraditCase(co, zaco)
Next i
End Sub
Sub LingeaHTMLrozdělit()
'Z dokumentu zpracovaného makrem LingeaHTML (či jeho modifikací pro jazyky
'užívající cizích abeced) vytvoří jednotlivé soubory .HTM pro každé heslo.
'Testování: proběhlo na výbornou; všechna hesla tam byla, nic neopomenuto.
'Kontrolováno i makrem LingeaSoupisLemmat.
Set fso = CreateObject("Scripting.FileSystemObject")
'U řeckého nahradíme entryr za entry, aby se to načítalo správně.
co = ""
zaco = ""
Call Nahradit(co, zaco)
'Pomocný segment na konci.
Selection.EndKey wdStory
Selection.TypeParagraph
Selection.TypeText ""
'Načítání jednotlivých hesel a tvorba textových souborů.
Adresar = InputBox("Zadejte cestu k cílovému adresáři", "Cílový adresář", "C:\David\Jazyky\htmlsl\p")
If Adresar = vbCancel Then Exit Sub
Adresar = Trim(Adresar)
If Not fso.FolderExists(Adresar) Then
fso.CreateFolder Adresar
hlaseni = "Zadaný adresář neexistoval; byl makrem automaticky vytvořen."
End If
'Výchozí nabídku pro © " & autor & ", http://mujweb.cz/www/david.zbiral/jazyky.htm, david.zbiral@post.cz (lze též použít poštovní formulář na webu)
Zdarma pro soukromé nekomerční použití. Nedistribuovat.
" & ent & "" & ent & "