windows-nt/Source/XPSP1/NT/windows/richedit/re41/tokens.cpp
2020-09-26 16:20:57 +08:00

393 lines
12 KiB
C++

/*
* tokens.cpp
*
* The sorted table of strings and token values
*
* Note: if you insert new keywords, be sure to insert the corresponding
* i_keyword in the i_xxx enum in tokens.h. This enum defines the
* indices used by RTFWrit to output RTF control words.
*
* Original RichEdit 1.0 RTF converter: Anthony Francisco
* Conversion to C++ and RichEdit 2.0: Murray Sargent
*
* Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.
*/
#include "_common.h"
#include "tokens.h"
extern const KEYWORD rgKeyword[] =
{
{"adeff", tokenDefaultBiDiFont},
{"af", tokenAssocFontSelect},
{"afs", tokenAssocFontSize},
{"animtext", tokenAnimText},
{"ansi", tokenCharSetAnsi},
{"ansicpg", tokenAnsiCodePage},
{"b", tokenBold},
{"background", tokenBackground},
{"bgbdiag", tokenBckgrndBckDiag},
{"bgcross", tokenBckgrndCross},
{"bgdcross", tokenBckgrndDiagCross},
{"bgdkbdiag", tokenBckgrndDrkBckDiag},
{"bgdkcross", tokenBckgrndDrkCross},
{"bgdkdcross", tokenBckgrndDrkDiagCross},
{"bgdkfdiag", tokenBckgrndDrkFwdDiag},
{"bgdkhoriz", tokenBckgrndDrkHoriz},
{"bgdkvert", tokenBckgrndDrkVert},
{"bgfdiag", tokenBckgrndFwdDiag},
{"bghoriz", tokenBckgrndHoriz},
{"bgvert", tokenBckgrndVert},
{"bin", tokenBinaryData},
{"blue", tokenColorBlue},
{"box", tokenBox},
{"brdrb", tokenBorderBottom},
{"brdrbar", tokenBorderOutside},
{"brdrbtw", tokenBorderBetween},
{"brdrcf", tokenBorderColor},
{"brdrdash", tokenBorderDash},
{"brdrdashsm", tokenBorderDashSmall},
{"brdrdb", tokenBorderDouble},
{"brdrdot", tokenBorderDot},
{"brdrhair", tokenBorderHairline},
{"brdrl", tokenBorderLeft},
{"brdrr", tokenBorderRight},
{"brdrs", tokenBorderSingleThick},
{"brdrsh", tokenBorderShadow},
{"brdrt", tokenBorderTop},
{"brdrth", tokenBorderDoubleThick},
{"brdrtriple", tokenBorderTriple},
{"brdrw", tokenBorderWidth},
{"brsp", tokenBorderSpace},
{"bullet", BULLET},
{"caps", tokenCaps},
{"cbpat", tokenColorBckgrndPat},
{"cell", tokenCell},
{"cellx", tokenCellX},
{"cf", tokenColorForeground},
{"cfpat", tokenColorForgrndPat},
{"clbrdrb", tokenCellBorderBottom},
{"clbrdrl", tokenCellBorderLeft},
{"clbrdrr", tokenCellBorderRight},
{"clbrdrt", tokenCellBorderTop},
{"clcbpat", tokenCellBackColor},
{"clcfpat", tokenCellForeColor},
{"clshdng", tokenCellShading},
{"cltxlrtb", tokenCellLRTB},
{"cltxtbrlv", tokenCellTopBotRLVert},
{"clvertalb", tokenCellAlignBottom},
{"clvertalc", tokenCellAlignCenter},
{"clvmgf", tokenCellMergeDown},
{"clvmrg", tokenCellMergeUp},
{"collapsed", tokenCollapsed},
{"colortbl", tokenColorTable},
{"cpg", tokenCodePage},
{"cs", tokenCharStyle},
{"dbch", tokenDBChars},
{"deff", tokenDefaultFont},
{"deflang", tokenDefaultLanguage},
{"deflangfe", tokenDefaultLanguageFE},
{"deftab", tokenDefaultTabWidth},
{"deleted", tokenDeleted},
{"dibitmap", tokenPictureWindowsDIB},
{"disabled", tokenDisabled},
{"dn", tokenDown},
{"dropcapli", tokenDropCapLines},
{"embo", tokenEmboss},
//FUTURE (keithcu) I enabled em-dash and did some of the work for em-space and en-space.
//Remaining is that we should output em-space and en-space via their unicode equivalents
//as Word doesn't understand more than 1 instance of em-dash in a file it seems. Also, our
//old measurer doesn't handle whitespace other than 0x20 properly.
{"emdash", EMDASH},
{"emspace", ' '},
{"endash", ENDASH},
{"enspace", ' '},
{"expndtw", tokenExpand},
{"f", tokenFontSelect},
{"fbidi", tokenFontFamilyBidi},
{"fchars", tokenFollowingPunct},
{"fcharset", tokenCharSet},
{"fdecor", tokenFontFamilyDecorative},
{"fi", tokenIndentFirst},
{"field", tokenField},
{"fldinst", tokenFieldInstruction},
{"fldrslt", tokenFieldResult},
{"fmodern", tokenFontFamilyModern},
{"fname", tokenRealFontName},
{"fnil", tokenFontFamilyDefault},
{"fonttbl", tokenFontTable},
{"footer", tokenNullDestination},
{"footerf", tokenNullDestination},
{"footerl", tokenNullDestination},
{"footerr", tokenNullDestination},
{"footnote", tokenNullDestination},
{"fprq", tokenPitch},
{"froman", tokenFontFamilyRoman},
{"fs", tokenFontSize},
{"fscript", tokenFontFamilyScript},
{"fswiss", tokenFontFamilySwiss},
{"ftech", tokenFontFamilyTechnical},
{"ftncn", tokenNullDestination},
{"ftnsep", tokenNullDestination},
{"ftnsepc", tokenNullDestination},
{"green", tokenColorGreen},
{"header", tokenNullDestination},
{"headerf", tokenNullDestination},
{"headerl", tokenNullDestination},
{"headerr", tokenNullDestination},
{"hich", tokenHIChars},
{"highlight", tokenColorBackground},
{"horzvert", tokenHorzInVert},
{"hyphpar", tokenHyphPar},
{"i", tokenItalic},
{"impr", tokenImprint},
{"info", tokenDocumentArea},
{"intbl", tokenInTable},
{"itap", tokenTableLevel},
{"jpegblip", tokenJpegBlip},
{"keep", tokenKeep},
{"keepn", tokenKeepNext},
{"kerning", tokenKerning},
{"lang", tokenLanguage},
{"lchars", tokenLeadingPunct},
{"ldblquote", LDBLQUOTE},
{"li", tokenIndentLeft},
{"line", tokenLineBreak},
{"lnkd", tokenLink},
{"loch", tokenLOChars},
{"lquote", LQUOTE},
{"ltrch", tokenLToRChars},
{"ltrdoc", tokenLToRDocument},
{"ltrmark", LTRMARK},
{"ltrpar", tokenLToRPara},
{"mac", tokenMac},
{"macpict", tokenPictureQuickDraw},
{"nestcell", tokenNestCell},
{"nestrow", tokenNestRow},
{"nesttableprops", tokenNestTableProps},
{"noline", tokenNoLineNumber},
{"nonesttables", tokenNoNestTables},
{"nosupersub", tokenNoSuperSub},
{"nowidctlpar", tokenNoWidCtlPar},
{"objattph", tokenObjectPlaceholder},
{"objautlink", tokenObjectAutoLink},
{"objclass", tokenObjectClass},
{"objcropb", tokenCropBottom},
{"objcropl", tokenCropLeft},
{"objcropr", tokenCropRight},
{"objcropt", tokenCropTop},
{"objdata", tokenObjectData},
{"objebookimage", tokenObjectEBookImage},
{"object", tokenObject},
{"objemb", tokenObjectEmbedded},
{"objh", tokenHeight},
{"objicemb", tokenObjectMacICEmbedder},
{"objlink", tokenObjectLink},
{"objname", tokenObjectName},
{"objpub", tokenObjectMacPublisher},
{"objscalex", tokenScaleX},
{"objscaley", tokenScaleY},
{"objsetsize", tokenObjectSetSize},
{"objsub", tokenObjectMacSubscriber},
{"objw", tokenWidth},
{"outl", tokenOutline},
{"page", tokenPage},
{"pagebb", tokenPageBreakBefore},
{"par", tokenEndParagraph},
{"pard", tokenParagraphDefault},
{"piccropb", tokenCropBottom},
{"piccropl", tokenCropLeft},
{"piccropr", tokenCropRight},
{"piccropt", tokenCropTop},
{"pich", tokenHeight},
{"pichgoal", tokenDesiredHeight},
{"picscalex", tokenScaleX},
{"picscaley", tokenScaleY},
{"pict", tokenPicture},
{"picw", tokenWidth},
{"picwgoal", tokenDesiredWidth},
{"plain", tokenCharacterDefault},
{"pmmetafile", tokenPictureOS2Metafile},
{"pn", tokenParaNum},
{"pndec", tokenParaNumDecimal},
{"pngblip", tokenPngBlip},
{"pnindent", tokenParaNumIndent},
{"pnlcltr", tokenParaNumLCLetter},
{"pnlcrm", tokenParaNumLCRoman},
{"pnlvlblt", tokenParaNumBullet},
{"pnlvlbody", tokenParaNumBody},
{"pnlvlcont", tokenParaNumCont},
{"pnqc", tokenParaNumAlignCenter},
{"pnqr", tokenParaNumAlignRight},
{"pnstart", tokenParaNumStart},
{"pntext", tokenParaNumText},
{"pntxta", tokenParaNumAfter},
{"pntxtb", tokenParaNumBefore},
{"pnucltr", tokenParaNumUCLetter},
{"pnucrm", tokenParaNumUCRoman},
{"posxr", tokenPositionRight},
{"protect", tokenProtect},
{"pwd", tokenPocketWord},
{"qc", tokenAlignCenter},
{"qj", tokenAlignJustify},
{"ql", tokenAlignLeft},
{"qr", tokenAlignRight},
{"rdblquote", RDBLQUOTE},
{"red", tokenColorRed},
{"result", tokenObjectResult},
{"revauth", tokenRevAuthor},
{"revised", tokenRevised},
{"ri", tokenIndentRight},
{"row", tokenRow},
{"rquote", RQUOTE},
{"rtf", tokenRtf},
{"rtlch", tokenRToLChars},
{"rtldoc", tokenRToLDocument},
{"rtlmark", RTLMARK},
{"rtlpar", tokenRToLPara},
{"rtlrow", tokenRToLRow},
{"s", tokenStyle},
{"sa", tokenSpaceAfter},
{"sb", tokenSpaceBefore},
{"sbys", tokenSideBySide},
{"scaps", tokenSmallCaps},
{"sect", tokenEndSection},
{"sectd", tokenSectionDefault},
{"shad", tokenShadow},
{"shading", tokenShading},
{"shp", tokenShape},
{"shpinst", tokenShapeInstructions},
{"shpwr", tokenShapeWrap},
{"sl", tokenLineSpacing},
{"slmult", tokenLineSpacingRule},
{"sn", tokenShapeName},
{"stextflow", tokenSTextFlow},
{"strike", tokenStrikeOut},
{"stylesheet", tokenStyleSheet},
{"sub", tokenSubscript},
{"super", tokenSuperscript},
{"sv", tokenShapeValue},
{"tab", 9},
{"tb", tokenTabBar},
{"tc", tokenNullDestination},
{"tldot", tokenTabLeaderDots},
{"tleq", tokenTabLeaderEqual},
{"tlhyph", tokenTabLeaderHyphen},
{"tlth", tokenTabLeaderThick},
{"tlul", tokenTabLeaderUnderline},
{"tqc", tokenCenterTab},
{"tqdec", tokenDecimalTab},
{"tqr", tokenFlushRightTab},
{"trbrdrb", tokenBorderBottom},
{"trbrdrl", tokenBorderLeft},
{"trbrdrr", tokenBorderRight},
{"trbrdrt", tokenBorderTop},
{"trgaph", tokenCellHalfGap},
{"trleft", tokenRowLeft},
{"trowd", tokenRowDefault},
{"trqc", tokenRowAlignCenter},
{"trqr", tokenRowAlignRight},
{"trrh", tokenRowHeight},
{"tx", tokenTabPosition},
{"u", tokenUnicode},
{"uc", tokenUnicodeCharByteCount},
{"ul", tokenUnderline},
{"uld", tokenUnderlineDotted},
{"uldash", tokenUnderlineDash},
{"uldashd", tokenUnderlineDashDotted},
{"uldashdd", tokenUnderlineDashDotDotted},
{"uldb", tokenUnderlineDouble},
{"ulhair", tokenUnderlineHairline},
{"ulhwave", tokenUnderlineHeavyWave},
{"ulldash", tokenUnderlineLongDash},
{"ulnone", tokenStopUnderline},
{"ulth", tokenUnderlineThick},
{"ulthd", tokenUnderlineThickDotted},
{"ulthdash", tokenUnderlineThickDash},
{"ulthdashd", tokenUnderlineThickDashDot},
{"ulthdashdd", tokenUnderlineThickDashDotDot},
{"ulthldash", tokenUnderlineThickLongDash},
{"ululdbwave", tokenUnderlineDoubleWave},
{"ulw", tokenUnderlineWord},
{"ulwave", tokenUnderlineWave},
{"up", tokenUp},
{"urtf", tokenURtf},
{"v", tokenHiddenText},
{"vertdoc", tokenVerticalRender},
{"viewkind", tokenViewKind},
{"viewscale", tokenViewScale},
{"wbitmap", tokenPictureWindowsBitmap},
{"wbmbitspixel", tokenBitmapBitsPerPixel},
{"wbmplanes", tokenBitmapNumPlanes},
{"wbmwidthbytes", tokenBitmapWidthBytes},
{"wmetafile", tokenPictureWindowsMetafile},
{"xe", tokenNullDestination},
{"zwj", ZWJ},
{"zwnj", ZWNJ}
};
INT cKeywords = ARRAY_SIZE(rgKeyword);
extern const KEYWORD rgShapeKeyword[] =
{
{"fillAngle", shapeFillAngle},
{"fillBackColor", shapeFillBackColor},
{"fillColor", shapeFillColor},
{"fillFocus", shapeFillFocus},
{"fillType", shapeFillType}
};
INT cShapeKeywords = ARRAY_SIZE(rgShapeKeyword);
extern const char *rgszUnrecognizedRTF[] = // When get one of these, fire
{ // LoFiRTF notification if enabled
"abs",
"aftn", // Catch \aftnbj, \aftncn, etc.
"animtext",
"annotation",
// "bkmk", // Catch \bkmkpub, \bkmkstart, etc.
"cldg",
"cltx",
"charscalex",
"chbg", // Catch \chbgbdiag, \chbgcross, etc.
"chcbpat",
"chcfpat",
"chshdng",
"do",
"dropcap",
"file",
"fontemb",
"formfield",
"linkself",
"obj", // Catch \objxxx not found above
"pgbrdr",
// "pic",
"revtbl",
"striked",
"tdfrmt",
"twoinone"
// "tp"
// "tr"
};
INT crgszUnrecognizedRTF = ARRAY_SIZE(rgszUnrecognizedRTF);
extern const BYTE szSymbolKeywords[] = "*:{}\\_|\r\n-~";
extern const TOKEN tokenSymbol[] = // Keep in same order as szSymbolKeywords
{
tokenOptionalDestination, // *
tokenIndexSubentry, // :
'{', // {
'}', // }
'\\', // BSLASH
NBHYPHEN, // _ (nonbreaking hyphen)
tokenFormulaCharacter, // |
tokenEndParagraph, // CR
tokenEndParagraph, // LF
SOFTHYPHEN, // - (optional hyphen)
NBSPACE // ~ (nonbreaking space)
};