[NOT PART OF THE DEFAULT BUILD] Pick stretchy glyphs from the Math4 font. Make the stretchy code more robust by explicitly re-ordering the font-family list to place the selected font to be used in first position

This commit is contained in:
rbs%maths.uq.edu.au 2000-04-17 04:19:54 +00:00
Родитель 32d8d79f6a
Коммит 4731458891
2 изменённых файлов: 144 добавлений и 51 удалений

Просмотреть файл

@ -113,7 +113,7 @@ public:
void GetFontName(nsString& aFontName)
{
aFontName = mFontName;
aFontName.Assign(mFontName);
}
nsGlyphTable* GetNextTable(void)
@ -503,13 +503,38 @@ nsGlyphTable(NS_TABLE_TYPE_UNICODE, "CMSY10",
gCharDataCMSY, sizeof(gCharDataCMSY) / sizeof(gCharDataCMSY[0]),
gGlyphCodeCMSY, sizeof(gGlyphCodeCMSY) / sizeof(gGlyphCodeCMSY[0]));
// -----------------------------------------------------------------------------------
// Data for strecthy chars that are supported by the Math4 font ----------------------
static nsCharData gCharDataMath4[] = {
#define WANT_MATH4_DATA
#define WANT_CHAR_DATA
#include "nsMathMLCharList.h"
#undef WANT_CHAR_DATA
#undef WANT_MATH4_DATA
};
static nsGlyphCode gGlyphCodeMath4[] = {
#define WANT_MATH4_DATA
#define WANT_GLYPH_DATA
#include "nsMathMLCharList.h"
#undef WANT_GLYPH_DATA
#undef WANT_MATH4_DATA
};
nsGlyphTable gGlyphTableMath4 =
nsGlyphTable(NS_TABLE_TYPE_UNICODE, "Math4",
gCharDataMath4, sizeof(gCharDataMath4) / sizeof(gCharDataMath4[0]),
gGlyphCodeMath4, sizeof(gGlyphCodeMath4) / sizeof(gGlyphCodeMath4[0]));
// -----------------------------------------------------------------------------------
// All the glyph tables in order of preference ...
nsGlyphTable* gAllGlyphTables[] = {
&gGlyphTableCMSY,
&gGlyphTableCMSY, // should be first to pick the single sqrt glyph therein
&gGlyphTableCMEX,
&gGlyphTableMTExtra,
&gGlyphTableMath4,
&gGlyphTableSymbol,
nsnull
@ -579,6 +604,8 @@ nsMathMLChar::SetData(nsIPresContext* aPresContext,
mEnum = eMathMLChar_DONT_STRETCH;
}
#ifdef NS_DEBUG
// hitting this assertion?
// check nsMathMLCharList to ensure that enum and Unicode (of size0) match in MATHML_CHAR(index, enum, ...)
else NS_ASSERTION(mGlyphTable->Has(nsGlyphCode(mData[0])), "Something is wrong somewhere");
#endif
}
@ -696,6 +723,32 @@ IsSizeBetter(nscoord a, nscoord olda, nscoord b, PRInt32 aHint)
return PR_FALSE;
}
static PRBool
FontEnumCallback(const nsString& aFamily, PRBool aGeneric, void *aData)
{
nsAutoString* familyList = (nsAutoString*)aData;
if (familyList->Find(aFamily, PR_TRUE) == kNotFound) {
familyList->Append(',');
// XXX could enclose in quotes if weird font problems develop
familyList->Append(aFamily);
}
return PR_TRUE; // don't stop
}
// re-order the font-family list of aFont to put aFamily in first position
static void SetFirstFamily(nsFont& aFont, const nsString& aFamily)
{
// put aFamily in first position
nsAutoString familyList(aFamily);
// XXX hack to force CMSY10 to be at least the second best choice !
if (!aFamily.EqualsIgnoreCase("CMSY10"))
familyList.Append(",CMSY10");
// loop over font-family: (skipping aFamily if present)
aFont.EnumerateFamilies(FontEnumCallback, &familyList);
// overwrite the old value of font-family:
aFont.name.Assign(familyList);
}
nsresult
nsMathMLChar::Stretch(nsIPresContext* aPresContext,
nsIRenderingContext& aRenderingContext,
@ -715,8 +768,13 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
///////////////
// Set font
nsAutoString fontName;
nsStyleFont font;
mStyleContext->GetStyle(eStyleStruct_Font, font);
if (mGlyphTable) {
mGlyphTable->GetFontName(fontName);
SetFirstFamily(font.mFont, fontName); // force precedence on this font
}
aRenderingContext.SetFont(font.mFont);
//////////////
@ -800,9 +858,10 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
while (glyphTable && !sizeOK) {
if (glyphTable->Has(mEnum) && glyphTable->BigOf(mEnum, 1)) {
// see if this table has a glyph that matches the size
#ifdef NOISY_SEARCH
nsAutoString fontName;
glyphTable->GetFontName(fontName);
SetFirstFamily(font.mFont, fontName); // force precedence on this font
aRenderingContext.SetFont(font.mFont);
#ifdef NOISY_SEARCH
char str[50];
fontName.ToCString(str, sizeof(str));
printf(" searching in %s ...\n", str);
@ -871,6 +930,9 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
glyphTable = gGlyphTableList.FirstTable();
while (glyphTable) {
if (glyphTable->Has(mEnum) && glyphTable->GlueOf(mEnum)) {
glyphTable->GetFontName(fontName);
SetFirstFamily(font.mFont, fontName); // force precedence on this font
aRenderingContext.SetFont(font.mFont);
ch = glyphTable->GlueOf(mEnum);
rv = glyphTable->GetBoundingMetrics(aRenderingContext, ch, bm);
if (NS_SUCCEEDED(rv)) {
@ -889,7 +951,6 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
}
#ifdef NOISY_SEARCH
if (gCharInfo[mEnum].mGlyphTable) {
nsAutoString fontName;
gCharInfo[mEnum].mGlyphTable->GetFontName(fontName);
char str[50];
fontName.ToCString(str, sizeof(str));
@ -899,7 +960,6 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
}
#ifdef NOISY_SEARCH
if (gCharInfo[mEnum].mGlyphTable) {
nsAutoString fontName;
gCharInfo[mEnum].mGlyphTable->GetFontName(fontName);
char str[50];
fontName.ToCString(str, sizeof(str));
@ -921,6 +981,9 @@ nsMathMLChar::Stretch(nsIPresContext* aPresContext,
// we are going to build by parts...
// using the glyph table with the smallest glue
glyphTable = gCharInfo[mEnum].mGlyphTable;
glyphTable->GetFontName(fontName);
SetFirstFamily(font.mFont, fontName); // force precedence on this font
aRenderingContext.SetFont(font.mFont);
PRInt32 i;
@ -1059,6 +1122,12 @@ nsMathMLChar::Paint(nsIPresContext* aPresContext,
nsStyleFont font;
mStyleContext->GetStyle(eStyleStruct_Font, font);
aRenderingContext.SetColor(color.mColor);
if (mGlyphTable) {
nsAutoString fontName;
mGlyphTable->GetFontName(fontName);
SetFirstFamily(font.mFont, fontName); // force precedence on this font
}
aRenderingContext.SetFont(font.mFont);
// grab some metrics that will help to adjust the placements ...

Просмотреть файл

@ -208,11 +208,11 @@ MATHML_CHAR(DiacriticalTilde, 0x02DC, STRETCH_HORIZONTAL)
MATHML_CHAR(Hacek, 0x02C7, STRETCH_HORIZONTAL)
MATHML_CHAR(Hat, 0x0302, STRETCH_HORIZONTAL)
MATHML_CHAR(OverCurlyBracket, 0xF612, STRETCH_HORIZONTAL)
MATHML_CHAR(OverBracket, 0xF614, STRETCH_HORIZONTAL)
MATHML_CHAR(OverSquareBracket, 0xF614, STRETCH_HORIZONTAL)
MATHML_CHAR(OverParenthesis, 0xF610, STRETCH_HORIZONTAL)
MATHML_CHAR(UnderBar, 0x0332, STRETCH_HORIZONTAL)
MATHML_CHAR(UnderCurlyBracket, 0xF613, STRETCH_HORIZONTAL)
MATHML_CHAR(UnderBracket, 0xF615, STRETCH_HORIZONTAL)
MATHML_CHAR(UnderSquareBracket, 0xF615, STRETCH_HORIZONTAL)
MATHML_CHAR(UnderParenthesis, 0xF611, STRETCH_HORIZONTAL)
MATHML_CHAR(CircleDot, 0x2299, STRETCH_VERTICAL)
MATHML_CHAR(CirclePlus, 0x2295, STRETCH_VERTICAL)
@ -279,58 +279,82 @@ MATHML_CHAR(36, RightHarpoonAccent, 0x0000 _ 0x0000 _ 0x20D1 _ 0xEB00, 0x20D1)
// Data for strecthy chars that are supported by TeX's CMSY font ---------------------
// -----------------------------------------------------------------------------------
#if defined(WANT_CMSY_DATA) //[top/left][middle][bot/right][glue] [size0 ... size{N-1}]
MATHML_CHAR( 0, DoubleLeftArrow, 0x21D0 _ 0x0000 _ 0x0000 _ '=', 0x21D0)
MATHML_CHAR( 6, DoubleRightArrow, 0x0000 _ 0x0000 _ 0x21D2 _ '=', 0x21D2)
MATHML_CHAR(12, DoubleLeftRightArrow,0x21D0 _ 0x0000 _ 0x21D2 _ '=', 0x21D4)
MATHML_CHAR(18, DoubleLongLeftArrow, 0x21D0 _ 0x0000 _ 0x0000 _ '=', 0xE200)
MATHML_CHAR(24, DoubleLongRightArrow,0x0000 _ 0x0000 _ 0x21D2 _ '=', 0xE204)
MATHML_CHAR(30, DoubleLongLeftRightArrow, 0x21D0 _ 0x0000 _ 0x21D2 _ '=', 0xE202)
#if defined(WANT_CMSY_DATA) //[top/left][middle][bot/right][glue] [size0 ... size{N-1}]
MATHML_CHAR( 0, Sqrt, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x221A)
MATHML_CHAR( 6, DoubleLeftArrow, 0x21D0 _ 0x0000 _ 0x0000 _ '=', 0x21D0)
MATHML_CHAR(12, DoubleRightArrow, 0x0000 _ 0x0000 _ 0x21D2 _ '=', 0x21D2)
MATHML_CHAR(18, DoubleLeftRightArrow,0x21D0 _ 0x0000 _ 0x21D2 _ '=', 0x21D4)
MATHML_CHAR(24, DoubleLongLeftArrow, 0x21D0 _ 0x0000 _ 0x0000 _ '=', 0xE200)
MATHML_CHAR(30, DoubleLongRightArrow,0x0000 _ 0x0000 _ 0x21D2 _ '=', 0xE204)
MATHML_CHAR(36, DoubleLongLeftRightArrow, 0x21D0 _ 0x0000 _ 0x21D2 _ '=', 0xE202)
#endif // defined(WANT_CMSY_DATA)
// Data for strecthy chars that are supported by TeX's CMEX font ---------------------
// -----------------------------------------------------------------------------------
#if defined(WANT_CMEX_DATA) // [top/left][middle][bot/right][glue] [size0 ... size{N-1}]
MATHML_CHAR( 0, LeftParenthesis, 0xE030 _ 0x0000 _ 0xE040 _ 0xE042, 0x0028 _ 0xE072 _ 0xE089 _ 0xE08B _ 0xE099)
MATHML_CHAR( 10, RightParenthesis, 0xE031 _ 0x0000 _ 0xE041 _ 0xE043, 0x0029 _ 0xE073 _ 0xE08A _ 0xE08C _ 0xE021)
MATHML_CHAR( 20, LeftSquareBracket, 0xE032 _ 0x0000 _ 0xE034 _ 0xE036, 0x005B _ 0xE074 _ 0xE08D _ 0xE05B _ 0xE022)
MATHML_CHAR( 30, RightSquareBracket, 0xE033 _ 0x0000 _ 0xE035 _ 0xE037, 0x005D _ 0xE075 _ 0xE08E _ 0xE05C _ 0xE023)
MATHML_CHAR( 40, LeftFloor, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x230A _ 0xE076 _ 0xE08F _ 0xE05D _ 0xE024)
MATHML_CHAR( 50, RightFloor, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x230B _ 0xE077 _ 0xE090 _ 0xE05E _ 0xE025)
MATHML_CHAR( 60, LeftCeiling, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2308 _ 0xE078 _ 0xE091 _ 0xE05F _ 0xE026)
MATHML_CHAR( 70, RightCeiling, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2309 _ 0xE079 _ 0xE092 _ 0xE060 _ 0xE027)
MATHML_CHAR( 80, LeftCurlyBracket, 0xE038 _ 0xE03C _ 0xE03A _ 0xE03E, 0x007B _ 0xE07A _ 0xE093 _ 0xE061 _ 0xE028)
MATHML_CHAR( 90, RightCurlyBracket, 0xE039 _ 0xE03D _ 0xE03B _ 0xE03E, 0x007D _ 0xE07B _ 0xE094 _ 0xE062 _ 0xE029)
MATHML_CHAR(100, LeftAngleBracket, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x3008 _ 0xE07C _ 0xE095 _ 0xE044 _ 0xE02A)
MATHML_CHAR(110, RightAngleBracket, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x3009 _ 0xE07D _ 0xE096 _ 0xE045 _ 0xE02B)
MATHML_CHAR(120, SquareUnion, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2294 _ 0xE046)
MATHML_CHAR(127, ContourIntegral, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x222E _ 0xE047)
MATHML_CHAR(134, CircleDot, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2299 _ 0xE048)
MATHML_CHAR(141, CirclePlus, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2249 _ 0xE04A)
MATHML_CHAR(148, CircleMultiply, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2297 _ 0xE04B)
MATHML_CHAR(155, Sum, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2211 _ 0xE04C)
MATHML_CHAR(162, Product, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x220F _ 0xE04D)
MATHML_CHAR(169, Slash, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, '/' _ 0xE02E _ 0xE097 _ 0xE080 _ 0xE02C)
MATHML_CHAR(179, Integral, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x222B _ 0xE04E)
MATHML_CHAR(186, Union, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x22C3 _ 0xE04F)
MATHML_CHAR(193, Intersection, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x22C2 _ 0xE050)
MATHML_CHAR(200, UnionPlus, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x228E _ 0xE051)
MATHML_CHAR(207, And, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2227 _ 0xE052)
MATHML_CHAR(214, Or, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2228 _ 0xE053)
MATHML_CHAR(221, Coproduct, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2210 _ 0xE054)
MATHML_CHAR(228, Hat, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x0302 _ 0xE055 _ 0xE056 _ 0xE057)
MATHML_CHAR(237, Tilde, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x223C _ 0xE058 _ 0xE059 _ 0xE05A)
MATHML_CHAR(246, Sqrt, 0xE069 _ 0x0000 _ 0xE067 _ 0xE068, 0x221A _ 0xE063 _ 0xE064 _ 0xE065 _ 0xE066)
MATHML_CHAR(256, UpArrow, 0xE06B _ 0x0000 _ 0x0000 _ 0xE03F, 0x2191)
MATHML_CHAR(262, DownArrow, 0x0000 _ 0x0000 _ 0xE06C _ 0xE03F, 0x2193)
MATHML_CHAR(268, UpDownArrow, 0xE06B _ 0x0000 _ 0xE06C _ 0xE03F, 0x2195)
MATHML_CHAR(274, DoubleUpArrow, 0xE071 _ 0x0000 _ 0x0000 _ 0xE06A, 0x21D1)
MATHML_CHAR(280, DoubleDownArrow, 0x0000 _ 0x0000 _ 0xE09A _ 0xE06A, 0x21D3)
MATHML_CHAR(286, DoubleUpDownArrow, 0xE071 _ 0x0000 _ 0xE09A _ 0xE06A, 0x21D5)
MATHML_CHAR( 0, LeftParenthesis, 0xE030 _ 0x0000 _ 0xE040 _ 0xE042, 0x0028 _ 0xE07F _ 0xE08F _ 0xE091 _ 0xE09F)
MATHML_CHAR( 10, RightParenthesis, 0xE031 _ 0x0000 _ 0xE041 _ 0xE043, 0x0029 _ 0xE080 _ 0xE090 _ 0xE092 _ 0xE021)
MATHML_CHAR( 20, LeftSquareBracket, 0xE032 _ 0x0000 _ 0xE034 _ 0xE036, 0x005B _ 0xE081 _ 0xE093 _ 0xE068 _ 0xE022)
MATHML_CHAR( 30, RightSquareBracket, 0xE033 _ 0x0000 _ 0xE035 _ 0xE037, 0x005D _ 0xE082 _ 0xE094 _ 0xE069 _ 0xE023)
MATHML_CHAR( 40, LeftFloor, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x230A _ 0xE083 _ 0xE095 _ 0xE06A _ 0xE024)
MATHML_CHAR( 50, RightFloor, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x230B _ 0xE084 _ 0xE096 _ 0xE06B _ 0xE025)
MATHML_CHAR( 60, LeftCeiling, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2308 _ 0xE085 _ 0xE097 _ 0xE06C _ 0xE026)
MATHML_CHAR( 70, RightCeiling, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2309 _ 0xE086 _ 0xE098 _ 0xE06D _ 0xE027)
MATHML_CHAR( 80, LeftCurlyBracket, 0xE038 _ 0xE03C _ 0xE03A _ 0xE03E, 0x007B _ 0xE087 _ 0xE099 _ 0xE06E _ 0xE028)
MATHML_CHAR( 90, RightCurlyBracket, 0xE039 _ 0xE03D _ 0xE03B _ 0xE03E, 0x007D _ 0xE088 _ 0xE09A _ 0xE06F _ 0xE029)
MATHML_CHAR(100, LeftAngleBracket, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x3008 _ 0xE089 _ 0xE09B _ 0xE044 _ 0xE02A)
MATHML_CHAR(110, RightAngleBracket, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x3009 _ 0xE08A _ 0xE09C _ 0xE045 _ 0xE02B)
MATHML_CHAR(120, SquareUnion, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2294 _ 0xE046 _ 0xE047)
MATHML_CHAR(128, ContourIntegral, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x222E _ 0xE048 _ 0xE049)
MATHML_CHAR(136, CircleDot, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2299 _ 0xE04A _ 0xE04B)
MATHML_CHAR(144, CirclePlus, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2295 _ 0xE04C _ 0xE04D)
MATHML_CHAR(152, CircleMultiply, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2297 _ 0xE04E _ 0xE04F)
MATHML_CHAR(160, Sum, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2211 _ 0xE050 _ 0xE058)
MATHML_CHAR(168, Product, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x220F _ 0xE051 _ 0xE059)
MATHML_CHAR(176, Slash, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, '/' _ 0xE02E _ 0xE09D _ 0xE08D _ 0xE02C)
MATHML_CHAR(186, Union, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x22C3 _ 0xE053 _ 0xE05B)
MATHML_CHAR(194, Intersection, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x22C2 _ 0xE054 _ 0xE05C)
MATHML_CHAR(202, UnionPlus, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x228E _ 0xE055 _ 0xE05D)
MATHML_CHAR(210, And, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2227 _ 0xE056 _ 0xE05E)
MATHML_CHAR(218, Or, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2228 _ 0xE057 _ 0xE05F)
MATHML_CHAR(226, Coproduct, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x2210 _ 0xE060 _ 0xE061)
MATHML_CHAR(234, Hat, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x0302 _ 0xE062 _ 0xE063 _ 0xE064)
MATHML_CHAR(243, Tilde, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x223C _ 0xE065 _ 0xE066 _ 0xE067)
MATHML_CHAR(252, Sqrt, 0xE076 _ 0x0000 _ 0xE074 _ 0xE075, 0x221A _ 0xE070 _ 0xE071 _ 0xE072 _ 0xE073)
MATHML_CHAR(262, UpArrow, 0xE078 _ 0x0000 _ 0x0000 _ 0xE03F, 0x2191)
MATHML_CHAR(268, DownArrow, 0x0000 _ 0x0000 _ 0xE079 _ 0xE03F, 0x2193)
MATHML_CHAR(274, UpDownArrow, 0xE078 _ 0x0000 _ 0xE079 _ 0xE03F, 0x2195)
MATHML_CHAR(280, DoubleUpArrow, 0xE07E _ 0x0000 _ 0x0000 _ 0xE077, 0x21D1)
MATHML_CHAR(286, DoubleDownArrow, 0x0000 _ 0x0000 _ 0xE0A0 _ 0xE077, 0x21D3)
MATHML_CHAR(292, DoubleUpDownArrow, 0xE07E _ 0x0000 _ 0xE0A0 _ 0xE077, 0x21D5)
//XXX awaiting the italic correction
//MATHML_CHAR(298, Integral, 0x0000 _ 0x0000 _ 0x0000 _ 0x0000, 0x222B _ 0xE052 _ 0xE05A)
#endif // defined(WANT_CMEX_DATA)
// Data for strecthy chars that are supported by the Math4 font ----------------------
// -----------------------------------------------------------------------------------
#if defined(WANT_MATH4_DATA) // [top/left][middle][bot/right][glue] [size0 ... size{N-1}]
MATHML_CHAR( 0, UnderCurlyBracket, 0xEC00 _ 0xEC01 _ 0xEC02 _ 0xEC03, 0xF613 _ 0xEC29 _ 0xEC2A _ 0xEC2B)
MATHML_CHAR( 9, OverCurlyBracket, 0xEC04 _ 0xEC05 _ 0xEC06 _ 0xEC07, 0xF612 _ 0xEC25 _ 0xEC26 _ 0xEC27)
MATHML_CHAR(18, UnderSquareBracket, 0xEC08 _ 0x0000 _ 0xEC0A _ 0xEC09, 0xF615 _ 0xEC19 _ 0xEC1A _ 0xEC1B)
MATHML_CHAR(27, OverSquareBracket, 0xEC0B _ 0x0000 _ 0xEC0D _ 0xEC0C, 0xF614 _ 0xEC15 _ 0xEC16 _ 0xEC17)
MATHML_CHAR(36, UnderParenthesis, 0xEC0E _ 0x0000 _ 0xEC10 _ 0xEC0F, 0xF611 _ 0xEC21 _ 0xEC22 _ 0xEC23)
MATHML_CHAR(45, OverParenthesis, 0xEC11 _ 0x0000 _ 0xEC13 _ 0xEC12, 0xF610 _ 0xEC1D _ 0xEC1E _ 0xEC1F)
#endif // defined(WANT_MATH4_DATA)
#undef _
#endif // defined(WANT_CHAR_DATA) || defined(WANT_GLYPH_DATA)
#undef MATHML_CHAR
#if 0
// awaiting PUA codes from Math4
0xD0 0x002F [Forward slash (solidus)]
0xD1 0x002F [Forward slash (solidus)]
0xD2 0x002F [Forward slash (solidus)]
0xD3 0x002F [Forward slash (solidus)]
0xD4 0x002F [Forward slash (solidus)]
0xD5 0x002F [Forward slash (solidus)]
#endif