plucky (3) stroptx.3.gz

Provided by: libstropt-dev_0.1.2-1_amd64 bug

NAME

       stropt,  stroptx,  stropt2buf,  stropt2str  -  Parse options from a string (it supports quotation, option
       arguments)

SYNOPSIS

       #include <stropt.h>

       int stropt(const char *input, char **tags, char **args, char *buf);

       int stroptx(const char *input, char *features, char *sep, int  flags,  char  **tags,  char  **args,  char
       *buf);

       char *stropt2buf(void *buf, size_t size, char **tags, char **args, char sep, char eq);

       char *stropt2str(char **tags, char **args, char sep, char eq);

DESCRIPTION

       This  small  library  parses a list of options from a string. Options can be separated by spaces, commas,
       semicolons, tabs or new line.  (e.g.  uppercase,bold,underlined  ).  Options  may  have  arguments  (e.g.
       ro,noatime,uid=0,gid=0  ).  It  is  possible  to protect symbols and spaces using quote, double quote and
       backslash (e.g. values='1,2,3,4',equal== )

       stropt This function parses a list of options from the string input. Options can be separated by  commas,
              semicolons,  tabs  oe  new  lines.  Options may have arguments in the form keyword=value. buf is a
              temporary buffer, it must have the same size of the input string (including the NULL  terminator).
              tags  and  args are the resulting arrays of options and arguments respectively. Both tags and args
              have one NULL terminator element at the end. When an option has not an argument the  corresponding
              args  element  is  NULL. For example if input is "font=12,typeface=bodoni,italic", tags[0]="font",
              tags[1]="typeface", tags[2]="italic", tags[4]=NULL, args[0]="12", args[1]="bodoni",  args[0]=NULL,
              args[4]=NULL.

              When  stropt  is  called  with  tags,  args,  and  buf all NULL, it parses the input, counting the
              options. The return value can be used to allocate suitable arrays for tags and args.

              It is possible to use the same variable as input and buffer. In this case the  original  value  of
              input is overwritten.

       stroptx
              This is a more configurable extension of stropt. Arguments having the same names as in stropt have
              the same meaning as explained above.

              The string features permits one to enable/disable some of  the  standard  features.  Each  feature
              corresponds  to  a mnemonic character, when the character is in the features string the feature is
              enabled:

              ': single quoting,

              ": double quoting,

              \: character escape,

              \n:input in several lines,

              =: allow arguments,

              #: support comments.

              If features is NULL all the features are enabled, when features is an empty  string  all  features
              are disabled.

              All  the  characters  included  in  sep  are  considered as option separators. If sep is NULL, the
              default value is " \t;,".

              The flag argument may include the bitwise OR of any of the following flag values:

              STROPTX_KEEP_QUOTATION_MARKS_IN_TAGS: preserve the quotation marks in tags,

              STROPTX_KEEP_QUOTATION_MARKS_IN_ARGS: preserve the quotation marks in args,

              STROPTX_KEEP_QUOTATION_MARKS:     shortcut     for     STROPTX_KEEP_QUOTATION_MARKS_IN_TAGS      |
              STROPTX_KEEP_QUOTATION_MARKS_IN_ARGS

              STROPTX_ALLOW_MULTIPLE_SEP:  when it is not set, a sequence of separators is processed as a single
              separator, when it is set each sequence of two separators means an empty field in between.

              STROPTX_NEWLINE_TAGS: when set each new line is encoded as a tag "\n".

       stropt2buf
              This function re-encodes an array of options (and an array of arguments) in a string.  It  is  the
              inverse  function  of  of  stropt. Given a buffer buf of size size, the array of options tags with
              their corresponding values in the array args is encoded using the separator character sep and  the
              assignment character eq.

              Elements whose option tag (element of tags) value is STROPTX_DELETED_TAG are omitted in output.

       stropt2str
              This  is  the  sibling  function  of stropt2buf. It uses dynamically allocated memory instead of a
              buffer provided by the caller. The resulting string must be deallocated using free(3).

RETURN VALUE

stropt and stroptx return the number of options + 1.

       •   stropt2buf and stropt2str return the resulting string.

EXAMPLES

       The following function lists the option tags and arguments (without modyfying the input string).

           void parse_args(char *input) {
             int tagc = stropt(input, NULL, NULL, NULL);
             if(tagc > 0) {
               char buf[strlen(input)+1];
               char *tags[tagc];
               char *args[tagc];
               stropt(input, tags, args, buf);
               for (int i=0; i<tagc; i++)
                 printf("%s = %s\n",tags[i], args[i]);
             }
           }

       it is possible to use the same input string as the buffer for parsing (the value of the input string gets
       lost in this way).

           void parse_args(char *input) {
             int tagc = stropt(input, NULL, NULL, NULL);
             if(tagc > 0) {
               char *tags[tagc];
               char *args[tagc];
               stropt(input, tags, args, input);
               for (int i=0; i<tagc; i++)
                 printf("%s = %s\n",tags[i], args[i]);
             }
           }

       when options to parse have no arguments, args can be set to NULL.

           void parse_args(char *input) {
             int tagc = stropt(input, NULL, NULL, NULL);
             if(tagc > 0) {
               char buf[strlen(input)+1];
               char *tags[tagc];
               stropt(input, tags, NULL, buf);
               for (int i=0; i<tagc; i++)
                 printf("%s \n",tags[i]);
             }
           }

       The  following complete program parses and re-encode a string of comma separated arguments deleting those
       which begin by an uppercase letter.

           #include <stdio.h>
           #include <ctype.h>
           #include <stdlib.h>
           #include <string.h>
           #include <stropt.h>

           char *delete_uppercase_options(const char *input) {
             int tagc = stroptx(input, "", ",",STROPTX_ALLOW_MULTIPLE_SEP, NULL, NULL, NULL);
             if(tagc > 0) {
               char buf[strlen(input)+1];
               char *tags[tagc];
               int i;
               stroptx(input, "", ",",STROPTX_ALLOW_MULTIPLE_SEP, tags, NULL, buf);
               for (i = 0; i < tagc; i++)
                 if (tags[i] && isupper(tags[i][0]))
                   tags[i] = STROPTX_DELETED_TAG;
               return stropt2str(tags, NULL, ',', '=');
             } else
               return NULL;
           }

           int main(int argc, char *argv[]) {
             if (argc > 1) {
               char *result = delete_uppercase_options(argv[1]);
               printf("%s\n", result);
               free(result);
             }
             return 0;
           }

AUTHOR

       VirtualSquare. Project leader: Renzo Davoli.