TextMateLib 1.0
Modern C++ implementation of the TextMate syntax highlighting engine
Loading...
Searching...
No Matches
grammarDependencies.h
1#ifndef TEXTMATELIB_GRAMMAR_DEPENDENCIES_H
2#define TEXTMATELIB_GRAMMAR_DEPENDENCIES_H
3
4#include "types.h"
5#include <string>
6#include <vector>
7#include <queue>
8#include <set>
9
10namespace tml {
11
12// Forward declarations
13class SyncRegistry;
14
15// Include reference kinds
16enum class IncludeReferenceKind {
17 Base,
18 Self,
19 RelativeReference,
20 TopLevelReference,
21 TopLevelRepositoryReference
22};
23
24// IncludeReference structure
25struct IncludeReference {
26 IncludeReferenceKind kind;
27 std::string scopeName;
28 std::string ruleName;
29
30 IncludeReference() : kind(IncludeReferenceKind::Base) {}
31 IncludeReference(IncludeReferenceKind k, const std::string& scope = "", const std::string& rule = "")
32 : kind(k), scopeName(scope), ruleName(rule) {}
33};
34
35// Parse include string
36IncludeReference parseInclude(const std::string& include);
37
38// AbsoluteRuleReference structure
39struct AbsoluteRuleReference {
40 std::string scopeName;
41 std::string ruleName;
42
43 AbsoluteRuleReference() {}
44 AbsoluteRuleReference(const std::string& scope, const std::string& rule)
45 : scopeName(scope), ruleName(rule) {}
46};
47
48// ScopeDependencyProcessor class
49class ScopeDependencyProcessor {
50public:
51 std::queue<AbsoluteRuleReference> Q;
52
53private:
54 SyncRegistry* _repo;
55 std::string _initialScopeName;
56 std::set<std::string> _seenScopes;
57
58public:
59 ScopeDependencyProcessor(SyncRegistry* repo, const std::string& initialScopeName);
60
61 void processQueue();
62};
63
64} // namespace tml
65
66#endif // TEXTMATELIB_GRAMMAR_DEPENDENCIES_H
Core type definitions and interfaces for TextMateLib.