summaryrefslogtreecommitdiff
path: root/include/svtools
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-04-21 14:31:00 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-05-05 08:38:36 +0200
commit57f1934bdaa747f6e671419aa040e140d235f937 (patch)
tree98fe4a07f17f29d0e7bd17db5916a87bd30def3e /include/svtools
parent3b39adee1965be05e4bae759f43f77ce530f326c (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.h465
-rw-r--r--include/svtools/parhtml.hxx20
-rw-r--r--include/svtools/parrtf.hxx2
-rw-r--r--include/svtools/svparser.hxx89
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;
-}
-
/*========================================================================
*