--=-2Lh951dPA2P4JNpiqmF0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hi again, I have a new patch for the XML output of sane-desc:

- Now the XML document have a XML root.
- New tag for the document marked as "new".
- Some bug fixed...

I have being using the XML output for make a perl parser and have all
the information in a sql database so I think the xml is correct.

Bye....


--=-2Lh951dPA2P4JNpiqmF0
Content-Disposition: attachment; filename=sane-desc-xml.patch
Content-Type: text/plain; name=sane-desc-xml.patch; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

--- sane-desc.c Fri Jul  2 10:24:30 2004
+++ sane-desc_new.c     Fri Jul  2 10:24:08 2004
@@ -1,7 +1,7 @@
 /* 
    sane-desc.c -- generate list of supported SANE devices
 
-   Copyright (C) 2002-2004 Henning Meier-Geinitz <henn...@meier-geinitz.de>
+   Copyright (C) 2002, 2003 Henning Meier-Geinitz <henn...@meier-geinitz.de>
 
    This file is part of the SANE package.
 
@@ -21,7 +21,7 @@
    MA 02111-1307, USA.
 */
 
-#define SANE_DESC_VERSION "2.4"
+#define SANE_DESC_VERSION "2.3"
 
 #define MAN_PAGE_LINK "http://www.sane-project.org/man/%s.5.html";
 #define COLOR_MINIMAL      "\"#B00000\""
@@ -261,14 +261,14 @@
 print_version (void)
 {
   printf ("sane-desc %s (%s)\n", SANE_DESC_VERSION, PACKAGE_STRING);
-  printf ("Copyright (C) 2002-2004 Henning Meier-Geinitz "
+  printf ("Copyright (C) 2002 Henning Meier-Geinitz "
          "<henn...@meier-geinitz.de>\n"
          "sane-desc comes with NO WARRANTY, to the extent permitted by "
          "law.\n"
          "You may redistribute copies of sane-desc under the terms of the "
          "GNU General\n"
          "Public License.\n"
-         "For more information about these matters, see the file named "
+         "For more information about these matters, see the files named "
          "COPYING.\n");
 }
 
@@ -1615,6 +1615,51 @@
     }                          /* while (be) */
 }
 
+
+static char *
+clean_string(char *c)
+{
+  /*not avoided characters*/
+
+  char *aux;
+  
+  
+  aux=malloc(strlen(c)*sizeof(char)+100);
+  *aux='\0';
+
+  while (*c!='\0')
+    {
+      
+      switch (*c)
+       {
+       case '<':
+         aux=strcat(aux,"&lt;");
+         break;
+       case '>':
+         aux=strcat(aux,"&gt;");
+         break;
+       case '¡':
+         aux=strcat(aux,"!");
+         break;          
+       case '¿':
+         aux=strcat(aux,"?");
+         break;          
+       case '\'':
+         aux=strcat(aux,"&apos;");
+         break;          
+       case '&':
+         aux=strcat(aux,"&amp;");
+         break;          
+       default:
+         aux=strncat(aux,c,1);
+       }
+     
+    
+      c=c+1;
+    }
+  return aux;
+}
+
 /* Print an XML list with all the information we have */
 static void 
 xml_print_backends (void)
@@ -1622,82 +1667,88 @@
   backend_entry *be;
 
   be = first_backend;
