Towards 2.1.40.
[yaz-moved-to-github.git] / src / nfa.c
index d00d41a..fe6362e 100644 (file)
--- a/src/nfa.c
+++ b/src/nfa.c
@@ -1,7 +1,7 @@
 /*  Copyright (C) 2006, Index Data ApS
  *  See the file LICENSE for details.
  * 
- *  $Id: nfa.c,v 1.10 2006-07-04 12:59:56 heikki Exp $ 
+ *  $Id: nfa.c,v 1.12 2006-07-14 13:06:38 heikki Exp $ 
  */
 
 /**
@@ -444,7 +444,7 @@ yaz_nfa_converter *yaz_nfa_create_string_converter (
                 yaz_nfa_char *string,
                 size_t length){
     yaz_nfa_converter *c;
-    int i;
+    size_t i;
     c=create_null_converter(n);
     c->type=conv_string;
     c->string=nmem_malloc(n->nmem, length*sizeof(yaz_nfa_char));
@@ -596,7 +596,7 @@ int yaz_nfa_add_ascii_string_rule( yaz_nfa *n,
         nmem_malloc(n->nmem, from_len*sizeof(yaz_nfa_char));
     yaz_nfa_char *to_buf=
         nmem_malloc(n->nmem, to_len*sizeof(yaz_nfa_char));
-    int i;
+    size_t i;
     for (i=0;i<from_len;i++) 
         from_buf[i]=from_string[i];
     for (i=0;i<to_len;i++) 
@@ -748,6 +748,45 @@ void yaz_nfa_dump(FILE *F, yaz_nfa *n,
     }
 }
 
+static char buf[5000]="";
+char *yaz_nfa_dump_converter(void *conv)
+{
+    char onebuf[500]="";
+    yaz_nfa_converter *c=conv;
+    yaz_nfa_char *cp;
+    size_t len;
+    *buf=0;
+    while (c) {
+        switch(c->type) {
+            case conv_none:
+                sprintf(onebuf,"(none)" );
+                break;
+            case conv_string:
+                sprintf(onebuf,"(string '" );
+                strcat(buf,onebuf);
+                cp=c->string;
+                len=c->strlen;
+                while (len--) {
+                    onebuf[0]=*cp++;
+                    onebuf[1]=0;
+                    strcat(buf,onebuf);
+                }
+                strcat(buf,"')");
+                onebuf[0]=0;
+                break;
+            case conv_backref:
+                sprintf(onebuf,"(backref %d) ",c->backref_no);
+                break;
+            case conv_range:
+                sprintf(onebuf,"(range %d) ",c->char_diff);
+                break;
+        }
+        strcat(buf,onebuf);
+        c=c->next;
+    } /* while */
+    return buf;
+}
+
 
 /* 
  * Local variables: