Comment changes.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 13 Jan 2008 15:20:37 +0000 (15:20 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 13 Jan 2008 15:20:37 +0000 (15:20 +0000)
lib/silcutil/silcregex.h
lib/silcutil/silcstack.h

index ed23fbc5e764e00c63d8e84dd73f91297863d1cf..8b5a66544f26fd3893bb2c3717110eabae1c6d94 100644 (file)
@@ -27,7 +27,8 @@
  * The interface also provides many convenience functions to make the use
  * of regular expressions easier.  Especially the silc_regex allows very
  * simple way to match strings against regular expressions and get the
- * exact match or matches as a return.
+ * exact match or matches as a return.  The silc_subst provides simple and
+ * familiar way to match and substitute strings (Sed syntax).
  *
  * The regex syntax follows POSIX regex syntax:
  *
@@ -275,7 +276,11 @@ void silc_regex_free(SilcRegex regexp);
  *    The first (whole) match is returned to `match' buffer if it is non-NULL.
  *    The variable argument list are buffers where multiple matches are
  *    returned in case of group (parenthesized) regular expression.  The caller
- *    needs to know how many pointers to provide, in order to get all matches.
+ *    needs to know how many pointers to provide in order to get all matches.
+ *    If a particular group is optional, a buffer pointer still must be given
+ *    as argument for it, however, if it did not match the returned buffer
+ *    length is 0 and data pointer is NULL.
+ *
  *    If `match' is non-NULL the variable argument list must be ended with
  *    NULL.  The data in the `match' and in any other buffer is from `string'
  *    and must not be freed by the caller.
@@ -318,6 +323,61 @@ SilcBool silc_regex(const char *string, const char *regex,
 SilcBool silc_regex_buffer(SilcBuffer buffer, const char *regex,
                           SilcBuffer match, ...);
 
+/****f* silcutil/SilcRegexAPI/silc_subst
+ *
+ * SYNOPSIS
+ *
+ *    SilcBool silc_subst(SilcBuffer buffer, const char *subst);
+ *
+ * DESCRIPTION
+ *
+ *    Regular expression matching and substitution in `buffer' according
+ *    to the substitution expression `subst'.  This function provides
+ *    Sed (Stream Editor) style substitution interface.  The `subst' may
+ *    be of following formats:
+ *
+ *    's/REGEXP/REPLACEMENT/FLAGS'
+ *
+ *    Matches regular expression REGEXP in each line in the buffer and
+ *    substitutes the match with REPLACEMENT.
+ *
+ *    'ADDRs/REGEXP/REPLACEMENT/FLAGS'
+ *
+ *    Selects lines in the buffer matching the address ADDR and matches the
+ *    regular expression REGEXP in the line and substitutes the match with
+ *    REPLACEMENT.
+ *
+ *    The ADDR may be of following format:
+ *
+ *    /REGEXP/       Matches only lines matching the regular expression
+ *    NUMBER         Matches only the specified line number (1-n)
+ *    $              Matches only the last line
+ *
+ *    The FLAGS may be of following format:
+ *
+ *    no FLAGS       Finds first match in the line and replaces that
+ *    g              Finds and replaces all matches in the line
+ *
+ *    An '!' may precede the 's'.  In that case the ADDR is not matched.
+ *
+ *    Returns TRUE if the match and replacement was done, FALSE in case
+ *    of error, and sets the silc_errno.
+ *
+ *    If you need to match and/or replace '/' characters, they must be
+ *    escaped with '\' (C-style escaping for '\' is '\\').
+ *
+ *    If you need more versatile ways to modify the buffer you may consider
+ *    using the SILC_STR_REGEX in SILC Buffer Format API directly.  This
+ *    function only provides basic matching and substitution.
+ *
+ * EXAMPLE
+ *
+ *    // Replace all foos with bar on all lines in the buffer
+ *    silc_subst(buffer, "s/foo/bar/g");
+ *
+ ***/
+SilcBool silc_subst(SilcBuffer buffer, const char *subst);
+
 /* Backwards support */
 #define silc_string_regex_match(regex, string) silc_regex(string, regex, NULL)
 
index 017a55d0b488fe461246e2fa32d9438d632ae49f..f2663eef949e4b37b8774b9391d85ca56a301d48 100644 (file)
@@ -21,7 +21,7 @@
  *
  * DESCRIPTION
  *
- * Implementation of data stack which can be used to allocate memory from
+ * Implementation of data stack which can be used to do fast allocations from
  * the stack.  Basically SilcStack is a pre-allocated memory pool system
  * which allows fast memory allocation for routines and applications that
  * frequently allocate small amounts of memory.  Other advantage of this