Skip to content
Snippets Groups Projects
Select Git revision
  • 056d44dc9d91bb4859ab012fa48f7e4270c9e5c1
  • master default protected
2 results

tahak.txt

Blame
  • tahak.txt 5.61 KiB
    Unicode
    =======
    
    Historie: 5 -> 6 -> 7 -> 8 -> 16 -> 16+ bitů na znak
    
    Odkazy na Unicode 13.0.0: [s1] -> stránka standardu, [x01] -> example z code charts
    
    - snaží se reprezentovat znaky všech světových abeced
    - reprezentuje znaky (sémantiku), nikoli glyfy (konkrétní grafickou podobu)
    - snaží se o vztah 1:1 se všemi používanými kódováními => nesystematičnosti
    - též standardizováno jako ISO 10646
    
    ### Codepointy ###
    
    - prostor velikosti 17 x 2^16 = 1114112
    - v Unicode 15.0 obsazeno cca 149k codepointů
    - 0000-007f: ASCII včetně řídicích znaků [x00]
    - 0080-00ff: iso-8859-1 včetně řídicích znaků [x02]
    - rozšířená latinka 1 [x05]
        - pre-komponované znaky s diakritikou
        - 0130, 0131: turecká i (locale-dependent vztah velké<->malé)
    - rozšířená latinka 2 [x06]
        - podivná písmena používaná třeba v afrických jazycích
        - 01C4-01C7: chorvatské dvojznaky (rozlišení uppercase/lowercase/titlecase)
    - fonetická abeceda (IPA) [x09]
    - řečtina a koptština [x20]
    - nejrůznější varianty cyrilice [x25]
    - hlaholice [x26]
    - gruzínština [x30]
    - futhark [x32]
    - egyptské hieroglyfy [x33]
    - CJK = unifikovaná čínština + japonština + korejština [e.g. x35]
    - disk z Faistu [x37]
    - kombinující diakritika [x40]
        - výjimky pro i, j [s318]
        - obecně může být shaping složitý [s83]
    - všelijaká interpunkce [x41]
        - mezery různých šířek [s290]
        - zero-width (no)breaking space
        - word joiner (na tomto místě se nesmí zlomit řádek)
        - zero-width (non-)joiner (týká se ligatur)
        - různé pomlčky [s292]
        - soft hyphen
        - uvozovky [s295]
    - symboly
        - šipky [x50]
        - technické symboly [x51]
    	- 237C: nikdo neví, co znamená :)
        - všehochuť [x52, x53]
        - skládačka rámečků [x55]
        - emotikony [x58] (z toho se později vyvinulo emoji)
    - speciální notace
        - hudební [x60]
        - Braille [x62]
        - domino [x63]
        - šachy [x52, x64]
        - karty [x65]
    - math
        - matematické symboly [x70, x71, x72]
        - letter-like symboly [x73]
        - šipečky [např. x74]
        - matematické varianty [x75]
        - 2063 invisible separator (třeba v M_{ij})
        - 2062 invisible times (neznačené násobení)
        - 2064 invisible plus (třeba v "1 3/4")
    - zpětná kompatibilita
        - pre-komponované znaky
        - zlomky a římská čísla [x81]
        - ligatury [x83]
        - mnoho konců řádků: 000D CR, 000A LF, CR+LF, 0085 NEL,
          2028 line separator, 2029 paragraph separator
    - private-use oblasti: E000-F8FF, F0000-FFFFD, 100000-10FFFD
        - neoficiální registr privátních znaků (třeba klingonština)
    - non-characters
        - FFF9, FFFA, FFFB: inter-lineární anotace [s938]
        - FFFC: object replacement characters (sem se vloží objekt dodaný OOB)
        - FFFD: replacement character
        - FFFE není definováno, FEFF je zero-width no-break space (BOM)
    - variation sequences
        - FE00-FE0F: selektor grafické varianty
        - UCD/StandardizedVariants.txt
        - také se používají pro emoji
    - embedded tags
        - E0000-E007F je kopie ASCII používaná k tagování + introducers + cancel tag
        - language tagy (deprecated)
        - také se používají pro emoji
    
    ### Reprezentace ###
    
    - UCS-2
        - historické: pouze 2^16 codepointů
        - BE+LE varianta, potřebuje BOM (standard říká, že bez BOM je to BE)
    - UCS-4 alias UTF-32 (BE+LE varianta)
    - UTF-16
        - reprezentace všech codepointů pomocí 16bitových kódů
        - surrogates: D800-DBFF high, DC00-DFFF low
    - UTF-8
        - nadmnožina ASCII, ostatní znaky mají 2 až 4 byty
        - podmínky na normalizaci: <0x110000, nejkratší kód
        - neoficiální rozšíření na 64-bitová čísla (Perl5)
        - samosynchronizující, zachovává lexikografické pořadí
        - nešvar s BOM
    - UTF-7, Punycode a další
    
    ### Tabulky vlastností ###
    
    - UnicodeData.txt:
        - jméno
        - general category [s199]
        - způsob zobrazování (např. směr psaní)
        - upper/lower/titlecase mappings
        - numerická hodnota
        - dekompozice (normální a <compat>)
        - canonical combining class
    - PropList.txt: další binární vlastnosti
    - NamesList.txt: alternativní jména (též pokud kanonické jméno obsahuje překlep)
    - Scripts.txt: ke kterému písmu co patří
    - SpecialCasing.txt: výjimky z case-folding algoritmů
    
    ### Normální formy ###
    
    - kanonická dekompozice (NFD)
        - akcenty uspořádány podle combining class
        - v rámci combining class pořadí zachováno
    - kanonická kompozice (NFC)
        - používáme pre-komponované znaky, kdekoliv možno
    - kompatibilní (de)kompozice (NFKD, NFKC)
    - standard slibuje stabilitu normálních forem
    
    ### Problémy ###
    
    - kódování znaků není jednoznačné (rozložené vs. složené znaky),
      je nutné pečlivě normalizovat => problémy s bezpečností, s filesystémy
    - podobné problémy s UTF-8 / UTF-16, pokud se dekóduje ledabyle
    - stejně vypadající znaky => phishing
    
    ### Emoji ###
    
    - <JP: e (obrázek) + moji (znak)
    - "obrázkové" codepointy s variation selectorem:
        - VS16 = emoji (barevné)
        - VS15 = text (černobílé)
    
    https://emojipedia.org/
    	-> "czechia" - flag sequences
    	-> "ch-zh" - tag sequences (momentálně jen pro vlajky regionů)
    	-> "person running" - univerzální
    	-> "man running" - person running + ZWJ + male sign
    	-> combining skin tone modifiers
    	-> ZWJ + hair color
    	-> "black cat" - cat + ZWJ + black square
    	-> "astronaut" - person + ZWJ + rocket
    	-> "polar bear" - bear + ZWJ + snowflake
    	-> "family" - složitější konstrukce se ZWJ
    	-> "roger" - pirate flag = blackflag + ZWJ + skull and crossbones
    
    ### Odkazy ###
    
    https://shapecatcher.com/
    https://r12a.github.io/uniview/
    https://notofonts.github.io/