1/*
2 * Copyright 2014, Rene Gollent, rene@gollent.com.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef C_LANGUAGE_FAMILY_SYNTAX_HIGHLIGHT_INFO_H
6#define C_LANGUAGE_FAMILY_SYNTAX_HIGHLIGHT_INFO_H
7
8
9#include "SyntaxHighlighter.h"
10
11#include <ObjectList.h>
12
13
14namespace CLanguage {
15	struct Token;
16	class Tokenizer;
17}
18
19class TeamTypeInformation;
20
21
22class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
23public:
24								CLanguageFamilySyntaxHighlightInfo(
25									LineDataSource* source,
26									CLanguage::Tokenizer* tokenizer,
27									TeamTypeInformation* info);
28	virtual						~CLanguageFamilySyntaxHighlightInfo();
29
30	virtual	int32				GetLineHighlightRanges(int32 line,
31									int32* _columns,
32									syntax_highlight_type* _types,
33									int32 maxCount);
34
35private:
36	class LineInfo;
37	typedef BObjectList<LineInfo> LineInfoList;
38	struct SyntaxPair;
39
40private:
41			status_t			_ParseLines();
42			status_t			_ParseLine(int32 line,
43									syntax_highlight_type& _lastType,
44									LineInfo*& _info);
45			syntax_highlight_type _MapTokenToSyntaxType(
46									const CLanguage::Token& token);
47private:
48	LineDataSource*				fHighlightSource;
49	CLanguage::Tokenizer*		fTokenizer;
50	TeamTypeInformation*		fTypeInfo;
51	LineInfoList				fLineInfos;
52};
53
54
55#endif	// C_LANGUAGE_FAMILY_SYNTAX_HIGHLIGHT_INFO_H
56