1/*
2 * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef MARKUP_PARSER_H
6#define MARKUP_PARSER_H
7
8#include "TextDocument.h"
9
10
11class MarkupParser {
12public:
13								MarkupParser();
14								MarkupParser(
15									const CharacterStyle& characterStyle,
16									const ParagraphStyle& paragraphStyle);
17
18			void				SetStyles(
19									const CharacterStyle& characterStyle,
20									const ParagraphStyle& paragraphStyle);
21
22			const CharacterStyle& HeadingCharacterStyle() const
23									{ return fHeadingStyle; }
24			const ParagraphStyle& HeadingParagraphStyle() const
25									{ return fHeadingParagraphStyle; }
26
27			const CharacterStyle& NormalCharacterStyle() const
28									{ return fNormalStyle; }
29			const ParagraphStyle& NormalParagraphStyle() const
30									{ return fParagraphStyle; }
31
32			TextDocumentRef		CreateDocumentFromMarkup(const BString& text);
33			void				AppendMarkup(const TextDocumentRef& document,
34									const BString& text);
35
36private:
37			void				_InitStyles();
38
39			void				_ParseText(const BString& text);
40			void				_CopySpan(const BString& text,
41									int32& start, int32 end);
42			void				_ToggleStyle(const CharacterStyle& style);
43			void				_FinishParagraph(bool isLast);
44
45private:
46			CharacterStyle		fNormalStyle;
47			CharacterStyle		fBoldStyle;
48			CharacterStyle		fItalicStyle;
49			CharacterStyle		fBoldItalicStyle;
50			CharacterStyle		fHeadingStyle;
51
52			ParagraphStyle		fParagraphStyle;
53			ParagraphStyle		fHeadingParagraphStyle;
54			ParagraphStyle		fBulletStyle;
55
56			const CharacterStyle* fCurrentCharacterStyle;
57			const ParagraphStyle* fCurrentParagraphStyle;
58
59			// while parsing:
60			TextDocumentRef		fTextDocument;
61			Paragraph			fCurrentParagraph;
62			int32				fSpanStartOffset;
63};
64
65
66#endif // MARKUP_PARSER_H
67