# This file is part of python-bidi
#
# python-bidi is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see .
# Copyright (C) 2008-2010 Yaacov Zamir ,
# Copyright (C) 2010-2015 Meir kriheli .
"""Mirrored chars"""
# Can't seem to get this data from python's unicode data, so this is imported
# from http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt
MIRRORED = {
"\u0028": "\u0029", # LEFT PARENTHESIS
"\u0029": "\u0028", # RIGHT PARENTHESIS
"\u003C": "\u003E", # LESS-THAN SIGN
"\u003E": "\u003C", # GREATER-THAN SIGN
"\u005B": "\u005D", # LEFT SQUARE BRACKET
"\u005D": "\u005B", # RIGHT SQUARE BRACKET
"\u007B": "\u007D", # LEFT CURLY BRACKET
"\u007D": "\u007B", # RIGHT CURLY BRACKET
"\u00AB": "\u00BB", # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
"\u00BB": "\u00AB", # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
"\u0F3A": "\u0F3B", # TIBETAN MARK GUG RTAGS GYON
"\u0F3B": "\u0F3A", # TIBETAN MARK GUG RTAGS GYAS
"\u0F3C": "\u0F3D", # TIBETAN MARK ANG KHANG GYON
"\u0F3D": "\u0F3C", # TIBETAN MARK ANG KHANG GYAS
"\u169B": "\u169C", # OGHAM FEATHER MARK
"\u169C": "\u169B", # OGHAM REVERSED FEATHER MARK
"\u2039": "\u203A", # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
"\u203A": "\u2039", # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
"\u2045": "\u2046", # LEFT SQUARE BRACKET WITH QUILL
"\u2046": "\u2045", # RIGHT SQUARE BRACKET WITH QUILL
"\u207D": "\u207E", # SUPERSCRIPT LEFT PARENTHESIS
"\u207E": "\u207D", # SUPERSCRIPT RIGHT PARENTHESIS
"\u208D": "\u208E", # SUBSCRIPT LEFT PARENTHESIS
"\u208E": "\u208D", # SUBSCRIPT RIGHT PARENTHESIS
"\u2208": "\u220B", # ELEMENT OF
"\u2209": "\u220C", # NOT AN ELEMENT OF
"\u220A": "\u220D", # SMALL ELEMENT OF
"\u220B": "\u2208", # CONTAINS AS MEMBER
"\u220C": "\u2209", # DOES NOT CONTAIN AS MEMBER
"\u220D": "\u220A", # SMALL CONTAINS AS MEMBER
"\u2215": "\u29F5", # DIVISION SLASH
"\u223C": "\u223D", # TILDE OPERATOR
"\u223D": "\u223C", # REVERSED TILDE
"\u2243": "\u22CD", # ASYMPTOTICALLY EQUAL TO
"\u2252": "\u2253", # APPROXIMATELY EQUAL TO OR THE IMAGE OF
"\u2253": "\u2252", # IMAGE OF OR APPROXIMATELY EQUAL TO
"\u2254": "\u2255", # COLON EQUALS
"\u2255": "\u2254", # EQUALS COLON
"\u2264": "\u2265", # LESS-THAN OR EQUAL TO
"\u2265": "\u2264", # GREATER-THAN OR EQUAL TO
"\u2266": "\u2267", # LESS-THAN OVER EQUAL TO
"\u2267": "\u2266", # GREATER-THAN OVER EQUAL TO
"\u2268": "\u2269", # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
"\u2269": "\u2268", # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
"\u226A": "\u226B", # MUCH LESS-THAN
"\u226B": "\u226A", # MUCH GREATER-THAN
"\u226E": "\u226F", # [BEST FIT] NOT LESS-THAN
"\u226F": "\u226E", # [BEST FIT] NOT GREATER-THAN
"\u2270": "\u2271", # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
"\u2271": "\u2270", # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
"\u2272": "\u2273", # [BEST FIT] LESS-THAN OR EQUIVALENT TO
"\u2273": "\u2272", # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
"\u2274": "\u2275", # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
"\u2275": "\u2274", # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
"\u2276": "\u2277", # LESS-THAN OR GREATER-THAN
"\u2277": "\u2276", # GREATER-THAN OR LESS-THAN
"\u2278": "\u2279", # [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN
"\u2279": "\u2278", # [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN
"\u227A": "\u227B", # PRECEDES
"\u227B": "\u227A", # SUCCEEDS
"\u227C": "\u227D", # PRECEDES OR EQUAL TO
"\u227D": "\u227C", # SUCCEEDS OR EQUAL TO
"\u227E": "\u227F", # [BEST FIT] PRECEDES OR EQUIVALENT TO
"\u227F": "\u227E", # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
"\u2280": "\u2281", # [BEST FIT] DOES NOT PRECEDE
"\u2281": "\u2280", # [BEST FIT] DOES NOT SUCCEED
"\u2282": "\u2283", # SUBSET OF
"\u2283": "\u2282", # SUPERSET OF
"\u2284": "\u2285", # [BEST FIT] NOT A SUBSET OF
"\u2285": "\u2284", # [BEST FIT] NOT A SUPERSET OF
"\u2286": "\u2287", # SUBSET OF OR EQUAL TO
"\u2287": "\u2286", # SUPERSET OF OR EQUAL TO
"\u2288": "\u2289", # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
"\u2289": "\u2288", # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
"\u228A": "\u228B", # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
"\u228B": "\u228A", # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
"\u228F": "\u2290", # SQUARE IMAGE OF
"\u2290": "\u228F", # SQUARE ORIGINAL OF
"\u2291": "\u2292", # SQUARE IMAGE OF OR EQUAL TO
"\u2292": "\u2291", # SQUARE ORIGINAL OF OR EQUAL TO
"\u2298": "\u29B8", # CIRCLED DIVISION SLASH
"\u22A2": "\u22A3", # RIGHT TACK
"\u22A3": "\u22A2", # LEFT TACK
"\u22A6": "\u2ADE", # ASSERTION
"\u22A8": "\u2AE4", # TRUE
"\u22A9": "\u2AE3", # FORCES
"\u22AB": "\u2AE5", # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
"\u22B0": "\u22B1", # PRECEDES UNDER RELATION
"\u22B1": "\u22B0", # SUCCEEDS UNDER RELATION
"\u22B2": "\u22B3", # NORMAL SUBGROUP OF
"\u22B3": "\u22B2", # CONTAINS AS NORMAL SUBGROUP
"\u22B4": "\u22B5", # NORMAL SUBGROUP OF OR EQUAL TO
"\u22B5": "\u22B4", # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
"\u22B6": "\u22B7", # ORIGINAL OF
"\u22B7": "\u22B6", # IMAGE OF
"\u22C9": "\u22CA", # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
"\u22CA": "\u22C9", # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
"\u22CB": "\u22CC", # LEFT SEMIDIRECT PRODUCT
"\u22CC": "\u22CB", # RIGHT SEMIDIRECT PRODUCT
"\u22CD": "\u2243", # REVERSED TILDE EQUALS
"\u22D0": "\u22D1", # DOUBLE SUBSET
"\u22D1": "\u22D0", # DOUBLE SUPERSET
"\u22D6": "\u22D7", # LESS-THAN WITH DOT
"\u22D7": "\u22D6", # GREATER-THAN WITH DOT
"\u22D8": "\u22D9", # VERY MUCH LESS-THAN
"\u22D9": "\u22D8", # VERY MUCH GREATER-THAN
"\u22DA": "\u22DB", # LESS-THAN EQUAL TO OR GREATER-THAN
"\u22DB": "\u22DA", # GREATER-THAN EQUAL TO OR LESS-THAN
"\u22DC": "\u22DD", # EQUAL TO OR LESS-THAN
"\u22DD": "\u22DC", # EQUAL TO OR GREATER-THAN
"\u22DE": "\u22DF", # EQUAL TO OR PRECEDES
"\u22DF": "\u22DE", # EQUAL TO OR SUCCEEDS
"\u22E0": "\u22E1", # [BEST FIT] DOES NOT PRECEDE OR EQUAL
"\u22E1": "\u22E0", # [BEST FIT] DOES NOT SUCCEED OR EQUAL
"\u22E2": "\u22E3", # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
"\u22E3": "\u22E2", # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
"\u22E4": "\u22E5", # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
"\u22E5": "\u22E4", # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
"\u22E6": "\u22E7", # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
"\u22E7": "\u22E6", # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
"\u22E8": "\u22E9", # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
"\u22E9": "\u22E8", # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
"\u22EA": "\u22EB", # [BEST FIT] NOT NORMAL SUBGROUP OF
"\u22EB": "\u22EA", # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
"\u22EC": "\u22ED", # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
# [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
"\u22ED": "\u22EC",
"\u22F0": "\u22F1", # UP RIGHT DIAGONAL ELLIPSIS
"\u22F1": "\u22F0", # DOWN RIGHT DIAGONAL ELLIPSIS
"\u22F2": "\u22FA", # ELEMENT OF WITH LONG HORIZONTAL STROKE
"\u22F3": "\u22FB", # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
"\u22F4": "\u22FC", # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
"\u22F6": "\u22FD", # ELEMENT OF WITH OVERBAR
"\u22F7": "\u22FE", # SMALL ELEMENT OF WITH OVERBAR
"\u22FA": "\u22F2", # CONTAINS WITH LONG HORIZONTAL STROKE
"\u22FB": "\u22F3", # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
"\u22FC": "\u22F4", # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
"\u22FD": "\u22F6", # CONTAINS WITH OVERBAR
"\u22FE": "\u22F7", # SMALL CONTAINS WITH OVERBAR
"\u2308": "\u2309", # LEFT CEILING
"\u2309": "\u2308", # RIGHT CEILING
"\u230A": "\u230B", # LEFT FLOOR
"\u230B": "\u230A", # RIGHT FLOOR
"\u2329": "\u232A", # LEFT-POINTING ANGLE BRACKET
"\u232A": "\u2329", # RIGHT-POINTING ANGLE BRACKET
"\u2768": "\u2769", # MEDIUM LEFT PARENTHESIS ORNAMENT
"\u2769": "\u2768", # MEDIUM RIGHT PARENTHESIS ORNAMENT
"\u276A": "\u276B", # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
"\u276B": "\u276A", # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
"\u276C": "\u276D", # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
"\u276D": "\u276C", # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
"\u276E": "\u276F", # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
"\u276F": "\u276E", # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
"\u2770": "\u2771", # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
"\u2771": "\u2770", # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
"\u2772": "\u2773", # LIGHT LEFT TORTOISE SHELL BRACKET
"\u2773": "\u2772", # LIGHT RIGHT TORTOISE SHELL BRACKET
"\u2774": "\u2775", # MEDIUM LEFT CURLY BRACKET ORNAMENT
"\u2775": "\u2774", # MEDIUM RIGHT CURLY BRACKET ORNAMENT
"\u27C3": "\u27C4", # OPEN SUBSET
"\u27C4": "\u27C3", # OPEN SUPERSET
"\u27C5": "\u27C6", # LEFT S-SHAPED BAG DELIMITER
"\u27C6": "\u27C5", # RIGHT S-SHAPED BAG DELIMITER
"\u27C8": "\u27C9", # REVERSE SOLIDUS PRECEDING SUBSET
"\u27C9": "\u27C8", # SUPERSET PRECEDING SOLIDUS
"\u27D5": "\u27D6", # LEFT OUTER JOIN
"\u27D6": "\u27D5", # RIGHT OUTER JOIN
"\u27DD": "\u27DE", # LONG RIGHT TACK
"\u27DE": "\u27DD", # LONG LEFT TACK
"\u27E2": "\u27E3", # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
"\u27E3": "\u27E2", # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
"\u27E4": "\u27E5", # WHITE SQUARE WITH LEFTWARDS TICK
"\u27E5": "\u27E4", # WHITE SQUARE WITH RIGHTWARDS TICK
"\u27E6": "\u27E7", # MATHEMATICAL LEFT WHITE SQUARE BRACKET
"\u27E7": "\u27E6", # MATHEMATICAL RIGHT WHITE SQUARE BRACKET
"\u27E8": "\u27E9", # MATHEMATICAL LEFT ANGLE BRACKET
"\u27E9": "\u27E8", # MATHEMATICAL RIGHT ANGLE BRACKET
"\u27EA": "\u27EB", # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
"\u27EB": "\u27EA", # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
"\u27EC": "\u27ED", # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
"\u27ED": "\u27EC", # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
"\u27EE": "\u27EF", # MATHEMATICAL LEFT FLATTENED PARENTHESIS
"\u27EF": "\u27EE", # MATHEMATICAL RIGHT FLATTENED PARENTHESIS
"\u2983": "\u2984", # LEFT WHITE CURLY BRACKET
"\u2984": "\u2983", # RIGHT WHITE CURLY BRACKET
"\u2985": "\u2986", # LEFT WHITE PARENTHESIS
"\u2986": "\u2985", # RIGHT WHITE PARENTHESIS
"\u2987": "\u2988", # Z NOTATION LEFT IMAGE BRACKET
"\u2988": "\u2987", # Z NOTATION RIGHT IMAGE BRACKET
"\u2989": "\u298A", # Z NOTATION LEFT BINDING BRACKET
"\u298A": "\u2989", # Z NOTATION RIGHT BINDING BRACKET
"\u298B": "\u298C", # LEFT SQUARE BRACKET WITH UNDERBAR
"\u298C": "\u298B", # RIGHT SQUARE BRACKET WITH UNDERBAR
"\u298D": "\u2990", # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
"\u298E": "\u298F", # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
"\u298F": "\u298E", # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
"\u2990": "\u298D", # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
"\u2991": "\u2992", # LEFT ANGLE BRACKET WITH DOT
"\u2992": "\u2991", # RIGHT ANGLE BRACKET WITH DOT
"\u2993": "\u2994", # LEFT ARC LESS-THAN BRACKET
"\u2994": "\u2993", # RIGHT ARC GREATER-THAN BRACKET
"\u2995": "\u2996", # DOUBLE LEFT ARC GREATER-THAN BRACKET
"\u2996": "\u2995", # DOUBLE RIGHT ARC LESS-THAN BRACKET
"\u2997": "\u2998", # LEFT BLACK TORTOISE SHELL BRACKET
"\u2998": "\u2997", # RIGHT BLACK TORTOISE SHELL BRACKET
"\u29B8": "\u2298", # CIRCLED REVERSE SOLIDUS
"\u29C0": "\u29C1", # CIRCLED LESS-THAN
"\u29C1": "\u29C0", # CIRCLED GREATER-THAN
"\u29C4": "\u29C5", # SQUARED RISING DIAGONAL SLASH
"\u29C5": "\u29C4", # SQUARED FALLING DIAGONAL SLASH
"\u29CF": "\u29D0", # LEFT TRIANGLE BESIDE VERTICAL BAR
"\u29D0": "\u29CF", # VERTICAL BAR BESIDE RIGHT TRIANGLE
"\u29D1": "\u29D2", # BOWTIE WITH LEFT HALF BLACK
"\u29D2": "\u29D1", # BOWTIE WITH RIGHT HALF BLACK
"\u29D4": "\u29D5", # TIMES WITH LEFT HALF BLACK
"\u29D5": "\u29D4", # TIMES WITH RIGHT HALF BLACK
"\u29D8": "\u29D9", # LEFT WIGGLY FENCE
"\u29D9": "\u29D8", # RIGHT WIGGLY FENCE
"\u29DA": "\u29DB", # LEFT DOUBLE WIGGLY FENCE
"\u29DB": "\u29DA", # RIGHT DOUBLE WIGGLY FENCE
"\u29F5": "\u2215", # REVERSE SOLIDUS OPERATOR
"\u29F8": "\u29F9", # BIG SOLIDUS
"\u29F9": "\u29F8", # BIG REVERSE SOLIDUS
"\u29FC": "\u29FD", # LEFT-POINTING CURVED ANGLE BRACKET
"\u29FD": "\u29FC", # RIGHT-POINTING CURVED ANGLE BRACKET
"\u2A2B": "\u2A2C", # MINUS SIGN WITH FALLING DOTS
"\u2A2C": "\u2A2B", # MINUS SIGN WITH RISING DOTS
"\u2A2D": "\u2A2E", # PLUS SIGN IN LEFT HALF CIRCLE
"\u2A2E": "\u2A2D", # PLUS SIGN IN RIGHT HALF CIRCLE
"\u2A34": "\u2A35", # MULTIPLICATION SIGN IN LEFT HALF CIRCLE
"\u2A35": "\u2A34", # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
"\u2A3C": "\u2A3D", # INTERIOR PRODUCT
"\u2A3D": "\u2A3C", # RIGHTHAND INTERIOR PRODUCT
"\u2A64": "\u2A65", # Z NOTATION DOMAIN ANTIRESTRICTION
"\u2A65": "\u2A64", # Z NOTATION RANGE ANTIRESTRICTION
"\u2A79": "\u2A7A", # LESS-THAN WITH CIRCLE INSIDE
"\u2A7A": "\u2A79", # GREATER-THAN WITH CIRCLE INSIDE
"\u2A7D": "\u2A7E", # LESS-THAN OR SLANTED EQUAL TO
"\u2A7E": "\u2A7D", # GREATER-THAN OR SLANTED EQUAL TO
"\u2A7F": "\u2A80", # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
"\u2A80": "\u2A7F", # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
"\u2A81": "\u2A82", # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
"\u2A82": "\u2A81", # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
"\u2A83": "\u2A84", # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
"\u2A84": "\u2A83", # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
"\u2A8B": "\u2A8C", # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
"\u2A8C": "\u2A8B", # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
"\u2A91": "\u2A92", # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
"\u2A92": "\u2A91", # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
# LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
"\u2A93": "\u2A94",
# GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
"\u2A94": "\u2A93",
"\u2A95": "\u2A96", # SLANTED EQUAL TO OR LESS-THAN
"\u2A96": "\u2A95", # SLANTED EQUAL TO OR GREATER-THAN
"\u2A97": "\u2A98", # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
"\u2A98": "\u2A97", # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
"\u2A99": "\u2A9A", # DOUBLE-LINE EQUAL TO OR LESS-THAN
"\u2A9A": "\u2A99", # DOUBLE-LINE EQUAL TO OR GREATER-THAN
"\u2A9B": "\u2A9C", # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
"\u2A9C": "\u2A9B", # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
"\u2AA1": "\u2AA2", # DOUBLE NESTED LESS-THAN
"\u2AA2": "\u2AA1", # DOUBLE NESTED GREATER-THAN
"\u2AA6": "\u2AA7", # LESS-THAN CLOSED BY CURVE
"\u2AA7": "\u2AA6", # GREATER-THAN CLOSED BY CURVE
"\u2AA8": "\u2AA9", # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
"\u2AA9": "\u2AA8", # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
"\u2AAA": "\u2AAB", # SMALLER THAN
"\u2AAB": "\u2AAA", # LARGER THAN
"\u2AAC": "\u2AAD", # SMALLER THAN OR EQUAL TO
"\u2AAD": "\u2AAC", # LARGER THAN OR EQUAL TO
"\u2AAF": "\u2AB0", # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
"\u2AB0": "\u2AAF", # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
"\u2AB3": "\u2AB4", # PRECEDES ABOVE EQUALS SIGN
"\u2AB4": "\u2AB3", # SUCCEEDS ABOVE EQUALS SIGN
"\u2ABB": "\u2ABC", # DOUBLE PRECEDES
"\u2ABC": "\u2ABB", # DOUBLE SUCCEEDS
"\u2ABD": "\u2ABE", # SUBSET WITH DOT
"\u2ABE": "\u2ABD", # SUPERSET WITH DOT
"\u2ABF": "\u2AC0", # SUBSET WITH PLUS SIGN BELOW
"\u2AC0": "\u2ABF", # SUPERSET WITH PLUS SIGN BELOW
"\u2AC1": "\u2AC2", # SUBSET WITH MULTIPLICATION SIGN BELOW
"\u2AC2": "\u2AC1", # SUPERSET WITH MULTIPLICATION SIGN BELOW
"\u2AC3": "\u2AC4", # SUBSET OF OR EQUAL TO WITH DOT ABOVE
"\u2AC4": "\u2AC3", # SUPERSET OF OR EQUAL TO WITH DOT ABOVE
"\u2AC5": "\u2AC6", # SUBSET OF ABOVE EQUALS SIGN
"\u2AC6": "\u2AC5", # SUPERSET OF ABOVE EQUALS SIGN
"\u2ACD": "\u2ACE", # SQUARE LEFT OPEN BOX OPERATOR
"\u2ACE": "\u2ACD", # SQUARE RIGHT OPEN BOX OPERATOR
"\u2ACF": "\u2AD0", # CLOSED SUBSET
"\u2AD0": "\u2ACF", # CLOSED SUPERSET
"\u2AD1": "\u2AD2", # CLOSED SUBSET OR EQUAL TO
"\u2AD2": "\u2AD1", # CLOSED SUPERSET OR EQUAL TO
"\u2AD3": "\u2AD4", # SUBSET ABOVE SUPERSET
"\u2AD4": "\u2AD3", # SUPERSET ABOVE SUBSET
"\u2AD5": "\u2AD6", # SUBSET ABOVE SUBSET
"\u2AD6": "\u2AD5", # SUPERSET ABOVE SUPERSET
"\u2ADE": "\u22A6", # SHORT LEFT TACK
"\u2AE3": "\u22A9", # DOUBLE VERTICAL BAR LEFT TURNSTILE
"\u2AE4": "\u22A8", # VERTICAL BAR DOUBLE LEFT TURNSTILE
"\u2AE5": "\u22AB", # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
"\u2AEC": "\u2AED", # DOUBLE STROKE NOT SIGN
"\u2AED": "\u2AEC", # REVERSED DOUBLE STROKE NOT SIGN
"\u2AF7": "\u2AF8", # TRIPLE NESTED LESS-THAN
"\u2AF8": "\u2AF7", # TRIPLE NESTED GREATER-THAN
"\u2AF9": "\u2AFA", # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
"\u2AFA": "\u2AF9", # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
"\u2E02": "\u2E03", # LEFT SUBSTITUTION BRACKET
"\u2E03": "\u2E02", # RIGHT SUBSTITUTION BRACKET
"\u2E04": "\u2E05", # LEFT DOTTED SUBSTITUTION BRACKET
"\u2E05": "\u2E04", # RIGHT DOTTED SUBSTITUTION BRACKET
"\u2E09": "\u2E0A", # LEFT TRANSPOSITION BRACKET
"\u2E0A": "\u2E09", # RIGHT TRANSPOSITION BRACKET
"\u2E0C": "\u2E0D", # LEFT RAISED OMISSION BRACKET
"\u2E0D": "\u2E0C", # RIGHT RAISED OMISSION BRACKET
"\u2E1C": "\u2E1D", # LEFT LOW PARAPHRASE BRACKET
"\u2E1D": "\u2E1C", # RIGHT LOW PARAPHRASE BRACKET
"\u2E20": "\u2E21", # LEFT VERTICAL BAR WITH QUILL
"\u2E21": "\u2E20", # RIGHT VERTICAL BAR WITH QUILL
"\u2E22": "\u2E23", # TOP LEFT HALF BRACKET
"\u2E23": "\u2E22", # TOP RIGHT HALF BRACKET
"\u2E24": "\u2E25", # BOTTOM LEFT HALF BRACKET
"\u2E25": "\u2E24", # BOTTOM RIGHT HALF BRACKET
"\u2E26": "\u2E27", # LEFT SIDEWAYS U BRACKET
"\u2E27": "\u2E26", # RIGHT SIDEWAYS U BRACKET
"\u2E28": "\u2E29", # LEFT DOUBLE PARENTHESIS
"\u2E29": "\u2E28", # RIGHT DOUBLE PARENTHESIS
"\u3008": "\u3009", # LEFT ANGLE BRACKET
"\u3009": "\u3008", # RIGHT ANGLE BRACKET
"\u300A": "\u300B", # LEFT DOUBLE ANGLE BRACKET
"\u300B": "\u300A", # RIGHT DOUBLE ANGLE BRACKET
"\u300C": "\u300D", # [BEST FIT] LEFT CORNER BRACKET
"\u300D": "\u300C", # [BEST FIT] RIGHT CORNER BRACKET
"\u300E": "\u300F", # [BEST FIT] LEFT WHITE CORNER BRACKET
"\u300F": "\u300E", # [BEST FIT] RIGHT WHITE CORNER BRACKET
"\u3010": "\u3011", # LEFT BLACK LENTICULAR BRACKET
"\u3011": "\u3010", # RIGHT BLACK LENTICULAR BRACKET
"\u3014": "\u3015", # LEFT TORTOISE SHELL BRACKET
"\u3015": "\u3014", # RIGHT TORTOISE SHELL BRACKET
"\u3016": "\u3017", # LEFT WHITE LENTICULAR BRACKET
"\u3017": "\u3016", # RIGHT WHITE LENTICULAR BRACKET
"\u3018": "\u3019", # LEFT WHITE TORTOISE SHELL BRACKET
"\u3019": "\u3018", # RIGHT WHITE TORTOISE SHELL BRACKET
"\u301A": "\u301B", # LEFT WHITE SQUARE BRACKET
"\u301B": "\u301A", # RIGHT WHITE SQUARE BRACKET
"\uFE59": "\uFE5A", # SMALL LEFT PARENTHESIS
"\uFE5A": "\uFE59", # SMALL RIGHT PARENTHESIS
"\uFE5B": "\uFE5C", # SMALL LEFT CURLY BRACKET
"\uFE5C": "\uFE5B", # SMALL RIGHT CURLY BRACKET
"\uFE5D": "\uFE5E", # SMALL LEFT TORTOISE SHELL BRACKET
"\uFE5E": "\uFE5D", # SMALL RIGHT TORTOISE SHELL BRACKET
"\uFE64": "\uFE65", # SMALL LESS-THAN SIGN
"\uFE65": "\uFE64", # SMALL GREATER-THAN SIGN
"\uFF08": "\uFF09", # FULLWIDTH LEFT PARENTHESIS
"\uFF09": "\uFF08", # FULLWIDTH RIGHT PARENTHESIS
"\uFF1C": "\uFF1E", # FULLWIDTH LESS-THAN SIGN
"\uFF1E": "\uFF1C", # FULLWIDTH GREATER-THAN SIGN
"\uFF3B": "\uFF3D", # FULLWIDTH LEFT SQUARE BRACKET
"\uFF3D": "\uFF3B", # FULLWIDTH RIGHT SQUARE BRACKET
"\uFF5B": "\uFF5D", # FULLWIDTH LEFT CURLY BRACKET
"\uFF5D": "\uFF5B", # FULLWIDTH RIGHT CURLY BRACKET
"\uFF5F": "\uFF60", # FULLWIDTH LEFT WHITE PARENTHESIS
"\uFF60": "\uFF5F", # FULLWIDTH RIGHT WHITE PARENTHESIS
"\uFF62": "\uFF63", # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
"\uFF63": "\uFF62", # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
}