To co jsem popsal Vás asi opět iritovalo
Ne, skutečně se mě nic neiritovalo ani v jednom z vašich příspěvků :-). Jen jsem tomu nerozuměl a snažil se porozumět :-). Myslel jsem za to že váš pokus s ASC="63" je nějaká spolehlivá metoda ale jelikož jsem jí nerozuměl a nedokázal jsem to nijak vymyslet, tak jsem se akorát zeptal jak to tedy myslíte. Teď je mi tedy jasné že jste zkoušel ledacos a s ASC vám to v některém případu zafungovalo :-).
]]> Zkoušel jsem ledacos. Když se náhradí znak vykresluje, tak se řadí implicitně doprava jako číslo. Když nemá náhradní podobu, tak je férově nalevo jak písmo má být. Takže jsem hledal například informačními funkcemi, logickými deriváty, běžnými aritmetickými operacemi a nic.
Hledal jsem bez úspěchu také skrávání Podobně jako URL v hypertextovém odkazu, barvou znaku, překrytí kerningem a tentýž neúspěch. Tak jsem začal testovat (na první pohled nelogicky) přes sebe funkce sešitu i maker. Takže jsem pouštěl na ASC, UNICODE a UNICHAR (16 bitů). Funkce ASC dělá totéž co UNICODE a UNICHAR. Zobrazí buď obdélníček, nebo číslo podle toho na co ji namíříte.
Takže následně jsem podobné věci dělal i s "CODE" a "CHAR". Rekurzívně 8 bity na 16-ti bity a opačně.
Zatím jsem nic slušnějšího nenašel než výsledk čísla v uvozovkách, ale i to se ukázalo jako lichá cesta, ačkoliv ještě jsem to nevyloučil.
Stejně nadějné je identifikovat zarovnání doprava a doleva. Jenomže neexistuje něco jako "ISLEFT", "ISRIGHT" - ani ve vzorci style jsem se neposunul. Až se k tomu dnes dostanu, tak bych chtěl testovat nahrávaná makra, reslektive termin ".uno:HorizontalAlignment". Tady se nabízí možnost zjistit pozici buď přímo, nebo nepřímo. Jsem ale skeptik. Uvidíme
]]>A PéDéeFka zde: https://www.unicode.org/charts - je jich tam ale strašně moc.
Ale pořád nerozumím tomu jak jste to myslel v tom Calcu s tím porovnáváním s ASC="63". Když dám do buňky =UNICHAR(1603) tak mi tam to arabské "k" namísto Liberation Sans vykreslí Tahoma. Ve sloupci J je jak to vykreslí třeba font který arabské znaky má.
Ale jak bych měl poznat s ASC (="63") že to právě v Liberation Sans není, tomu vůbec nerozumím.
Zkusil jsem i to =UNICHAR(ROW) na 65536 řádků, ale prázdné obdélníčky mi to nevykreslilo nikde, buď zůstala prázdná buňka nebo to nahradilo z nějakého jiného fontu.
]]> Pro pokračování v práci mi to postačuje v té formě jakou mám, a až dostanu správnou inspiraci a chuť tak dohledám ty znaky, které Serif neumí. Možná ještě budu hledat podobnou stránku, která obsahuje přímo čísla Unicode, to by bylo snadnější hledání.
Prostě vydoluju čísla znaků, jejich kontext, znakové sady a sestavím něco jako šablony v PsPadu, nebo databázi. A když mne to nepřejde, tak udělám i rozšíření, ale takových předsevzetí už jsem měl více a nejvýš rozpracoval a odložil :-)
Sub jeZnakVeFontu 'zjistí zda je v daném fontu nějaký konkrétní znak
dim oDoc as object, oWindow as object, o as variant, oFont as new com.sun.star.awt.FontDescriptor, s$, oFonts(), b as boolean
oDoc=ThisComponent
oWindow=oDoc.CurrentController.Frame.ContainerWindow
rem získání infa o jednotlivých fontech, vlastnosti pro konkrétní font se pak musí dát do objektu oFont
oFonts=oWindow.FontDescriptors
'xray oFonts
with oFont 'konkrétní font
.CharacterWidth=0
.CharSet=0
.Family=3
.Height=0
.Kerning=True
.Name="Liberation Serif"
.Orientation=0
.Pitch=2
.Slant=0
.Strikeout=0
.StyleName="Regular"
.Type=0
.Underline=0
.Weight=100
.Width=0
.WordLineMode=False
end with
o=oWindow.getFont(oFont) 'tohle zpřístupní další funkce pro daný font
s=chr(9788) '☼
b=o.hasGlyphs(s) 'je ve fontu daný znak?
msgbox(s & " : " & b)
s=chr(1603) 'ك - arabské k
b=o.hasGlyphs(s) 'je ve fontu daný znak?
msgbox(s & " : " & b)
End Sub
Makrem prošacovat znakové sady, které znak používají by mělo jít - vyloučit případné náhradní znaky (když sada znak neobsahuje) také.
Jak byste makrem poznal že font (znaková sada) daný znak neobsahuje? A i to vyloučení náhradních znaků? Mě pro to žádný postup nenapadá a nenapadá.
]]> Za nejsnadnější výpomoc bych považovat i to, když by fonty, které hledaný znak podle čísla neobsahují zešedly. Takový postup je běžný v rámci hlavního menu. Položky, které nelze použít zašednou. Samostatně vypsané fonty ve dvou podmnožinách (patkové, nepatkové) seřazené jednotlivě alfabeticky by byly lepší.
K tomuto, nebo snadnějšímu zašednutí položek je potřeba otevřít zdroje písem, což jsou v nativní podobě obrázkové mapy, takže je vhodnější použít výpis Unicode do Calcu a co druh písma, to sloupec. Makrem prošacovat znakové sady, které znak používají by mělo jít - vyloučit případné náhradní znaky (když sada znak neobsahuje) také. Jednotlivé znakové sady vytvořit jako relaci (1 znak : x fontů) a doplnit číslo charu plus význam podle oboru (když už se to dělá, tak dobře) jednotlivě není problém, ale je to pracné. Zejména významy v různých oborech. Jen samotná matematika používá nejspíš více nežli tisícovku výrazů, které mají jeden znak. Rozchodit nějaké volání by neměl být velký problém, ale dohromady bych to viděl na mnoho týdnů práce aby to za něco stálo. Je to na týmovou práci. Není to pro jednoho chlapa i když je mu 17 (mně ano, ale hned 4x). :-)
Lze vkládat znaky tak, že člověk napíše nějakou dvouznakovou kombinaci a pak zmáčkne klávesovou zkratku a doplněk to převede na daný znak. Nebo 4číselnou unicode hodnotu a druhou klávesovou zkratku.
Klávesové zkratky si je potřeba nejdříve nadefinovat přes tlačítka dole, ale pak to funguje.
Sice nemá udělán žádný dialog pro to aby si člověk přidal vlastní kombinace, ale jde to celkem snadno nadefinovat v modulu modCode/ fncCharacterArray.
-----------------
Systémové fonty a nějaké malé info k nim umí vypsat jednoduché makro (zdroj: AndrewFontMacro.odt)
Sub fontyInfo
dim oDoc as object, oWindow as object, oFonts()
oDoc=ThisComponent
oWindow=oDoc.CurrentController.Frame.ContainerWindow
oFonts=oWindow.FontDescriptors
xray oFonts
End Sub
Ale jak zjistit zda daný font obsahuje či neobsahuje nějaký znak, to se mi nepovedlo. Viděl jsem nějaké ukázky v Pythonu přes linuxový program FontTools který to ale bral přímo z TTF souborů, ale pak se stejně dočetl že to je pomalé. Pak jsem viděl zdroják co to uměl rychle v C++ https://github.com/zhk/AllCodePoints, ale tam jsem ani nevěděl jak to céčko spustit.
LibreOffice to sice v tom dialogu pro vkládání speciálních znaků má již zahrnuté, že nepoužije znaky které ten font nemá, ale s makry tu (ne)existenci znaku ve fontu zjistit asi možné nebude.
-----------------
Docela pěkná webovka co to má taky znaky v různých kategoriích je zde: https://unicode-table.com/en/, třeba šipky https://unicode-table.com/en/sets/arrow-symbols/, "rovnítka" https://unicode-table.com/en/sets/mathematical-signs/, speciální symboly https://unicode-table.com/en/sets/special-symbols/
-----------------
Krom té Cambrii má docela dost znaků pro různé speciálnky i DejaVu Sans.
]]> Tím zlepšením jsem myslel například postup výběr znaku Unicode a když sada tento nemá, tak by výběr znakových sad mohl nabídnout sady které znak obsahují, popřípadě s poznámkou "patkové" a podobně. Já samozřejmě používám v Calcu funkce Unichar() a Unicode() a najdu, jenže je to porce. Takže raději si opíšu čísla v šestnáctkové, nebo lépe v desítkové soustavě a hledám znak podle čísla. Ale to také pracné i když měně, nežli procházet veškerý sortiment, který navíc potřebuji často zvětší.
V editoru speciálních znaků existuje také vyhledávání podle názvu, ale málokdy se trefím. Je to v angličtině a snadné je například "Phi", ale zkratky pro všechny speciální znaky tak snadno nejdou. Možná by pomohl i seznam zkratek tak aby se dohledala zkratka fulltextem a podobně.
Když píšu potřebuji zjednodušit obsah tak, aby nepřeformátoval řádky a nebyl to obrázek, což se často musí. Editor vzorců Math potřebuji jen někdy kvůli zvýraznění důležitosti, nebo když by textový vzorec byl nepřehledný. Pomocí indexů lze ošidit mnoho vzorců, ale nejde dobře napsat "lim" a pod ní od do. Potom když už by to nebylo svižně čitelné použiji Math. Například vzorce typu kombinací v závorkách "n" nad "k" zaměním za C(n,k) podle syntaxe která je správně =Combin(n;k) a podobně, takže takto řeším velký objem vzorců.
Takže specializovaná znaková sada s detailními matematickými podmnožinami by bylo nejlepší řešení, ale stačí i relativní maličkosti - seznam zkratek vyhledávání v okně speciálních znaků, nebo nabízet relaci x:y když předvolená sada něco neobsahuje. Překreslování sad má ještě problém s možnými kolizemi autorských práv a je to pracné. Velikostí musí být mnohem více. Calc používá implicitně velikost písma 10, Writer 12, pro převody do doc také 11 a podobně. Pak je potřeba také velikost indexů - alespoň 2 velikosti, Bold, italic a underline a podobně. Takže práce hodně.
Ale vidím v tom problém z hlediska fontů. Ani nevím jestli je vůbec nějaký font, který má alespoň ty speciální znaky vytvořené všechny. Vím že bývá problém vůběc vyhledat nějaké stránky, kde se zobrazí všechny znaky třeba "jen" z UTF-16 definice -> v podstatě všech 65 536 znaků. K těm slovním definicím těch 65536 znaků se dá snad dohrabat, ale k webu kde by pro bezproblémové zobrazení SKUTEČNĚ VŠECH ZNAKŮ byly pro ty znaky třeba SVG obrázky nebo webové fonty jsem se snad nikdy nedostal. Ale možná již existuje, je pravdou že pár let jsem se tímto nezabýval.
Takže i kdyby někdo vytvořil nějaké alternativní kategorie, tak stejně bude problém jaké fonty do těch alternativních kategorií použít, neboť většinou používaným fontům ty znaky prostě chybí. Univerzální by bylo mít pro všechny ty znaky třeba SVG obrázky, ale pro speciální znaky asi již vytvořené budou - jen netuším jak jsou na různých webech licencované. To by bylo jen pro to, aby se vůbec v Libre třeba správně zobrazilo třeba právě nějaké to dialogové okno s výběrem možností - neboť najít font který by měl všechny znaky je možná nereálné.
Pak je otázkou jestli třeba upravit nějaký současný font a doplnit do něj speciální znaky z jiného fontu; nebo se třeba dát na vytváření komplet nového fontu.
Při úpravě současného fontu budou přidané znaky z jiného fontu poněkud v jiném grafickém stylu a bude to vypadat asi spíš hnusně nebo alespoň divně či někdy aspoň podivně. Kdyby se na to našel nějaký nadaný grafik, tak by třeba dodávané znaky dokázal více přizpůsobit danému fontu, ale bylo by to již časově mnohem náročnější.
Při vytváření nového fontu je to časově enormně náročné. Udělat poctivě několik tisíc znaků v nějakém jednotném grafickém stylu vůbec není snadné a pro jednotlivce je to práce spíše na několik let. I kdybychom se omezili jen na latinku, tak ani tak to není snadné. Nejde totiž jen o samotné znaky, ale také o přizpůsobení kerningů -> tedy vzdáleností mezi různymi znaky když jsou vedle sebe. Kerningy by v případě speciálních znaků třeba být moc nemusely, ale i tak vytvořit nový latinkový font je práce spíše na pár let.
Neb další věcí je, že by bylo záhodné mít vytvořené minimálně 4 základní vzhledy - tedy regulérní, tučný, kurzívu a tučnou kurzívu. Tam už aby to bylo dále pěkné, se to bez nějakých korekcí kerningů většinou neobejde. A opět v tom množství tisíců znaků je pak na možné kerningy tolik kombinací, že to opět zabere strašnou spoustu času.
A jen taková "expertní" poznámka: ještě si můžete zkusit v jednom slově udělat nějaké znaky tučné a nějaké kurzívou -> fontů kde by se třeba znaky kurzívou neprolínaly do normálních či tučných znaků je strašně málo - a to jsem na to kdysi zkoušel několik desítek fontů. Poté jsem zůstal u jednoho který dle potřeb doplňuji -> ale už je dost vomrd když doplním třeba čtyři znaky a musím to dodělat ještě do kurzívy, tučné a tučné kurzívy.
Pak ještě že MS, Apple či Adobe mají na fonty jiné vlastní požadavky -> a v některých jejich programech se to bez těch jejich vlastností prostě nezobrazí správně. V tomhle je však LibreOffice řekl bych na špičce a zobrazuje fakt super, i když nějaký font nějaké byrokratické definice nesplňuje.
Pro ukázku přikládám otisk z FontForge, kde jenom těch "šipek" a "ekvivalencí" je snad kolem 200 - a to je otisk jen z jedné části "fontu", možná někde na jiných pozicích jsou nějaké další "šipky" či "rovnítka".
Tudíž závěrem - kdyby se měly zahrnout všechny speciální znaky z UTF-16 definice, šlo by o tisíce znaků. A dle mého názoru by pro takové velké množství bohužel asi nešlo vytvořit nějaké jednoduché a přehledné kategorie. Kdyby kategorií bylo málo, bylo by v nich hodně znaků. Kdyby kategorií bylo hodně, bylo by to nepřehledné. A když se prostě něco vynechá aby toho nebylo tolik, tak by asi nejsnažší bylo prostě udělat nějaké vlastní dialogové okno s vlastními kategoriemi pro ty používané znaky.
]]> Možná by nebylo od věci vytvořit sadu Unicode znaků, které mají matematické, nebo technické použití. jednotlivé znakové sady mají podmnožinu "Matematický operátorů", nebo také "Různé technické symboly", ale žádná znaková sada nemá kompletní podmnožinu. Takže často je nutné potřebný znak vyhledat v jiných znakových sadách a to je třeba jediný znak mezi mnoha znaky základní znakové sady. To může dělat problémy například při převodu Writer na eBook a i jindy.
Další záležitostí je vyhledávání podle desítkové, nebo šestnáctkové soustavy, ale hledání funguje pouze v dané znakové sadě a často se v okénku objeví hláška "Chybí znak".
Také je trošku problém s popisem znaku - pod okénkem bývá napsán význam (spíš popis) znaku, který je v angličtině a to by už mohlo být přeloženo (Vím - nejsou lidi, ale tohle by zůstalo hodně dlouho beze změny).
Vím, že k takovému účelu je aplikace "Math", ale mnoho věcí se dá psát i bez něho. Typicky konstanty, nebo znaky pro implikaci a ekvivalenci (nahrazuji kombinací rovnítka a porovnávacích operátorů <> - to je ale ošklivé a netechnické. Takže bych doporučil vytvořit znakovou sadu Math (myslím, že taková dříve v OOo, nebo StarOffice existovala) - podmnožiny (konstanty, porovnávací operátory a podobně).
]]>