diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-04-21 14:31:00 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-05-05 08:38:36 +0200 |
commit | 57f1934bdaa747f6e671419aa040e140d235f937 (patch) | |
tree | 98fe4a07f17f29d0e7bd17db5916a87bd30def3e /include/svtools | |
parent | 3b39adee1965be05e4bae759f43f77ce530f326c (diff) |
convert HTML_TOKEN_IDS to scoped enum
Change-Id: I525506e0103e4f17e5b8b95f15c1285d65b93de9
Reviewed-on: https://gerrit.libreoffice.org/37220
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/svtools')
-rw-r--r-- | include/svtools/htmltokn.h | 465 | ||||
-rw-r--r-- | include/svtools/parhtml.hxx | 20 | ||||
-rw-r--r-- | include/svtools/parrtf.hxx | 2 | ||||
-rw-r--r-- | include/svtools/svparser.hxx | 89 |
4 files changed, 287 insertions, 289 deletions
diff --git a/include/svtools/htmltokn.h b/include/svtools/htmltokn.h index 8673d466c155..26706c5fc43d 100644 --- a/include/svtools/htmltokn.h +++ b/include/svtools/htmltokn.h @@ -22,17 +22,20 @@ #include <svtools/svtdllapi.h> #include <sal/types.h> +#include <cassert> +#include <stdexcept> namespace rtl { class OUString; }; enum class HtmlOptionId; +enum class HtmlTokenId : sal_Int16; // search the char for the CharName sal_Unicode GetHTMLCharName( const rtl::OUString& rName ); // search the TokenID for the token -SVT_DLLPUBLIC int GetHTMLToken( const rtl::OUString& rName ); +SVT_DLLPUBLIC HtmlTokenId GetHTMLToken( const rtl::OUString& rName ); // search the TokenId for an attribute token HtmlOptionId GetHTMLOption( const rtl::OUString& rName ); @@ -40,243 +43,257 @@ HtmlOptionId GetHTMLOption( const rtl::OUString& rName ); // search the 24-bit color for a color name (not found = ULONG_MAX) SVT_DLLPUBLIC sal_uInt32 GetHTMLColor( const rtl::OUString& rName ); -// always starting from 256 on, greater than a char -const int HTML_TOKEN_START = 0x100; -const int HTML_TOKEN_ONOFF = 0x200; -const int HTML_TOKEN_MICROSOFT = 0x1000; - -enum HTML_TOKEN_IDS +enum class HtmlTokenId : sal_Int16 { - HTML_TEXTTOKEN = HTML_TOKEN_START, - HTML_SINGLECHAR, - HTML_NEWPARA, - HTML_TABCHAR, - HTML_RAWDATA, - HTML_LINEFEEDCHAR, + INVALID = -1, + NONE = 0, +// always starting from 256 on, greater than a char + TEXTTOKEN = 0x100, + SINGLECHAR, + NEWPARA, + TABCHAR, + RAWDATA, + LINEFEEDCHAR, // these will only be turned on - HTML_AREA, // Netscape 2.0 - HTML_BASE, // HTML 3.0 - HTML_COMMENT, - HTML_DOCTYPE, - HTML_EMBED, // Netscape 2.0 ignore </EMBED> - HTML_HORZRULE, // ignore </HR> - HTML_IMAGE, // ignore </IMG> - HTML_INPUT, // ignore </INPUT> - HTML_LINEBREAK, // </BR> -> <BR> - HTML_LINK, // HTML 3.0 - HTML_META, // HTML 3.0 ignore </META> - HTML_OPTION, // ignore </OPTION> - HTML_PARAM, // HotJava - HTML_SPACER, // Netscape 3.0b5 // ignore </SPACER> + AREA, // Netscape 2.0 + BASE, // HTML 3.0 + COMMENT, + DOCTYPE, + EMBED, // Netscape 2.0 ignore </EMBED> + HORZRULE, // ignore </HR> + IMAGE, // ignore </IMG> + INPUT, // ignore </INPUT> + LINEBREAK, // </BR> -> <BR> + LINK, // HTML 3.0 + META, // HTML 3.0 ignore </META> + OPTION, // ignore </OPTION> + PARAM, // HotJava + SPACER, // Netscape 3.0b5 // ignore </SPACER> // tokens recognised using HTML character - HTML_NONBREAKSPACE, - HTML_SOFTHYPH, + NONBREAKSPACE, + SOFTHYPH, // these will be turned back off, // the off value is always located behind (+1) !! - HTML_ABBREVIATION_ON = HTML_TOKEN_ONOFF, // HTML 3.0 - HTML_ABBREVIATION_OFF, // HTML 3.0 - HTML_ACRONYM_ON, // HTML 3.0 - HTML_ACRONYM_OFF, // HTML 3.0 - HTML_ADDRESS_ON, - HTML_ADDRESS_OFF, - HTML_ANCHOR_ON, - HTML_ANCHOR_OFF, - HTML_APPLET_ON, // HotJava - HTML_APPLET_OFF, // HotJava - HTML_AUTHOR_ON, // HTML 3.0 - HTML_AUTHOR_OFF, // HTML 3.0 - HTML_BANNER_ON, // HTML 3.0 - HTML_BANNER_OFF, // HTML 3.0 - HTML_BASEFONT_ON, // Netscape - HTML_BASEFONT_OFF, // Netscape - HTML_BIGPRINT_ON, // HTML 3.0 - HTML_BIGPRINT_OFF, // HTML 3.0 - HTML_BLINK_ON, // Netscape - HTML_BLINK_OFF, // Netscape - HTML_BLOCKQUOTE30_ON, // HTML 3.0 - HTML_BLOCKQUOTE30_OFF, // HTML 3.0 - HTML_BLOCKQUOTE_ON, - HTML_BLOCKQUOTE_OFF, - HTML_BODY_ON, - HTML_BODY_OFF, - HTML_BOLD_ON, - HTML_BOLD_OFF, - HTML_CAPTION_ON, // HTML 3.0 - HTML_CAPTION_OFF, // HTML 3.0 - HTML_CENTER_ON, // Netscape - HTML_CENTER_OFF, // Netscape - HTML_CITIATION_ON, - HTML_CITIATION_OFF, - HTML_CODE_ON, - HTML_CODE_OFF, - HTML_COL_ON, // HTML3 Table Model Draft - HTML_COL_OFF, // HTML3 Table Model Draft - HTML_COLGROUP_ON, // HTML3 Table Model Draft - HTML_COLGROUP_OFF, // HTML3 Table Model Draft - HTML_CREDIT_ON, // HTML 3.0 - HTML_CREDIT_OFF, // HTML 3.0 - HTML_DD_ON, - HTML_DD_OFF, - HTML_DEFLIST_ON, - HTML_DEFLIST_OFF, - HTML_DELETEDTEXT_ON, // HTML 3.0 - HTML_DELETEDTEXT_OFF, // HTML 3.0 - HTML_DIRLIST_ON, - HTML_DIRLIST_OFF, - HTML_DIVISION_ON, // HTML 3.0 - HTML_DIVISION_OFF, // HTML 3.0 - HTML_DT_ON, - HTML_DT_OFF, - HTML_EMPHASIS_ON, - HTML_EMPHASIS_OFF, - HTML_FIGURE_ON, // HTML 3.0 - HTML_FIGURE_OFF, // HTML 3.0 - HTML_FONT_ON, // Netscape - HTML_FONT_OFF, // Netscape - HTML_FOOTNOTE_ON, // HTML 3.0 - HTML_FOOTNOTE_OFF, // HTML 3.0 - HTML_FORM_ON, - HTML_FORM_OFF, - HTML_FRAME_ON, // Netscape 2.0 - HTML_FRAME_OFF, // Netscape 2.0 - HTML_FRAMESET_ON, // Netscape 2.0 - HTML_FRAMESET_OFF, // Netscape 2.0 - HTML_HEAD1_ON, - HTML_HEAD1_OFF, - HTML_HEAD2_ON, - HTML_HEAD2_OFF, - HTML_HEAD3_ON, - HTML_HEAD3_OFF, - HTML_HEAD4_ON, - HTML_HEAD4_OFF, - HTML_HEAD5_ON, - HTML_HEAD5_OFF, - HTML_HEAD6_ON, - HTML_HEAD6_OFF, - HTML_HEAD_ON, - HTML_HEAD_OFF, - HTML_HTML_ON, - HTML_HTML_OFF, - HTML_IFRAME_ON, // IE 3.0b2 - HTML_IFRAME_OFF, // IE 3.0b2 - HTML_INSERTEDTEXT_ON, // HTML 3.0 - HTML_INSERTEDTEXT_OFF, // HTML 3.0 - HTML_ITALIC_ON, - HTML_ITALIC_OFF, - HTML_KEYBOARD_ON, - HTML_KEYBOARD_OFF, - HTML_LANGUAGE_ON, // HTML 3.0 - HTML_LANGUAGE_OFF, // HTML 3.0 - HTML_LISTHEADER_ON, // HTML 3.0 - HTML_LISTHEADER_OFF, // HTML 3.0 - HTML_LI_ON, - HTML_LI_OFF, - HTML_MAP_ON, // Netscape 2.0 - HTML_MAP_OFF, // Netscape 2.0 - HTML_MENULIST_ON, - HTML_MENULIST_OFF, - HTML_MULTICOL_ON, // Netscape 3.0b5 - HTML_MULTICOL_OFF, // Netscape 3.0b5 - HTML_NOBR_ON, // Netscape - HTML_NOBR_OFF, // Netscape - HTML_NOEMBED_ON, // Netscape 2.0 - HTML_NOEMBED_OFF, // Netscape 2.0 - HTML_NOFRAMES_ON, // Netscape 2.0 - HTML_NOFRAMES_OFF, // Netscape 2.0 - HTML_NOSCRIPT_ON, // Netscape 2.0 - HTML_NOSCRIPT_OFF, // Netscape 3.0 - HTML_NOTE_ON, // HTML 3.0 - HTML_NOTE_OFF, // HTML 3.0 - HTML_OBJECT_ON, // HotJava - HTML_OBJECT_OFF, // HotJava - HTML_ORDERLIST_ON, - HTML_ORDERLIST_OFF, - HTML_PARABREAK_ON, - HTML_PARABREAK_OFF, - HTML_PERSON_ON, // HTML 3.0 - HTML_PERSON_OFF, // HTML 3.0 - HTML_PLAINTEXT_ON, // HTML 3.0 - HTML_PLAINTEXT_OFF, // HTML 3.0 - HTML_PREFORMTXT_ON, - HTML_PREFORMTXT_OFF, - HTML_SAMPLE_ON, - HTML_SAMPLE_OFF, - HTML_SCRIPT_ON, // HTML 3.2 - HTML_SCRIPT_OFF, // HTML 3.2 - HTML_SELECT_ON, - HTML_SELECT_OFF, - HTML_SHORTQUOTE_ON, // HTML 3.0 - HTML_SHORTQUOTE_OFF, // HTML 3.0 - HTML_SMALLPRINT_ON, // HTML 3.0 - HTML_SMALLPRINT_OFF, // HTML 3.0 - HTML_SPAN_ON, // Style Sheets - HTML_SPAN_OFF, // Style Sheets - HTML_STRIKETHROUGH_ON, // HTML 3.0 - HTML_STRIKETHROUGH_OFF, // HTML 3.0 - HTML_STRONG_ON, - HTML_STRONG_OFF, - HTML_STYLE_ON, // HTML 3.0 - HTML_STYLE_OFF, // HTML 3.0 - HTML_SUBSCRIPT_ON, // HTML 3.0 - HTML_SUBSCRIPT_OFF, // HTML 3.0 - HTML_SUPERSCRIPT_ON, // HTML 3.0 - HTML_SUPERSCRIPT_OFF, // HTML 3.0 - HTML_TABLE_ON, // HTML 3.0 - HTML_TABLE_OFF, // HTML 3.0 - HTML_TABLEDATA_ON, // HTML 3.0 - HTML_TABLEDATA_OFF, // HTML 3.0 - HTML_TABLEHEADER_ON, // HTML 3.0 - HTML_TABLEHEADER_OFF, // HTML 3.0 - HTML_TABLEROW_ON, // HTML 3.0 - HTML_TABLEROW_OFF, // HTML 3.0 - HTML_TBODY_ON, // HTML3 Table Model Draft - HTML_TBODY_OFF, // HTML3 Table Model Draft - HTML_TELETYPE_ON, - HTML_TELETYPE_OFF, - HTML_TEXTAREA_ON, - HTML_TEXTAREA_OFF, - HTML_TFOOT_ON, // HTML3 Table Model Draft - HTML_TFOOT_OFF, // HTML3 Table Model Draft - HTML_THEAD_ON, // HTML3 Table Model Draft - HTML_THEAD_OFF, // HTML3 Table Model Draft - HTML_TITLE_ON, - HTML_TITLE_OFF, - HTML_UNDERLINE_ON, - HTML_UNDERLINE_OFF, - HTML_UNORDERLIST_ON, - HTML_UNORDERLIST_OFF, - HTML_VARIABLE_ON, - HTML_VARIABLE_OFF, + ONOFF_START, + ABBREVIATION_ON = ONOFF_START, // HTML 3.0 + ABBREVIATION_OFF, // HTML 3.0 + ACRONYM_ON, // HTML 3.0 + ACRONYM_OFF, // HTML 3.0 + ADDRESS_ON, + ADDRESS_OFF, + ANCHOR_ON, + ANCHOR_OFF, + APPLET_ON, // HotJava + APPLET_OFF, // HotJava + AUTHOR_ON, // HTML 3.0 + AUTHOR_OFF, // HTML 3.0 + BANNER_ON, // HTML 3.0 + BANNER_OFF, // HTML 3.0 + BASEFONT_ON, // Netscape + BASEFONT_OFF, // Netscape + BIGPRINT_ON, // HTML 3.0 + BIGPRINT_OFF, // HTML 3.0 + BLINK_ON, // Netscape + BLINK_OFF, // Netscape + BLOCKQUOTE30_ON, // HTML 3.0 + BLOCKQUOTE30_OFF, // HTML 3.0 + BLOCKQUOTE_ON, + BLOCKQUOTE_OFF, + BODY_ON, + BODY_OFF, + BOLD_ON, + BOLD_OFF, + CAPTION_ON, // HTML 3.0 + CAPTION_OFF, // HTML 3.0 + CENTER_ON, // Netscape + CENTER_OFF, // Netscape + CITIATION_ON, + CITIATION_OFF, + CODE_ON, + CODE_OFF, + COL_ON, // HTML3 Table Model Draft + COL_OFF, // HTML3 Table Model Draft + COLGROUP_ON, // HTML3 Table Model Draft + COLGROUP_OFF, // HTML3 Table Model Draft + CREDIT_ON, // HTML 3.0 + CREDIT_OFF, // HTML 3.0 + DD_ON, + DD_OFF, + DEFLIST_ON, + DEFLIST_OFF, + DELETEDTEXT_ON, // HTML 3.0 + DELETEDTEXT_OFF, // HTML 3.0 + DIRLIST_ON, + DIRLIST_OFF, + DIVISION_ON, // HTML 3.0 + DIVISION_OFF, // HTML 3.0 + DT_ON, + DT_OFF, + EMPHASIS_ON, + EMPHASIS_OFF, + FIGURE_ON, // HTML 3.0 + FIGURE_OFF, // HTML 3.0 + FONT_ON, // Netscape + FONT_OFF, // Netscape + FOOTNOTE_ON, // HTML 3.0 + FOOTNOTE_OFF, // HTML 3.0 + FORM_ON, + FORM_OFF, + FRAME_ON, // Netscape 2.0 + FRAME_OFF, // Netscape 2.0 + FRAMESET_ON, // Netscape 2.0 + FRAMESET_OFF, // Netscape 2.0 + HEAD1_ON, + HEAD1_OFF, + HEAD2_ON, + HEAD2_OFF, + HEAD3_ON, + HEAD3_OFF, + HEAD4_ON, + HEAD4_OFF, + HEAD5_ON, + HEAD5_OFF, + HEAD6_ON, + HEAD6_OFF, + HEAD_ON, + HEAD_OFF, + HTML_ON, + HTML_OFF, + IFRAME_ON, // IE 3.0b2 + IFRAME_OFF, // IE 3.0b2 + INSERTEDTEXT_ON, // HTML 3.0 + INSERTEDTEXT_OFF, // HTML 3.0 + ITALIC_ON, + ITALIC_OFF, + KEYBOARD_ON, + KEYBOARD_OFF, + LANGUAGE_ON, // HTML 3.0 + LANGUAGE_OFF, // HTML 3.0 + LISTHEADER_ON, // HTML 3.0 + LISTHEADER_OFF, // HTML 3.0 + LI_ON, + LI_OFF, + MAP_ON, // Netscape 2.0 + MAP_OFF, // Netscape 2.0 + MENULIST_ON, + MENULIST_OFF, + MULTICOL_ON, // Netscape 3.0b5 + MULTICOL_OFF, // Netscape 3.0b5 + NOBR_ON, // Netscape + NOBR_OFF, // Netscape + NOEMBED_ON, // Netscape 2.0 + NOEMBED_OFF, // Netscape 2.0 + NOFRAMES_ON, // Netscape 2.0 + NOFRAMES_OFF, // Netscape 2.0 + NOSCRIPT_ON, // Netscape 2.0 + NOSCRIPT_OFF, // Netscape 3.0 + NOTE_ON, // HTML 3.0 + NOTE_OFF, // HTML 3.0 + OBJECT_ON, // HotJava + OBJECT_OFF, // HotJava + ORDERLIST_ON, + ORDERLIST_OFF, + PARABREAK_ON, + PARABREAK_OFF, + PERSON_ON, // HTML 3.0 + PERSON_OFF, // HTML 3.0 + PLAINTEXT_ON, // HTML 3.0 + PLAINTEXT_OFF, // HTML 3.0 + PREFORMTXT_ON, + PREFORMTXT_OFF, + SAMPLE_ON, + SAMPLE_OFF, + SCRIPT_ON, // HTML 3.2 + SCRIPT_OFF, // HTML 3.2 + SELECT_ON, + SELECT_OFF, + SHORTQUOTE_ON, // HTML 3.0 + SHORTQUOTE_OFF, // HTML 3.0 + SMALLPRINT_ON, // HTML 3.0 + SMALLPRINT_OFF, // HTML 3.0 + SPAN_ON, // Style Sheets + SPAN_OFF, // Style Sheets + STRIKETHROUGH_ON, // HTML 3.0 + STRIKETHROUGH_OFF, // HTML 3.0 + STRONG_ON, + STRONG_OFF, + STYLE_ON, // HTML 3.0 + STYLE_OFF, // HTML 3.0 + SUBSCRIPT_ON, // HTML 3.0 + SUBSCRIPT_OFF, // HTML 3.0 + SUPERSCRIPT_ON, // HTML 3.0 + SUPERSCRIPT_OFF, // HTML 3.0 + TABLE_ON, // HTML 3.0 + TABLE_OFF, // HTML 3.0 + TABLEDATA_ON, // HTML 3.0 + TABLEDATA_OFF, // HTML 3.0 + TABLEHEADER_ON, // HTML 3.0 + TABLEHEADER_OFF, // HTML 3.0 + TABLEROW_ON, // HTML 3.0 + TABLEROW_OFF, // HTML 3.0 + TBODY_ON, // HTML3 Table Model Draft + TBODY_OFF, // HTML3 Table Model Draft + TELETYPE_ON, + TELETYPE_OFF, + TEXTAREA_ON, + TEXTAREA_OFF, + TFOOT_ON, // HTML3 Table Model Draft + TFOOT_OFF, // HTML3 Table Model Draft + THEAD_ON, // HTML3 Table Model Draft + THEAD_OFF, // HTML3 Table Model Draft + TITLE_ON, + TITLE_OFF, + UNDERLINE_ON, + UNDERLINE_OFF, + UNORDERLIST_ON, + UNORDERLIST_OFF, + VARIABLE_ON, + VARIABLE_OFF, // obsolete features - HTML_XMP_ON, - HTML_XMP_OFF, - HTML_LISTING_ON, - HTML_LISTING_OFF, + XMP_ON, + XMP_OFF, + LISTING_ON, + LISTING_OFF, // proposed features - HTML_DEFINSTANCE_ON, - HTML_DEFINSTANCE_OFF, - HTML_STRIKE_ON, - HTML_STRIKE_OFF, - - HTML_UNKNOWNCONTROL_ON, - HTML_UNKNOWNCONTROL_OFF, - - HTML_COMMENT2_ON = HTML_TOKEN_MICROSOFT|HTML_TOKEN_ONOFF, // HTML 2.0 ? - HTML_COMMENT2_OFF, // HTML 2.0 ? - HTML_MARQUEE_ON, - HTML_MARQUEE_OFF, - HTML_PLAINTEXT2_ON, // HTML 2.0 ? - HTML_PLAINTEXT2_OFF, // HTML 2.0 ? - - HTML_SDFIELD_ON, - HTML_SDFIELD_OFF + DEFINSTANCE_ON, + DEFINSTANCE_OFF, + STRIKE_ON, + STRIKE_OFF, + + UNKNOWNCONTROL_ON, + UNKNOWNCONTROL_OFF, + + // Microsoft features + COMMENT2_ON, // HTML 2.0 ? + COMMENT2_OFF, // HTML 2.0 ? + MARQUEE_ON, + MARQUEE_OFF, + PLAINTEXT2_ON, // HTML 2.0 ? + PLAINTEXT2_OFF, // HTML 2.0 ? + + SDFIELD_ON, + SDFIELD_OFF }; +constexpr bool isOffToken(HtmlTokenId nToken) +{ + return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START) + ? (1 & (int)nToken) + : throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr +} + +constexpr HtmlTokenId getOnToken(HtmlTokenId nToken) +{ + return (nToken == HtmlTokenId::NONE || nToken >= HtmlTokenId::ONOFF_START) + ? HtmlTokenId(~1 & (int)nToken) + : throw std::logic_error("Assertion failed!"); // C++11 does not do assert in constexpr +} + // HTML attribute token (=Options) enum class HtmlOptionId diff --git a/include/svtools/parhtml.hxx b/include/svtools/parhtml.hxx index b6e7260b235c..89a0d5aeedf1 100644 --- a/include/svtools/parhtml.hxx +++ b/include/svtools/parhtml.hxx @@ -142,7 +142,7 @@ public: typedef ::std::vector<HTMLOption> HTMLOptions; -class SVT_DLLPUBLIC HTMLParser : public SvParser +class SVT_DLLPUBLIC HTMLParser : public SvParser<HtmlTokenId> { private: mutable HTMLOptions maOptions; // options of the start tag @@ -164,19 +164,19 @@ private: sal_uInt32 nPre_LinePos; // Pos in the line in the PRE-Tag - int mnPendingOffToken; ///< OFF token pending for a <XX.../> ON/OFF ON token + HtmlTokenId mnPendingOffToken; ///< OFF token pending for a <XX.../> ON/OFF ON token OUString aEndToken; protected: OUString sSaveToken; // the read tag as string - int ScanText( const sal_Unicode cBreak = 0U ); + HtmlTokenId ScanText( const sal_Unicode cBreak = 0U ); - int GetNextRawToken(); + HtmlTokenId GetNextRawToken(); // scan next token - virtual int GetNextToken_() override; + virtual HtmlTokenId GetNextToken_() override; virtual ~HTMLParser() override; @@ -198,15 +198,15 @@ public: // start PRE-/LISTING or XMP mode or filter tags respectively inline void StartPRE(); void FinishPRE() { bReadPRE = false; } - int FilterPRE( int nToken ); + HtmlTokenId FilterPRE( HtmlTokenId nToken ); inline void StartListing(); void FinishListing() { bReadListing = false; } - int FilterListing( int nToken ); + HtmlTokenId FilterListing( HtmlTokenId nToken ); inline void StartXMP(); void FinishXMP() { bReadXMP = false; } - int FilterXMP( int nToken ); + HtmlTokenId FilterXMP( HtmlTokenId nToken ); void FinishTextArea() { bReadTextArea = false; } @@ -217,7 +217,7 @@ public: // (PRE, XMP, ...) and set the flags. Is called by Continue before // NextToken is called. If you implement own loops or call // NextToken yourself, you should call this method beforehand. - int FilterToken( int nToken ); + HtmlTokenId FilterToken( HtmlTokenId nToken ); void ReadRawData( const OUString &rEndToken ) { aEndToken = rEndToken; } @@ -230,7 +230,7 @@ public: const HTMLOptions& GetOptions( HtmlOptionId *pNoConvertToken=nullptr ); // for asynchronous reading from the SvStream - virtual void Continue( int nToken ) override; + virtual void Continue( HtmlTokenId nToken ) override; protected: diff --git a/include/svtools/parrtf.hxx b/include/svtools/parrtf.hxx index 05baf76e57f9..0e870f685c89 100644 --- a/include/svtools/parrtf.hxx +++ b/include/svtools/parrtf.hxx @@ -34,7 +34,7 @@ struct RtfParserState_Impl {} }; -class SVT_DLLPUBLIC SvRTFParser : public SvParser +class SVT_DLLPUBLIC SvRTFParser : public SvParser<int> { std::stack< RtfParserState_Impl > aParserStates; int nOpenBrakets; diff --git a/include/svtools/svparser.hxx b/include/svtools/svparser.hxx index 67f77ee2ab28..136eb3a42573 100644 --- a/include/svtools/svparser.hxx +++ b/include/svtools/svparser.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SVTOOLS_SVPARSER_HXX #include <svtools/svtdllapi.h> +#include <svtools/htmltokn.h> #include <tools/link.hxx> #include <tools/ref.hxx> #include <tools/solar.h> @@ -29,7 +30,7 @@ #include <vector> #include <memory> -struct SvParser_Impl; +template<typename T> struct SvParser_Impl; class SvStream; enum class SvParserState @@ -41,6 +42,7 @@ enum class SvParserState Error }; +template<typename T> class SVT_DLLPUBLIC SvParser : public SvRefBase { DECL_LINK( NewDataRead, LinkParamNone*, void ); @@ -51,20 +53,18 @@ protected: sal_uLong nlLineNr; // current line number sal_uLong nlLinePos; // current column number - std::unique_ptr<SvParser_Impl> pImplData; // internal data + std::unique_ptr<SvParser_Impl<T>> pImplData; // internal data long nTokenValue; // additional value (RTF) bool bTokenHasValue; // indicates whether nTokenValue is valid SvParserState eState; // status also in derived classes - rtl_TextEncoding eSrcEnc; // Source encoding - - sal_uLong nNextChPos; - sal_uInt32 nNextCh; // current character codepoint in UTF32 for the "lex" + rtl_TextEncoding eSrcEnc; // Source encoding + sal_uLong nNextChPos; + sal_uInt32 nNextCh; // current character codepoint in UTF32 for the "lex" bool bUCS2BSrcEnc : 1; // or as big-endian UCS2 bool bSwitchToUCS2 : 1; // switching is allowed - bool bRTF_InTextRead : 1; // only for RTF-Parser!!! struct TokenStackType @@ -72,28 +72,23 @@ protected: OUString sToken; long nTokenValue; bool bTokenHasValue; - int nTokenId; - - TokenStackType() - : nTokenValue(0) - , bTokenHasValue(false) - , nTokenId(0) - { - } + T nTokenId; + + TokenStackType(); }; // methods for Token stack - int SkipToken( short nCnt = -1 ); // "skip" n Tokens back + T SkipToken( short nCnt = -1 ); // "skip" n Tokens back TokenStackType* GetStackPtr( short nCnt ); // scan the next token: // work off Token stack and call GetNextToken_() if necessary. // That one is responsible for the recognition of new Tokens. - int GetNextToken(); - virtual int GetNextToken_() = 0; + T GetNextToken(); + virtual T GetNextToken_() = 0; // is called for each Token that is recognized in CallParser - virtual void NextToken( int nToken ); + virtual void NextToken( T nToken ); // at times of SvRefBase derivation, not everybody may delete virtual ~SvParser() override; @@ -110,63 +105,49 @@ public: virtual SvParserState CallParser() = 0; // calling of the parser - SvParserState GetStatus() const { return eState; } // StatusInfo + SvParserState GetStatus() const; // StatusInfo - sal_uLong GetLineNr() const { return nlLineNr; } - sal_uLong GetLinePos() const { return nlLinePos; } - void IncLineNr() { ++nlLineNr; } - sal_uLong IncLinePos() { return ++nlLinePos; } - inline void SetLineNr( sal_uLong nlNum ); // inline bottom - inline void SetLinePos( sal_uLong nlPos ); // inline bottom + sal_uLong GetLineNr() const; + sal_uLong GetLinePos() const; + void IncLineNr(); + sal_uLong IncLinePos(); + void SetLineNr( sal_uLong nlNum ); + void SetLinePos( sal_uLong nlPos ); sal_uInt32 GetNextChar(); // Return next Unicode codepoint in UTF32. void RereadLookahead(); - bool IsParserWorking() const { return SvParserState::Working == eState; } + bool IsParserWorking() const; - Link<LinkParamNone*,void> GetAsynchCallLink() const - { return LINK( const_cast<SvParser*>(this), SvParser, NewDataRead ); } + Link<LinkParamNone*,void> GetAsynchCallLink() const; // for asynchronous reading from the SvStream - void SaveState( int nToken ); + void SaveState( T nToken ); void RestoreState(); - virtual void Continue( int nToken ); + virtual void Continue( T nToken ); // Set/get source encoding. The UCS2BEncoding flag is valid if source // encoding is UCS2. It specifies a big endian encoding. void SetSrcEncoding( rtl_TextEncoding eSrcEnc ); - rtl_TextEncoding GetSrcEncoding() const { return eSrcEnc; } + rtl_TextEncoding GetSrcEncoding() const; // May the character set be switched to UCS/2, if a BOM // is in the first two characters of the stream? - void SetSwitchToUCS2( bool bSet ) { bSwitchToUCS2 = bSet; } - bool IsSwitchToUCS2() const { return bSwitchToUCS2; } + void SetSwitchToUCS2( bool bSet ); + bool IsSwitchToUCS2() const; // how many bytes a character consists of - inline sal_uInt16 GetCharSize() const; + sal_uInt16 GetCharSize() const; - int GetSaveToken() const; + T GetSaveToken() const; +}; - // build a Which-Map 'rWhichMap' from an array of WhichIds - // 'pWhichIds'. It has the length 'nWhichIds'. - // The WhichMap is not deleted. - static void BuildWhichTable( std::vector<sal_uInt16> &rWhichMap, +// build a Which-Map 'rWhichMap' from an array of WhichIds +// 'pWhichIds'. It has the length 'nWhichIds'. +// The WhichMap is not deleted. +SVT_DLLPUBLIC void BuildWhichTable( std::vector<sal_uInt16> &rWhichMap, sal_uInt16 *pWhichIds, sal_uInt16 nWhichIds ); -}; - - -inline void SvParser::SetLineNr( sal_uLong nlNum ) -{ nlLineNr = nlNum; } - -inline void SvParser::SetLinePos( sal_uLong nlPos ) -{ nlLinePos = nlPos; } - -inline sal_uInt16 SvParser::GetCharSize() const -{ - return (RTL_TEXTENCODING_UCS2 == eSrcEnc) ? 2 : 1; -} - /*======================================================================== * |