/* This file is part of GNU APL, a free implementation of the ISO/IEC Standard 13751, "Programming Language APL, Extended" Copyright (C) 2017 Elias Mårtenson This program 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. This program 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 this program. If not, see . */ #ifndef __Regexp_HH__DEFINED__ #define __Regexp_HH__DEFINED__ #include "UCS_string.hh" #define PCRE2_CODE_UNIT_WIDTH 32 #include /// A Regular expression match class RegexpMatch { public: /// constructor RegexpMatch(pcre2_code * code, const UCS_string & B, PCRE2_SIZE start); /// destructor virtual ~RegexpMatch(); /// return the number of offset pairs in a match uint32_t get_ovector_count() const { return ovector_count; } /// return the offset pairs in a match const PCRE2_SIZE * get_ovector() const { return ovector; } /// return \b true if there was a match bool is_match() const; /// return the number of matches int num_matches() const; /// return the matched string UCS_string matched_string() const; protected: /// the offset pairs PCRE2_SIZE * ovector; /// the number of offset pairs uint32_t ovector_count; /// the data related to a match pcre2_match_data * match_data; /// the result of a match int match_result; /// the right argument B of ⎕RE const UCS_string & matched_B; }; /// Helper class for ⎕RE class Regexp { public: /// constructor Regexp(const UCS_string & pattern, int flags); /// destructor virtual ~Regexp(); /// return a new match const RegexpMatch * match(const UCS_string & match, PCRE2_SIZE size) const; /// return the number of matches int expression_count() const; /// returned the compiled regular expression pcre2_code * get_code() const { return code; } /// return a description for error code \b eec static UCS_string pcre_error(int ec); protected: /// compiled regular expression pcre2_code * code; }; #endif // __Regexp_HH__DEFINED__