393 lines
12 KiB
C++
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)
|
|
};
|
|
|
|
|