Improve display of MARC records with multi-byte subfield IDs YAZ-695
authorAdam Dickmeiss <adam@indexdata.dk>
Fri, 27 Sep 2013 13:12:33 +0000 (15:12 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Fri, 27 Sep 2013 13:12:33 +0000 (15:12 +0200)
In some rare cases subfield identifiers are multi-byte characters.
This will try to deterime length of those and split accordingly.
This affects display in line mode as MARCXML/MarcXchange. The encoding
of ISO2709 is the same.

src/marcdisp.c

index 12ecb38..ad9eed6 100644 (file)
@@ -464,6 +464,15 @@ static size_t cdata_one_character(yaz_marc_t mt, const char *buf)
         }
         return 1; /* giving up */
     }
+    else
+    {
+        int error = 0;
+        size_t no_read = 0;
+        (void) yaz_read_UTF8_char((const unsigned char *) buf, strlen(buf),
+                                  &no_read, &error);
+        if (error == 0 && no_read > 0)
+            return no_read;
+    }
     return 1; /* we don't know */
 }