yi-keymap-vim 0.14.1 → 0.15.0
raw patch · 33 files changed
+1573/−185 lines, 33 filesdep −semigroups
Dependencies removed: semigroups
Files
- src/Yi/Keymap/Vim.hs +1/−1
- src/Yi/Keymap/Vim/Common.hs +15/−2
- src/Yi/Keymap/Vim/Digraph.hs +1298/−55
- src/Yi/Keymap/Vim/Ex/Commands/BufferNew.hs +1/−1
- src/Yi/Keymap/Vim/Ex/Commands/Delete.hs +1/−1
- src/Yi/Keymap/Vim/Ex/Commands/Global.hs +1/−1
- src/Yi/Keymap/Vim/Ex/Commands/GotoLine.hs +1/−1
- src/Yi/Keymap/Vim/Ex/Commands/Quit.hs +12/−1
- src/Yi/Keymap/Vim/Ex/Commands/Substitute.hs +17/−82
- src/Yi/Keymap/Vim/Ex/Commands/Undo.hs +1/−1
- src/Yi/Keymap/Vim/ExMap.hs +1/−1
- src/Yi/Keymap/Vim/InsertMap.hs +1/−1
- src/Yi/Keymap/Vim/Motion.hs +1/−1
- src/Yi/Keymap/Vim/NormalMap.hs +12/−10
- src/Yi/Keymap/Vim/NormalOperatorPendingMap.hs +1/−1
- src/Yi/Keymap/Vim/Operator.hs +22/−9
- src/Yi/Keymap/Vim/ReplaceMap.hs +2/−1
- src/Yi/Keymap/Vim/ReplaceSingleCharMap.hs +1/−1
- src/Yi/Keymap/Vim/Search.hs +1/−1
- src/Yi/Keymap/Vim/SearchMotionMap.hs +1/−1
- src/Yi/Keymap/Vim/StateUtils.hs +8/−0
- src/Yi/Keymap/Vim/StyledRegion.hs +1/−1
- src/Yi/Keymap/Vim/Substitution.hs +99/−0
- src/Yi/Keymap/Vim/TextObject.hs +1/−1
- src/Yi/Keymap/Vim/Utils.hs +1/−1
- src/Yi/Keymap/Vim/VisualMap.hs +5/−4
- tests/Generic/TestPureBufferManipulations.hs +1/−1
- tests/vimtests/blockvisual/c.test +14/−0
- tests/vimtests/blockvisual/r_4.test +12/−0
- tests/vimtests/macros/repeat_last_macro.test +12/−0
- tests/vimtests/replace/12.test +8/−0
- tests/vimtests/undo/cw.test +12/−0
- yi-keymap-vim.cabal +8/−4
src/Yi/Keymap/Vim.hs view
@@ -26,7 +26,7 @@ import Data.List (find) import Data.Monoid ((<>)) import Data.Prototype (Proto (Proto), extractValue)-import Yi.Buffer.Adjusted (commitUpdateTransactionB, startUpdateTransactionB)+import Yi.Buffer (commitUpdateTransactionB, startUpdateTransactionB) import Yi.Editor import Yi.Event (Event (..), Key (KASCII), Modifier (MCtrl, MMeta)) import Yi.Keymap (Keymap, KeymapM, KeymapSet, YiM, modelessKeymapSet, write)
src/Yi/Keymap/Vim/Common.hs view
@@ -25,6 +25,7 @@ , EventString(..), unEv , OperatorName(..), unOp , RegisterName+ , Substitution(..) , module Yi.Keymap.Vim.MatchResult , lookupBestMatch, matchesString ) where@@ -41,7 +42,7 @@ import qualified Data.Text as T (Text, isPrefixOf, pack) import qualified Data.Text.Encoding as E (decodeUtf8, encodeUtf8) import Data.Typeable (Typeable)-import Yi.Buffer.Adjusted (Direction, Point, RegionStyle)+import Yi.Buffer (Direction, Point, RegionStyle) import Yi.Editor (EditorM) import Yi.Keymap (YiM) import Yi.Keymap.Vim.MatchResult (MatchResult (..))@@ -131,9 +132,10 @@ , vsOngoingInsertEvents :: !EventString , vsLastGotoCharCommand :: !(Maybe GotoCharCommand) , vsBindingAccumulator :: !EventString- , vsSecondaryCursors :: ![Point]+ , vsSecondaryCursors :: ![Point] -- TODO: these should live in a buffer, just as the main cursor does , vsPaste :: !Bool -- ^ like vim's :help paste , vsCurrentMacroRecording :: !(Maybe (MacroName, EventString))+ , vsLastSubstitution :: !(Maybe Substitution) } deriving (Typeable, Generic) instance Binary RepeatableAction@@ -161,6 +163,7 @@ mempty -- secondary cursors False -- :set paste Nothing -- current macro recording+ Nothing -- last substitution instance Binary VimState @@ -184,3 +187,13 @@ data VimBinding = VimBindingY (EventString -> VimState -> MatchResult (YiM RepeatToken)) | VimBindingE (EventString -> VimState -> MatchResult (EditorM RepeatToken))++data Substitution = Substitution+ { subsFrom :: YiString+ , subsTo :: YiString+ , subsFlagGlobal :: !Bool+ , subsFlagCaseInsensitive :: !Bool+ , subsFlagConfirm :: !Bool+ } deriving (Generic)++instance Binary Substitution
src/Yi/Keymap/Vim/Digraph.hs view
@@ -11,59 +11,1302 @@ defDigraphs :: [(String, Char)] defDigraphs =- [ ("ae", 'æ')- , ("a'", 'á')- , ("e'", 'é')- , ("e`", 'è')- , ("o\"", 'ő')- , ("o:", 'ö')- , ("a:", 'ä')- , ("e:", 'ë')- , ("u:", 'ü')- , ("AE", 'Æ')- , ("Ae", 'Æ')- , ("A'", 'Á')- , ("E'", 'É')- , ("E`", 'È')- , ("O\"", 'Ő')- , ("O:", 'Ö')- , ("A:", 'Ä')- , ("E:", 'Ë')- , ("U:", 'Ü')- , ("=e", '€')- , ("Cu", '¤')- , ("+-", '±')- , ("-+", '∓')- , ("^1", '¹')- , ("^2", '²')- , ("^3", '³')- , ("^4", '⁴')- , ("^5", '⁵')- , ("^6", '⁶')- , ("^7", '⁷')- , ("^8", '⁸')- , ("^9", '⁹')- , ("0S", '⁰')- , ("1S", '¹')- , ("2S", '²')- , ("3S", '³')- , ("4S", '⁴')- , ("5S", '⁵')- , ("6S", '⁶')- , ("7S", '⁷')- , ("8S", '⁸')- , ("9S", '⁹')- , ("0S", '⁰')- , ("0s", '₀')- , ("1s", '₁')- , ("2s", '₂')- , ("3s", '₃')- , ("4s", '₄')- , ("5s", '₅')- , ("6s", '₆')- , ("7s", '₇')- , ("8s", '₈')- , ("9s", '₉')- , ("0s", '₀')- , ("'0", '˚')+ [ ("SH", '\x0001') -- START OF HEADING (SOH)+ , ("SX", '\x0002') -- START OF TEXT (STX)+ , ("EX", '\x0003') -- END OF TEXT (ETX)+ , ("ET", '\x0004') -- END OF TRANSMISSION (EOT)+ , ("EQ", '\x0005') -- ENQUIRY (ENQ)+ , ("AK", '\x0006') -- ACKNOWLEDGE (ACK)+ , ("BL", '\x0007') -- BELL (BEL)+ , ("BS", '\x0008') -- BACKSPACE (BS)+ , ("HT", '\x0009') -- CHARACTER TABULATION (HT)+ , ("VT", '\x000B') -- LINE TABULATION (VT)+ , ("FF", '\x000C') -- FORM FEED (FF)+ , ("SO", '\x000E') -- SHIFT OUT (SO)+ , ("SI", '\x000F') -- SHIFT IN (SI)+ , ("DL", '\x0010') -- DATALINK ESCAPE (DLE)+ , ("D1", '\x0011') -- DEVICE CONTROL ONE (DC1)+ , ("D2", '\x0012') -- DEVICE CONTROL TWO (DC2)+ , ("D3", '\x0013') -- DEVICE CONTROL THREE (DC3)+ , ("D4", '\x0014') -- DEVICE CONTROL FOUR (DC4)+ , ("NK", '\x0015') -- NEGATIVE ACKNOWLEDGE (NAK)+ , ("SY", '\x0016') -- SYNCHRONOUS IDLE (SYN)+ , ("EB", '\x0017') -- END OF TRANSMISSION BLOCK (ETB)+ , ("CN", '\x0018') -- CANCEL (CAN)+ , ("EM", '\x0019') -- END OF MEDIUM (EM)+ , ("SB", '\x001A') -- SUBSTITUTE (SUB)+ , ("EC", '\x001B') -- ESCAPE (ESC)+ , ("FS", '\x001C') -- FILE SEPARATOR (IS4)+ , ("GS", '\x001D') -- GROUP SEPARATOR (IS3)+ , ("RS", '\x001E') -- RECORD SEPARATOR (IS2)+ , ("US", '\x001F') -- UNIT SEPARATOR (IS1)+ , ("SP", '\x0020') -- SPACE+ , ("Nb", '\x0023') -- NUMBER SIGN+ , ("DO", '\x0024') -- DOLLAR SIGN+ , ("At", '\x0040') -- COMMERCIAL AT+ , ("<(", '\x005B') -- LEFT SQUARE BRACKET+ , ("//", '\x005C') -- REVERSE SOLIDUS+ , (")>", '\x005D') -- RIGHT SQUARE BRACKET+ , ("'>", '\x005E') -- CIRCUMFLEX ACCENT+ , ("'!", '\x0060') -- GRAVE ACCENT+ , ("(!", '\x007B') -- LEFT CURLY BRACKET+ , ("!!", '\x007C') -- VERTICAL LINE+ , ("!)", '\x007D') -- RIGHT CURLY BRACKET+ , ("'?", '\x007E') -- TILDE+ , ("DT", '\x007F') -- DELETE (DEL)+ , ("PA", '\x0080') -- PADDING CHARACTER (PAD)+ , ("HO", '\x0081') -- HIGH OCTET PRESET (HOP)+ , ("BH", '\x0082') -- BREAK PERMITTED HERE (BPH)+ , ("NH", '\x0083') -- NO BREAK HERE (NBH)+ , ("IN", '\x0084') -- INDEX (IND)+ , ("NL", '\x0085') -- NEXT LINE (NEL)+ , ("SA", '\x0086') -- START OF SELECTED AREA (SSA)+ , ("ES", '\x0087') -- END OF SELECTED AREA (ESA)+ , ("HS", '\x0088') -- CHARACTER TABULATION SET (HTS)+ , ("HJ", '\x0089') -- CHARACTER TABULATION WITH JUSTIFICATION (HTJ)+ , ("VS", '\x008A') -- LINE TABULATION SET (VTS)+ , ("PD", '\x008B') -- PARTIAL LINE FORWARD (PLD)+ , ("PU", '\x008C') -- PARTIAL LINE BACKWARD (PLU)+ , ("RI", '\x008D') -- REVERSE LINE FEED (RI)+ , ("S2", '\x008E') -- SINGLE-SHIFT TWO (SS2)+ , ("S3", '\x008F') -- SINGLE-SHIFT THREE (SS3)+ , ("DC", '\x0090') -- DEVICE CONTROL STRING (DCS)+ , ("P1", '\x0091') -- PRIVATE USE ONE (PU1)+ , ("P2", '\x0092') -- PRIVATE USE TWO (PU2)+ , ("TS", '\x0093') -- SET TRANSMIT STATE (STS)+ , ("CC", '\x0094') -- CANCEL CHARACTER (CCH)+ , ("MW", '\x0095') -- MESSAGE WAITING (MW)+ , ("SG", '\x0096') -- START OF GUARDED AREA (SPA)+ , ("EG", '\x0097') -- END OF GUARDED AREA (EPA)+ , ("SS", '\x0098') -- START OF STRING (SOS)+ , ("GC", '\x0099') -- SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)+ , ("SC", '\x009A') -- SINGLE CHARACTER INTRODUCER (SCI)+ , ("CI", '\x009B') -- CONTROL SEQUENCE INTRODUCER (CSI)+ , ("ST", '\x009C') -- STRING TERMINATOR (ST)+ , ("OC", '\x009D') -- OPERATING SYSTEM COMMAND (OSC)+ , ("PM", '\x009E') -- PRIVACY MESSAGE (PM)+ , ("AC", '\x009F') -- APPLICATION PROGRAM COMMAND (APC)+ , ("NS", '\x00A0') -- NO-BREAK SPACE+ , ("!I", '\x00A1') -- INVERTED EXCLAMATION MARK+ , ("Ct", '\x00A2') -- CENT SIGN+ , ("Pd", '\x00A3') -- POUND SIGN+ , ("Cu", '\x00A4') -- CURRENCY SIGN+ , ("Ye", '\x00A5') -- YEN SIGN+ , ("BB", '\x00A6') -- BROKEN BAR+ , ("SE", '\x00A7') -- SECTION SIGN+ , ("':", '\x00A8') -- DIAERESIS+ , ("Co", '\x00A9') -- COPYRIGHT SIGN+ , ("-a", '\x00AA') -- FEMININE ORDINAL INDICATOR+ , ("<<", '\x00AB') -- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK+ , ("NO", '\x00AC') -- NOT SIGN+ , ("--", '\x00AD') -- SOFT HYPHEN+ , ("Rg", '\x00AE') -- REGISTERED SIGN+ , ("'m", '\x00AF') -- MACRON+ , ("DG", '\x00B0') -- DEGREE SIGN+ , ("+-", '\x00B1') -- PLUS-MINUS SIGN+ , ("2S", '\x00B2') -- SUPERSCRIPT TWO+ , ("3S", '\x00B3') -- SUPERSCRIPT THREE+ , ("''", '\x00B4') -- ACUTE ACCENT+ , ("My", '\x00B5') -- MICRO SIGN+ , ("PI", '\x00B6') -- PILCROW SIGN+ , (".M", '\x00B7') -- MIDDLE DOT+ , ("',", '\x00B8') -- CEDILLA+ , ("1S", '\x00B9') -- SUPERSCRIPT ONE+ , ("-o", '\x00BA') -- MASCULINE ORDINAL INDICATOR+ , (">>", '\x00BB') -- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK+ , ("14", '\x00BC') -- VULGAR FRACTION ONE QUARTER+ , ("12", '\x00BD') -- VULGAR FRACTION ONE HALF+ , ("34", '\x00BE') -- VULGAR FRACTION THREE QUARTERS+ , ("?I", '\x00BF') -- INVERTED QUESTION MARK+ , ("A!", '\x00C0') -- LATIN CAPITAL LETTER A WITH GRAVE+ , ("A'", '\x00C1') -- LATIN CAPITAL LETTER A WITH ACUTE+ , ("A>", '\x00C2') -- LATIN CAPITAL LETTER A WITH CIRCUMFLEX+ , ("A?", '\x00C3') -- LATIN CAPITAL LETTER A WITH TILDE+ , ("A:", '\x00C4') -- LATIN CAPITAL LETTER A WITH DIAERESIS+ , ("AA", '\x00C5') -- LATIN CAPITAL LETTER A WITH RING ABOVE+ , ("AE", '\x00C6') -- LATIN CAPITAL LETTER AE+ , ("C,", '\x00C7') -- LATIN CAPITAL LETTER C WITH CEDILLA+ , ("E!", '\x00C8') -- LATIN CAPITAL LETTER E WITH GRAVE+ , ("E'", '\x00C9') -- LATIN CAPITAL LETTER E WITH ACUTE+ , ("E>", '\x00CA') -- LATIN CAPITAL LETTER E WITH CIRCUMFLEX+ , ("E:", '\x00CB') -- LATIN CAPITAL LETTER E WITH DIAERESIS+ , ("I!", '\x00CC') -- LATIN CAPITAL LETTER I WITH GRAVE+ , ("I'", '\x00CD') -- LATIN CAPITAL LETTER I WITH ACUTE+ , ("I>", '\x00CE') -- LATIN CAPITAL LETTER I WITH CIRCUMFLEX+ , ("I:", '\x00CF') -- LATIN CAPITAL LETTER I WITH DIAERESIS+ , ("D-", '\x00D0') -- LATIN CAPITAL LETTER ETH (Icelandic)+ , ("N?", '\x00D1') -- LATIN CAPITAL LETTER N WITH TILDE+ , ("O!", '\x00D2') -- LATIN CAPITAL LETTER O WITH GRAVE+ , ("O'", '\x00D3') -- LATIN CAPITAL LETTER O WITH ACUTE+ , ("O>", '\x00D4') -- LATIN CAPITAL LETTER O WITH CIRCUMFLEX+ , ("O?", '\x00D5') -- LATIN CAPITAL LETTER O WITH TILDE+ , ("O:", '\x00D6') -- LATIN CAPITAL LETTER O WITH DIAERESIS+ , ("*X", '\x00D7') -- MULTIPLICATION SIGN+ , ("O/", '\x00D8') -- LATIN CAPITAL LETTER O WITH STROKE+ , ("U!", '\x00D9') -- LATIN CAPITAL LETTER U WITH GRAVE+ , ("U'", '\x00DA') -- LATIN CAPITAL LETTER U WITH ACUTE+ , ("U>", '\x00DB') -- LATIN CAPITAL LETTER U WITH CIRCUMFLEX+ , ("U:", '\x00DC') -- LATIN CAPITAL LETTER U WITH DIAERESIS+ , ("Y'", '\x00DD') -- LATIN CAPITAL LETTER Y WITH ACUTE+ , ("TH", '\x00DE') -- LATIN CAPITAL LETTER THORN (Icelandic)+ , ("ss", '\x00DF') -- LATIN SMALL LETTER SHARP S (German)+ , ("a!", '\x00E0') -- LATIN SMALL LETTER A WITH GRAVE+ , ("a'", '\x00E1') -- LATIN SMALL LETTER A WITH ACUTE+ , ("a>", '\x00E2') -- LATIN SMALL LETTER A WITH CIRCUMFLEX+ , ("a?", '\x00E3') -- LATIN SMALL LETTER A WITH TILDE+ , ("a:", '\x00E4') -- LATIN SMALL LETTER A WITH DIAERESIS+ , ("aa", '\x00E5') -- LATIN SMALL LETTER A WITH RING ABOVE+ , ("ae", '\x00E6') -- LATIN SMALL LETTER AE+ , ("c,", '\x00E7') -- LATIN SMALL LETTER C WITH CEDILLA+ , ("e!", '\x00E8') -- LATIN SMALL LETTER E WITH GRAVE+ , ("e'", '\x00E9') -- LATIN SMALL LETTER E WITH ACUTE+ , ("e>", '\x00EA') -- LATIN SMALL LETTER E WITH CIRCUMFLEX+ , ("e:", '\x00EB') -- LATIN SMALL LETTER E WITH DIAERESIS+ , ("i!", '\x00EC') -- LATIN SMALL LETTER I WITH GRAVE+ , ("i'", '\x00ED') -- LATIN SMALL LETTER I WITH ACUTE+ , ("i>", '\x00EE') -- LATIN SMALL LETTER I WITH CIRCUMFLEX+ , ("i:", '\x00EF') -- LATIN SMALL LETTER I WITH DIAERESIS+ , ("d-", '\x00F0') -- LATIN SMALL LETTER ETH (Icelandic)+ , ("n?", '\x00F1') -- LATIN SMALL LETTER N WITH TILDE+ , ("o!", '\x00F2') -- LATIN SMALL LETTER O WITH GRAVE+ , ("o'", '\x00F3') -- LATIN SMALL LETTER O WITH ACUTE+ , ("o>", '\x00F4') -- LATIN SMALL LETTER O WITH CIRCUMFLEX+ , ("o?", '\x00F5') -- LATIN SMALL LETTER O WITH TILDE+ , ("o:", '\x00F6') -- LATIN SMALL LETTER O WITH DIAERESIS+ , ("-:", '\x00F7') -- DIVISION SIGN+ , ("o/", '\x00F8') -- LATIN SMALL LETTER O WITH STROKE+ , ("u!", '\x00F9') -- LATIN SMALL LETTER U WITH GRAVE+ , ("u'", '\x00FA') -- LATIN SMALL LETTER U WITH ACUTE+ , ("u>", '\x00FB') -- LATIN SMALL LETTER U WITH CIRCUMFLEX+ , ("u:", '\x00FC') -- LATIN SMALL LETTER U WITH DIAERESIS+ , ("y'", '\x00FD') -- LATIN SMALL LETTER Y WITH ACUTE+ , ("th", '\x00FE') -- LATIN SMALL LETTER THORN (Icelandic)+ , ("y:", '\x00FF') -- LATIN SMALL LETTER Y WITH DIAERESIS+ , ("A-", '\x0100') -- LATIN CAPITAL LETTER A WITH MACRON+ , ("a-", '\x0101') -- LATIN SMALL LETTER A WITH MACRON+ , ("A(", '\x0102') -- LATIN CAPITAL LETTER A WITH BREVE+ , ("a(", '\x0103') -- LATIN SMALL LETTER A WITH BREVE+ , ("A;", '\x0104') -- LATIN CAPITAL LETTER A WITH OGONEK+ , ("a;", '\x0105') -- LATIN SMALL LETTER A WITH OGONEK+ , ("C'", '\x0106') -- LATIN CAPITAL LETTER C WITH ACUTE+ , ("c'", '\x0107') -- LATIN SMALL LETTER C WITH ACUTE+ , ("C>", '\x0108') -- LATIN CAPITAL LETTER C WITH CIRCUMFLEX+ , ("c>", '\x0109') -- LATIN SMALL LETTER C WITH CIRCUMFLEX+ , ("C.", '\x010A') -- LATIN CAPITAL LETTER C WITH DOT ABOVE+ , ("c.", '\x010B') -- LATIN SMALL LETTER C WITH DOT ABOVE+ , ("C<", '\x010C') -- LATIN CAPITAL LETTER C WITH CARON+ , ("c<", '\x010D') -- LATIN SMALL LETTER C WITH CARON+ , ("D<", '\x010E') -- LATIN CAPITAL LETTER D WITH CARON+ , ("d<", '\x010F') -- LATIN SMALL LETTER D WITH CARON+ , ("D/", '\x0110') -- LATIN CAPITAL LETTER D WITH STROKE+ , ("d/", '\x0111') -- LATIN SMALL LETTER D WITH STROKE+ , ("E-", '\x0112') -- LATIN CAPITAL LETTER E WITH MACRON+ , ("e-", '\x0113') -- LATIN SMALL LETTER E WITH MACRON+ , ("E(", '\x0114') -- LATIN CAPITAL LETTER E WITH BREVE+ , ("e(", '\x0115') -- LATIN SMALL LETTER E WITH BREVE+ , ("E.", '\x0116') -- LATIN CAPITAL LETTER E WITH DOT ABOVE+ , ("e.", '\x0117') -- LATIN SMALL LETTER E WITH DOT ABOVE+ , ("E;", '\x0118') -- LATIN CAPITAL LETTER E WITH OGONEK+ , ("e;", '\x0119') -- LATIN SMALL LETTER E WITH OGONEK+ , ("E<", '\x011A') -- LATIN CAPITAL LETTER E WITH CARON+ , ("e<", '\x011B') -- LATIN SMALL LETTER E WITH CARON+ , ("G>", '\x011C') -- LATIN CAPITAL LETTER G WITH CIRCUMFLEX+ , ("g>", '\x011D') -- LATIN SMALL LETTER G WITH CIRCUMFLEX+ , ("G(", '\x011E') -- LATIN CAPITAL LETTER G WITH BREVE+ , ("g(", '\x011F') -- LATIN SMALL LETTER G WITH BREVE+ , ("G.", '\x0120') -- LATIN CAPITAL LETTER G WITH DOT ABOVE+ , ("g.", '\x0121') -- LATIN SMALL LETTER G WITH DOT ABOVE+ , ("G,", '\x0122') -- LATIN CAPITAL LETTER G WITH CEDILLA+ , ("g,", '\x0123') -- LATIN SMALL LETTER G WITH CEDILLA+ , ("H>", '\x0124') -- LATIN CAPITAL LETTER H WITH CIRCUMFLEX+ , ("h>", '\x0125') -- LATIN SMALL LETTER H WITH CIRCUMFLEX+ , ("H/", '\x0126') -- LATIN CAPITAL LETTER H WITH STROKE+ , ("h/", '\x0127') -- LATIN SMALL LETTER H WITH STROKE+ , ("I?", '\x0128') -- LATIN CAPITAL LETTER I WITH TILDE+ , ("i?", '\x0129') -- LATIN SMALL LETTER I WITH TILDE+ , ("I-", '\x012A') -- LATIN CAPITAL LETTER I WITH MACRON+ , ("i-", '\x012B') -- LATIN SMALL LETTER I WITH MACRON+ , ("I(", '\x012C') -- LATIN CAPITAL LETTER I WITH BREVE+ , ("i(", '\x012D') -- LATIN SMALL LETTER I WITH BREVE+ , ("I;", '\x012E') -- LATIN CAPITAL LETTER I WITH OGONEK+ , ("i;", '\x012F') -- LATIN SMALL LETTER I WITH OGONEK+ , ("I.", '\x0130') -- LATIN CAPITAL LETTER I WITH DOT ABOVE+ , ("i.", '\x0131') -- LATIN SMALL LETTER DOTLESS I+ , ("IJ", '\x0132') -- LATIN CAPITAL LIGATURE IJ+ , ("ij", '\x0133') -- LATIN SMALL LIGATURE IJ+ , ("J>", '\x0134') -- LATIN CAPITAL LETTER J WITH CIRCUMFLEX+ , ("j>", '\x0135') -- LATIN SMALL LETTER J WITH CIRCUMFLEX+ , ("K,", '\x0136') -- LATIN CAPITAL LETTER K WITH CEDILLA+ , ("k,", '\x0137') -- LATIN SMALL LETTER K WITH CEDILLA+ , ("kk", '\x0138') -- LATIN SMALL LETTER KRA+ , ("L'", '\x0139') -- LATIN CAPITAL LETTER L WITH ACUTE+ , ("l'", '\x013A') -- LATIN SMALL LETTER L WITH ACUTE+ , ("L,", '\x013B') -- LATIN CAPITAL LETTER L WITH CEDILLA+ , ("l,", '\x013C') -- LATIN SMALL LETTER L WITH CEDILLA+ , ("L<", '\x013D') -- LATIN CAPITAL LETTER L WITH CARON+ , ("l<", '\x013E') -- LATIN SMALL LETTER L WITH CARON+ , ("L.", '\x013F') -- LATIN CAPITAL LETTER L WITH MIDDLE DOT+ , ("l.", '\x0140') -- LATIN SMALL LETTER L WITH MIDDLE DOT+ , ("L/", '\x0141') -- LATIN CAPITAL LETTER L WITH STROKE+ , ("l/", '\x0142') -- LATIN SMALL LETTER L WITH STROKE+ , ("N'", '\x0143') -- LATIN CAPITAL LETTER N WITH ACUTE `+ , ("n'", '\x0144') -- LATIN SMALL LETTER N WITH ACUTE `+ , ("N,", '\x0145') -- LATIN CAPITAL LETTER N WITH CEDILLA `+ , ("n,", '\x0146') -- LATIN SMALL LETTER N WITH CEDILLA `+ , ("N<", '\x0147') -- LATIN CAPITAL LETTER N WITH CARON `+ , ("n<", '\x0148') -- LATIN SMALL LETTER N WITH CARON `+ , ("'n", '\x0149') -- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE `+ , ("NG", '\x014A') -- LATIN CAPITAL LETTER ENG+ , ("ng", '\x014B') -- LATIN SMALL LETTER ENG+ , ("O-", '\x014C') -- LATIN CAPITAL LETTER O WITH MACRON+ , ("o-", '\x014D') -- LATIN SMALL LETTER O WITH MACRON+ , ("O(", '\x014E') -- LATIN CAPITAL LETTER O WITH BREVE+ , ("o(", '\x014F') -- LATIN SMALL LETTER O WITH BREVE+ , ("O\"", '\x0150') -- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE+ , ("o\"", '\x0151') -- LATIN SMALL LETTER O WITH DOUBLE ACUTE+ , ("OE", '\x0152') -- LATIN CAPITAL LIGATURE OE+ , ("oe", '\x0153') -- LATIN SMALL LIGATURE OE+ , ("R'", '\x0154') -- LATIN CAPITAL LETTER R WITH ACUTE+ , ("r'", '\x0155') -- LATIN SMALL LETTER R WITH ACUTE+ , ("R,", '\x0156') -- LATIN CAPITAL LETTER R WITH CEDILLA+ , ("r,", '\x0157') -- LATIN SMALL LETTER R WITH CEDILLA+ , ("R<", '\x0158') -- LATIN CAPITAL LETTER R WITH CARON+ , ("r<", '\x0159') -- LATIN SMALL LETTER R WITH CARON+ , ("S'", '\x015A') -- LATIN CAPITAL LETTER S WITH ACUTE+ , ("s'", '\x015B') -- LATIN SMALL LETTER S WITH ACUTE+ , ("S>", '\x015C') -- LATIN CAPITAL LETTER S WITH CIRCUMFLEX+ , ("s>", '\x015D') -- LATIN SMALL LETTER S WITH CIRCUMFLEX+ , ("S,", '\x015E') -- LATIN CAPITAL LETTER S WITH CEDILLA+ , ("s,", '\x015F') -- LATIN SMALL LETTER S WITH CEDILLA+ , ("S<", '\x0160') -- LATIN CAPITAL LETTER S WITH CARON+ , ("s<", '\x0161') -- LATIN SMALL LETTER S WITH CARON+ , ("T,", '\x0162') -- LATIN CAPITAL LETTER T WITH CEDILLA+ , ("t,", '\x0163') -- LATIN SMALL LETTER T WITH CEDILLA+ , ("T<", '\x0164') -- LATIN CAPITAL LETTER T WITH CARON+ , ("t<", '\x0165') -- LATIN SMALL LETTER T WITH CARON+ , ("T/", '\x0166') -- LATIN CAPITAL LETTER T WITH STROKE+ , ("t/", '\x0167') -- LATIN SMALL LETTER T WITH STROKE+ , ("U?", '\x0168') -- LATIN CAPITAL LETTER U WITH TILDE+ , ("u?", '\x0169') -- LATIN SMALL LETTER U WITH TILDE+ , ("U-", '\x016A') -- LATIN CAPITAL LETTER U WITH MACRON+ , ("u-", '\x016B') -- LATIN SMALL LETTER U WITH MACRON+ , ("U(", '\x016C') -- LATIN CAPITAL LETTER U WITH BREVE+ , ("u(", '\x016D') -- LATIN SMALL LETTER U WITH BREVE+ , ("U0", '\x016E') -- LATIN CAPITAL LETTER U WITH RING ABOVE+ , ("u0", '\x016F') -- LATIN SMALL LETTER U WITH RING ABOVE+ , ("U\"", '\x0170') -- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE+ , ("u\"", '\x0171') -- LATIN SMALL LETTER U WITH DOUBLE ACUTE+ , ("U;", '\x0172') -- LATIN CAPITAL LETTER U WITH OGONEK+ , ("u;", '\x0173') -- LATIN SMALL LETTER U WITH OGONEK+ , ("W>", '\x0174') -- LATIN CAPITAL LETTER W WITH CIRCUMFLEX+ , ("w>", '\x0175') -- LATIN SMALL LETTER W WITH CIRCUMFLEX+ , ("Y>", '\x0176') -- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX+ , ("y>", '\x0177') -- LATIN SMALL LETTER Y WITH CIRCUMFLEX+ , ("Y:", '\x0178') -- LATIN CAPITAL LETTER Y WITH DIAERESIS+ , ("Z'", '\x0179') -- LATIN CAPITAL LETTER Z WITH ACUTE+ , ("z'", '\x017A') -- LATIN SMALL LETTER Z WITH ACUTE+ , ("Z.", '\x017B') -- LATIN CAPITAL LETTER Z WITH DOT ABOVE+ , ("z.", '\x017C') -- LATIN SMALL LETTER Z WITH DOT ABOVE+ , ("Z<", '\x017D') -- LATIN CAPITAL LETTER Z WITH CARON+ , ("z<", '\x017E') -- LATIN SMALL LETTER Z WITH CARON+ , ("O9", '\x01A0') -- LATIN CAPITAL LETTER O WITH HORN+ , ("o9", '\x01A1') -- LATIN SMALL LETTER O WITH HORN+ , ("OI", '\x01A2') -- LATIN CAPITAL LETTER OI+ , ("oi", '\x01A3') -- LATIN SMALL LETTER OI+ , ("yr", '\x01A6') -- LATIN LETTER YR+ , ("U9", '\x01AF') -- LATIN CAPITAL LETTER U WITH HORN+ , ("u9", '\x01B0') -- LATIN SMALL LETTER U WITH HORN+ , ("Z/", '\x01B5') -- LATIN CAPITAL LETTER Z WITH STROKE+ , ("z/", '\x01B6') -- LATIN SMALL LETTER Z WITH STROKE+ , ("ED", '\x01B7') -- LATIN CAPITAL LETTER EZH+ , ("A<", '\x01CD') -- LATIN CAPITAL LETTER A WITH CARON+ , ("a<", '\x01CE') -- LATIN SMALL LETTER A WITH CARON+ , ("I<", '\x01CF') -- LATIN CAPITAL LETTER I WITH CARON+ , ("i<", '\x01D0') -- LATIN SMALL LETTER I WITH CARON+ , ("O<", '\x01D1') -- LATIN CAPITAL LETTER O WITH CARON+ , ("o<", '\x01D2') -- LATIN SMALL LETTER O WITH CARON+ , ("U<", '\x01D3') -- LATIN CAPITAL LETTER U WITH CARON+ , ("u<", '\x01D4') -- LATIN SMALL LETTER U WITH CARON+ , ("A1", '\x01DE') -- LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON+ , ("a1", '\x01DF') -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON+ , ("A7", '\x01E0') -- LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON+ , ("a7", '\x01E1') -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON+ , ("A3", '\x01E2') -- LATIN CAPITAL LETTER AE WITH MACRON+ , ("a3", '\x01E3') -- LATIN SMALL LETTER AE WITH MACRON+ , ("G/", '\x01E4') -- LATIN CAPITAL LETTER G WITH STROKE+ , ("g/", '\x01E5') -- LATIN SMALL LETTER G WITH STROKE+ , ("G<", '\x01E6') -- LATIN CAPITAL LETTER G WITH CARON+ , ("g<", '\x01E7') -- LATIN SMALL LETTER G WITH CARON+ , ("K<", '\x01E8') -- LATIN CAPITAL LETTER K WITH CARON+ , ("k<", '\x01E9') -- LATIN SMALL LETTER K WITH CARON+ , ("O;", '\x01EA') -- LATIN CAPITAL LETTER O WITH OGONEK+ , ("o;", '\x01EB') -- LATIN SMALL LETTER O WITH OGONEK+ , ("O1", '\x01EC') -- LATIN CAPITAL LETTER O WITH OGONEK AND MACRON+ , ("o1", '\x01ED') -- LATIN SMALL LETTER O WITH OGONEK AND MACRON+ , ("EZ", '\x01EE') -- LATIN CAPITAL LETTER EZH WITH CARON+ , ("ez", '\x01EF') -- LATIN SMALL LETTER EZH WITH CARON+ , ("j<", '\x01F0') -- LATIN SMALL LETTER J WITH CARON+ , ("G'", '\x01F4') -- LATIN CAPITAL LETTER G WITH ACUTE+ , ("g'", '\x01F5') -- LATIN SMALL LETTER G WITH ACUTE+ , (";S", '\x02BF') -- MODIFIER LETTER LEFT HALF RING+ , ("'<", '\x02C7') -- CARON+ , ("'(", '\x02D8') -- BREVE+ , ("'.", '\x02D9') -- DOT ABOVE+ , ("'0", '\x02DA') -- RING ABOVE+ , ("';", '\x02DB') -- OGONEK+ , ("'\"", '\x02DD') -- DOUBLE ACUTE ACCENT+ , ("A%", '\x0386') -- GREEK CAPITAL LETTER ALPHA WITH TONOS+ , ("E%", '\x0388') -- GREEK CAPITAL LETTER EPSILON WITH TONOS+ , ("Y%", '\x0389') -- GREEK CAPITAL LETTER ETA WITH TONOS+ , ("I%", '\x038A') -- GREEK CAPITAL LETTER IOTA WITH TONOS+ , ("O%", '\x038C') -- GREEK CAPITAL LETTER OMICRON WITH TONOS+ , ("U%", '\x038E') -- GREEK CAPITAL LETTER UPSILON WITH TONOS+ , ("W%", '\x038F') -- GREEK CAPITAL LETTER OMEGA WITH TONOS+ , ("i3", '\x0390') -- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS+ , ("A*", '\x0391') -- GREEK CAPITAL LETTER ALPHA+ , ("B*", '\x0392') -- GREEK CAPITAL LETTER BETA+ , ("G*", '\x0393') -- GREEK CAPITAL LETTER GAMMA+ , ("D*", '\x0394') -- GREEK CAPITAL LETTER DELTA+ , ("E*", '\x0395') -- GREEK CAPITAL LETTER EPSILON+ , ("Z*", '\x0396') -- GREEK CAPITAL LETTER ZETA+ , ("Y*", '\x0397') -- GREEK CAPITAL LETTER ETA+ , ("H*", '\x0398') -- GREEK CAPITAL LETTER THETA+ , ("I*", '\x0399') -- GREEK CAPITAL LETTER IOTA+ , ("K*", '\x039A') -- GREEK CAPITAL LETTER KAPPA+ , ("L*", '\x039B') -- GREEK CAPITAL LETTER LAMDA+ , ("M*", '\x039C') -- GREEK CAPITAL LETTER MU+ , ("N*", '\x039D') -- GREEK CAPITAL LETTER NU+ , ("C*", '\x039E') -- GREEK CAPITAL LETTER XI+ , ("O*", '\x039F') -- GREEK CAPITAL LETTER OMICRON+ , ("P*", '\x03A0') -- GREEK CAPITAL LETTER PI+ , ("R*", '\x03A1') -- GREEK CAPITAL LETTER RHO+ , ("S*", '\x03A3') -- GREEK CAPITAL LETTER SIGMA+ , ("T*", '\x03A4') -- GREEK CAPITAL LETTER TAU+ , ("U*", '\x03A5') -- GREEK CAPITAL LETTER UPSILON+ , ("F*", '\x03A6') -- GREEK CAPITAL LETTER PHI+ , ("X*", '\x03A7') -- GREEK CAPITAL LETTER CHI+ , ("Q*", '\x03A8') -- GREEK CAPITAL LETTER PSI+ , ("W*", '\x03A9') -- GREEK CAPITAL LETTER OMEGA+ , ("J*", '\x03AA') -- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA+ , ("V*", '\x03AB') -- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA+ , ("a%", '\x03AC') -- GREEK SMALL LETTER ALPHA WITH TONOS+ , ("e%", '\x03AD') -- GREEK SMALL LETTER EPSILON WITH TONOS+ , ("y%", '\x03AE') -- GREEK SMALL LETTER ETA WITH TONOS+ , ("i%", '\x03AF') -- GREEK SMALL LETTER IOTA WITH TONOS+ , ("u3", '\x03B0') -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS+ , ("a*", '\x03B1') -- GREEK SMALL LETTER ALPHA+ , ("b*", '\x03B2') -- GREEK SMALL LETTER BETA+ , ("g*", '\x03B3') -- GREEK SMALL LETTER GAMMA+ , ("d*", '\x03B4') -- GREEK SMALL LETTER DELTA+ , ("e*", '\x03B5') -- GREEK SMALL LETTER EPSILON+ , ("z*", '\x03B6') -- GREEK SMALL LETTER ZETA+ , ("y*", '\x03B7') -- GREEK SMALL LETTER ETA+ , ("h*", '\x03B8') -- GREEK SMALL LETTER THETA+ , ("i*", '\x03B9') -- GREEK SMALL LETTER IOTA+ , ("k*", '\x03BA') -- GREEK SMALL LETTER KAPPA+ , ("l*", '\x03BB') -- GREEK SMALL LETTER LAMDA+ , ("m*", '\x03BC') -- GREEK SMALL LETTER MU+ , ("n*", '\x03BD') -- GREEK SMALL LETTER NU+ , ("c*", '\x03BE') -- GREEK SMALL LETTER XI+ , ("o*", '\x03BF') -- GREEK SMALL LETTER OMICRON+ , ("p*", '\x03C0') -- GREEK SMALL LETTER PI+ , ("r*", '\x03C1') -- GREEK SMALL LETTER RHO+ , ("*s", '\x03C2') -- GREEK SMALL LETTER FINAL SIGMA+ , ("s*", '\x03C3') -- GREEK SMALL LETTER SIGMA+ , ("t*", '\x03C4') -- GREEK SMALL LETTER TAU+ , ("u*", '\x03C5') -- GREEK SMALL LETTER UPSILON+ , ("f*", '\x03C6') -- GREEK SMALL LETTER PHI+ , ("x*", '\x03C7') -- GREEK SMALL LETTER CHI+ , ("q*", '\x03C8') -- GREEK SMALL LETTER PSI+ , ("w*", '\x03C9') -- GREEK SMALL LETTER OMEGA+ , ("j*", '\x03CA') -- GREEK SMALL LETTER IOTA WITH DIALYTIKA+ , ("v*", '\x03CB') -- GREEK SMALL LETTER UPSILON WITH DIALYTIKA+ , ("o%", '\x03CC') -- GREEK SMALL LETTER OMICRON WITH TONOS+ , ("u%", '\x03CD') -- GREEK SMALL LETTER UPSILON WITH TONOS+ , ("w%", '\x03CE') -- GREEK SMALL LETTER OMEGA WITH TONOS+ , ("'G", '\x03D8') -- GREEK LETTER ARCHAIC KOPPA+ , (",G", '\x03D9') -- GREEK SMALL LETTER ARCHAIC KOPPA+ , ("T3", '\x03DA') -- GREEK LETTER STIGMA+ , ("t3", '\x03DB') -- GREEK SMALL LETTER STIGMA+ , ("M3", '\x03DC') -- GREEK LETTER DIGAMMA+ , ("m3", '\x03DD') -- GREEK SMALL LETTER DIGAMMA+ , ("K3", '\x03DE') -- GREEK LETTER KOPPA+ , ("k3", '\x03DF') -- GREEK SMALL LETTER KOPPA+ , ("P3", '\x03E0') -- GREEK LETTER SAMPI+ , ("p3", '\x03E1') -- GREEK SMALL LETTER SAMPI+ , ("'%", '\x03F4') -- GREEK CAPITAL THETA SYMBOL+ , ("j3", '\x03F5') -- GREEK LUNATE EPSILON SYMBOL+ , ("IO", '\x0401') -- CYRILLIC CAPITAL LETTER IO+ , ("D%", '\x0402') -- CYRILLIC CAPITAL LETTER DJE+ , ("G%", '\x0403') -- CYRILLIC CAPITAL LETTER GJE+ , ("IE", '\x0404') -- CYRILLIC CAPITAL LETTER UKRAINIAN IE+ , ("DS", '\x0405') -- CYRILLIC CAPITAL LETTER DZE+ , ("II", '\x0406') -- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I+ , ("YI", '\x0407') -- CYRILLIC CAPITAL LETTER YI+ , ("J%", '\x0408') -- CYRILLIC CAPITAL LETTER JE+ , ("LJ", '\x0409') -- CYRILLIC CAPITAL LETTER LJE+ , ("NJ", '\x040A') -- CYRILLIC CAPITAL LETTER NJE+ , ("Ts", '\x040B') -- CYRILLIC CAPITAL LETTER TSHE+ , ("KJ", '\x040C') -- CYRILLIC CAPITAL LETTER KJE+ , ("V%", '\x040E') -- CYRILLIC CAPITAL LETTER SHORT U+ , ("DZ", '\x040F') -- CYRILLIC CAPITAL LETTER DZHE+ , ("A=", '\x0410') -- CYRILLIC CAPITAL LETTER A+ , ("B=", '\x0411') -- CYRILLIC CAPITAL LETTER BE+ , ("V=", '\x0412') -- CYRILLIC CAPITAL LETTER VE+ , ("G=", '\x0413') -- CYRILLIC CAPITAL LETTER GHE+ , ("D=", '\x0414') -- CYRILLIC CAPITAL LETTER DE+ , ("E=", '\x0415') -- CYRILLIC CAPITAL LETTER IE+ , ("Z%", '\x0416') -- CYRILLIC CAPITAL LETTER ZHE+ , ("Z=", '\x0417') -- CYRILLIC CAPITAL LETTER ZE+ , ("I=", '\x0418') -- CYRILLIC CAPITAL LETTER I+ , ("J=", '\x0419') -- CYRILLIC CAPITAL LETTER SHORT I+ , ("K=", '\x041A') -- CYRILLIC CAPITAL LETTER KA+ , ("L=", '\x041B') -- CYRILLIC CAPITAL LETTER EL+ , ("M=", '\x041C') -- CYRILLIC CAPITAL LETTER EM+ , ("N=", '\x041D') -- CYRILLIC CAPITAL LETTER EN+ , ("O=", '\x041E') -- CYRILLIC CAPITAL LETTER O+ , ("P=", '\x041F') -- CYRILLIC CAPITAL LETTER PE+ , ("R=", '\x0420') -- CYRILLIC CAPITAL LETTER ER+ , ("S=", '\x0421') -- CYRILLIC CAPITAL LETTER ES+ , ("T=", '\x0422') -- CYRILLIC CAPITAL LETTER TE+ , ("U=", '\x0423') -- CYRILLIC CAPITAL LETTER U+ , ("F=", '\x0424') -- CYRILLIC CAPITAL LETTER EF+ , ("H=", '\x0425') -- CYRILLIC CAPITAL LETTER HA+ , ("C=", '\x0426') -- CYRILLIC CAPITAL LETTER TSE+ , ("C%", '\x0427') -- CYRILLIC CAPITAL LETTER CHE+ , ("S%", '\x0428') -- CYRILLIC CAPITAL LETTER SHA+ , ("Sc", '\x0429') -- CYRILLIC CAPITAL LETTER SHCHA+ , ("='", '\x042A') -- CYRILLIC CAPITAL LETTER HARD SIGN+ , ("Y=", '\x042B') -- CYRILLIC CAPITAL LETTER YERU+ , ("%'", '\x042C') -- CYRILLIC CAPITAL LETTER SOFT SIGN+ , ("JE", '\x042D') -- CYRILLIC CAPITAL LETTER E+ , ("JU", '\x042E') -- CYRILLIC CAPITAL LETTER YU+ , ("JA", '\x042F') -- CYRILLIC CAPITAL LETTER YA+ , ("a=", '\x0430') -- CYRILLIC SMALL LETTER A+ , ("b=", '\x0431') -- CYRILLIC SMALL LETTER BE+ , ("v=", '\x0432') -- CYRILLIC SMALL LETTER VE+ , ("g=", '\x0433') -- CYRILLIC SMALL LETTER GHE+ , ("d=", '\x0434') -- CYRILLIC SMALL LETTER DE+ , ("e=", '\x0435') -- CYRILLIC SMALL LETTER IE+ , ("z%", '\x0436') -- CYRILLIC SMALL LETTER ZHE+ , ("z=", '\x0437') -- CYRILLIC SMALL LETTER ZE+ , ("i=", '\x0438') -- CYRILLIC SMALL LETTER I+ , ("j=", '\x0439') -- CYRILLIC SMALL LETTER SHORT I+ , ("k=", '\x043A') -- CYRILLIC SMALL LETTER KA+ , ("l=", '\x043B') -- CYRILLIC SMALL LETTER EL+ , ("m=", '\x043C') -- CYRILLIC SMALL LETTER EM+ , ("n=", '\x043D') -- CYRILLIC SMALL LETTER EN+ , ("o=", '\x043E') -- CYRILLIC SMALL LETTER O+ , ("p=", '\x043F') -- CYRILLIC SMALL LETTER PE+ , ("r=", '\x0440') -- CYRILLIC SMALL LETTER ER+ , ("s=", '\x0441') -- CYRILLIC SMALL LETTER ES+ , ("t=", '\x0442') -- CYRILLIC SMALL LETTER TE+ , ("u=", '\x0443') -- CYRILLIC SMALL LETTER U+ , ("f=", '\x0444') -- CYRILLIC SMALL LETTER EF+ , ("h=", '\x0445') -- CYRILLIC SMALL LETTER HA+ , ("c=", '\x0446') -- CYRILLIC SMALL LETTER TSE+ , ("c%", '\x0447') -- CYRILLIC SMALL LETTER CHE+ , ("s%", '\x0448') -- CYRILLIC SMALL LETTER SHA+ , ("sc", '\x0449') -- CYRILLIC SMALL LETTER SHCHA+ , ("='", '\x044A') -- CYRILLIC SMALL LETTER HARD SIGN+ , ("y=", '\x044B') -- CYRILLIC SMALL LETTER YERU+ , ("%'", '\x044C') -- CYRILLIC SMALL LETTER SOFT SIGN+ , ("je", '\x044D') -- CYRILLIC SMALL LETTER E+ , ("ju", '\x044E') -- CYRILLIC SMALL LETTER YU+ , ("ja", '\x044F') -- CYRILLIC SMALL LETTER YA+ , ("io", '\x0451') -- CYRILLIC SMALL LETTER IO+ , ("d%", '\x0452') -- CYRILLIC SMALL LETTER DJE+ , ("g%", '\x0453') -- CYRILLIC SMALL LETTER GJE+ , ("ie", '\x0454') -- CYRILLIC SMALL LETTER UKRAINIAN IE+ , ("ds", '\x0455') -- CYRILLIC SMALL LETTER DZE+ , ("ii", '\x0456') -- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I+ , ("yi", '\x0457') -- CYRILLIC SMALL LETTER YI+ , ("j%", '\x0458') -- CYRILLIC SMALL LETTER JE+ , ("lj", '\x0459') -- CYRILLIC SMALL LETTER LJE+ , ("nj", '\x045A') -- CYRILLIC SMALL LETTER NJE+ , ("ts", '\x045B') -- CYRILLIC SMALL LETTER TSHE+ , ("kj", '\x045C') -- CYRILLIC SMALL LETTER KJE+ , ("v%", '\x045E') -- CYRILLIC SMALL LETTER SHORT U+ , ("dz", '\x045F') -- CYRILLIC SMALL LETTER DZHE+ , ("Y3", '\x0462') -- CYRILLIC CAPITAL LETTER YAT+ , ("y3", '\x0463') -- CYRILLIC SMALL LETTER YAT+ , ("O3", '\x046A') -- CYRILLIC CAPITAL LETTER BIG YUS+ , ("o3", '\x046B') -- CYRILLIC SMALL LETTER BIG YUS+ , ("F3", '\x0472') -- CYRILLIC CAPITAL LETTER FITA+ , ("f3", '\x0473') -- CYRILLIC SMALL LETTER FITA+ , ("V3", '\x0474') -- CYRILLIC CAPITAL LETTER IZHITSA+ , ("v3", '\x0475') -- CYRILLIC SMALL LETTER IZHITSA+ , ("C3", '\x0480') -- CYRILLIC CAPITAL LETTER KOPPA+ , ("c3", '\x0481') -- CYRILLIC SMALL LETTER KOPPA+ , ("G3", '\x0490') -- CYRILLIC CAPITAL LETTER GHE WITH UPTURN+ , ("g3", '\x0491') -- CYRILLIC SMALL LETTER GHE WITH UPTURN+ , ("A+", '\x05D0') -- HEBREW LETTER ALEF+ , ("B+", '\x05D1') -- HEBREW LETTER BET+ , ("G+", '\x05D2') -- HEBREW LETTER GIMEL+ , ("D+", '\x05D3') -- HEBREW LETTER DALET+ , ("H+", '\x05D4') -- HEBREW LETTER HE+ , ("W+", '\x05D5') -- HEBREW LETTER VAV+ , ("Z+", '\x05D6') -- HEBREW LETTER ZAYIN+ , ("X+", '\x05D7') -- HEBREW LETTER HET+ , ("Tj", '\x05D8') -- HEBREW LETTER TET+ , ("J+", '\x05D9') -- HEBREW LETTER YOD+ , ("K%", '\x05DA') -- HEBREW LETTER FINAL KAF+ , ("K+", '\x05DB') -- HEBREW LETTER KAF+ , ("L+", '\x05DC') -- HEBREW LETTER LAMED+ , ("M%", '\x05DD') -- HEBREW LETTER FINAL MEM+ , ("M+", '\x05DE') -- HEBREW LETTER MEM+ , ("N%", '\x05DF') -- HEBREW LETTER FINAL NUN `+ , ("N+", '\x05E0') -- HEBREW LETTER NUN `+ , ("S+", '\x05E1') -- HEBREW LETTER SAMEKH+ , ("E+", '\x05E2') -- HEBREW LETTER AYIN+ , ("P%", '\x05E3') -- HEBREW LETTER FINAL PE+ , ("P+", '\x05E4') -- HEBREW LETTER PE+ , ("Zj", '\x05E5') -- HEBREW LETTER FINAL TSADI+ , ("ZJ", '\x05E6') -- HEBREW LETTER TSADI+ , ("Q+", '\x05E7') -- HEBREW LETTER QOF+ , ("R+", '\x05E8') -- HEBREW LETTER RESH+ , ("Sh", '\x05E9') -- HEBREW LETTER SHIN+ , ("T+", '\x05EA') -- HEBREW LETTER TAV+ , (",+", '\x060C') -- ARABIC COMMA+ , (";+", '\x061B') -- ARABIC SEMICOLON+ , ("?+", '\x061F') -- ARABIC QUESTION MARK+ , ("H'", '\x0621') -- ARABIC LETTER HAMZA+ , ("aM", '\x0622') -- ARABIC LETTER ALEF WITH MADDA ABOVE+ , ("aH", '\x0623') -- ARABIC LETTER ALEF WITH HAMZA ABOVE+ , ("wH", '\x0624') -- ARABIC LETTER WAW WITH HAMZA ABOVE+ , ("ah", '\x0625') -- ARABIC LETTER ALEF WITH HAMZA BELOW+ , ("yH", '\x0626') -- ARABIC LETTER YEH WITH HAMZA ABOVE+ , ("a+", '\x0627') -- ARABIC LETTER ALEF+ , ("b+", '\x0628') -- ARABIC LETTER BEH+ , ("tm", '\x0629') -- ARABIC LETTER TEH MARBUTA+ , ("t+", '\x062A') -- ARABIC LETTER TEH+ , ("tk", '\x062B') -- ARABIC LETTER THEH+ , ("g+", '\x062C') -- ARABIC LETTER JEEM+ , ("hk", '\x062D') -- ARABIC LETTER HAH+ , ("x+", '\x062E') -- ARABIC LETTER KHAH+ , ("d+", '\x062F') -- ARABIC LETTER DAL+ , ("dk", '\x0630') -- ARABIC LETTER THAL+ , ("r+", '\x0631') -- ARABIC LETTER REH+ , ("z+", '\x0632') -- ARABIC LETTER ZAIN+ , ("s+", '\x0633') -- ARABIC LETTER SEEN+ , ("sn", '\x0634') -- ARABIC LETTER SHEEN+ , ("c+", '\x0635') -- ARABIC LETTER SAD+ , ("dd", '\x0636') -- ARABIC LETTER DAD+ , ("tj", '\x0637') -- ARABIC LETTER TAH+ , ("zH", '\x0638') -- ARABIC LETTER ZAH+ , ("e+", '\x0639') -- ARABIC LETTER AIN+ , ("i+", '\x063A') -- ARABIC LETTER GHAIN+ , ("++", '\x0640') -- ARABIC TATWEEL+ , ("f+", '\x0641') -- ARABIC LETTER FEH+ , ("q+", '\x0642') -- ARABIC LETTER QAF+ , ("k+", '\x0643') -- ARABIC LETTER KAF+ , ("l+", '\x0644') -- ARABIC LETTER LAM+ , ("m+", '\x0645') -- ARABIC LETTER MEEM+ , ("n+", '\x0646') -- ARABIC LETTER NOON+ , ("h+", '\x0647') -- ARABIC LETTER HEH+ , ("w+", '\x0648') -- ARABIC LETTER WAW+ , ("j+", '\x0649') -- ARABIC LETTER ALEF MAKSURA+ , ("y+", '\x064A') -- ARABIC LETTER YEH+ , (":+", '\x064B') -- ARABIC FATHATAN+ , ("\"+", '\x064C') -- ARABIC DAMMATAN+ , ("=+", '\x064D') -- ARABIC KASRATAN+ , ("/+", '\x064E') -- ARABIC FATHA+ , ("'+", '\x064F') -- ARABIC DAMMA+ , ("1+", '\x0650') -- ARABIC KASRA+ , ("3+", '\x0651') -- ARABIC SHADDA+ , ("0+", '\x0652') -- ARABIC SUKUN+ , ("aS", '\x0670') -- ARABIC LETTER SUPERSCRIPT ALEF+ , ("p+", '\x067E') -- ARABIC LETTER PEH+ , ("v+", '\x06A4') -- ARABIC LETTER VEH+ , ("gf", '\x06AF') -- ARABIC LETTER GAF+ , ("0a", '\x06F0') -- EXTENDED ARABIC-INDIC DIGIT ZERO+ , ("1a", '\x06F1') -- EXTENDED ARABIC-INDIC DIGIT ONE+ , ("2a", '\x06F2') -- EXTENDED ARABIC-INDIC DIGIT TWO+ , ("3a", '\x06F3') -- EXTENDED ARABIC-INDIC DIGIT THREE+ , ("4a", '\x06F4') -- EXTENDED ARABIC-INDIC DIGIT FOUR+ , ("5a", '\x06F5') -- EXTENDED ARABIC-INDIC DIGIT FIVE+ , ("6a", '\x06F6') -- EXTENDED ARABIC-INDIC DIGIT SIX+ , ("7a", '\x06F7') -- EXTENDED ARABIC-INDIC DIGIT SEVEN+ , ("8a", '\x06F8') -- EXTENDED ARABIC-INDIC DIGIT EIGHT+ , ("9a", '\x06F9') -- EXTENDED ARABIC-INDIC DIGIT NINE+ , ("B.", '\x1E02') -- LATIN CAPITAL LETTER B WITH DOT ABOVE+ , ("b.", '\x1E03') -- LATIN SMALL LETTER B WITH DOT ABOVE+ , ("B_", '\x1E06') -- LATIN CAPITAL LETTER B WITH LINE BELOW+ , ("b_", '\x1E07') -- LATIN SMALL LETTER B WITH LINE BELOW+ , ("D.", '\x1E0A') -- LATIN CAPITAL LETTER D WITH DOT ABOVE+ , ("d.", '\x1E0B') -- LATIN SMALL LETTER D WITH DOT ABOVE+ , ("D_", '\x1E0E') -- LATIN CAPITAL LETTER D WITH LINE BELOW+ , ("d_", '\x1E0F') -- LATIN SMALL LETTER D WITH LINE BELOW+ , ("D,", '\x1E10') -- LATIN CAPITAL LETTER D WITH CEDILLA+ , ("d,", '\x1E11') -- LATIN SMALL LETTER D WITH CEDILLA+ , ("F.", '\x1E1E') -- LATIN CAPITAL LETTER F WITH DOT ABOVE+ , ("f.", '\x1E1F') -- LATIN SMALL LETTER F WITH DOT ABOVE+ , ("G-", '\x1E20') -- LATIN CAPITAL LETTER G WITH MACRON+ , ("g-", '\x1E21') -- LATIN SMALL LETTER G WITH MACRON+ , ("H.", '\x1E22') -- LATIN CAPITAL LETTER H WITH DOT ABOVE+ , ("h.", '\x1E23') -- LATIN SMALL LETTER H WITH DOT ABOVE+ , ("H:", '\x1E26') -- LATIN CAPITAL LETTER H WITH DIAERESIS+ , ("h:", '\x1E27') -- LATIN SMALL LETTER H WITH DIAERESIS+ , ("H,", '\x1E28') -- LATIN CAPITAL LETTER H WITH CEDILLA+ , ("h,", '\x1E29') -- LATIN SMALL LETTER H WITH CEDILLA+ , ("K'", '\x1E30') -- LATIN CAPITAL LETTER K WITH ACUTE+ , ("k'", '\x1E31') -- LATIN SMALL LETTER K WITH ACUTE+ , ("K_", '\x1E34') -- LATIN CAPITAL LETTER K WITH LINE BELOW+ , ("k_", '\x1E35') -- LATIN SMALL LETTER K WITH LINE BELOW+ , ("L_", '\x1E3A') -- LATIN CAPITAL LETTER L WITH LINE BELOW+ , ("l_", '\x1E3B') -- LATIN SMALL LETTER L WITH LINE BELOW+ , ("M'", '\x1E3E') -- LATIN CAPITAL LETTER M WITH ACUTE+ , ("m'", '\x1E3F') -- LATIN SMALL LETTER M WITH ACUTE+ , ("M.", '\x1E40') -- LATIN CAPITAL LETTER M WITH DOT ABOVE+ , ("m.", '\x1E41') -- LATIN SMALL LETTER M WITH DOT ABOVE+ , ("N.", '\x1E44') -- LATIN CAPITAL LETTER N WITH DOT ABOVE `+ , ("n.", '\x1E45') -- LATIN SMALL LETTER N WITH DOT ABOVE `+ , ("N_", '\x1E48') -- LATIN CAPITAL LETTER N WITH LINE BELOW `+ , ("n_", '\x1E49') -- LATIN SMALL LETTER N WITH LINE BELOW `+ , ("P'", '\x1E54') -- LATIN CAPITAL LETTER P WITH ACUTE+ , ("p'", '\x1E55') -- LATIN SMALL LETTER P WITH ACUTE+ , ("P.", '\x1E56') -- LATIN CAPITAL LETTER P WITH DOT ABOVE+ , ("p.", '\x1E57') -- LATIN SMALL LETTER P WITH DOT ABOVE+ , ("R.", '\x1E58') -- LATIN CAPITAL LETTER R WITH DOT ABOVE+ , ("r.", '\x1E59') -- LATIN SMALL LETTER R WITH DOT ABOVE+ , ("R_", '\x1E5E') -- LATIN CAPITAL LETTER R WITH LINE BELOW+ , ("r_", '\x1E5F') -- LATIN SMALL LETTER R WITH LINE BELOW+ , ("S.", '\x1E60') -- LATIN CAPITAL LETTER S WITH DOT ABOVE+ , ("s.", '\x1E61') -- LATIN SMALL LETTER S WITH DOT ABOVE+ , ("T.", '\x1E6A') -- LATIN CAPITAL LETTER T WITH DOT ABOVE+ , ("t.", '\x1E6B') -- LATIN SMALL LETTER T WITH DOT ABOVE+ , ("T_", '\x1E6E') -- LATIN CAPITAL LETTER T WITH LINE BELOW+ , ("t_", '\x1E6F') -- LATIN SMALL LETTER T WITH LINE BELOW+ , ("V?", '\x1E7C') -- LATIN CAPITAL LETTER V WITH TILDE+ , ("v?", '\x1E7D') -- LATIN SMALL LETTER V WITH TILDE+ , ("W!", '\x1E80') -- LATIN CAPITAL LETTER W WITH GRAVE+ , ("w!", '\x1E81') -- LATIN SMALL LETTER W WITH GRAVE+ , ("W'", '\x1E82') -- LATIN CAPITAL LETTER W WITH ACUTE+ , ("w'", '\x1E83') -- LATIN SMALL LETTER W WITH ACUTE+ , ("W:", '\x1E84') -- LATIN CAPITAL LETTER W WITH DIAERESIS+ , ("w:", '\x1E85') -- LATIN SMALL LETTER W WITH DIAERESIS+ , ("W.", '\x1E86') -- LATIN CAPITAL LETTER W WITH DOT ABOVE+ , ("w.", '\x1E87') -- LATIN SMALL LETTER W WITH DOT ABOVE+ , ("X.", '\x1E8A') -- LATIN CAPITAL LETTER X WITH DOT ABOVE+ , ("x.", '\x1E8B') -- LATIN SMALL LETTER X WITH DOT ABOVE+ , ("X:", '\x1E8C') -- LATIN CAPITAL LETTER X WITH DIAERESIS+ , ("x:", '\x1E8D') -- LATIN SMALL LETTER X WITH DIAERESIS+ , ("Y.", '\x1E8E') -- LATIN CAPITAL LETTER Y WITH DOT ABOVE+ , ("y.", '\x1E8F') -- LATIN SMALL LETTER Y WITH DOT ABOVE+ , ("Z>", '\x1E90') -- LATIN CAPITAL LETTER Z WITH CIRCUMFLEX+ , ("z>", '\x1E91') -- LATIN SMALL LETTER Z WITH CIRCUMFLEX+ , ("Z_", '\x1E94') -- LATIN CAPITAL LETTER Z WITH LINE BELOW+ , ("z_", '\x1E95') -- LATIN SMALL LETTER Z WITH LINE BELOW+ , ("h_", '\x1E96') -- LATIN SMALL LETTER H WITH LINE BELOW+ , ("t:", '\x1E97') -- LATIN SMALL LETTER T WITH DIAERESIS+ , ("w0", '\x1E98') -- LATIN SMALL LETTER W WITH RING ABOVE+ , ("y0", '\x1E99') -- LATIN SMALL LETTER Y WITH RING ABOVE+ , ("A2", '\x1EA2') -- LATIN CAPITAL LETTER A WITH HOOK ABOVE+ , ("a2", '\x1EA3') -- LATIN SMALL LETTER A WITH HOOK ABOVE+ , ("E2", '\x1EBA') -- LATIN CAPITAL LETTER E WITH HOOK ABOVE+ , ("e2", '\x1EBB') -- LATIN SMALL LETTER E WITH HOOK ABOVE+ , ("E?", '\x1EBC') -- LATIN CAPITAL LETTER E WITH TILDE+ , ("e?", '\x1EBD') -- LATIN SMALL LETTER E WITH TILDE+ , ("I2", '\x1EC8') -- LATIN CAPITAL LETTER I WITH HOOK ABOVE+ , ("i2", '\x1EC9') -- LATIN SMALL LETTER I WITH HOOK ABOVE+ , ("O2", '\x1ECE') -- LATIN CAPITAL LETTER O WITH HOOK ABOVE+ , ("o2", '\x1ECF') -- LATIN SMALL LETTER O WITH HOOK ABOVE+ , ("U2", '\x1EE6') -- LATIN CAPITAL LETTER U WITH HOOK ABOVE+ , ("u2", '\x1EE7') -- LATIN SMALL LETTER U WITH HOOK ABOVE+ , ("Y!", '\x1EF2') -- LATIN CAPITAL LETTER Y WITH GRAVE+ , ("y!", '\x1EF3') -- LATIN SMALL LETTER Y WITH GRAVE+ , ("Y2", '\x1EF6') -- LATIN CAPITAL LETTER Y WITH HOOK ABOVE+ , ("y2", '\x1EF7') -- LATIN SMALL LETTER Y WITH HOOK ABOVE+ , ("Y?", '\x1EF8') -- LATIN CAPITAL LETTER Y WITH TILDE+ , ("y?", '\x1EF9') -- LATIN SMALL LETTER Y WITH TILDE+ , (";'", '\x1F00') -- GREEK SMALL LETTER ALPHA WITH PSILI+ , (",'", '\x1F01') -- GREEK SMALL LETTER ALPHA WITH DASIA+ , (";!", '\x1F02') -- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA+ , (",!", '\x1F03') -- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA+ , ("?;", '\x1F04') -- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA+ , ("?,", '\x1F05') -- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA+ , ("!:", '\x1F06') -- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI+ , ("?:", '\x1F07') -- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI+ , ("1N", '\x2002') -- EN SPACE+ , ("1M", '\x2003') -- EM SPACE+ , ("3M", '\x2004') -- THREE-PER-EM SPACE+ , ("4M", '\x2005') -- FOUR-PER-EM SPACE+ , ("6M", '\x2006') -- SIX-PER-EM SPACE+ , ("1T", '\x2009') -- THIN SPACE+ , ("1H", '\x200A') -- HAIR SPACE+ , ("-1", '\x2010') -- HYPHEN+ , ("-N", '\x2013') -- EN DASH `+ , ("-M", '\x2014') -- EM DASH+ , ("-3", '\x2015') -- HORIZONTAL BAR+ , ("!2", '\x2016') -- DOUBLE VERTICAL LINE+ , ("=2", '\x2017') -- DOUBLE LOW LINE+ , ("'6", '\x2018') -- LEFT SINGLE QUOTATION MARK+ , ("'9", '\x2019') -- RIGHT SINGLE QUOTATION MARK+ , (".9", '\x201A') -- SINGLE LOW-9 QUOTATION MARK+ , ("9'", '\x201B') -- SINGLE HIGH-REVERSED-9 QUOTATION MARK+ , ("\"6", '\x201C') -- LEFT DOUBLE QUOTATION MARK+ , ("\"9", '\x201D') -- RIGHT DOUBLE QUOTATION MARK+ , (":9", '\x201E') -- DOUBLE LOW-9 QUOTATION MARK+ , ("9\"", '\x201F') -- DOUBLE HIGH-REVERSED-9 QUOTATION MARK+ , ("/-", '\x2020') -- DAGGER+ , ("/=", '\x2021') -- DOUBLE DAGGER+ , ("..", '\x2025') -- TWO DOT LEADER+ , ("%0", '\x2030') -- PER MILLE SIGN+ , ("1'", '\x2032') -- PRIME+ , ("2'", '\x2033') -- DOUBLE PRIME+ , ("3'", '\x2034') -- TRIPLE PRIME+ , ("1\"", '\x2035') -- REVERSED PRIME+ , ("2\"", '\x2036') -- REVERSED DOUBLE PRIME+ , ("3\"", '\x2037') -- REVERSED TRIPLE PRIME+ , ("Ca", '\x2038') -- CARET+ , ("<1", '\x2039') -- SINGLE LEFT-POINTING ANGLE QUOTATION MARK+ , (">1", '\x203A') -- SINGLE RIGHT-POINTING ANGLE QUOTATION MARK+ , (":X", '\x203B') -- REFERENCE MARK+ , ("'-", '\x203E') -- OVERLINE+ , ("/f", '\x2044') -- FRACTION SLASH+ , ("0S", '\x2070') -- SUPERSCRIPT ZERO+ , ("4S", '\x2074') -- SUPERSCRIPT FOUR+ , ("5S", '\x2075') -- SUPERSCRIPT FIVE+ , ("6S", '\x2076') -- SUPERSCRIPT SIX+ , ("7S", '\x2077') -- SUPERSCRIPT SEVEN+ , ("8S", '\x2078') -- SUPERSCRIPT EIGHT+ , ("9S", '\x2079') -- SUPERSCRIPT NINE+ , ("+S", '\x207A') -- SUPERSCRIPT PLUS SIGN+ , ("-S", '\x207B') -- SUPERSCRIPT MINUS+ , ("=S", '\x207C') -- SUPERSCRIPT EQUALS SIGN+ , ("(S", '\x207D') -- SUPERSCRIPT LEFT PARENTHESIS+ , (")S", '\x207E') -- SUPERSCRIPT RIGHT PARENTHESIS+ , ("nS", '\x207F') -- SUPERSCRIPT LATIN SMALL LETTER N `+ , ("0s", '\x2080') -- SUBSCRIPT ZERO+ , ("1s", '\x2081') -- SUBSCRIPT ONE+ , ("2s", '\x2082') -- SUBSCRIPT TWO+ , ("3s", '\x2083') -- SUBSCRIPT THREE+ , ("4s", '\x2084') -- SUBSCRIPT FOUR+ , ("5s", '\x2085') -- SUBSCRIPT FIVE+ , ("6s", '\x2086') -- SUBSCRIPT SIX+ , ("7s", '\x2087') -- SUBSCRIPT SEVEN+ , ("8s", '\x2088') -- SUBSCRIPT EIGHT+ , ("9s", '\x2089') -- SUBSCRIPT NINE+ , ("+s", '\x208A') -- SUBSCRIPT PLUS SIGN+ , ("-s", '\x208B') -- SUBSCRIPT MINUS+ , ("=s", '\x208C') -- SUBSCRIPT EQUALS SIGN+ , ("(s", '\x208D') -- SUBSCRIPT LEFT PARENTHESIS+ , (")s", '\x208E') -- SUBSCRIPT RIGHT PARENTHESIS+ , ("Li", '\x20A4') -- LIRA SIGN+ , ("Pt", '\x20A7') -- PESETA SIGN+ , ("W=", '\x20A9') -- WON SIGN+ , ("Eu", '\x20AC') -- EURO SIGN+ , ("oC", '\x2103') -- DEGREE CELSIUS+ , ("co", '\x2105') -- CARE OF+ , ("oF", '\x2109') -- DEGREE FAHRENHEIT+ , ("N0", '\x2116') -- NUMERO SIGN+ , ("PO", '\x2117') -- SOUND RECORDING COPYRIGHT+ , ("Rx", '\x211E') -- PRESCRIPTION TAKE+ , ("SM", '\x2120') -- SERVICE MARK+ , ("TM", '\x2122') -- TRADE MARK SIGN+ , ("Om", '\x2126') -- OHM SIGN+ , ("AO", '\x212B') -- ANGSTROM SIGN+ , ("13", '\x2153') -- VULGAR FRACTION ONE THIRD+ , ("23", '\x2154') -- VULGAR FRACTION TWO THIRDS+ , ("15", '\x2155') -- VULGAR FRACTION ONE FIFTH+ , ("25", '\x2156') -- VULGAR FRACTION TWO FIFTHS+ , ("35", '\x2157') -- VULGAR FRACTION THREE FIFTHS+ , ("45", '\x2158') -- VULGAR FRACTION FOUR FIFTHS+ , ("16", '\x2159') -- VULGAR FRACTION ONE SIXTH+ , ("56", '\x215A') -- VULGAR FRACTION FIVE SIXTHS+ , ("18", '\x215B') -- VULGAR FRACTION ONE EIGHTH+ , ("38", '\x215C') -- VULGAR FRACTION THREE EIGHTHS+ , ("58", '\x215D') -- VULGAR FRACTION FIVE EIGHTHS+ , ("78", '\x215E') -- VULGAR FRACTION SEVEN EIGHTHS+ , ("1R", '\x2160') -- ROMAN NUMERAL ONE+ , ("2R", '\x2161') -- ROMAN NUMERAL TWO+ , ("3R", '\x2162') -- ROMAN NUMERAL THREE+ , ("4R", '\x2163') -- ROMAN NUMERAL FOUR+ , ("5R", '\x2164') -- ROMAN NUMERAL FIVE+ , ("6R", '\x2165') -- ROMAN NUMERAL SIX+ , ("7R", '\x2166') -- ROMAN NUMERAL SEVEN+ , ("8R", '\x2167') -- ROMAN NUMERAL EIGHT+ , ("9R", '\x2168') -- ROMAN NUMERAL NINE+ , ("aR", '\x2169') -- ROMAN NUMERAL TEN+ , ("bR", '\x216A') -- ROMAN NUMERAL ELEVEN+ , ("cR", '\x216B') -- ROMAN NUMERAL TWELVE+ , ("1r", '\x2170') -- SMALL ROMAN NUMERAL ONE+ , ("2r", '\x2171') -- SMALL ROMAN NUMERAL TWO+ , ("3r", '\x2172') -- SMALL ROMAN NUMERAL THREE+ , ("4r", '\x2173') -- SMALL ROMAN NUMERAL FOUR+ , ("5r", '\x2174') -- SMALL ROMAN NUMERAL FIVE+ , ("6r", '\x2175') -- SMALL ROMAN NUMERAL SIX+ , ("7r", '\x2176') -- SMALL ROMAN NUMERAL SEVEN+ , ("8r", '\x2177') -- SMALL ROMAN NUMERAL EIGHT+ , ("9r", '\x2178') -- SMALL ROMAN NUMERAL NINE+ , ("ar", '\x2179') -- SMALL ROMAN NUMERAL TEN+ , ("br", '\x217A') -- SMALL ROMAN NUMERAL ELEVEN+ , ("cr", '\x217B') -- SMALL ROMAN NUMERAL TWELVE+ , ("<-", '\x2190') -- LEFTWARDS ARROW+ , ("-!", '\x2191') -- UPWARDS ARROW+ , ("->", '\x2192') -- RIGHTWARDS ARROW+ , ("-v", '\x2193') -- DOWNWARDS ARROW+ , ("<>", '\x2194') -- LEFT RIGHT ARROW+ , ("UD", '\x2195') -- UP DOWN ARROW+ , ("<=", '\x21D0') -- LEFTWARDS DOUBLE ARROW+ , ("=>", '\x21D2') -- RIGHTWARDS DOUBLE ARROW+ , ("==", '\x21D4') -- LEFT RIGHT DOUBLE ARROW+ , ("FA", '\x2200') -- FOR ALL+ , ("dP", '\x2202') -- PARTIAL DIFFERENTIAL+ , ("TE", '\x2203') -- THERE EXISTS+ , ("/0", '\x2205') -- EMPTY SET+ , ("DE", '\x2206') -- INCREMENT+ , ("NB", '\x2207') -- NABLA+ , ("(-", '\x2208') -- ELEMENT OF+ , ("-)", '\x220B') -- CONTAINS AS MEMBER+ , ("*P", '\x220F') -- N-ARY PRODUCT `+ , ("+Z", '\x2211') -- N-ARY SUMMATION `+ , ("-2", '\x2212') -- MINUS SIGN+ , ("-+", '\x2213') -- MINUS-OR-PLUS SIGN+ , ("*-", '\x2217') -- ASTERISK OPERATOR+ , ("Ob", '\x2218') -- RING OPERATOR+ , ("Sb", '\x2219') -- BULLET OPERATOR+ , ("RT", '\x221A') -- SQUARE ROOT+ , ("0(", '\x221D') -- PROPORTIONAL TO+ , ("00", '\x221E') -- INFINITY+ , ("-L", '\x221F') -- RIGHT ANGLE+ , ("-V", '\x2220') -- ANGLE+ , ("PP", '\x2225') -- PARALLEL TO+ , ("AN", '\x2227') -- LOGICAL AND+ , ("OR", '\x2228') -- LOGICAL OR+ , ("(U", '\x2229') -- INTERSECTION+ , (")U", '\x222A') -- UNION+ , ("In", '\x222B') -- INTEGRAL+ , ("DI", '\x222C') -- DOUBLE INTEGRAL+ , ("Io", '\x222E') -- CONTOUR INTEGRAL+ , (".:", '\x2234') -- THEREFORE+ , (":.", '\x2235') -- BECAUSE+ , (":R", '\x2236') -- RATIO+ , ("::", '\x2237') -- PROPORTION+ , ("?1", '\x223C') -- TILDE OPERATOR+ , ("CG", '\x223E') -- INVERTED LAZY S+ , ("?-", '\x2243') -- ASYMPTOTICALLY EQUAL TO+ , ("?=", '\x2245') -- APPROXIMATELY EQUAL TO+ , ("?2", '\x2248') -- ALMOST EQUAL TO+ , ("=?", '\x224C') -- ALL EQUAL TO+ , ("HI", '\x2253') -- IMAGE OF OR APPROXIMATELY EQUAL TO+ , ("!=", '\x2260') -- NOT EQUAL TO+ , ("=3", '\x2261') -- IDENTICAL TO+ , ("=<", '\x2264') -- LESS-THAN OR EQUAL TO+ , (">=", '\x2265') -- GREATER-THAN OR EQUAL TO+ , ("<*", '\x226A') -- MUCH LESS-THAN+ , ("*>", '\x226B') -- MUCH GREATER-THAN+ , ("!<", '\x226E') -- NOT LESS-THAN+ , ("!>", '\x226F') -- NOT GREATER-THAN+ , ("(C", '\x2282') -- SUBSET OF+ , (")C", '\x2283') -- SUPERSET OF+ , ("(_", '\x2286') -- SUBSET OF OR EQUAL TO+ , (")_", '\x2287') -- SUPERSET OF OR EQUAL TO+ , ("0.", '\x2299') -- CIRCLED DOT OPERATOR+ , ("02", '\x229A') -- CIRCLED RING OPERATOR+ , ("-T", '\x22A5') -- UP TACK+ , (".P", '\x22C5') -- DOT OPERATOR+ , (":3", '\x22EE') -- VERTICAL ELLIPSIS+ , (".3", '\x22EF') -- MIDLINE HORIZONTAL ELLIPSIS+ , ("Eh", '\x2302') -- HOUSE+ , ("<7", '\x2308') -- LEFT CEILING+ , (">7", '\x2309') -- RIGHT CEILING+ , ("7<", '\x230A') -- LEFT FLOOR+ , ("7>", '\x230B') -- RIGHT FLOOR+ , ("NI", '\x2310') -- REVERSED NOT SIGN+ , ("(A", '\x2312') -- ARC+ , ("TR", '\x2315') -- TELEPHONE RECORDER+ , ("Iu", '\x2320') -- TOP HALF INTEGRAL+ , ("Il", '\x2321') -- BOTTOM HALF INTEGRAL+ , ("</", '\x2329') -- LEFT-POINTING ANGLE BRACKET+ , ("/>", '\x232A') -- RIGHT-POINTING ANGLE BRACKET+ , ("Vs", '\x2423') -- OPEN BOX+ , ("1h", '\x2440') -- OCR HOOK+ , ("3h", '\x2441') -- OCR CHAIR+ , ("2h", '\x2442') -- OCR FORK+ , ("4h", '\x2443') -- OCR INVERTED FORK+ , ("1j", '\x2446') -- OCR BRANCH BANK IDENTIFICATION+ , ("2j", '\x2447') -- OCR AMOUNT OF CHECK+ , ("3j", '\x2448') -- OCR DASH+ , ("4j", '\x2449') -- OCR CUSTOMER ACCOUNT NUMBER+ , ("1.", '\x2488') -- DIGIT ONE FULL STOP+ , ("2.", '\x2489') -- DIGIT TWO FULL STOP+ , ("3.", '\x248A') -- DIGIT THREE FULL STOP+ , ("4.", '\x248B') -- DIGIT FOUR FULL STOP+ , ("5.", '\x248C') -- DIGIT FIVE FULL STOP+ , ("6.", '\x248D') -- DIGIT SIX FULL STOP+ , ("7.", '\x248E') -- DIGIT SEVEN FULL STOP+ , ("8.", '\x248F') -- DIGIT EIGHT FULL STOP+ , ("9.", '\x2490') -- DIGIT NINE FULL STOP+ , ("hh", '\x2500') -- BOX DRAWINGS LIGHT HORIZONTAL+ , ("HH", '\x2501') -- BOX DRAWINGS HEAVY HORIZONTAL+ , ("vv", '\x2502') -- BOX DRAWINGS LIGHT VERTICAL+ , ("VV", '\x2503') -- BOX DRAWINGS HEAVY VERTICAL+ , ("3-", '\x2504') -- BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL+ , ("3_", '\x2505') -- BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL+ , ("3!", '\x2506') -- BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL+ , ("3/", '\x2507') -- BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL+ , ("4-", '\x2508') -- BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL+ , ("4_", '\x2509') -- BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL+ , ("4!", '\x250A') -- BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL+ , ("4/", '\x250B') -- BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL+ , ("dr", '\x250C') -- BOX DRAWINGS LIGHT DOWN AND RIGHT+ , ("dR", '\x250D') -- BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY+ , ("Dr", '\x250E') -- BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT+ , ("DR", '\x250F') -- BOX DRAWINGS HEAVY DOWN AND RIGHT+ , ("dl", '\x2510') -- BOX DRAWINGS LIGHT DOWN AND LEFT+ , ("dL", '\x2511') -- BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY+ , ("Dl", '\x2512') -- BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT+ , ("LD", '\x2513') -- BOX DRAWINGS HEAVY DOWN AND LEFT+ , ("ur", '\x2514') -- BOX DRAWINGS LIGHT UP AND RIGHT+ , ("uR", '\x2515') -- BOX DRAWINGS UP LIGHT AND RIGHT HEAVY+ , ("Ur", '\x2516') -- BOX DRAWINGS UP HEAVY AND RIGHT LIGHT+ , ("UR", '\x2517') -- BOX DRAWINGS HEAVY UP AND RIGHT+ , ("ul", '\x2518') -- BOX VOICED SOUND MARKDRAWINGS LIGHT UP AND LEFT+ , ("uL", '\x2519') -- BOX DRAWINGS UP LIGHT AND LEFT HEAVY+ , ("Ul", '\x251A') -- BOX DRAWINGS UP HEAVY AND LEFT LIGHT+ , ("UL", '\x251B') -- BOX DRAWINGS HEAVY UP AND LEFT+ , ("vr", '\x251C') -- BOX DRAWINGS LIGHT VERTICAL AND RIGHT+ , ("vR", '\x251D') -- BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY+ , ("Vr", '\x2520') -- BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT+ , ("VR", '\x2523') -- BOX DRAWINGS HEAVY VERTICAL AND RIGHT+ , ("vl", '\x2524') -- BOX DRAWINGS LIGHT VERTICAL AND LEFT+ , ("vL", '\x2525') -- BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY+ , ("Vl", '\x2528') -- BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT+ , ("VL", '\x252B') -- BOX DRAWINGS HEAVY VERTICAL AND LEFT+ , ("dh", '\x252C') -- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL+ , ("dH", '\x252F') -- BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY+ , ("Dh", '\x2530') -- BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT+ , ("DH", '\x2533') -- BOX DRAWINGS HEAVY DOWN AND HORIZONTAL+ , ("uh", '\x2534') -- BOX DRAWINGS LIGHT UP AND HORIZONTAL+ , ("uH", '\x2537') -- BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY+ , ("Uh", '\x2538') -- BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT+ , ("UH", '\x253B') -- BOX DRAWINGS HEAVY UP AND HORIZONTAL+ , ("vh", '\x253C') -- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL+ , ("vH", '\x253F') -- BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY+ , ("Vh", '\x2542') -- BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT+ , ("VH", '\x254B') -- BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL+ , ("FD", '\x2571') -- BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT+ , ("BD", '\x2572') -- BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT+ , ("TB", '\x2580') -- UPPER HALF BLOCK+ , ("LB", '\x2584') -- LOWER HALF BLOCK+ , ("FB", '\x2588') -- FULL BLOCK+ , ("lB", '\x258C') -- LEFT HALF BLOCK+ , ("RB", '\x2590') -- RIGHT HALF BLOCK+ , (".S", '\x2591') -- LIGHT SHADE+ , (":S", '\x2592') -- MEDIUM SHADE+ , ("?S", '\x2593') -- DARK SHADE+ , ("fS", '\x25A0') -- BLACK SQUARE+ , ("OS", '\x25A1') -- WHITE SQUARE+ , ("RO", '\x25A2') -- WHITE SQUARE WITH ROUNDED CORNERS+ , ("Rr", '\x25A3') -- WHITE SQUARE CONTAINING BLACK SMALL SQUARE+ , ("RF", '\x25A4') -- SQUARE WITH HORIZONTAL FILL+ , ("RY", '\x25A5') -- SQUARE WITH VERTICAL FILL+ , ("RH", '\x25A6') -- SQUARE WITH ORTHOGONAL CROSSHATCH FILL+ , ("RZ", '\x25A7') -- SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL+ , ("RK", '\x25A8') -- SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL+ , ("RX", '\x25A9') -- SQUARE WITH DIAGONAL CROSSHATCH FILL+ , ("sB", '\x25AA') -- BLACK SMALL SQUARE+ , ("SR", '\x25AC') -- BLACK RECTANGLE+ , ("Or", '\x25AD') -- WHITE RECTANGLE+ , ("UT", '\x25B2') -- BLACK UP-POINTING TRIANGLE+ , ("uT", '\x25B3') -- WHITE UP-POINTING TRIANGLE+ , ("PR", '\x25B6') -- BLACK RIGHT-POINTING TRIANGLE+ , ("Tr", '\x25B7') -- WHITE RIGHT-POINTING TRIANGLE+ , ("Dt", '\x25BC') -- BLACK DOWN-POINTING TRIANGLE+ , ("dT", '\x25BD') -- WHITE DOWN-POINTING TRIANGLE+ , ("PL", '\x25C0') -- BLACK LEFT-POINTING TRIANGLE+ , ("Tl", '\x25C1') -- WHITE LEFT-POINTING TRIANGLE+ , ("Db", '\x25C6') -- BLACK DIAMOND+ , ("Dw", '\x25C7') -- WHITE DIAMOND+ , ("LZ", '\x25CA') -- LOZENGE+ , ("0m", '\x25CB') -- WHITE CIRCLE+ , ("0o", '\x25CE') -- BULLSEYE+ , ("0M", '\x25CF') -- BLACK CIRCLE+ , ("0L", '\x25D0') -- CIRCLE WITH LEFT HALF BLACK+ , ("0R", '\x25D1') -- CIRCLE WITH RIGHT HALF BLACK+ , ("Sn", '\x25D8') -- INVERSE BULLET+ , ("Ic", '\x25D9') -- INVERSE WHITE CIRCLE+ , ("Fd", '\x25E2') -- BLACK LOWER RIGHT TRIANGLE+ , ("Bd", '\x25E3') -- BLACK LOWER LEFT TRIANGLE+ , ("*2", '\x2605') -- BLACK STAR+ , ("*1", '\x2606') -- WHITE STAR+ , ("<H", '\x261C') -- WHITE LEFT POINTING INDEX+ , (">H", '\x261E') -- WHITE RIGHT POINTING INDEX+ , ("0u", '\x263A') -- WHITE SMILING FACE+ , ("0U", '\x263B') -- BLACK SMILING FACE+ , ("SU", '\x263C') -- WHITE SUN WITH RAYS+ , ("Fm", '\x2640') -- FEMALE SIGN+ , ("Ml", '\x2642') -- MALE SIGN+ , ("cS", '\x2660') -- BLACK SPADE SUIT+ , ("cH", '\x2661') -- WHITE HEART SUIT+ , ("cD", '\x2662') -- WHITE DIAMOND SUIT+ , ("cC", '\x2663') -- BLACK CLUB SUIT+ , ("Md", '\x2669') -- QUARTER NOTE `+ , ("M8", '\x266A') -- EIGHTH NOTE `+ , ("M2", '\x266B') -- BEAMED EIGHTH NOTES+ , ("Mb", '\x266D') -- MUSIC FLAT SIGN+ , ("Mx", '\x266E') -- MUSIC NATURAL SIGN+ , ("MX", '\x266F') -- MUSIC SHARP SIGN+ , ("OK", '\x2713') -- CHECK MARK+ , ("XX", '\x2717') -- BALLOT X+ , ("-X", '\x2720') -- MALTESE CROSS+ , ("IS", '\x3000') -- IDEOGRAPHIC SPACE+ , (",_", '\x3001') -- IDEOGRAPHIC COMMA+ , ("._", '\x3002') -- IDEOGRAPHIC FULL STOP+ , ("+\"", '\x3003') -- DITTO MARK+ , ("+_", '\x3004') -- JAPANESE INDUSTRIAL STANDARD SYMBOL+ , ("*_", '\x3005') -- IDEOGRAPHIC ITERATION MARK+ , (";_", '\x3006') -- IDEOGRAPHIC CLOSING MARK+ , ("0_", '\x3007') -- IDEOGRAPHIC NUMBER ZERO+ , ("<+", '\x300A') -- LEFT DOUBLE ANGLE BRACKET+ , (">+", '\x300B') -- RIGHT DOUBLE ANGLE BRACKET+ , ("<'", '\x300C') -- LEFT CORNER BRACKET+ , (">'", '\x300D') -- RIGHT CORNER BRACKET+ , ("<\"", '\x300E') -- LEFT WHITE CORNER BRACKET+ , (">\"", '\x300F') -- RIGHT WHITE CORNER BRACKET+ , ("(\"", '\x3010') -- LEFT BLACK LENTICULAR BRACKET+ , (")\"", '\x3011') -- RIGHT BLACK LENTICULAR BRACKET+ , ("=T", '\x3012') -- POSTAL MARK+ , ("=_", '\x3013') -- GETA MARK+ , ("('", '\x3014') -- LEFT TORTOISE SHELL BRACKET+ , (")'", '\x3015') -- RIGHT TORTOISE SHELL BRACKET+ , ("(I", '\x3016') -- LEFT WHITE LENTICULAR BRACKET+ , (")I", '\x3017') -- RIGHT WHITE LENTICULAR BRACKET+ , ("-?", '\x301C') -- WAVE DASH+ , ("A5", '\x3041') -- HIRAGANA LETTER SMALL A+ , ("a5", '\x3042') -- HIRAGANA LETTER A+ , ("I5", '\x3043') -- HIRAGANA LETTER SMALL I+ , ("i5", '\x3044') -- HIRAGANA LETTER I+ , ("U5", '\x3045') -- HIRAGANA LETTER SMALL U+ , ("u5", '\x3046') -- HIRAGANA LETTER U+ , ("E5", '\x3047') -- HIRAGANA LETTER SMALL E+ , ("e5", '\x3048') -- HIRAGANA LETTER E+ , ("O5", '\x3049') -- HIRAGANA LETTER SMALL O+ , ("o5", '\x304A') -- HIRAGANA LETTER O+ , ("ka", '\x304B') -- HIRAGANA LETTER KA+ , ("ga", '\x304C') -- HIRAGANA LETTER GA+ , ("ki", '\x304D') -- HIRAGANA LETTER KI+ , ("gi", '\x304E') -- HIRAGANA LETTER GI+ , ("ku", '\x304F') -- HIRAGANA LETTER KU+ , ("gu", '\x3050') -- HIRAGANA LETTER GU+ , ("ke", '\x3051') -- HIRAGANA LETTER KE+ , ("ge", '\x3052') -- HIRAGANA LETTER GE+ , ("ko", '\x3053') -- HIRAGANA LETTER KO+ , ("go", '\x3054') -- HIRAGANA LETTER GO+ , ("sa", '\x3055') -- HIRAGANA LETTER SA+ , ("za", '\x3056') -- HIRAGANA LETTER ZA+ , ("si", '\x3057') -- HIRAGANA LETTER SI+ , ("zi", '\x3058') -- HIRAGANA LETTER ZI+ , ("su", '\x3059') -- HIRAGANA LETTER SU+ , ("zu", '\x305A') -- HIRAGANA LETTER ZU+ , ("se", '\x305B') -- HIRAGANA LETTER SE+ , ("ze", '\x305C') -- HIRAGANA LETTER ZE+ , ("so", '\x305D') -- HIRAGANA LETTER SO+ , ("zo", '\x305E') -- HIRAGANA LETTER ZO+ , ("ta", '\x305F') -- HIRAGANA LETTER TA+ , ("da", '\x3060') -- HIRAGANA LETTER DA+ , ("ti", '\x3061') -- HIRAGANA LETTER TI+ , ("di", '\x3062') -- HIRAGANA LETTER DI+ , ("tU", '\x3063') -- HIRAGANA LETTER SMALL TU+ , ("tu", '\x3064') -- HIRAGANA LETTER TU+ , ("du", '\x3065') -- HIRAGANA LETTER DU+ , ("te", '\x3066') -- HIRAGANA LETTER TE+ , ("de", '\x3067') -- HIRAGANA LETTER DE+ , ("to", '\x3068') -- HIRAGANA LETTER TO+ , ("do", '\x3069') -- HIRAGANA LETTER DO+ , ("na", '\x306A') -- HIRAGANA LETTER NA+ , ("ni", '\x306B') -- HIRAGANA LETTER NI+ , ("nu", '\x306C') -- HIRAGANA LETTER NU+ , ("ne", '\x306D') -- HIRAGANA LETTER NE+ , ("no", '\x306E') -- HIRAGANA LETTER NO+ , ("ha", '\x306F') -- HIRAGANA LETTER HA+ , ("ba", '\x3070') -- HIRAGANA LETTER BA+ , ("pa", '\x3071') -- HIRAGANA LETTER PA+ , ("hi", '\x3072') -- HIRAGANA LETTER HI+ , ("bi", '\x3073') -- HIRAGANA LETTER BI+ , ("pi", '\x3074') -- HIRAGANA LETTER PI+ , ("hu", '\x3075') -- HIRAGANA LETTER HU+ , ("bu", '\x3076') -- HIRAGANA LETTER BU+ , ("pu", '\x3077') -- HIRAGANA LETTER PU+ , ("he", '\x3078') -- HIRAGANA LETTER HE+ , ("be", '\x3079') -- HIRAGANA LETTER BE+ , ("pe", '\x307A') -- HIRAGANA LETTER PE+ , ("ho", '\x307B') -- HIRAGANA LETTER HO+ , ("bo", '\x307C') -- HIRAGANA LETTER BO+ , ("po", '\x307D') -- HIRAGANA LETTER PO+ , ("ma", '\x307E') -- HIRAGANA LETTER MA+ , ("mi", '\x307F') -- HIRAGANA LETTER MI+ , ("mu", '\x3080') -- HIRAGANA LETTER MU+ , ("me", '\x3081') -- HIRAGANA LETTER ME+ , ("mo", '\x3082') -- HIRAGANA LETTER MO+ , ("yA", '\x3083') -- HIRAGANA LETTER SMALL YA+ , ("ya", '\x3084') -- HIRAGANA LETTER YA+ , ("yU", '\x3085') -- HIRAGANA LETTER SMALL YU+ , ("yu", '\x3086') -- HIRAGANA LETTER YU+ , ("yO", '\x3087') -- HIRAGANA LETTER SMALL YO+ , ("yo", '\x3088') -- HIRAGANA LETTER YO+ , ("ra", '\x3089') -- HIRAGANA LETTER RA+ , ("ri", '\x308A') -- HIRAGANA LETTER RI+ , ("ru", '\x308B') -- HIRAGANA LETTER RU+ , ("re", '\x308C') -- HIRAGANA LETTER RE+ , ("ro", '\x308D') -- HIRAGANA LETTER RO+ , ("wA", '\x308E') -- HIRAGANA LETTER SMALL WA+ , ("wa", '\x308F') -- HIRAGANA LETTER WA+ , ("wi", '\x3090') -- HIRAGANA LETTER WI+ , ("we", '\x3091') -- HIRAGANA LETTER WE+ , ("wo", '\x3092') -- HIRAGANA LETTER WO+ , ("n5", '\x3093') -- HIRAGANA LETTER N `+ , ("vu", '\x3094') -- HIRAGANA LETTER VU+ , ("\"5", '\x309B') -- KATAKANA-HIRAGANA VOICED SOUND MARK+ , ("05", '\x309C') -- KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK+ , ("*5", '\x309D') -- HIRAGANA ITERATION MARK+ , ("+5", '\x309E') -- HIRAGANA VOICED ITERATION MARK+ , ("a6", '\x30A1') -- KATAKANA LETTER SMALL A+ , ("A6", '\x30A2') -- KATAKANA LETTER A+ , ("i6", '\x30A3') -- KATAKANA LETTER SMALL I+ , ("I6", '\x30A4') -- KATAKANA LETTER I+ , ("u6", '\x30A5') -- KATAKANA LETTER SMALL U+ , ("U6", '\x30A6') -- KATAKANA LETTER U+ , ("e6", '\x30A7') -- KATAKANA LETTER SMALL E+ , ("E6", '\x30A8') -- KATAKANA LETTER E+ , ("o6", '\x30A9') -- KATAKANA LETTER SMALL O+ , ("O6", '\x30AA') -- KATAKANA LETTER O+ , ("Ka", '\x30AB') -- KATAKANA LETTER KA+ , ("Ga", '\x30AC') -- KATAKANA LETTER GA+ , ("Ki", '\x30AD') -- KATAKANA LETTER KI+ , ("Gi", '\x30AE') -- KATAKANA LETTER GI+ , ("Ku", '\x30AF') -- KATAKANA LETTER KU+ , ("Gu", '\x30B0') -- KATAKANA LETTER GU+ , ("Ke", '\x30B1') -- KATAKANA LETTER KE+ , ("Ge", '\x30B2') -- KATAKANA LETTER GE+ , ("Ko", '\x30B3') -- KATAKANA LETTER KO+ , ("Go", '\x30B4') -- KATAKANA LETTER GO+ , ("Sa", '\x30B5') -- KATAKANA LETTER SA+ , ("Za", '\x30B6') -- KATAKANA LETTER ZA+ , ("Si", '\x30B7') -- KATAKANA LETTER SI+ , ("Zi", '\x30B8') -- KATAKANA LETTER ZI+ , ("Su", '\x30B9') -- KATAKANA LETTER SU+ , ("Zu", '\x30BA') -- KATAKANA LETTER ZU+ , ("Se", '\x30BB') -- KATAKANA LETTER SE+ , ("Ze", '\x30BC') -- KATAKANA LETTER ZE+ , ("So", '\x30BD') -- KATAKANA LETTER SO+ , ("Zo", '\x30BE') -- KATAKANA LETTER ZO+ , ("Ta", '\x30BF') -- KATAKANA LETTER TA+ , ("Da", '\x30C0') -- KATAKANA LETTER DA+ , ("Ti", '\x30C1') -- KATAKANA LETTER TI+ , ("Di", '\x30C2') -- KATAKANA LETTER DI+ , ("TU", '\x30C3') -- KATAKANA LETTER SMALL TU+ , ("Tu", '\x30C4') -- KATAKANA LETTER TU+ , ("Du", '\x30C5') -- KATAKANA LETTER DU+ , ("Te", '\x30C6') -- KATAKANA LETTER TE+ , ("De", '\x30C7') -- KATAKANA LETTER DE+ , ("To", '\x30C8') -- KATAKANA LETTER TO+ , ("Do", '\x30C9') -- KATAKANA LETTER DO+ , ("Na", '\x30CA') -- KATAKANA LETTER NA+ , ("Ni", '\x30CB') -- KATAKANA LETTER NI+ , ("Nu", '\x30CC') -- KATAKANA LETTER NU+ , ("Ne", '\x30CD') -- KATAKANA LETTER NE+ , ("No", '\x30CE') -- KATAKANA LETTER NO+ , ("Ha", '\x30CF') -- KATAKANA LETTER HA+ , ("Ba", '\x30D0') -- KATAKANA LETTER BA+ , ("Pa", '\x30D1') -- KATAKANA LETTER PA+ , ("Hi", '\x30D2') -- KATAKANA LETTER HI+ , ("Bi", '\x30D3') -- KATAKANA LETTER BI+ , ("Pi", '\x30D4') -- KATAKANA LETTER PI+ , ("Hu", '\x30D5') -- KATAKANA LETTER HU+ , ("Bu", '\x30D6') -- KATAKANA LETTER BU+ , ("Pu", '\x30D7') -- KATAKANA LETTER PU+ , ("He", '\x30D8') -- KATAKANA LETTER HE+ , ("Be", '\x30D9') -- KATAKANA LETTER BE+ , ("Pe", '\x30DA') -- KATAKANA LETTER PE+ , ("Ho", '\x30DB') -- KATAKANA LETTER HO+ , ("Bo", '\x30DC') -- KATAKANA LETTER BO+ , ("Po", '\x30DD') -- KATAKANA LETTER PO+ , ("Ma", '\x30DE') -- KATAKANA LETTER MA+ , ("Mi", '\x30DF') -- KATAKANA LETTER MI+ , ("Mu", '\x30E0') -- KATAKANA LETTER MU+ , ("Me", '\x30E1') -- KATAKANA LETTER ME+ , ("Mo", '\x30E2') -- KATAKANA LETTER MO+ , ("YA", '\x30E3') -- KATAKANA LETTER SMALL YA+ , ("Ya", '\x30E4') -- KATAKANA LETTER YA+ , ("YU", '\x30E5') -- KATAKANA LETTER SMALL YU+ , ("Yu", '\x30E6') -- KATAKANA LETTER YU+ , ("YO", '\x30E7') -- KATAKANA LETTER SMALL YO+ , ("Yo", '\x30E8') -- KATAKANA LETTER YO+ , ("Ra", '\x30E9') -- KATAKANA LETTER RA+ , ("Ri", '\x30EA') -- KATAKANA LETTER RI+ , ("Ru", '\x30EB') -- KATAKANA LETTER RU+ , ("Re", '\x30EC') -- KATAKANA LETTER RE+ , ("Ro", '\x30ED') -- KATAKANA LETTER RO+ , ("WA", '\x30EE') -- KATAKANA LETTER SMALL WA+ , ("Wa", '\x30EF') -- KATAKANA LETTER WA+ , ("Wi", '\x30F0') -- KATAKANA LETTER WI+ , ("We", '\x30F1') -- KATAKANA LETTER WE+ , ("Wo", '\x30F2') -- KATAKANA LETTER WO+ , ("N6", '\x30F3') -- KATAKANA LETTER N `+ , ("Vu", '\x30F4') -- KATAKANA LETTER VU+ , ("KA", '\x30F5') -- KATAKANA LETTER SMALL KA+ , ("KE", '\x30F6') -- KATAKANA LETTER SMALL KE+ , ("Va", '\x30F7') -- KATAKANA LETTER VA+ , ("Vi", '\x30F8') -- KATAKANA LETTER VI+ , ("Ve", '\x30F9') -- KATAKANA LETTER VE+ , ("Vo", '\x30FA') -- KATAKANA LETTER VO+ , (".6", '\x30FB') -- KATAKANA MIDDLE DOT+ , ("-6", '\x30FC') -- KATAKANA-HIRAGANA PROLONGED SOUND MARK+ , ("*6", '\x30FD') -- KATAKANA ITERATION MARK+ , ("+6", '\x30FE') -- KATAKANA VOICED ITERATION MARK+ , ("b4", '\x3105') -- BOPOMOFO LETTER B+ , ("p4", '\x3106') -- BOPOMOFO LETTER P+ , ("m4", '\x3107') -- BOPOMOFO LETTER M+ , ("f4", '\x3108') -- BOPOMOFO LETTER F+ , ("d4", '\x3109') -- BOPOMOFO LETTER D+ , ("t4", '\x310A') -- BOPOMOFO LETTER T+ , ("n4", '\x310B') -- BOPOMOFO LETTER N `+ , ("l4", '\x310C') -- BOPOMOFO LETTER L+ , ("g4", '\x310D') -- BOPOMOFO LETTER G+ , ("k4", '\x310E') -- BOPOMOFO LETTER K+ , ("h4", '\x310F') -- BOPOMOFO LETTER H+ , ("j4", '\x3110') -- BOPOMOFO LETTER J+ , ("q4", '\x3111') -- BOPOMOFO LETTER Q+ , ("x4", '\x3112') -- BOPOMOFO LETTER X+ , ("zh", '\x3113') -- BOPOMOFO LETTER ZH+ , ("ch", '\x3114') -- BOPOMOFO LETTER CH+ , ("sh", '\x3115') -- BOPOMOFO LETTER SH+ , ("r4", '\x3116') -- BOPOMOFO LETTER R+ , ("z4", '\x3117') -- BOPOMOFO LETTER Z+ , ("c4", '\x3118') -- BOPOMOFO LETTER C+ , ("s4", '\x3119') -- BOPOMOFO LETTER S+ , ("a4", '\x311A') -- BOPOMOFO LETTER A+ , ("o4", '\x311B') -- BOPOMOFO LETTER O+ , ("e4", '\x311C') -- BOPOMOFO LETTER E+ , ("ai", '\x311E') -- BOPOMOFO LETTER AI+ , ("ei", '\x311F') -- BOPOMOFO LETTER EI+ , ("au", '\x3120') -- BOPOMOFO LETTER AU+ , ("ou", '\x3121') -- BOPOMOFO LETTER OU+ , ("an", '\x3122') -- BOPOMOFO LETTER AN+ , ("en", '\x3123') -- BOPOMOFO LETTER EN+ , ("aN", '\x3124') -- BOPOMOFO LETTER ANG+ , ("eN", '\x3125') -- BOPOMOFO LETTER ENG+ , ("er", '\x3126') -- BOPOMOFO LETTER ER+ , ("i4", '\x3127') -- BOPOMOFO LETTER I+ , ("u4", '\x3128') -- BOPOMOFO LETTER U+ , ("iu", '\x3129') -- BOPOMOFO LETTER IU+ , ("v4", '\x312A') -- BOPOMOFO LETTER V+ , ("nG", '\x312B') -- BOPOMOFO LETTER NG+ , ("gn", '\x312C') -- BOPOMOFO LETTER GN+ , ("1c", '\x3220') -- PARENTHESIZED IDEOGRAPH ONE+ , ("2c", '\x3221') -- PARENTHESIZED IDEOGRAPH TWO+ , ("3c", '\x3222') -- PARENTHESIZED IDEOGRAPH THREE+ , ("4c", '\x3223') -- PARENTHESIZED IDEOGRAPH FOUR+ , ("5c", '\x3224') -- PARENTHESIZED IDEOGRAPH FIVE+ , ("6c", '\x3225') -- PARENTHESIZED IDEOGRAPH SIX+ , ("7c", '\x3226') -- PARENTHESIZED IDEOGRAPH SEVEN+ , ("8c", '\x3227') -- PARENTHESIZED IDEOGRAPH EIGHT+ , ("9c", '\x3228') -- PARENTHESIZED IDEOGRAPH NINE+ , ("ff", '\xFB00') -- LATIN SMALL LIGATURE FF+ , ("fi", '\xFB01') -- LATIN SMALL LIGATURE FI+ , ("fl", '\xFB02') -- LATIN SMALL LIGATURE FL+ , ("ft", '\xFB05') -- LATIN SMALL LIGATURE LONG S T+ , ("st", '\xFB06') -- LATIN SMALL LIGATURE ST ]
src/Yi/Keymap/Vim/Ex/Commands/BufferNew.hs view
@@ -12,7 +12,7 @@ import Control.Monad (void) import qualified Data.Attoparsec.Text as P (anyChar, char, string) import Data.List (null)-import Data.Text as T (Text, pack)+import qualified Data.Text as T (pack) import Yi.Buffer (BufferId (MemBuffer)) import Yi.Editor (newEmptyBufferE, newTempBufferE, switchToBufferE) import Yi.Keymap (Action (EditorA))
src/Yi/Keymap/Vim/Ex/Commands/Delete.hs view
@@ -17,7 +17,7 @@ import Data.Text () import Data.Semigroup ((<>)) import Lens.Micro.Platform-import Yi.Buffer.Adjusted hiding (Delete)+import Yi.Buffer hiding (Delete) import Yi.Keymap (Action (BufferA)) import Yi.Keymap.Vim.Common (EventString) import qualified Yi.Keymap.Vim.Ex.Commands.Common as Common (parse, pureExCommand, parseRange)
src/Yi/Keymap/Vim/Ex/Commands/Global.hs view
@@ -16,7 +16,7 @@ import Data.Monoid ((<>)) import qualified Data.Text as T (Text, isInfixOf, pack, snoc) import qualified Data.Attoparsec.Text as P (anyChar, char, many', satisfy, string, try)-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Editor (withCurrentBuffer) import Yi.Keymap (Action (BufferA, EditorA)) import Yi.Keymap.Vim.Common (EventString (Ev))
src/Yi/Keymap/Vim/Ex/Commands/GotoLine.hs view
@@ -11,7 +11,7 @@ import Data.Char (isDigit) import qualified Data.Text as T (all, null, unpack)-import Yi.Buffer.Adjusted (firstNonSpaceB, gotoLn)+import Yi.Buffer (firstNonSpaceB, gotoLn) import Yi.Keymap (Action (BufferA)) import Yi.Keymap.Vim.Common (EventString (Ev)) import Yi.Keymap.Vim.Ex.Commands.Common (pureExCommand)
src/Yi/Keymap/Vim/Ex/Commands/Quit.hs view
@@ -24,8 +24,10 @@ import qualified Data.List.PointedList.Circular as PL (length) import Data.Monoid ((<>)) import qualified Data.Text as T (append)+import System.Exit (ExitCode (ExitFailure)) import Yi.Buffer (bkey, file)-import Yi.Core (closeWindow, errorEditor, quitEditor)+import Yi.Core (closeWindow, errorEditor, quitEditor,+ quitEditorWithExitCode) import Yi.Editor import Yi.File (deservesSave, fwriteAllY, viWrite) import Yi.Keymap (Action (YiA), YiM, readEditor)@@ -46,6 +48,9 @@ bangs <- P.many' (P.char '!') return (quit True (not $ null bangs) False) , do+ void $ P.try (P.string "cquit") <|> P.string "cq"+ return hardExitWithError+ , do ws <- P.many' (P.char 'w') void $ P.try ( P.string "quit") <|> P.string "q" as <- P.many' (P.try ( P.string "all") <|> P.string "a")@@ -60,6 +65,12 @@ `T.append` (if a then "all" else "") `T.append` (if f then "!" else "") , cmdAction = YiA $ action w f a+ }++hardExitWithError :: ExCommand+hardExitWithError = Common.impureExCommand {+ cmdShow = "cquit"+ , cmdAction = YiA (quitEditorWithExitCode (ExitFailure 1)) } action :: Bool -> Bool -> Bool -> YiM ()
src/Yi/Keymap/Vim/Ex/Commands/Substitute.hs view
@@ -20,17 +20,13 @@ import Data.Monoid ((<>)) import qualified Data.Text as T (Text, cons, snoc) import Lens.Micro.Platform (over, _2)-import Yi.Buffer.Adjusted-import Yi.Editor (EditorM, closeBufferAndWindowE, printMsg, withCurrentBuffer)-import Yi.Keymap (Action (EditorA), Keymap)-import Yi.Keymap.Keys (char, choice, (?>>!))-import Yi.Keymap.Vim.Common (EventString)+import Yi.Buffer+import Yi.Keymap (Action (EditorA))+import Yi.Keymap.Vim.Common (EventString, Substitution(..)) import qualified Yi.Keymap.Vim.Ex.Commands.Common as Common (parse, pureExCommand, parseRange) import Yi.Keymap.Vim.Ex.Types (ExCommand (cmdAction, cmdShow))-import Yi.MiniBuffer (spawnMinibufferE)-import Yi.Regex (makeSearchOptsM)-import qualified Yi.Rope as R (YiString, fromString, length, null, toText, toString)-import Yi.Search+import qualified Yi.Rope as R (fromString, toText)+import Yi.Keymap.Vim.Substitution -- | Skip one or no occurrences of a given parser. skipOptional :: Alternative f => f a -> f ()@@ -49,16 +45,20 @@ to <- R.fromString <$> P.many' (P.satisfy (/= delimiter)) flagChars <- P.option "" $ P.char delimiter *> P.many' (P.satisfy $ P.inClass "gic")- return $! substitute from to delimiter- ('g' `elem` flagChars)- ('i' `elem` flagChars)- ('c' `elem` flagChars)+ return $! substitute+ (Substitution+ from+ to+ ('g' `elem` flagChars)+ ('i' `elem` flagChars)+ ('c' `elem` flagChars))+ delimiter rangeText rangeB -substitute :: R.YiString -> R.YiString -> Char -> Bool -> Bool -> Bool -> T.Text -> BufferM Region -> ExCommand-substitute from to delimiter global caseInsensitive confirm regionText regionB = Common.pureExCommand {- cmdShow = regionText+substitute :: Substitution -> Char -> T.Text -> BufferM Region -> ExCommand+substitute s@(Substitution from to global caseInsensitive confirm) delimiter regionText regionB = Common.pureExCommand+ { cmdShow = regionText <> "s" <> (delimiter `T.cons` R.toText from) <> (delimiter `T.cons` R.toText to)@@ -66,70 +66,5 @@ <> (if confirm then "c" else "") <> (if caseInsensitive then "i" else "") <> (if global then "g" else "")- , cmdAction = EditorA $ do- let opts = if caseInsensitive then [IgnoreCase] else []- lines' <- withCurrentBuffer $ regionB >>= linesOfRegionB- regex <- if R.null from- then getRegexE- else return . (either (const Nothing) Just) - . makeSearchOptsM opts . R.toString $ from- case regex of- Nothing -> printMsg "No previous search pattern"- Just regex' -> if confirm- then substituteConfirm regex' to global lines'- else withCurrentBuffer $ do- -- We need to reverse the lines' here so that replacing- -- does not effect the regions in question.- mapM_ (void . searchAndRepRegion0 regex' to global) (reverse lines')- moveToSol+ , cmdAction = EditorA $ substituteE s regionB }---- | Run substitution in confirm mode-substituteConfirm :: SearchExp -> R.YiString -> Bool -> [Region] -> EditorM ()-substituteConfirm regex to global lines' = do- -- TODO This highlights all matches, even in non-global mode- -- and could potentially be classified as a bug. Fixing requires- -- changing the regex highlighting api.- setRegexE regex- regions <- withCurrentBuffer $ findMatches regex global lines'- substituteMatch to 0 False regions---- | All matches to replace under given flags-findMatches :: SearchExp -> Bool -> [Region] -> BufferM [Region]-findMatches regex global lines' = do- let f = if global then id else take 1- concat <$> mapM (fmap f . regexRegionB regex) lines'---- | Offsets a region (to account for a region prior being modified)-offsetRegion :: Int -> Region -> Region-offsetRegion k reg = mkRegion (regionStart reg + k') (regionEnd reg + k')- where k' = fromIntegral k---- | Runs a list of matches using itself as a continuation-substituteMatch :: R.YiString -> Int -> Bool -> [Region] -> EditorM ()-substituteMatch _ _ _ [] = resetRegexE-substituteMatch to co autoAll (m:ms) = do- let m' = offsetRegion co m- withCurrentBuffer . moveTo $ regionStart m'- len <- withCurrentBuffer $ R.length <$> readRegionB m'- let diff = R.length to - len- tex = "replace with " <> R.toText to <> " (y/n/a/q)?"- if autoAll- then do withCurrentBuffer $ replaceRegionB m' to- substituteMatch to (co + diff) True ms- else void . spawnMinibufferE tex . const $ askKeymap to co (co + diff) m ms---- | Actual choices during confirm mode.-askKeymap :: R.YiString -> Int -> Int -> Region -> [Region] -> Keymap-askKeymap to co co' m ms = choice [- char 'n' ?>>! cleanUp >> substituteMatch to co False ms- , char 'a' ?>>! do cleanUp- replace- substituteMatch to co' True ms- , char 'y' ?>>! do cleanUp- replace- substituteMatch to co' False ms- , char 'q' ?>>! cleanUp >> resetRegexE- ]- where cleanUp = closeBufferAndWindowE- replace = withCurrentBuffer $ replaceRegionB (offsetRegion co m) to
src/Yi/Keymap/Vim/Ex/Commands/Undo.hs view
@@ -10,7 +10,7 @@ module Yi.Keymap.Vim.Ex.Commands.Undo (parse) where -import Yi.Buffer.Adjusted (redoB, undoB)+import Yi.Buffer (redoB, undoB) import Yi.Keymap (Action (BufferA)) import Yi.Keymap.Vim.Common (EventString (Ev)) import Yi.Keymap.Vim.Ex.Commands.Common (pureExCommand)
src/Yi/Keymap/Vim/ExMap.hs view
@@ -18,7 +18,7 @@ import Data.Monoid ((<>)) import qualified Data.Text as T (Text, drop, head, length, split, unwords, map, unpack) import System.FilePath (isPathSeparator)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert) import Yi.Editor import Yi.History (historyDown, historyFinish, historyPrefixSet, historyUp) import Yi.Keymap (YiM)
src/Yi/Keymap/Vim/InsertMap.hs view
@@ -19,7 +19,7 @@ import Data.Monoid ((<>)) import qualified Data.Text as T (pack, unpack) import qualified Yi.Buffer as B (bdeleteB, deleteB, deleteRegionB, insertB, insertN)-import Yi.Buffer.Adjusted as BA hiding (Insert)+import Yi.Buffer as BA hiding (Insert) import Yi.Editor (EditorM, getEditorDyn, withCurrentBuffer) import Yi.Event (Event) import Yi.Keymap.Vim.Common
src/Yi/Keymap/Vim/Motion.hs view
@@ -57,7 +57,7 @@ import Data.Maybe (fromMaybe) import Data.Monoid ((<>)) import qualified Data.Text as T (unpack)-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Keymap.Vim.Common (EventString (_unEv), MatchResult (..), lookupBestMatch) import Yi.Keymap.Vim.StyledRegion (StyledRegion (..), normalizeRegion)
src/Yi/Keymap/Vim/NormalMap.hs view
@@ -16,14 +16,14 @@ import Lens.Micro.Platform (use, (.=)) import Control.Monad (replicateM_, unless, void, when) import Data.Char (ord)-import Data.HashMap.Strict (lookup, singleton)+import Data.HashMap.Strict (lookup, insert) import Data.List (group) import Data.Maybe (fromMaybe) import Data.Monoid ((<>)) import qualified Data.Text as T (drop, empty, pack, replicate, unpack) import System.Directory (doesFileExist) import System.FriendlyPath (expandTilda)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert) import Yi.Core (closeWindow, quitEditor) import Yi.Editor import Yi.Event (Event (Event), Key (KASCII, KEnter, KEsc, KTab), Modifier (MCtrl))@@ -38,6 +38,7 @@ import Yi.Keymap.Vim.Search (doVimSearch) import Yi.Keymap.Vim.StateUtils import Yi.Keymap.Vim.StyledRegion (StyledRegion (StyledRegion), transformCharactersInLineN)+import Yi.Keymap.Vim.Substitution (repeatSubstitutionE, repeatSubstitutionFlaglessE) import Yi.Keymap.Vim.Tag (gotoTag, popTag) import Yi.Keymap.Vim.Utils import Yi.MiniBuffer (spawnMinibufferE)@@ -249,7 +250,6 @@ , (char 'R', return (), switchMode Replace) ] - nonrepeatableBindings :: [VimBinding] nonrepeatableBindings = fmap (mkBindingE Normal Drop) [ (spec KEsc, return (), resetCount)@@ -271,7 +271,7 @@ , (char ',', repeatGotoCharE reverseDir, id) -- Repeat- , (char '&', return (), id) -- TODO+ , (char '&', loadSubstitutionE >>= maybe (pure ()) repeatSubstitutionFlaglessE, id) -- Transition to ex , (char ':', do@@ -302,6 +302,7 @@ , ("g#", searchWordE False Backward, resetCount) , ("gd", withCurrentBuffer $ withModeB modeGotoDeclaration, resetCount) , ("gD", withCurrentBuffer $ withModeB modeGotoDeclaration, resetCount)+ , ("g&", loadSubstitutionE >>= maybe (pure ()) repeatSubstitutionE, id) , ("<C-g>", printFileInfoE, resetCount) , ("<C-w>c", tryCloseE, resetCount) , ("<C-w>o", closeOtherE, resetCount)@@ -490,11 +491,10 @@ , vsCurrentMacroRecording = Just (macroName, Ev macroBody) }) = WholeMatch $ do let reg = Register Exclusive (R.fromText (T.drop 2 macroBody))- modifyStateE $ \s ->- s { vsCurrentMacroRecording = Nothing- , vsRegisterMap = singleton macroName reg- <> vsRegisterMap s- }+ modifyStateE $ \s -> s+ { vsCurrentMacroRecording = Nothing+ , vsRegisterMap = insert macroName reg (vsRegisterMap s)+ } return Finish f _ _ = NoMatch @@ -506,10 +506,12 @@ , vsCount = mbCount }) = WholeMatch $ do resetCountE case lookup c registers of- Just (Register _ evs) -> do+ Just reg@(Register _ evs) -> do let count = fromMaybe 1 mbCount mkAct = Ev . T.replicate count . R.toText scheduleActionStringForEval . mkAct $ evs+ modifyStateE $ \s ->+ s { vsRegisterMap = insert '@' reg (vsRegisterMap s) } return Finish Nothing -> return Drop f _ _ = NoMatch
src/Yi/Keymap/Vim/NormalOperatorPendingMap.hs view
@@ -17,7 +17,7 @@ import Data.Maybe (fromJust, fromMaybe) import Data.Monoid ((<>)) import qualified Data.Text as T (init, last, pack, snoc, unpack)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert) import Yi.Editor (getEditorDyn, withCurrentBuffer) import Yi.Keymap.Keys (Key (KEsc), spec) import Yi.Keymap.Vim.Common
src/Yi/Keymap/Vim/Operator.hs view
@@ -26,14 +26,16 @@ import Control.Monad (when) import Data.Char (isSpace, toLower, toUpper) import Data.Foldable (find)+import qualified Data.List.NonEmpty as NE import Data.Maybe (fromJust) import Data.Monoid ((<>)) import qualified Data.Text as T (unpack)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert)+import Yi.Buffer.Misc (startUpdateTransactionB) import Yi.Editor (EditorM, getEditorDyn, withCurrentBuffer) import Yi.Keymap.Vim.Common import Yi.Keymap.Vim.EventUtils (eventToEventString, parseEvents)-import Yi.Keymap.Vim.StateUtils (setRegisterE, switchModeE)+import Yi.Keymap.Vim.StateUtils (setRegisterE, switchModeE, modifyStateE) import Yi.Keymap.Vim.StyledRegion (StyledRegion (..), transformCharactersInRegionB) import Yi.Keymap.Vim.TextObject (CountedTextObject, regionOfTextObjectB) import Yi.Keymap.Vim.Utils (indentBlockRegionB)@@ -88,7 +90,7 @@ regName <- fmap vsActiveRegister getEditorDyn setRegisterE regName style s withCurrentBuffer $ do- point <- deleteRegionWithStyleB reg style+ point <- NE.head <$> deleteRegionWithStyleB reg style moveTo point eof <- atEof if eof@@ -108,12 +110,23 @@ s <- withCurrentBuffer $ readRegionRopeWithStyleB reg style regName <- fmap vsActiveRegister getEditorDyn setRegisterE regName style s- withCurrentBuffer $ do- point <- deleteRegionWithStyleB reg style- moveTo point- when (style == LineWise) $ do- insertB '\n'- leftB+ do+ withCurrentBuffer $ startUpdateTransactionB+ case style of+ LineWise -> withCurrentBuffer $ do+ point <- NE.head <$> deleteRegionWithStyleB reg style+ moveTo point+ insertB '\n'+ leftB+ Block -> do+ points <- withCurrentBuffer $ do+ points <- deleteRegionWithStyleB reg style+ moveTo $ NE.head points+ return points+ modifyStateE $ \s -> s { vsSecondaryCursors = NE.tail points }+ _ -> withCurrentBuffer $ do+ point <- NE.head <$> deleteRegionWithStyleB reg style+ moveTo point switchModeE $ Insert 'c' return Continue }
src/Yi/Keymap/Vim/ReplaceMap.hs view
@@ -13,7 +13,7 @@ import Control.Monad (replicateM_, when) import Data.Monoid ((<>)) import qualified Data.Text as T (unpack)-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Editor (EditorM, getEditorDyn, withCurrentBuffer) import Yi.Keymap.Keys (Key (KEsc), ctrlCh, spec) import Yi.Keymap.Vim.Common@@ -49,6 +49,7 @@ saveInsertEventStringE evs withCurrentBuffer $ case T.unpack . _unEv $ evs of [c] -> insertOrReplaceB c+ "<lt>" -> insertOrReplaceB '<' "<CR>" -> insertOrReplaceB '\n' -- For testing purposes assume noexpandtab, tw=4 "<Esc>" -> replicateM_ 4 $ insertOrReplaceB ' '
src/Yi/Keymap/Vim/ReplaceSingleCharMap.hs view
@@ -14,7 +14,7 @@ import Control.Monad (replicateM_, when) import Data.Maybe (fromMaybe) import qualified Data.Text as T (unpack)-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Editor (getEditorDyn, withCurrentBuffer) import Yi.Keymap.Keys (Key (KEsc), spec) import Yi.Keymap.Vim.Common
src/Yi/Keymap/Vim/Search.hs view
@@ -12,7 +12,7 @@ import Data.Maybe (listToMaybe) import Data.Text ()-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Editor (EditorM, printMsg, withCurrentBuffer) import Yi.Search (SearchOption, getRegexE, searchInit)
src/Yi/Keymap/Vim/SearchMotionMap.hs view
@@ -14,7 +14,7 @@ import Control.Monad (replicateM_) import Data.Maybe (fromMaybe) import qualified Data.Text as T (pack, unpack)-import Yi.Buffer.Adjusted (Direction (Backward, Forward), elemsB)+import Yi.Buffer (Direction (Backward, Forward), elemsB) import Yi.Editor (getEditorDyn, withCurrentBuffer) import Yi.History (historyFinish, historyPrefixSet) import Yi.Keymap.Vim.Common
src/Yi/Keymap/Vim/StateUtils.hs view
@@ -31,6 +31,8 @@ , updateModeIndicatorE , saveInsertEventStringE , resetActiveRegisterE+ , saveSubstitutionE+ , loadSubstitutionE ) where import Control.Monad (when)@@ -174,3 +176,9 @@ resetActiveRegisterE :: EditorM () resetActiveRegisterE = modifyStateE $ \s -> s { vsActiveRegister = '\0' }++saveSubstitutionE :: Substitution -> EditorM ()+saveSubstitutionE sub = modifyStateE $ \s -> s { vsLastSubstitution = Just sub }++loadSubstitutionE :: EditorM (Maybe Substitution)+loadSubstitutionE = vsLastSubstitution <$> getEditorDyn
src/Yi/Keymap/Vim/StyledRegion.hs view
@@ -18,7 +18,7 @@ import Control.Monad (forM_) import qualified Data.Text as T (map)-import Yi.Buffer.Adjusted+import Yi.Buffer import qualified Yi.Rope as R (withText) import Yi.Utils (SemiNum ((-~)))
+ src/Yi/Keymap/Vim/Substitution.hs view
@@ -0,0 +1,99 @@+{-# language OverloadedStrings #-}++module Yi.Keymap.Vim.Substitution+ ( substituteE+ , substituteConfirmE+ , repeatSubstitutionE+ , repeatSubstitutionFlaglessE+ ) where++import Control.Monad (void)+import Data.Monoid+import Yi.MiniBuffer+import Yi.Keymap (Keymap)+import qualified Yi.Rope as R+import Yi.Regex+import Yi.Buffer+import Yi.Editor+import Yi.Search+import Yi.Keymap.Keys (char, choice, (?>>!))+import Yi.Keymap.Vim.Common+import Yi.Keymap.Vim.StateUtils++substituteE :: Substitution -> BufferM Region -> EditorM ()+substituteE s@(Substitution from to global caseInsensitive confirm) regionB = do+ let opts = if caseInsensitive then [IgnoreCase] else []+ lines' <- withCurrentBuffer $ regionB >>= linesOfRegionB+ regex <- if R.null from+ then getRegexE+ else return . (either (const Nothing) Just) + . makeSearchOptsM opts . R.toString $ from+ case regex of+ Nothing -> printMsg "No previous search pattern"+ Just regex' -> do+ saveSubstitutionE s+ if confirm+ then substituteConfirmE regex' to global lines'+ else do+ withCurrentBuffer $ do+ -- We need to reverse the lines' here so that replacing+ -- does not effect the regions in question.+ mapM_ (void . searchAndRepRegion0 regex' to global) (reverse lines')+ moveToSol++-- | Run substitution in confirm mode+substituteConfirmE :: SearchExp -> R.YiString -> Bool -> [Region] -> EditorM ()+substituteConfirmE regex to global lines' = do+ -- TODO This highlights all matches, even in non-global mode+ -- and could potentially be classified as a bug. Fixing requires+ -- changing the regex highlighting api.+ setRegexE regex+ regions <- withCurrentBuffer $ findMatches regex global lines'+ substituteMatch to 0 False regions++-- | All matches to replace under given flags+findMatches :: SearchExp -> Bool -> [Region] -> BufferM [Region]+findMatches regex global lines' = do+ let f = if global then id else take 1+ concat <$> mapM (fmap f . regexRegionB regex) lines'++-- | Runs a list of matches using itself as a continuation+substituteMatch :: R.YiString -> Int -> Bool -> [Region] -> EditorM ()+substituteMatch _ _ _ [] = resetRegexE+substituteMatch to co autoAll (m:ms) = do+ let m' = offsetRegion co m+ withCurrentBuffer . moveTo $ regionStart m'+ len <- withCurrentBuffer $ R.length <$> readRegionB m'+ let diff = R.length to - len+ tex = "replace with " <> R.toText to <> " (y/n/a/q)?"+ if autoAll+ then do withCurrentBuffer $ replaceRegionB m' to+ substituteMatch to (co + diff) True ms+ else void . spawnMinibufferE tex . const $ askKeymap to co (co + diff) m ms++-- | Offsets a region (to account for a region prior being modified)+offsetRegion :: Int -> Region -> Region+offsetRegion k reg = mkRegion (regionStart reg + k') (regionEnd reg + k')+ where k' = fromIntegral k++-- | Actual choices during confirm mode.+askKeymap :: R.YiString -> Int -> Int -> Region -> [Region] -> Keymap+askKeymap to co co' m ms = choice [+ char 'n' ?>>! cleanUp >> substituteMatch to co False ms+ , char 'a' ?>>! do cleanUp+ replace+ substituteMatch to co' True ms+ , char 'y' ?>>! do cleanUp+ replace+ substituteMatch to co' False ms+ , char 'q' ?>>! cleanUp >> resetRegexE+ ]+ where cleanUp = closeBufferAndWindowE+ replace = withCurrentBuffer $ replaceRegionB (offsetRegion co m) to++repeatSubstitutionFlaglessE :: Substitution -> EditorM ()+repeatSubstitutionFlaglessE (Substitution from to _ _ _) =+ substituteE (Substitution from to False False False) (regionOfB Line)++repeatSubstitutionE :: Substitution -> EditorM ()+repeatSubstitutionE s = substituteE s (regionOfB Line)
src/Yi/Keymap/Vim/TextObject.hs view
@@ -8,7 +8,7 @@ ) where import Control.Monad (replicateM_, (<=<))-import Yi.Buffer.Adjusted+import Yi.Buffer import Yi.Keymap.Vim.MatchResult import Yi.Keymap.Vim.StyledRegion (StyledRegion (..), normalizeRegion)
src/Yi/Keymap/Vim/Utils.hs view
@@ -36,7 +36,7 @@ import Data.List (group) import qualified Data.Text as T (unpack) import Safe (headDef)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert) import Yi.Editor import Yi.Event (Event) import Yi.Keymap (YiM)
src/Yi/Keymap/Vim/VisualMap.hs view
@@ -19,7 +19,7 @@ import Data.List (group) import Data.Maybe (fromJust, fromMaybe) import qualified Data.Text as T (unpack)-import Yi.Buffer.Adjusted hiding (Insert)+import Yi.Buffer hiding (Insert) import Yi.Editor import Yi.Keymap.Vim.Common import Yi.Keymap.Vim.Operator (VimOperator (..), opDelete, stringToOperator)@@ -230,7 +230,7 @@ region <- withCurrentBuffer regionOfSelectionB withCurrentBuffer $ transformCharactersInRegionB (StyledRegion style region) (\x -> if x == '\n' then x else c)- switchModeE Normal+ escAction return Finish _ -> NoMatch f _ _ = NoMatch@@ -260,7 +260,7 @@ region' <- convertRegionToStyleB region Inclusive replaceRegionB region' rope _ -> pure ()- switchModeE Normal+ escAction return Finish f _ _ = NoMatch @@ -294,6 +294,7 @@ [] -> error "No cursor to move to (in Yi.Keymap.Vim.VisualMap.insertBinding)" (mainCursor : _) -> withCurrentBuffer (moveTo mainCursor) modifyStateE $ \s -> s { vsSecondaryCursors = drop 1 cursors }+ withCurrentBuffer $ setVisibleSelection False switchModeE $ Insert (head evs) return Continue f _ _ = NoMatch@@ -304,7 +305,7 @@ = WholeMatch $ do tag <- Tag . R.toText <$> withCurrentBuffer (regionOfSelectionB >>= readRegionB)- withEditor $ switchModeE Normal+ withEditor escAction gotoTag tag 0 Nothing return Finish f _ _ = NoMatch
tests/Generic/TestPureBufferManipulations.hs view
@@ -170,7 +170,7 @@ assertions editor _ = let actualOut = cursorPos editor ++ "\n" ++ extractBufferString cf editor- in assertEqual (errorMsg actualOut) actualOut (ktOutput t)+ in assertEqual (errorMsg actualOut) (ktOutput t) actualOut runTest setupActions preConditions testActions assertions cf
+ tests/vimtests/blockvisual/c.test view
@@ -0,0 +1,14 @@+-- Input+(1,2)+foo+bar++baz+-- Output+(1,4)+f123o+b123r++b123z+-- Events+<C-v>jjjc123<Esc>
+ tests/vimtests/blockvisual/r_4.test view
@@ -0,0 +1,12 @@+-- Input+(1,1)+1234++1234+-- Output+(1,2)+1xx4++1xx4+-- Events+l<C-v>ljjrx
+ tests/vimtests/macros/repeat_last_macro.test view
@@ -0,0 +1,12 @@+-- Input+(2,2)+qwf+ars+zxc+-- Output+(2,11)+qwf+arfoofoofoos+zxc+-- Events+qaafoo<Esc>q@a@@
+ tests/vimtests/replace/12.test view
@@ -0,0 +1,8 @@+-- Input+(1,1)+foobarbaz+-- Output+(1,13)+foo123456789<+-- Events+3lR123456789<lt><Esc>
+ tests/vimtests/undo/cw.test view
@@ -0,0 +1,12 @@+-- Input+(2,1)+foo+bar+baz+-- Output+(2,1)+foo+bar+baz+-- Events+cwohai<Esc>u
yi-keymap-vim.cabal view
@@ -1,9 +1,9 @@--- This file has been generated from package.yaml by hpack version 0.17.0.+-- This file has been generated from package.yaml by hpack version 0.17.1. -- -- see: https://github.com/sol/hpack name: yi-keymap-vim-version: 0.14.1+version: 0.15.0 synopsis: Vim keymap for Yi editor category: Yi homepage: https://github.com/yi-editor/yi#readme@@ -21,6 +21,7 @@ tests/vimtests/blockvisual/block_d.test tests/vimtests/blockvisual/block_d_1.test tests/vimtests/blockvisual/block_d_2.test+ tests/vimtests/blockvisual/c.test tests/vimtests/blockvisual/capD_1.test tests/vimtests/blockvisual/capD_2.test tests/vimtests/blockvisual/capI.test@@ -44,6 +45,7 @@ tests/vimtests/blockvisual/r_1.test tests/vimtests/blockvisual/r_2.test tests/vimtests/blockvisual/r_3.test+ tests/vimtests/blockvisual/r_4.test tests/vimtests/blockvisual/switchcase_2.test tests/vimtests/blockvisual/u_2.test tests/vimtests/blockvisual/y_10.test@@ -250,6 +252,7 @@ tests/vimtests/macros/7.test tests/vimtests/macros/8.test tests/vimtests/macros/9.test+ tests/vimtests/macros/repeat_last_macro.test tests/vimtests/marks/unjump_backquote.test tests/vimtests/marks/unjump_quote.test tests/vimtests/marks/unjump_quote_blank.test@@ -340,6 +343,7 @@ tests/vimtests/replace/1.test tests/vimtests/replace/10.test tests/vimtests/replace/11.test+ tests/vimtests/replace/12.test tests/vimtests/replace/2.test tests/vimtests/replace/3.test tests/vimtests/replace/4.test@@ -403,6 +407,7 @@ tests/vimtests/undo/7.test tests/vimtests/undo/8.test tests/vimtests/undo/9.test+ tests/vimtests/undo/cw.test tests/vimtests/unicode/chinese-simp.test tests/vimtests/unicode/chinese-trad.test tests/vimtests/unicode/russian.test@@ -501,7 +506,6 @@ , oo-prototypes , pointedlist , safe- , semigroups , text , transformers-base , unordered-containers@@ -562,6 +566,7 @@ other-modules: Yi.Keymap.Vim.Ex.Commands.BufferNew Yi.Keymap.Vim.Ex.Commands.Stack+ Yi.Keymap.Vim.Substitution Paths_yi_keymap_vim default-language: Haskell2010 @@ -585,7 +590,6 @@ , oo-prototypes , pointedlist , safe- , semigroups , text , transformers-base , unordered-containers