+  printf("<backends>\n");
   while (be) 
     {
       url_entry *url = be->url;
       type_entry *type = be->type;
 
+      clean_string(be->name);
       if (be->name)
-       printf ("<backend name=\"%s\">\n",be->name);
+       printf ("<backend name=\"%s\">\n",clean_string(be->name));
       else
        printf ("<backend name=\"*none\">\n");
 
       if (be->version)
-       printf ("<version>%s</version> \n", be->version);
+       printf ("<version>%s</version> \n", clean_string(be->version));
       else
        printf ("<version>*none*</version>\n");
 
-      if (be->new)
-       printf (" NEW!\n");
+     if (be->new)
+       printf ("<new state=\"yes\"/>\n");
+     else      
+       printf ("<new state=\"no\"/>\n");
+       
 
       if (be->manpage)
-       printf (" <manpage>%s</manpage>\n", be->manpage);
+       printf (" <manpage>%s</manpage>\n", clean_string(be->manpage));
       else
        printf (" <manpage>*none*</manpage>\n");
 
       if (url)
        while (url)
          {
-           printf (" <url>%s</url>\n", url->name);
+           printf (" <url>%s</url>\n", clean_string(url->name));
            url = url->next;
          }
       else
        printf (" <url>*none*</url>\n");
 
       if (be->comment)
-       printf (" <comment>%s</comment>\n", be->comment);
+       printf (" <comment>%s</comment>\n", clean_string(be->comment));
       else
        printf (" <comment>*none*</comment>\n");
 
       if (type)
        while (type)
          {
+           
            switch (type->type)
              {
              case type_scanner:
-               printf (" <type>scanner</type>\n");
+               printf (" <type def=\"scanner\">\n");
                break;
              case type_stillcam:
-               printf (" <type>stillcam</type>\n");
+               printf (" <type def=\"stillcam\">\n");
                break;
              case type_vidcam:
-               printf (" <type>vidcam </type>\n");
+               printf (" <type def=\"vidcam\">\n");
                break;
              case type_meta:
-               printf (" <type>meta</type>\n");
+               printf (" <type def=\"meta\">\n");
                break;
              case type_api:
-               printf (" <type>api</type>\n");
+               printf (" <type def=\"api\">\n");
                break;
              default:
-               printf (" <type> *unknown* </type>\n");
+               printf (" <type def=\"*unknown*\">\n");
                break;
              }
            if (type->desc)
              {
                url_entry *url = type->desc->url;
-               printf ("  <desc>%s</desc>\n", type->desc->desc);
+               printf ("   <desc>%s</desc>\n", clean_string(type->desc->desc));
                if (url)
                  while (url)
                    {
-                     printf ("  <url>%s</url>\n", url->name);
+                     printf ("   <url>%s</url>\n", clean_string(url->name));
                      url = url->next;
                    }
                else
                  printf ("   <url>*none*</url>\n");
 
                if (type->desc->comment)
-                 printf ("   <comment>%s</comment>\n", type->desc->comment);
+                 printf ("   
<comment>%s</comment>\n",clean_string(type->desc->comment));
                else
                  printf ("   <comment>*none*</comment>\n");
              }
@@ -1712,18 +1763,18 @@
                    model_entry *model = mfg->model;
                    url_entry *url = mfg->url;
 
-                   printf (" <mfg name=\"%s\">\n", mfg->name);
+                   printf (" <mfg name=\"%s\">\n", clean_string(mfg->name));
                    if (url)
                      while (url)
                        {
-                         printf ("  <url>`%s'</url>\n", url->name);
+                         printf ("  <url>`%s'</url>\n", 
clean_string(url->name));
                          url = url->next;
                        }
                    else
                      printf ("  <url>*none*</url>\n");
 
                    if (mfg->comment)
-                     printf ("  <comment>%s</comment>\n", mfg->comment);
+                     printf ("  <comment>%s</comment>\n", 
clean_string(mfg->comment));
                    else
                      printf ("  <comment>*none*</comment>\n");
 
@@ -1731,9 +1782,9 @@
                      while (model)
                        {
                          url_entry *url = model->url;
-                         printf ("   <model name=\"%s\">\n", model->name);
+                         printf ("   <model 
name=\"%s\">\n",clean_string(model->name));
                          if (model->interface)
-                           printf ("    <interface>%s</interface>\n", 
model->interface);
+                           printf ("    <interface>%s</interface>\n", 
clean_string(model->interface));
                          else
                            printf ("    <interface>*none*</interface>\n");
 
@@ -1767,14 +1818,14 @@
                          if (url)
                            while (url)
                              {
-                               printf ("    <url>%s</url>\n", url->name);
+                               printf ("    <url>%s</url>\n", 
clean_string(url->name));
                                url = url->next;
                              }
                          else
                            printf ("    <url>*none*</url>\n");
 
                          if (model->comment)
-                           printf ("    <comment>%s</comment>\n", 
model->comment);
+                           printf ("    <comment>%s</comment>\n", 
clean_string(model->comment));
                          else
                            printf ("    <comment>*none*</comment>\n");
 
@@ -1791,6 +1842,7 @@
            else if (type->type < type_meta)
              printf ("  <mfg>*none*</mfg>\n");
            type = type->next;
+           printf(" </type>\n");
          }                     /* while (type) */
       else
        printf (" <type>*none*</type>\n");
@@ -1798,8 +1850,8 @@
       be = be->next;
 
     }                          /* while (be) */
+  printf("</backends>\n");
 }
-
 
 
 /* Generate a name used for <a name=...> HTML tags */

--=-2Lh951dPA2P4JNpiqmF0--


Reply via email to