8 #ifndef __UT_PathPattern_h__
9 #define __UT_PathPattern_h__
56 bool case_sensitive =
true,
57 bool assume_wildcards =
false,
58 bool allow_instance_indices =
false);
62 bool *excludes_branch =
nullptr)
const;
69 bool *excludes_branch,
72 bool getExplicitListWithInstanceIds(
77 {
return myCaseSensitive; }
79 {
return myAssumeWildcardsAroundPlainTokens; }
81 {
return myAllowInstanceIndices; }
83 {
return myPatternError; }
90 bool do_path_matching,
93 myDoPathMatching(do_path_matching),
94 myHasWildcards(has_wildcards),
95 myIsSpecialToken(false)
110 bool assume_wildcards,
111 bool allow_instance_indices);
118 myAssumeWildcardsAroundPlainTokens,
119 myAllowInstanceIndices);
121 virtual bool matchSpecialToken(
124 bool *excludes_branch)
const;
145 bool *excludes_branch,
148 return matchSpecialToken(path, token,
153 const Token &token)
const
163 {
return !match_data; }
165 void testForExplicitList();
166 void patternInterrupted();
192 PatternOp(PatternOp &parent, Operator
op)
193 : myOwner(parent.myOwner),
198 PatternOp *
push(Operator op);
199 PatternOp *insertGroup();
200 bool containsOnlyAddOperations()
const;
202 PatternOp *leftOp() {
return myLeftOp.get(); }
203 const PatternOp *leftOp()
const {
return myLeftOp.get(); }
204 PatternOp *rightOp() {
return myRightOp.get(); }
205 const PatternOp *rightOp()
const {
return myRightOp.get(); }
218 PatternOpStep(PatternOp *
op =
nullptr)
219 : myPatternOp(
op), myFollowLeftChild(false) { }
221 PatternOp *myPatternOp;
222 bool myFollowLeftChild;
230 bool *excludes_branch,
237 bool combineAndUpdateMatchData(MatchOp
op,
240 bool boolean_matched,
242 void printPattern(
const PatternOp *patternop,
244 static bool findToken(
int tokenidx,
245 PatternOpPath &oppath);
248 const PatternOp *patternop,
250 static bool patternOpPathContains(
251 const PatternOpPath &oppath,
252 const PatternOp *patternop);
253 static bool patternOpPathIntersects(
254 const PatternOpPath &oppath,
255 const PatternOp *patternop);
256 static void makePruningPatternOp(
257 PatternOp *patternop,
258 const PatternOpPath &oppath);
259 static void makePrecedingGroupPatternOp(
260 PatternOp *patternop,
261 const PatternOpPath &oppath,
263 static bool parsePattern(
const char *&pattern,
270 bool myIsExplicitList;
273 const bool myCaseSensitive;
274 const bool myAssumeWildcardsAroundPlainTokens;
275 const bool myAllowInstanceIndices;
*pool push(my_func, arg1,...)
UT_StringHolder myInstanceIdPattern
GLsizei const GLchar *const * path
bool getAllowInstanceIndices() const
virtual bool matchDataIsEmpty(const UT_PathPatternMatchDataPtr &match_data) const
const UT_StringHolder & getPatternError() const
A reference counter base class for use with UT_IntrusivePtr.
virtual ~UT_PathPatternMatchData()
bool getCaseSensitive() const
UT_PathPatternMatchData()
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
UT_Array< Token > myTokens
virtual UT_PathPatternMatchDataPtr combineMatchData(MatchOp op, const UT_PathPatternMatchDataPtr &lhs, const UT_PathPatternMatchDataPtr &rhs) const
bool getAssumeWildcardsAroundPlainTokens() const
UT_IntrusivePtr< UT_SpecialTokenData > UT_SpecialTokenDataPtr
Token(const UT_StringHolder &str, bool do_path_matching, bool has_wildcards)
virtual ~UT_SpecialTokenData()
virtual UT_PathPatternMatchDataPtr makeLeafMatchData(const UT_StringRef &path, const Token &token) const
virtual bool matchSpecialTokenWithData(const UT_StringRef &path, const Token &token, bool *excludes_branch, UT_PathPatternMatchDataPtr &match_data) const
virtual UT_PathPattern * createEmptyClone() const
UT_SpecialTokenDataPtr mySpecialTokenDataPtr
UT_IntrusivePtr< UT_PathPatternMatchData > UT_PathPatternMatchDataPtr