TextMateLib 1.0
Modern C++ implementation of the TextMate syntax highlighting engine
Loading...
Searching...
No Matches
onigLib.h
1#ifndef TEXTMATELIB_ONIGLIB_H
2#define TEXTMATELIB_ONIGLIB_H
3
4#include "types.h"
5#include <string>
6#include <vector>
7#include <memory>
8
9// Include Oniguruma header
10extern "C" {
11#include "oniguruma.h"
12}
13
14namespace tml {
15
16// IOnigCaptureIndex interface
17struct IOnigCaptureIndex {
18 int start;
19 int end;
20 int length;
21
22 IOnigCaptureIndex() : start(0), end(0), length(0) {}
23 IOnigCaptureIndex(int s, int e) : start(s), end(e), length(e - s) {}
24};
25
26// IOnigMatch interface
27struct IOnigMatch {
28 int index; // Which pattern matched (for scanner with multiple patterns)
29 std::vector<IOnigCaptureIndex> captureIndices;
30
31 IOnigMatch() : index(0) {}
32};
33
34// FindOption enum
35enum FindOption {
36 None = 0,
37 NotBeginString = 1, // ONIG_OPTION_NOT_BEGIN_STRING
38 NotEndString = 2, // ONIG_OPTION_NOT_END_STRING
39 NotBeginPosition = 4, // ONIG_OPTION_NOT_BEGIN_POSITION
40 DebugCall = 8 // For debugging purposes
41};
42
43// OnigString class - wraps a string for use with Oniguruma
44class OnigString {
45private:
46 std::string _content;
47 const UChar* _utf8Ptr;
48
49public:
50 explicit OnigString(const std::string& str);
51 ~OnigString();
52
53 const std::string& content() const { return _content; }
54 const UChar* utf8Ptr() const { return _utf8Ptr; }
55 size_t utf8Length() const { return _content.length(); }
56
57 void dispose();
58};
59
60// OnigScanner class - wraps Oniguruma scanner
61class OnigScanner {
62private:
63 std::vector<std::string> _sources;
64 std::vector<OnigRegex> _regexes;
65 OnigRegSet* _regSet;
66 bool _disposed;
67
68public:
69 explicit OnigScanner(const std::vector<std::string>& sources);
70 ~OnigScanner();
71
72 IOnigMatch* findNextMatchSync(const std::string& string,
73 int startPosition,
74 OrMask<FindOption> options);
75
76 IOnigMatch* findNextMatchSync(OnigString* string,
77 int startPosition,
78 OrMask<FindOption> options);
79
80 void dispose();
81
82private:
83 bool compilePatterns();
84};
85
86// IOnigLib interface - factory for creating OnigScanner and OnigString
87class IOnigLib {
88public:
89 virtual ~IOnigLib() {}
90
91 virtual OnigScanner* createOnigScanner(const std::vector<std::string>& sources) = 0;
92 virtual OnigString* createOnigString(const std::string& str) = 0;
93};
94
95// Default OnigLib implementation
96class DefaultOnigLib : public IOnigLib {
97public:
98 DefaultOnigLib();
99 ~DefaultOnigLib();
100
101 OnigScanner* createOnigScanner(const std::vector<std::string>& sources) override;
102 OnigString* createOnigString(const std::string& str) override;
103};
104
105// Helper function to dispose OnigString
106void disposeOnigString(OnigString* str);
107
108} // namespace tml
109
110#endif // TEXTMATELIB_ONIGLIB_H
Core type definitions and interfaces for TextMateLib.