summaryrefslogtreecommitdiff
path: root/support/highlight/src/core/ctagsreader.h
blob: 3686242dda52c88dcbe96a2085a650f7c29052ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/***************************************************************************
                          ctagsreader.h  -  description
                             -------------------
    begin                : Tue Oct 21 2008
    copyright            : (C) 2008 by Andre Simon
    email                : andre.simon1@gmx.de
 ***************************************************************************/


/*
This file is part of Highlight.

Highlight is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Highlight is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Highlight.  If not, see <http://www.gnu.org/licenses/>.
*/


#ifndef CTAGSREADER_H
#define CTAGSREADER_H

#include <string>
#include <sstream>
#include <map>
#include <iostream>
#include <fstream>

using namespace std;

/** TagInfo contains information about a ctags tag */
class TagInfo
{
	public:
		TagInfo() {};
		string getKind() const;
		string file, kind, name_space;

};

/** Maps parameter keys to values*/
typedef map<string, TagInfo> TagsMap;

class CTagsReader
{
	public:

		CTagsReader() {};
		~CTagsReader() {};

		/** load ctags file
		\param ctags_path Path to ctags file
		\return true if successfull
		*/
		bool load ( const string & ctags_path );

		/** test if tag infoation exists
		\param tagname tag ot highlight token
		\return true if tag information exists
		*/
		bool tagExists ( const string& tagname )
		{
			return tags.count ( tagname ) >0;
		}

		/** return tag info, call tagExists first to avoid growing map
		\param tagname tag ot highlight token
		\return tag info
		*/
		TagInfo getTagInfo ( const string &tagname )
		{
			return tags[tagname];
		}

	private:

		TagsMap tags;
};

/*
		c	class name
		d	define (from #define XXX)
		e	enumerator
		f	function or method name
		F	file name
		g	enumeration name
		m	member (of structure or class data)
		p	function prototype
		s	structure name
		t	typedef
		u	union name
		v	variable

*/

#endif