/* * Licensed under the GNU Lesser General Public License Version 3 * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the license, or * (at your option) any later version. * * This software 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ // generated automatically - do not change module glib.MatchInfo; private import glib.ErrorG; private import glib.GException; private import glib.Regex; private import glib.Str; private import glib.c.functions; public import glib.c.types; /** * A GMatchInfo is an opaque struct used to return information about * matches. */ public class MatchInfo { /** the main Gtk struct */ protected GMatchInfo* gMatchInfo; protected bool ownedRef; /** Get the main Gtk struct */ public GMatchInfo* getMatchInfoStruct(bool transferOwnership = false) { if (transferOwnership) ownedRef = false; return gMatchInfo; } /** the main Gtk struct as a void* */ protected void* getStruct() { return cast(void*)gMatchInfo; } /** * Sets our main struct and passes it to the parent class. */ public this (GMatchInfo* gMatchInfo, bool ownedRef = false) { this.gMatchInfo = gMatchInfo; this.ownedRef = ownedRef; } ~this () { if ( ownedRef ) g_match_info_unref(gMatchInfo); } /** * Returns a new string containing the text in @string_to_expand with * references and escape sequences expanded. References refer to the last * match done with @string against @regex and have the same syntax used by * g_regex_replace(). * * The @string_to_expand must be UTF-8 encoded even if #G_REGEX_RAW was * passed to g_regex_new(). * * The backreferences are extracted from the string passed to the match * function, so you cannot call this function after freeing the string. * * @match_info may be %NULL in which case @string_to_expand must not * contain references. For instance "foo\n" does not refer to an actual * pattern and '\n' merely will be replaced with \n character, * while to expand "\0" (whole match) one needs the result of a match. * Use g_regex_check_replacement() to find out whether @string_to_expand * contains references. * * Params: * stringToExpand = the string to expand * * Returns: the expanded string, or %NULL if an error occurred * * Since: 2.14 * * Throws: GException on failure. */ public string expandReferences(string stringToExpand) { GError* err = null; auto retStr = g_match_info_expand_references(gMatchInfo, Str.toStringz(stringToExpand), &err); if (err !is null) { throw new GException( new ErrorG(err) ); } scope(exit) Str.freeString(retStr); return Str.toString(retStr); } /** * Retrieves the text matching the @match_num'th capturing * parentheses. 0 is the full text of the match, 1 is the first paren * set, 2 the second, and so on. * * If @match_num is a valid sub pattern but it didn't match anything * (e.g. sub pattern 1, matching "b" against "(a)?b") then an empty * string is returned. * * If the match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * string is not that of a set of parentheses but that of a matched * substring. Substrings are matched in reverse order of length, so * 0 is the longest match. * * The string is fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Params: * matchNum = number of the sub expression * * Returns: The matched substring, or %NULL if an error * occurred. You have to free the string yourself * * Since: 2.14 */ public string fetch(int matchNum) { auto retStr = g_match_info_fetch(gMatchInfo, matchNum); scope(exit) Str.freeString(retStr); return Str.toString(retStr); } /** * Bundles up pointers to each of the matching substrings from a match * and stores them in an array of gchar pointers. The first element in * the returned array is the match number 0, i.e. the entire matched * text. * * If a sub pattern didn't match anything (e.g. sub pattern 1, matching * "b" against "(a)?b") then an empty string is inserted. * * If the last match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * strings are not that matched by sets of parentheses but that of the * matched substring. Substrings are matched in reverse order of length, * so the first one is the longest match. * * The strings are fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Returns: a %NULL-terminated array of gchar * * pointers. It must be freed using g_strfreev(). If the previous * match failed %NULL is returned * * Since: 2.14 */ public string[] fetchAll() { auto retStr = g_match_info_fetch_all(gMatchInfo); scope(exit) Str.freeStringArray(retStr); return Str.toStringArray(retStr); } /** * Retrieves the text matching the capturing parentheses named @name. * * If @name is a valid sub pattern name but it didn't match anything * (e.g. sub pattern "X", matching "b" against "(?Pa)?b") * then an empty string is returned. * * The string is fetched from the string passed to the match function, * so you cannot call this function after freeing the string. * * Params: * name = name of the subexpression * * Returns: The matched substring, or %NULL if an error * occurred. You have to free the string yourself * * Since: 2.14 */ public string fetchNamed(string name) { auto retStr = g_match_info_fetch_named(gMatchInfo, Str.toStringz(name)); scope(exit) Str.freeString(retStr); return Str.toString(retStr); } /** * Retrieves the position in bytes of the capturing parentheses named @name. * * If @name is a valid sub pattern name but it didn't match anything * (e.g. sub pattern "X", matching "b" against "(?Pa)?b") * then @start_pos and @end_pos are set to -1 and %TRUE is returned. * * Params: * name = name of the subexpression * startPos = pointer to location where to store * the start position, or %NULL * endPos = pointer to location where to store * the end position, or %NULL * * Returns: %TRUE if the position was fetched, %FALSE otherwise. * If the position cannot be fetched, @start_pos and @end_pos * are left unchanged. * * Since: 2.14 */ public bool fetchNamedPos(string name, out int startPos, out int endPos) { return g_match_info_fetch_named_pos(gMatchInfo, Str.toStringz(name), &startPos, &endPos) != 0; } /** * Retrieves the position in bytes of the @match_num'th capturing * parentheses. 0 is the full text of the match, 1 is the first * paren set, 2 the second, and so on. * * If @match_num is a valid sub pattern but it didn't match anything * (e.g. sub pattern 1, matching "b" against "(a)?b") then @start_pos * and @end_pos are set to -1 and %TRUE is returned. * * If the match was obtained using the DFA algorithm, that is using * g_regex_match_all() or g_regex_match_all_full(), the retrieved * position is not that of a set of parentheses but that of a matched * substring. Substrings are matched in reverse order of length, so * 0 is the longest match. * * Params: * matchNum = number of the sub expression * startPos = pointer to location where to store * the start position, or %NULL * endPos = pointer to location where to store * the end position, or %NULL * * Returns: %TRUE if the position was fetched, %FALSE otherwise. If * the position cannot be fetched, @start_pos and @end_pos are left * unchanged * * Since: 2.14 */ public bool fetchPos(int matchNum, out int startPos, out int endPos) { return g_match_info_fetch_pos(gMatchInfo, matchNum, &startPos, &endPos) != 0; } /** * If @match_info is not %NULL, calls g_match_info_unref(); otherwise does * nothing. * * Since: 2.14 */ public void free() { g_match_info_free(gMatchInfo); ownedRef = false; } /** * Retrieves the number of matched substrings (including substring 0, * that is the whole matched text), so 1 is returned if the pattern * has no substrings in it and 0 is returned if the match failed. * * If the last match was obtained using the DFA algorithm, that is * using g_regex_match_all() or g_regex_match_all_full(), the retrieved * count is not that of the number of capturing parentheses but that of * the number of matched substrings. * * Returns: Number of matched substrings, or -1 if an error occurred * * Since: 2.14 */ public int getMatchCount() { return g_match_info_get_match_count(gMatchInfo); } /** * Returns #GRegex object used in @match_info. It belongs to Glib * and must not be freed. Use g_regex_ref() if you need to keep it * after you free @match_info object. * * Returns: #GRegex object used in @match_info * * Since: 2.14 */ public Regex getRegex() { auto p = g_match_info_get_regex(gMatchInfo); if(p is null) { return null; } return new Regex(cast(GRegex*) p, true); } /** * Returns the string searched with @match_info. This is the * string passed to g_regex_match() or g_regex_replace() so * you may not free it before calling this function. * * Returns: the string searched with @match_info * * Since: 2.14 */ public string getString() { return Str.toString(g_match_info_get_string(gMatchInfo)); } /** * Usually if the string passed to g_regex_match*() matches as far as * it goes, but is too short to match the entire pattern, %FALSE is * returned. There are circumstances where it might be helpful to * distinguish this case from other cases in which there is no match. * * Consider, for example, an application where a human is required to * type in data for a field with specific formatting requirements. An * example might be a date in the form ddmmmyy, defined by the pattern * "^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$". * If the application sees the user’s keystrokes one by one, and can * check that what has been typed so far is potentially valid, it is * able to raise an error as soon as a mistake is made. * * GRegex supports the concept of partial matching by means of the * #G_REGEX_MATCH_PARTIAL_SOFT and #G_REGEX_MATCH_PARTIAL_HARD flags. * When they are used, the return code for * g_regex_match() or g_regex_match_full() is, as usual, %TRUE * for a complete match, %FALSE otherwise. But, when these functions * return %FALSE, you can check if the match was partial calling * g_match_info_is_partial_match(). * * The difference between #G_REGEX_MATCH_PARTIAL_SOFT and * #G_REGEX_MATCH_PARTIAL_HARD is that when a partial match is encountered * with #G_REGEX_MATCH_PARTIAL_SOFT, matching continues to search for a * possible complete match, while with #G_REGEX_MATCH_PARTIAL_HARD matching * stops at the partial match. * When both #G_REGEX_MATCH_PARTIAL_SOFT and #G_REGEX_MATCH_PARTIAL_HARD * are set, the latter takes precedence. * * There were formerly some restrictions on the pattern for partial matching. * The restrictions no longer apply. * * See pcrepartial(3) for more information on partial matching. * * Returns: %TRUE if the match was partial, %FALSE otherwise * * Since: 2.14 */ public bool isPartialMatch() { return g_match_info_is_partial_match(gMatchInfo) != 0; } /** * Returns whether the previous match operation succeeded. * * Returns: %TRUE if the previous match operation succeeded, * %FALSE otherwise * * Since: 2.14 */ public bool matches() { return g_match_info_matches(gMatchInfo) != 0; } /** * Scans for the next match using the same parameters of the previous * call to g_regex_match_full() or g_regex_match() that returned * @match_info. * * The match is done on the string passed to the match function, so you * cannot free it before calling this function. * * Returns: %TRUE is the string matched, %FALSE otherwise * * Since: 2.14 * * Throws: GException on failure. */ public bool next() { GError* err = null; auto p = g_match_info_next(gMatchInfo, &err) != 0; if (err !is null) { throw new GException( new ErrorG(err) ); } return p; } /** * Increases reference count of @match_info by 1. * * Returns: @match_info * * Since: 2.30 */ public MatchInfo doref() { auto p = g_match_info_ref(gMatchInfo); if(p is null) { return null; } return new MatchInfo(cast(GMatchInfo*) p, true); } /** * Decreases reference count of @match_info by 1. When reference count drops * to zero, it frees all the memory associated with the match_info structure. * * Since: 2.30 */ public void unref() { g_match_info_unref(gMatchInfo); } }