# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#                                                                       
# The Original Code is Mozilla MathML Project.
#                                                                       
# The Initial Developer of the Original Code is
# The University of Queensland.
# Portions created by the Initial Developer are Copyright (C) 2001
# the Initial Developer. All Rights Reserved.
#                                                                       
# Contributor(s):                                                       
#   Roger B. Sidje <rbs@maths.uq.edu.au>                                
#   Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****

#  LOCALIZATION NOTE: FILE
#  Do not translate anything in this file

# This file contains the list of all stretchy MathML chars that
# can be rendered using only Unicode code points.

#        [ T/L |  M  | B/R |  G  | size0 ... size{N-1} ]
\u0028 = \u239B\uFFFD\u239D\u239C\u0028 # (
\u0029 = \u239E\uFFFD\u23A0\u239F\u0029 # )
\u005B = \u23A1\uFFFD\u23A3\u23A2\u005B # [
\u005D = \u23A4\uFFFD\u23A6\u23A5\u005D # ]
\u007B = \u23A7\u23A8\u23A9\u23AA\u007B # {
\u007C = \uFFFD\uFFFD\uFFFD\u007C\u007C # |
\u007D = \u23AB\u23AC\u23AD\u23AA\u007D # }

# OverBar is stretched with U+0305 COMBINING OVERLINE which "connects on left and right"
\u00AF = \uFFFD\uFFFD\uFFFD\u0305\u00AF # OverBar
#\u0305 doesn't appear to be referenced by the MathML spec
\u0332 = \uFFFD\uFFFD\uFFFD\u0332\u0332 # COMBINING LOW LINE, UnderBar

\u2016 = \uFFFD\uFFFD\uFFFD\u2016\u2016 # DOUBLE VERTICAL LINE, Vert, Verbar

\u2190 = \u2190\uFFFD\uFFFD\u23AF\u2190\u27F5 # LeftArrow, larr, leftarrow
\u2191 = \u2191\uFFFD\uFFFD\u23D0\u2191 # UpArrow, uarr, uparrow
\u2192 = \uFFFD\uFFFD\u2192\u23AF\u2192\u27F6 # RightArrow, rarr, rightarrow
\u2193 = \uFFFD\uFFFD\u2193\u23D0\u2193 # DownArrow, darr, downarrow
\u2194 = \u2190\uFFFD\u2192\u23AF\u2194\u27F7 # LeftRightArrow, harr, leftrightarrow
\u2195 = \u2191\uFFFD\u2193\u23D0\u2195 # UpDownArrow, updownarrow, varr

# For STIXGeneral U+22A2/U+22A3 RIGHT/LEFT TACK are different heights to U+23AF.
# Could use LONG RIGHT/LEFT TACK instead, but STIXNonUnicode provides
# E0B6 stix-maps-to-relation tail
#\u21A4 = \u2190\uFFFD\u27DE\u23AF\u21A6\u27FB # LeftTeeArrow, mapstoleft
#\u21A6 = \u27DD\uFFFD\u2192\u23AF\u21A6\u27FC # RightTeeArrow, map, mapsto
#\u295A = \u21BC\uFFFD\u27DE\u23AF\u295A # LeftTeeVector
#\u295B = \u27DD\uFFFD\u21C0\u23AF\u295B # RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
#\u295E = \u21BD\uFFFD\u27DE\u23AF\u295E # DownLeftTeeVector
#\u295F = \u27DD\uFFFD\u21C1\u23AF\u295F # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector
# Cambria Math does not have U+27DD/U+27DE
\u21A4 = \u2190\uFFFD\u22A3\u23AF\u21A6\u27FB # LeftTeeArrow, mapstoleft
\u21A6 = \u22A2\uFFFD\u2192\u23AF\u21A6\u27FC # RightTeeArrow, map, mapsto
\u295A = \u21BC\uFFFD\u22A3\u23AF\u295A # LeftTeeVector
\u295B = \u22A2\uFFFD\u21C0\u23AF\u295B # RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
\u295E = \u21BD\uFFFD\u22A3\u23AF\u295E # DownLeftTeeVector
\u295F = \u22A2\uFFFD\u21C1\u23AF\u295F # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector

\u21C0 = \uFFFD\uFFFD\u21C0\u23AF\u21C0 # RightVector, rharu, rightharpoonup
\u21C1 = \uFFFD\uFFFD\u21C1\u23AF\u21C1 # DownRightVector, rhard, rightharpoon down
\u21BC = \u21BC\uFFFD\uFFFD\u23AF\u21BC # LeftVector, leftharpoonup, lharu
\u21BD = \u21BD\uFFFD\uFFFD\u23AF\u21BD # DownLeftVector, leftharpoondown, lhard
\u21D0 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D0\u27F8 # DoubleLeftArrow, Leftarrow, lArr
\u21D2 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D2\u27F9 # DoubleRightArrow, Implies, Rightarro
\u21D4 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D4\u27FA # DoubleLeftRightArrow, Leftrightarrow, hArr, iff

# \u221A radical may be made from RADICAL SYMBOL BOTTOM U+23B7 but few fonts
# support this character and it is not clear what the appropriate vertical
# glue whould be.

\u2223 = \uFFFD\uFFFD\uFFFD\u2223\u2223 # VerticalBar, mid
\u2225 = \uFFFD\uFFFD\uFFFD\u2225\u2225 # DoubleVerticalBar, par, parallel

# If fonts have U+23AE INTEGRAL EXTENSION:
# (STIXSize1, Cambria Math, DejaVu Sans/Serif, Apple's Symbol) 
\u222B = \u2320\uFFFD\u2321\u23AE\u222B # Integral, int
# Many fonts don't have U+23AE.  For these fonts, a rule can be used as glue:
# \u222B = \u2320\uFFFD\u2321\uFFFD\u222B # Integral, int

# Using parts of [ and ] (could use box drawings instead)
\u2308 = \u23A1\uFFFD\uFFFD\u23A2\u2308 # LeftCeiling, lceil
\u2309 = \u23A4\uFFFD\uFFFD\u23A5\u2309 # RightCeiling, rceil
\u230A = \uFFFD\uFFFD\u23A3\u23A2\u230A # LeftFloor, lfloor
\u230B = \uFFFD\uFFFD\u23A6\u23A5\u230B # RightFloor, rfloor

# Support for l/r moustache from the parts of lbrace { and rbrace }
\u23B0 = \u23A7\uFFFD\u23AD\u23AA\u23B0 # lmoustache, lmoust
\u23B1 = \u23AB\uFFFD\u23A9\u23AA\u23B1 # rmoustache, rmoust

# Using normal arrows as heads instead of long arrows for the sake of
# Apple's Symbol font.
\u27F5 = \u2190\uFFFD\uFFFD\u23AF\u27F5 # LongLeftArrow
\u27F6 = \uFFFD\uFFFD\u2192\u23AF\u27F6 # LongRightArrow
\u27F7 = \u2190\uFFFD\u2192\u23AF\u27F7 # LongLeftRightArrow

\u294E = \u21BC\uFFFD\u21C0\u23AF\u294E #LEFT BARB UP RIGHT BARB UP HARPOON, LeftRightVector
\u2950 = \u21BD\uFFFD\u21C1\u23AF\u2950 #LEFT BARB DOWN RIGHT BARB DOWN HARPOON , DownLeftRightVector
