--- # UEB characters # # Some chars that originally came from an Excel spreadsheet, converted to csv, and the greatly expanded # # The UEB translation makes use of some non-braille chars as flags # L -- what follows is a letter # N -- what follows is a digit # C -- precedes L for capital letters # G -- precedes L for Greek Letters (after C for capitals) # Typeface Indicators ("typeforms") # B bold, I Italic, S Sans-serif, T script, D, Fraktur, 𝔹 blackboard-bold # the type face indicators can be combined with B (first) and I (second) # Standing alone chars: # Any character which acts as a standing alone character (e.g, "{") needs each braille symbol to be labeled # o -- opening/left side, c -- closing/right side, b -- both open and close (e.g, '"') - "0": [t: "N⠚"] # 0x30 - "1": [t: "N⠁"] # 0x31 - "2": [t: "N⠃"] # 0x32 - "3": [t: "N⠉"] # 0x33 - "4": [t: "N⠙"] # 0x34 - "5": [t: "N⠑"] # 0x35 - "6": [t: "N⠋"] # 0x36 - "7": [t: "N⠛"] # 0x37 - "8": [t: "N⠓"] # 0x38 - "9": [t: "N⠊"] # 0x39 # we stick the drop numbers into the private use area for consistency - "\ue000": [t: "N⠴"] # 0 - "\ue001": [t: "N⠂"] # 1 - "\ue002": [t: "N⠆"] # 2 - "\ue003": [t: "N⠒"] # 3 - "\ue004": [t: "N⠲"] # 4 - "\ue005": [t: "N⠢"] # 5 - "\ue006": [t: "N⠖"] # 6 - "\ue007": [t: "N⠶"] # 7 - "\ue008": [t: "N⠦"] # 8 - "\ue009": [t: "N⠔"] # 9 # we stick hex digits into the private use area for consistency # these are used when we don't want to add a numeric indicator for subsequent digits (3.3) - "\ue00A": [t: "N⠐N⠁"] # A - "\ue00B": [t: "N⠐N⠃"] # B - "\ue00C": [t: "N⠐N⠉"] # C - "\ue00D": [t: "N⠐N⠙"] # D - "\ue00E": [t: "N⠐N⠑"] # E - "\ue00F": [t: "N⠐N⠋"] # F # leave room for the rest of the alphabet - "\ue01A": [t: "N⠨N⠁"] # A - "\ue01B": [t: "N⠨N⠃"] # B - "\ue01C": [t: "N⠨N⠉"] # C - "\ue01D": [t: "N⠨N⠙"] # D - "\ue01E": [t: "N⠨N⠑"] # E - "\ue01F": [t: "N⠨N⠋"] # F - "a": [t: "L⠁"] # 0x61 - "b": [t: "L⠃"] # 0x62 - "c": [t: "L⠉"] # 0x63 - "d": [t: "L⠙"] # 0x64 - "e": [t: "L⠑"] # 0x65 - "f": [t: "L⠋"] # 0x66 - "g": [t: "L⠛"] # 0x67 - "h": [t: "L⠓"] # 0x68 - "i": [t: "L⠊"] # 0x69 - "j": [t: "L⠚"] # 0x6a - "k": [t: "L⠅"] # 0x6b - "l": [t: "L⠇"] # 0x6c - "m": [t: "L⠍"] # 0x6d - "n": [t: "L⠝"] # 0x6e - "o": # 0x6f - test: # special case because these have the same dot pattern if: "preceding-sibling::*[1][self::m:mo and (.='>' or .='≫')]" then: [t: "⠐"] - t: "L⠕" - "p": [t: "L⠏"] # 0x70 - "q": [t: "L⠟"] # 0x71 - "r": [t: "L⠗"] # 0x72 - "s": [t: "L⠎"] # 0x73 - "t": [t: "L⠞"] # 0x74 - "u": [t: "L⠥"] # 0x75 - "v": [t: "L⠧"] # 0x76 - "w": [t: "L⠺"] # 0x77 - "x": [t: "L⠭"] # 0x78 - "y": [t: "L⠽"] # 0x79 - "z": [t: "L⠵"] # 0x7a - "á": [t: "L⠷"] # 0xE1 - "é": [t: "L⠮"] # 0xE9 - "í": [t: "L⠌"] # 0xED - "ñ": [t: "L⠻"] # 0xF1 - "ó": [t: "L⠬"] # 0xF3 - "ú": [t: "L⠾"] # 0xFA - "ü": [t: "L⠳"] # 0xFC - "Á": [t: "CL⠷"] # 0xC0 - "É": [t: "CL⠮"] # 0xC9 - "Í": [t: "CL⠌"] # 0xCD - "Ñ": [t: "CL⠻"] # 0xD1 - "Ó": [t: "CL⠬"] # 0xD3 - "Û": [t: "CL⠾"] # 0xDA - "Ü": [t: "CL⠳"] # 0xDC - "A": [t: "CL⠁"] # 0x41 - "B": # 0x42 - test: if: "@data-chem-element" then: [t: "𝐶L⠃"] else: [t: "CL⠃"] - "C": # 0x43 - test: if: "@data-chem-element" then: [t: "𝐶L⠉"] else: [t: "CL⠉"] - "D": [t: "CL⠙"] # 0x44 - "E": [t: "CL⠑"] # 0x45 - "F": [t: "CL⠋"] # 0x46 - "G": [t: "CL⠛"] # 0x47 - "H": # 0x48 - test: if: "@data-chem-element" then: [t: "𝐶L⠓"] else: [t: "CL⠓"] - "I": # 0x49 - test: if: "@data-chem-element" then: [t: "𝐶L⠊"] else: [t: "CL⠊"] - "J": [t: "CL⠚"] # 0x4a - "K": # 0x4b - test: if: "@data-chem-element" then: [t: "𝐶L⠅"] else: [t: "CL⠅"] - "L": [t: "CL⠇"] # 0x4c - "M": [t: "CL⠍"] # 0x4d - "N": # 0x4e - test: if: "@data-chem-element" then: [t: "𝐶L⠝"] else: [t: "CL⠝"] - "O": # 0x4f - test: if: "@data-chem-element" then: [t: "𝐶L⠕"] else: [t: "CL⠕"] - "P": # 0x50 - test: if: "@data-chem-element" then: [t: "𝐶L⠏"] else: [t: "CL⠏"] - "Q": [t: "CL⠟"] # 0x51 - "R": [t: "CL⠗"] # 0x52 - "S": # 0x53 - test: if: "@data-chem-element" then: [t: "𝐶L⠎"] else: [t: "CL⠎"] - "T": [t: "CL⠞"] # 0x54 - "U": # 0x55 - test: if: "@data-chem-element" then: [t: "𝐶L⠥"] else: [t: "CL⠥"] - "V": # 0x56 - test: if: "@data-chem-element" then: [t: "𝐶L⠧"] else: [t: "CL⠧"] - "W": # 0x57 - test: if: "@data-chem-element" then: [t: "𝐶L⠺"] else: [t: "CL⠺"] - "X": [t: "CL⠭"] # 0x58 - "Y": # 0x59 - test: if: "@data-chem-element" then: [t: "𝐶L⠽"] else: [t: "CL⠽"] - "Z": [t: "CL⠵"] # 0x5a - "α": [t: "GL⠁"] # 0x3b1 - "β": [t: "GL⠃"] # 0x3b2 - "γ": [t: "GL⠛"] # 0x3b3 - "δ": [t: "GL⠙"] # 0x3b4 - "ε": [t: "GL⠑"] # 0x3b5 - "ζ": [t: "GL⠵"] # 0x3b6 - "η": [t: "GL⠱"] # 0x3b7 - "θ": [t: "GL⠹"] # 0x3b8 - "ι": [t: "GL⠊"] # 0x3b9 - "κ": [t: "GL⠅"] # 0x3ba - "λ": [t: "GL⠇"] # 0x3bb - "μ": [t: "GL⠍"] # 0x3bc - "ν": [t: "GL⠝"] # 0x3bd - "ξ": [t: "GL⠭"] # 0x3be - "ο": [t: "GL⠕"] # 0x3bf - "π": [t: "GL⠏"] # 0x3c0 - "ρ": [t: "GL⠗"] # 0x3c1 - "ς": [t: "VL⠎"] # 0x3c2 - "σ": [t: "GL⠎"] # 0x3c3 - "τ": [t: "GL⠞"] # 0x3c4 - "υ": [t: "GL⠥"] # 0x3c5 - "φ": [t: "GL⠋"] # 0x3c6 - "χ": [t: "GL⠯"] # 0x3c7 - "ψ": [t: "GL⠽"] # 0x3c8 - "ω": [t: "GL⠺"] # 0x3c9 - "Α": [t: "CGL⠁"] # 0x391 - "Β": [t: "CGL⠃"] # 0x392 - "Γ": [t: "CGL⠛"] # 0x393 - "Δ": [t: "CGL⠙"] # 0x394 - "Ε": [t: "CGL⠑"] # 0x395 - "Ζ": [t: "CGL⠵"] # 0x396 - "Η": [t: "CGL⠱ "] # 0x397 - "Θ": [t: "CGL⠹"] # 0x398 - "Ι": [t: "CGL⠊"] # 0x399 - "Κ": [t: "CGL⠅"] # 0x39a - "Λ": [t: "CGL⠇"] # 0x39b - "Μ": [t: "CGL⠍"] # 0x39c - "Ν": [t: "CGL⠝"] # 0x39d - "Ξ": [t: "CGL⠭"] # 0x39e - "Ο": [t: "CGL⠕"] # 0x39f - "Π": [t: "CGL⠏"] # 0x3a0 - "Ρ": [t: "CGL⠗"] # 0x3a1 - "΢": [t: "CGL⠎"] # 0x3a2 - "Σ": [t: "CGL⠎"] # 0x3a3 - "Τ": [t: "CGL⠞"] # 0x3a4 - "Υ": [t: "CGL⠥"] # 0x3a5 - "Φ": [t: "CGL⠋"] # 0x3a6 - "Χ": [t: "CGL⠯"] # 0x3a7 - "Ψ": [t: "CGL⠽"] # 0x3a8 - "Ω": [t: "CGL⠺"] # 0x3a9 - "ϑ": [t: "VL⠹"] # 0x3d1 - "ϵ": [t: "VL⠑"] # 0x3f5 - "ϰ": [t: "VL⠅"] # 0x3f0 - "ϕ": [t: "VL⠋"] # 0x3d5 - "ϱ": [t: "VL⠗"] # 0x3f1 - "ϖ": [t: "VL⠏"] # 0x3d6 - "Ϝ": [t: "VL⠧"] # 0x3d7 - "µ": [t: "GL⠍"] # 0x00B5 (Micro (Greek mu)) - "Ω": [t: "CGL⠺"] # 0x2126 (Ohm sign (capital Greek omega)) - "∆": [t: "⠸⠦"] # 0x2206 (Increment) - "∏": # 0x220F (Product (capital Greek pi)) - t: "CGL⠏" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "∐": # 0x2210 (CoProduct (capital Greek pi)) - t: "⠘⠻" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "∑": # 0x2211 (Sum (capital Greek sigma)) - t: "CGL⠎" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "<": [t: "⠪"] # 0x003C (Less than) - "≨": [t: "⠪"] # 0x2268 (Less-Than But Not Equal To) - "⋦": [t: "⠪"] # 0x22E6 (Less-Than But Not Equivalent To) - ">": [t: "⠕"] # 0x003E (Greater than) - "≩": [t: "⠕"] # 0x2269 (Greater-Than But Not Equal To) - "⋧": [t: "⠕"] # 0x22E7 (Greater-Than But Not Equivalent To) # - "≮": [t: "⠈⠣⠈⠱"] # 0x226E (Not less than) # - "≯": [t: "⠈⠜⠈⠱"] # 0x226F (Not greater than) # - "≰": [t: "⠸⠈⠣⠈⠱"] # 0x2270 (Neither less than nor equal to) # - "≱": [t: "⠸⠈⠜⠈⠱"] # 0x2271 (Neither greater than nor equal to) # - "∝": [t: "⠸⠐⠶"] # 0x221D (Proportional to) # - "≃": [t: "⠸⠔"] # 0x2243 (Approximately equal to (tilde over horizontal line)) # - "≅": [t: "⠐⠸⠔"] # 0x2245 (Approximately equal to (tilde over equals sign)) # - "≏": [t: "⠘⠐⠶"] # 0x224F (Equals with bump in top bar (difference between)) # - "≢": [t: "⠸⠿⠈⠱"] # 0x2262 (Not identical to) # - "∈": [t: "⠘⠑"] # 0x2208 (Element of (member of)) # - "∉": [t: "⠘⠑⠈⠱"] # 0x2209 (Not Element of) - "+": [t: "⠖"] # 0x002B (Plus sign) # - "∋": [t: "⠈⠘⠑"] # 0x220B (Contains) # - "⊂": [t: "⠘⠣"] # 0x2282 (Subset of) # - "⊃": [t: "⠘⠜"] # 0x2283 (Superset of) # - "⊆": [t: "⠸⠘⠣"] # 0x2286 (Subset of or equal) # - "⊇": [t: "⠸⠘⠜"] # 0x2287 (Superset of or equal) # - "⊊": [t: "⠨⠘⠣"] # 0x228A (Subset of with not equal) # - "⊋": [t: "⠨⠘⠜"] # 0x228B (Superset of with not equal) # - "⊲": [t: "⠈⠸⠣"] # 0x22B2 (Normal subgroup of) # - "⊳": [t: "⠈⠸⠜"] # 0x22B3 (Contains as normal subgroup) # - "⊴": [t: "⠸⠸⠣"] # 0x22B4 (Normal subgroup of or equal) # - "⊵": [t: "⠸⠸⠜"] # 0x22B5 (Contains as normal subgroup or equal) # - "⋬": [t: "⠨⠸⠣"] # 0x22EC (not normal subgroup) -- this isn't the same as what is in GTM 10, but that similar has no Unicode equiv # - "⋭": [t: "⠨⠸⠣"] # 0x22ED (does not contain as normal subgroup) -- this isn't the same as what is in GTM 10, but that similar has no Unicode equiv # - "⊢": [t: "⠸⠒"] # 0x22a2 (Right tack) # - "⊣": [t: "⠈⠸⠒"] # 0x22a3 (Left tack) - "−": [t: "⠐⠤"] # 0x2212 (Minus sign) - "·": [t: "⠠𝘄"] # 0x00B7 (Multiplication dot (times)) # - "∗": [t: "⠐⠔"] # 0x2217 (Asterisk operator) - "∘": [t: "⠠⠆"] # 0x2218 (Ring operator) value based on last row in 5.1 (probably what they should have used) - "◦": [t: "⠠⠆"] # 0x25E6 (White bullet) (value based on 2218) - "⋅": [t: "⠰⠄"] # 0x22C5 (Dot operator)(value based on 2218) # - "∖": [t: "⠸⠡"] # 0x2216 (Set minus) - "(": [t: "⠣"] # 0x0028 (Left parenthesis) - ")": [t: "⠜"] # 0x0029 (Right parenthesis) - "[": [t: "⠷"] # 0x005B (Left square bracket) - "]": [t: "⠾"] # 0x005D (Right square bracket) - "!": # 0x21 (Exclamation (factorial)) - test: # CMU seems to use a different char for factorial (7.5) -- this weak guess for factorial if: "self::m:mo and preceding-sibling::*" then: [t: "⠘⠄"] else: [t: "⠖"] - "&": [t: "⠠⠯"] # 0x26 (Ampersand) - "*": [t: "⠲"] # 0x002A (Asterisk) - "?": [t: "⠢"] # 0x003F (Question mark) - "¿": [t: "⠢"] # 0x00BF (Question mark) - "@": [t: "⠐"] # 0x0040 (Commercial at sign) - "^": # 0x005E (Caret (hat, up arrow)) 4.3.2 uses one form as a circumflex, and 11.1 as a geometric angle - test: # it is not clear how to distinguish one form from another -- the following passes the tests, but is almost certainly wrong - if: "..[self::m:mover][ *[1][self::m:mi and string-length(.)=1 and translate(., 'abcdefghijklmnopqrstuvwxyz', '') = ''] ]" then: [t: "⠰⠒"] # circumflex else: [t: "⠘⠒"] # angle and everything else - "_": [t: "⠤"] # 0x005F (Low line (underscore)) - "¯": [t: "⠈⠉"] # 0x00AF (macron) - "═": [t: "⠈⠉⠈⠉"] # 0x2550 (BOX DRAWINGS DOUBLE HORIZONTAL) - "~": # 0x007E (Tilde (swung dash)) - test: # unclear what really should happen see 4.3.2, 4.3.3, 6.1, and 8.2 -- all use different codes - if: "..[self::m:mover]" then: [t: "⠐⠢"] - else_if: "..[self::m:munder]" then: [t: "⠠⠢"] - else_if: "not(preceding-sibling::*)" then: [t: "⠠⠄"] # (8.2 -- prefix?) else: [t: "⠐⠢⠠"] # (6.1 -- infix?) - ∼: # 223c (Tilde operator) - test: # unclear what really should happen see 4.3.2, 4.3.3, 6.1, and 8.2 -- all use different codes - if: "..[self::m:mover]" then: [t: "⠐⠢"] - else_if: "..[self::m:munder]" then: [t: "⠠⠢"] - else_if: "not(preceding-sibling::*)" then: [t: "⠠⠄"] # (8.2 -- prefix?) else: [t: "⠐⠢⠠"] # (6.1 -- infix?) - "—": [t: "⠤⠤"] # 0x2014 (Em dash) - "‖": [t: "⠸⠇"] # 0x2016 # - "¦": [t: "⠨⠳"] # 0x00A6 (Broken bar) # - "¬": [t: "⠈⠹"] # 0x00AC (Not sign) - "°": [t: "⠴"] # 0x00B0 (Degree sign) - "²": [t: "⠡⠼⠃⠉"] # 0x00B2 (superscripted 2) - "³": [t: "⠡⠼⠉"] # 0x00B3 (superscripted 3) # - "†": [t: "⠈⠠⠹"] # 0x2020 (Dagger) # - "‡": [t: "⠈⠠⠻"] # 0x2021 (Double dagger) # - "‰": [t: "⠸⠴⠴"] # 0x2030 (Per mille) - "′": [t: "⠳"] # 0x2032 (Prime sign) - "″": [t: "⠳⠳"] # 0x2033 (Double prime sign) - "‴": [t: "⠳⠳⠳"] # 0x2034 (Triple prime sign) # - "Å": [t: "⠠⠘⠫⠁"] # 0x212B (Angstrom symbol) # - "Å": [t: "⠠⠘⠫⠁"] # 0x00C5 (WIRIS uses this for Angstrom) # - "∀": [t: "⠘⠁"] # 0x2200 (For all) - "∂": [t: "⠸⠙"] # 0x2202 (Partial differential) # - "∃": [t: "⠘⠢"] # 0x2203 (There exists) # - "∄": [t: "⠘⠢⠈⠱"] # 0x2204 (There does not exist) # - "∅": [t: "⠈⠚"] # 0x2205 (Empty set) # - "∎": [t: "⠸⠫⠼⠙t"] # 0x220E (End of proof) # - "√": [t: "⠐⠩"] # 0x221A (Square root (radical) without vinculum) # - "∠": [t: "⠸⠪"] # 0x2220 (Angle) # - "∡": [t: "⠨⠸⠪"] # 0x2221 (Measured angle) # - "⊾": [t: "⠼⠸⠪"] # 0x22BE (Right angle with arc) - "∫": # 0x222B (Integral) - t: "⠯" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "∬": # 0x222c (Double integral) - t: "⠯⠯" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "∭": # 0x222d (Triple integral) - t: "⠯⠯⠯" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "∮": # 0x222E (Contour integral (closed line integral)) - t: "⠯⠴" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] # - "∷": [t: "⠒⠒"] # 0x2237 (Proportion) # - "∣": [t: "⠸⠳"] # 0x2223 (Divides) # - "∤": [t: "⠸⠳⠈⠱"] # 0x2224 (Does not divide) - "←": # 0x2190 (Leftwards arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow) - "(..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - "(..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" then: [t: "⠐⠒⠒"] # 9.1 else: [t: "⠐⠒"] # 9.2 - "⟵": # 0x27F5 (Long leftwards arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow) - "(..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - "(..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" then: [t: "⠐⠒⠒"] # 9.1 else: [t: "⠐⠒"] # 9.2 - "→": # 0x2192 (Rightwards arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow), but rule out limit - "(" - " (..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - " (..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" - ") and" - "not(../..[self::m:munder or self::m:msub][*[1][self::m:mi and starts-with(., 'lim')]])" then: [t: "⠒⠒⠂"] # 9.1 else: [t: "⠒⠂"] # 9.2 - "⟶": # 0x27F6 (Long rightwards arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow), but rule out limit - "(" - " (..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - " (..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" - ") and" - "not(../..[self::m:munder or self::m:msub][*[1][self::m:mi and starts-with(., 'lim')]])" then: [t: "⠒⠒⠂"] # 9.1 else: [t: "⠒⠂"] # 9.2 - "⇀": # 0x21C0 (RIGHTWARDS HARPOON WITH BARB UPWARDS) [not mentioned in spec] - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow), but rule out limit - "(" - " (..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - " (..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" - ") and" - "not(../..[self::m:munder or self::m:msub][*[1][self::m:mi and starts-with(., 'lim')]])" then: [t: "⠒⠒⠂"] # 9.1 else: [t: "⠒⠂"] # 9.2 - "↔": # 0x2194 (Left right arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow) - "(..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - "(..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" then: [t: "⠐⠒⠒⠂"] # 9.1 else: [t: "⠐⠒⠂"] # 9.2 - "⟷": # 0x27F7 (Long Left right arrow) - test: # this is a guess as to when to use each if: # mi on either side or if parent is mover, mi on either side of the parent (e.g., A⟶B or labeled arrow) - "(..[self::m:mrow] and preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]) or " - "(..[self::m:mover][ ..[self::m:mrow][preceding-sibling::*[1][self::m:mi] and following-sibling::*[1][self::m:mi]] ])" then: [t: "⠐⠒⠒⠂"] # 9.1 else: [t: "⠐⠒⠂"] # 9.2 # - "↚": [t: "1⠳⠪⠈⠱"] # 0x219A (Leftwards arrow with stroke) # - "↛": [t: "1⠳⠕⠈⠱"] # 0x219B (Rightwards arrow with stroke) # - "↜": [t: "1⠳⠔⠢⠪"] # 0x219C (Leftwards wave arrow) # - "↝": [t: "1⠳⠢⠔⠕"] # 0x219D (Rightwards wave arrow) # - "↞": [t: "1⠳⠒⠗⠗⠪"] # 0x219E (Leftwards two headed arrow) # - "↟": [t: "1⠳⠒⠗⠗⠬"] # 0x219F (Upwards two headed arrow) # - "↠": [t: "1⠳⠒⠗⠗⠕"] # 0x21A0 (Rightwards two headed arrow) # - "↡": [t: "1⠳⠒⠗⠗⠩"] # 0x21A1 (Downwards two headed arrow) # - "↢": [t: "1⠳⠗⠗⠪"] # 0x21A2 (Leftwards arrow with tail) # - "↣": [t: "1⠳⠗⠗⠕"] # 0x21A3 (Rightwards arrow with tail) # - "↤": [t: "1⠳⠳⠗⠪"] # 0x21A4 (Leftwards arrow from bar) # - "↥": [t: "1⠳⠳⠗⠬"] # 0x21A5 (Upwards arrow from bar) # - "↦": [t: "1⠳⠳⠗⠕"] # 0x21A6 (Rightwards arrow from bar) # - "↧": [t: "1⠳⠳⠗⠩"] # 0x21A7 (Downwards arrow from bar) # - "↭": [t: "1⠳⠺⠔⠢⠗⠕"] # 0x21AD (Left right wave arrow) # - "↮": [t: "1⠳⠺⠗⠕⠈⠱"] # 0x21AE (Left right arrow with stroke) # - "↰": [t: "1⠳⠴⠬"] # 0x21B0 (Upwards arrow with tip left) # - "↱": [t: "1⠳⠲⠬"] # 0x21B1 (Upwards arrow with tip right) # - "↲": [t: "1⠳⠲⠩"] # 0x21B2 (Downwards arrow with tip left) # - "↳": [t: "1⠳⠴⠩"] # 0x21B3 (Downwards arrow with tip right) # - "↶": [t: "1⠳⠔⠔⠪"] # 0x21B6 (Anticlockwise top semicircle arrow) # - "↷": [t: "1⠳⠢⠢⠕"] # 0x21B7 (Clockwise top semicircle arrow) # - "↼": [t: "1⠳⠈⠗⠪"] # 0x21BC (Leftwards harpoon with barb upwards) # - "↽": [t: "1⠳⠠⠗⠪"] # 0x21BD (Leftwards harpoon with barb downwards) # - "↾": [t: "1⠳⠠⠗⠬"] # 0x21BE (Upwards harpoon with barb rightwards) # - "↿": [t: "1⠳⠈⠗⠬"] # 0x21BF (Upwards harpoon with barb leftwards) # - "⇀": [t: "1⠳⠈⠗⠕"] # 0x21C0 (Rightwards harpoon with barb upwards) # - "⇁": [t: "1⠳⠠⠗⠕"] # 0x21C1 (Rightwards harpoon with barb downwards) # - "⇂": [t: "1⠳⠈⠗⠩"] # 0x21C2 (Downwards harpoon with barb rightwards) # - "⇃": [t: "1⠳⠠⠗⠩"] # 0x21C3 (Downwards harpoon with barb leftwards) # - "⇄": [t: "1⠳⠕⠻⠳⠪"] # 0x21C4 (Rightwards arrow over leftwards arrow) # - "⇅": [t: "1⠳⠬⠿⠳⠩"] # 0x21C5 (Upwards arrow left of Downwards arrow) # - "⇌": [t: "⠘⠸⠶"] # 0x21CC (Rightwards harpoon over leftwards harpoon (equilibrium)) # - "⇑": [t: "1⠳⠶⠬"] # 0x21D1 (Upwards double arrow) # - "⇓": [t: "1⠳⠶⠩"] # 0x21D3 (Downwards double arrow) # - "⇕": [t: "1⠳⠺⠶⠗⠬"] # 0x21D5 (Up down double arrow) # - "⇠": [t: "1⠳⠂⠪"] # 0x21E0 (Leftwards dashed arrow) # - "⇡": [t: "1⠳⠂⠬"] # 0x21E1 (Upwards dashed arrow) # - "⇢": [t: "1⠳⠂⠕"] # 0x21E2 (Rightwards dashed arrow) # - "⇣": [t: "1⠳⠂⠩"] # 0x21E3 (Downwards dashed arrow) # - "⥂": [t: "⠸⠶"] # 0x2942 (Rightwards arrow above short leftwards arrow (equilibrium, trend to the right)) # - "⥄": [t: "⠈⠸⠶"] # 0x2944 (Short rightwards arrow above leftwards arrow (equilibrium, trend to the left)) # - "▤": [t: "⠨⠫⠼⠙t"] # 0x25A4 (Square with horizontal fill) # - "▥": [t: "⠨⠫⠼⠙t"] # 0x25A5 (Square with vertical fill) # - "▦": [t: "⠨⠫⠼⠙t"] # 0x25A6 (Square with orthogonal crosshatch fill) # - "▧": [t: "⠨⠫⠼⠙t"] # 0x25A7 (Square with upper left to lower right fill) # - "▨": [t: "⠨⠫⠼⠙t"] # 0x25A8 (Square with upper right to lower left fill) # - "▩": [t: "⠨⠫⠼⠙t"] # 0x25A9 (Square with diagonal crosshatch fill) # - "◍": [t: "⠨⠫⠿t"] # 0x25CD (Circle with vertical fill) # - "▱": [t: "1⠫⠈⠼⠙t"] # 0x25B1 (Parallelogram) # - "▲": [t: "⠸⠫⠼⠉t"] # 0x25B2 (Filled triangle) # - "■": [t: "⠸⠫⠼⠙t"] # 0x25A0 (Filled square) # - "≜": [t: "⠠⠨⠙⠻⠐⠶"] # 0x225C (Delta equal to) # - "≝": [t: "1⠣⠙⠑⠋⠜⠻⠐⠶"] # 0x225D (Equal to by definition) # - "⊕": [t: "1⠫⠿⠪⠐⠖t"] # 0x2295 (Circled plus) # - "⊖": [t: "1⠫⠿⠪⠐⠤t"] # 0x2296 (Circled minus) # - "⊗": [t: "1⠫⠿⠪⠐⠦t"] # 0x2297 (Circled times) # - "⊛": [t: "1⠫⠿⠪⠐⠔t"] # 0x229B (Circled asterisk operator) # - "⊞": [t: "1⠫⠼⠙⠪⠐⠖t"] # 0x229E (Squared plus) # - "⊟": [t: "1⠫⠼⠙⠪⠐⠤t"] # 0x229F (Squared minus) # - "⊠": [t: "1⠫⠼⠙⠪⠐⠦t"] # 0x22A0 (Squared times) # - "⋇": [t: "1⠌⠯⠦"] # 0x22C7 (Division times) # - "⊩": [t: "⠸⠳⠿⠸⠒"] # 0x22A9 (Forces) - "˙": [t: "⠈"] # 0x02D9 ( Dot Above) - "¨": [t: "⠈⠈"] # 0x00A8 ( Diaeresis/Double Dot Above ) - "⃛": [t: "⠈⠈⠈"] # 0x20db (combining triple dot) - "©": [t: "⠣⠨⠉⠜"] # 0xa9 (Copyright) - "®": [t: "⠣⠨⠗⠜"] # 0xa9 (Registered sign) - "…": [t: "⠄⠄⠄"] # 0x2026 (Ellipsis) - "⋯": [t: "⠄⠄⠄"] # 0x22EF (mid-line Ellipsis) -- seems to be same based on Example 10.1.3 # All the quotes are the same - "\"": [t: "⠦"] - "'": [t: "⠄"] - "“": [t: "⠦"] # 0x201C - "”": [t: "⠦"] # 0x201C - "‘": [t: "⠦"] - "’": # 0x2019 (2.3_3) - test: if: "self::m:mn" then: [t: "N⠂"] # same as '.' block separator else: [t: "⠦"] - "«": [t: "⠦"] - "»": [t: "⠦"] - " ": # 0x20 (Space) - test: - if: "self::m:mn" then: [t: "N⠄"] - else_if: "@data-added='missing-content' or @data-empty-in-2D or @width > 1.1" then: [t: "⠰⠤⠆"] # omission - else_if: "@width < 0.25" then: [t: ""] # tweaking space -- ignore else: [t: "W"] # space in text or wide enough space - " ": # 0xa0 (Non-breaking Space) - test: - if: "self::m:mn" then: [t: "N⠄"] else: [t: "W"] - ",": # 0x2c (Comma) - test: if: "self::m:mn" then: [t: "N⠂"] else: [t: "W⠂"] - ".": # 0x2e (Period) -- 2.3 says that if this is acting like a decimal separator, it should be brailled like "," - test: if: "self::m:mn" then: # presunme this is likely uses "," for a decimal separator, so just do a few checks # 1. if there are < 3 chars after the first ".", then not a block separator # 2. if there is a '.' or other likely block separator after the first '.', then not decimal separator # likely other (complicated?) other tests that could be used - with: variables: [StringAfter: "substring-after(., '.')"] replace: - test: if: "string-length($StringAfter) >= 3 and string-length($StringAfter)=string-length( translate($StringAfter, $BlockSeparators, '') )" then: [t: "N⠄"] # really is a block separator else: [t: "N⠂"] # treat as decimal separator else: [t: "W⠄"] - ":": [t: "⠐⠂"] # 0x003A (Colon) - "-": [t: "⠤"] # 0x2d (Minus sign or hyphen) - "⁡": [t: ""] # 0x2061⁡ (invisible function apply) - "⁢": [t: ""] # 0x2062 (invisible times) - "⁣": [t: ""] # 0x2063⁡ (invisible separator) - "⁤": [t: ""] # 0x2064 (invisible plus) - "`": [t: "⠢"] # 0x0060 (GRAVE ACCEN) - "א": [t: "⠠⠳"] # 0x05D0 (aleph) - "○": [t: "⠪⠕"] # 0x25CB (círculo) - "∞": [t: "⠼⠳"] # 0x221E (infinito) - "⎔": [t: "⠯⠕"] # 0x2394 (polígono) - "‰": [t: "⠸⠴⠴"] # 0x2030 (tanto por mil) - "¬": [t: "⠠⠄"] # 0x00AC (negación lógica) - "↕": [t: "⠸⠅"] # 0x2195 (flecha arriba-abajo) - "↖": [t: "⠐⠡"] # 0x2196 (flecha oblicua arriba-izquierda) - "↙": [t: "⠐⠌"] # 0x2199 (flecha abajo-izquierda) - "↓": [t: "⠸⠄"] # 0x2193 (flecha hacia abajo) - "↘": [t: "⠡⠂"] # 0x2198 (flecha oblicua abajo-derecha) - "↗": [t: "⠌⠂"] # 0x2197 (flecha arriba-derecha) - "↑": [t: "⠸⠁"] # 0x2191 (flecha hacia arriba) - "△": [t: "⠠⠾"] # 0x25B3 (Triangle) - "▭": [t: "⠯⠽"] # 0x25AD (rectángulo) - "□": [t: "⠸⠽"] # 0x25A1 (cuadrado) - "⟺": [t: "⠪⠒⠕"] # 0x27FA (doble implicación «si y solo si») - "⟸": [t: "⠪⠒"] # 0x27F8 (implicación recíproca; porque) - "⟹": [t: "⠒⠕"] # 0x27F9 (implicación directa; implica) - "⇔": [t: "⠪⠒⠕"] # 0x21D4 (LEFT RIGHT DOUBLE ARROW) - "⇐": [t: "⠪⠒"] # 0x21D0 (LEFTWARDS DOUBLE ARROW) - "⇒": [t: "⠒⠕"] # 0x21D2 (RIGHTWARDS DOUBLE ARROW) - "⤡": [t: "⠐⠡⠂"] # 0x2921 (flecha abajo-derecha y arriba izquierda) - "⤢": [t: "⠐⠌⠂"] # 0x2922 (flecha abajo-izquierda y arriba derecha) - "⌋": [t: "⠠⠾"] # 0x230B (cerrar suelo) - "⌊": [t: "⠷⠄"] # 0x230A (abrir suelo) - "⌉": [t: "⠐⠾"] # 0x2309 (cerrar techo) - "⌈": [t: "⠷⠂"] # 0x2308 (abrir techo) - "⋩": [t: "⠕⠂"] # 0x22E9 (posterior a MULTI) - "⋨": [t: "⠐⠪"] # 0x22E8 (anterior a MULTI) - "⋟": [t: "⠕⠂⠶"] # 0x22DF (posterior o igual a) - "⋞": [t: "⠐⠪⠶"] # 0x22DE (anterior o igual a) - "⋝": [t: "⠕⠶"] # 0x22DD (mayor o igual que MULTI) - "⋜": [t: "⠪⠶"] # 0x22DC (menor o igual que MULTI) - "⋏": [t: "⠸⠣"] # 0x22CF (proposición falsa) - "⋎": [t: "⠸⠎"] # 0x22CE (proposición verdadera) - "⨂": [t: "⠪⠦"] # 0x2A02 (producto tensorial) - "⨁": [t: "⠪⠖"] # 0x2A01 (suma directa) - "⋃": # 0x22C3 (unión de una familia de conjuntos) - t: "⠿⠜" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "⋂": # 0x22C2 (intersección de una familia de conjuntos) - t: "⠿⠱" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "⋁": # 0x22C1 (disyunción de una familia de proposiciones) - t: "⠿⠊" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "⋀": # 0x22C0 (conjunción de una familia de proposiciones) - t: "⠿⠢" - test: if: "not(IsNode(.., 'modified'))" then: [t: "⠱"] - "⊿": [t: "⠸⠦"] # 0x22BF (triángulo rectángulo) - "⊩": [t: "⠸⠶"] # 0x22A9 (tautología) - "⊮": [t: "⠘⠸⠶"] # 0x22AE (no tautología) - "⊇": [t: "⠰⠜"] # 0x2287 (incluye o es igual a) - "⊉": [t: "⠘⠰⠜"] # 0x2289 (no incluye ni es igual a) - "⊆": [t: "⠣⠆"] # 0x2286 (incluido o es igual a) - "⊈": [t: "⠘⠣⠆"] # 0x2288 (no incluido ni es igual a) - "⊃": [t: "⠠⠜"] # 0x2283 (Incluye; tiene como subconjunto) - "⊅": [t: "⠘⠠⠜"] # 0x2285 (no incluye a) - "⊂": [t: "⠣⠄"] # 0x2282 (Incluido; subconjunto) - "⊄": [t: "⠘⠣⠄"] # 0x2284 (no incluido en) - "⋡": [t: "⠘⠕⠂⠶"] # 0x22E1 (no es posterior ni igual a) - "≽": [t: "⠕⠂⠶"] # 0x227D (sigue o igual a) - "⋠": [t: "⠘⠐⠪⠶"] # 0x22E0 (no es anterior ni igual a) - "≼": [t: "⠐⠪⠶"] # 0x227C (precede o igual a) - "≹": [t: "⠘⠕⠪"] # 0x2279 (ni mayor ni menor que) - "≸": [t: "⠘⠕⠪"] # 0x2278 (ni mayor ni menor que) - "≧": [t: "⠕⠶"] # 0x2267 (mayor o igual que MULTI) - "≦": [t: "⠪⠶"] # 0x2266 (menor o igual que MULTI) - "≱": [t: "⠘⠕⠶"] # 0x2271 (no es mayor ni igual que) - "≥": [t: "⠕⠶"] # 0x2265 (mayor o igual que MULTI) - "≤": [t: "⠪⠶"] # 0x2264 (menor o igual que MULTI) - "≰": [t: "⠘⠪⠶"] # 0x2270 (no es menor ni igual que) - "⩽": [t: "⠪⠶"] # 0x227D - "⩾": [t: "⠕⠶"] # 0x2A7E (greater-than-or-slanted-equals) # FIX: ≈" p99 has "⠐⠶" - "≈": [t: "⠐⠶⠄"] # 0x2248 (casi igual a; asintóticamente igual a) - "≄": [t: "⠘⠐⠶⠄"] # 0x2244 (no es asintóticamente igual a) - "≁": [t: "⠘⠐⠢⠄"] # 0x2241 (tilde sube-baja tachada) - "∺": [t: "⠨⠒⠅"] # 0x223A (progresión geométrica) - "∷": [t: "⠰⠆"] # 0x2237 (proporción; igualdad de razones) - "∶": [t: "⠐⠂"] # 0x2236 (ratio) - "∵": [t: "⠀⠈⠌⠀"] # 0x2235 (puesto que) - "∴": [t: "⠀⠠⠡⠀"] # 0x2234 (por lo tanto) - "∪": [t: "⠸⠜"] # 0x222A (unión) - "⩊": [t: "⠢⠔"] # 0x2A4A (curva geométrica) - "∩": [t: "⠸⠱"] # 0x2229 (intersección) - "⊻": [t: "⠸⠮"] # 0x2228 (disyunción excluyente) - "∨": [t: "⠸⠊"] # 0x2228 (disyunción (o)) - "∧": [t: "⠸⠢"] # 0x2227 (conjunción (y)) - "∤": [t: "⠘⠸⠀"] # 0x2224 (no es divisor de) - "∝": [t: "⠸⠲"] # 0x221D (proporcional a) - "∖": [t: "⠐⠄"] # 0x2216 (diferencia de conjuntos) - "∌": [t: "⠘⠐⠜"] # 0x220C (no comprende; no tiene como elemento) - "∋": [t: "⠐⠜"] # 0x220B (comprende; tiene como elemento) - "∈": [t: "⠣⠂"] # 0x2208 (es elemento de; pertenece a) - "∉": [t: "⠘⠣⠂"] # 0x2209 (no es un elemento de; no pertenece a) - "∅": [t: "⠸⠚"] # 0x2205 (conjunto vacío) - "∃": [t: "⠨⠢"] # 0x2203 (cuantificador existencial: existe por lo menos un elemento) - "∄": [t: "⠘⠨⠢"] # 0x2204 (no existe) - "∀": [t: "⠨⠄"] # 0x2200 (cuantificador universal: para todo) - "ǁ": [t: "⠸⠇"] # 0x01C1 (doble barra) - "÷": [t: "⠲"] # 0x00F7 (dividido por) - "×": # 0x00D7 (multiplicar (aspas)) # FIX: this is a hacky attempt to figure out whether this is vector multiplication or regular multiplication # Look for an arrow above or a bold on each side - test: if: - "preceding-sibling::*[1][@math-variant='bold' or self::m:mover[*[2][.='→' or .='⟶' or .='⇀']]] and" - "following-sibling::*[1][@math-variant='bold' or self::m:mover[*[2][.='→' or .='⟶' or .='⇀']]]" then: [t: "⠈⠦"] else: [t: "⠦"] - "≫": [t: "⠕⠕"] # 0x226B (mucho mayor que) - "≪": [t: "⠪⠪"] # 0x226A (mucho menor que) - "±": [t: "⠖⠒⠤"] # 0x00B1 (más o menos) - "⊁": [t: "⠘⠕⠂"] # 0x2281 (no es posterior a) - "≻": [t: "⠕⠂"] # 0x227B (sigue a; posterior a) - "≯": [t: "⠘⠕"] # 0x226F (no mayor que) - "=": [t: "⠶"] # 0x003D (igual a) - "≠": [t: "⠘⠶"] # 0x2260 (distinto de) - "⊀": [t: "⠘⠐⠪"] # 0x2280 (no es anterior a) - "⪼": [t: "⠕⠕⠂"] # 0x2ABC (muy posterior a) - "⪻": [t: "⠐⠪⠪"] # 0x2ABB (muy anterior a) - "≺": [t: "⠐⠪"] # 0x227A (precede a; anterior a) - "≮": [t: "⠘⠪"] # 0x226E (no menor que) - "∓": [t: "⠤⠒⠖"] # 0x2213 (menos o más) - "∕": [t: "⠠⠂"] # 0x2215 (conjunto cociente) - "〛": [t: "⠾⠂"] # 0x301B (cerrar corchetes de clase) - "〚": [t: "⠐⠷"] # 0x301A (abrir corchetes de clase) - "₡": [t: "⠸⠉"] # 0x20A1 (colón) - "€": [t: "⠸⠑"] # 0x20AC (euro) - "¥": [t: "⠸⠽"] # 0x00A5 (yen) - "£": [t: "⠐⠮"] # 0x00A3 (libra) - "¢": [t: "⠘⠉"] # 0x00A2 (centavo) - "〉": [t: "⠨⠂"] # 0x232A (cerrar paréntesis angulares) - "〈": [t: "⠐⠅"] # 0x2329 (abrir paréntesis angulares) - "⟨": [t: "⠐⠅"] # 0x27E8 (Mathematical left angle bracket) - "⟩": [t: "⠨⠂"] # 0x27E9 (Mathematical right angle bracket) - "}": [t: "⠸⠂"] # 0x007D (cerrar llaves) - "|": [t: "⠸𝘄"] # 0x007C (barra vertical) - "{": [t: "⠐⠇"] # 0x007B (abrir llaves) - "\\": [t: "⠐⠄"] # 0x005C (barra inversa) - ";": [t: "⠀⠆"] # 0x003B (punto y coma de separación) - "/": [t: "⠲"] # 0x002F (barra oblicua) - "%": [t: "⠸⠴"] # 0x0025 (tanto por ciento) - "$": - test: if: "following-sibling::*[self::m:mn]" then: [t: "⠸⠏"] # 0x0024 (peso) else: [t: "⠸⠎"] # 0x0024 (dólar) - "#": [t: "⠼⠅"] # 0x0023 (cardinal de un conjunto) - "₿": [t: "⠸⠃"] # 0x20BF (bitcoin) - "⟧": [t: "⠾⠂"] # 0x27E7 (cerrar corchete de clase) - "⟦": [t: "⠐⠷"] # 0x27E6 (abrir corchete de clase) - "∇": [t: "⠈⠻"] # 0x2207 (Nabla (del, inverted capital delta)) - "≐": [t: "⠈⠶"] # 0x2250 (aproximadamente igual a) - "≟": [t: "⠶⠢⠀"] # 0x225F (cuestionado que sea igual a) - "≔": [t: "⠰⠶"] # 0x2254 (igual por definición) - "≙": [t: "⠰⠒⠶"] # 0x2259 (corresponde a) - "≡": [t: "⠶⠶"] # 0x2261 (idéntico a; congruente con) - "∥": [t: "⠸⠇"] # 0x2225 (es paralela a) - "∦": [t: "⠘⠸⠇"] # 0x2226 (no paralela) - "≅": [t: "⠐⠢⠶"] # 0x2245 (congruente con) - "⊥": [t: "⠼⠄"] # 0x22A5 (perpendicular a/ortogonal a) [symbol used in spec] - "⟂": [t: "⠼⠤"] # 0x27C2 (Perpendicular) - "⊙": [t: "⠰⠄"] # 0x2299 (operador genérico (suele utilizarse para representar una operación entre elementos de un conjunto) - "⊚": [t: "⠰⠄"] # 0x229A (operador genérico (suele utilizarse para representar una operación entre elementos de un conjunto) - "⋆": [t: "⠰⠄"] # 0x22C6 (operador genérico (suele utilizarse para representar una operación entre elementos de un conjunto) - "†": [t: "⠰⠄"] # 0x2020 (operador genérico (suele utilizarse para representar una operación entre elementos de un conjunto) - "∗": [t: "⠰⠄"] # 0x2217 (operador genérico (suele utilizarse para representar una operación entre elementos de un conjunto)