You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@corinthia.apache.org by gb...@apache.org on 2015/05/23 01:20:19 UTC

incubator-corinthia git commit: Tables, headers, lists, bold, italic, underline.

Repository: incubator-corinthia
Updated Branches:
  refs/heads/odf-filter-attempt2 f60c7ce9c -> 295caa80b


Tables, headers, lists, bold, italic, underline.

Tables, headers and lists are working albeit in a very rudimentary
fashion.

Regards bold, italic and underline, nothing is what I expected --
everything seems to be out of sync.

I expected a node list of the shape:

HTML_I
DOM_TEXT
HTML_B
DOM_TEXT
...

Where I am assuming that eventually the HTML tag is used to wrap the
next DOM_TEXT up, with something of the shape like:
<i>DOM_TEXT</i>
<b>DOM_TEXT</b>
...

But nodes get produced that do not seem to have this ordering.

-----------------------------------------------------------
Code changes:
-----------------------------------------------------------

  Personal small samples this code should cover (mostly):

* sample/documents/odf/Table.odt
* sample/documents/odf/bold-italic-underlined.odt
* sample/documents/odf/headers.odt
* sample/documents/odf/lists.odt

* .gitignore
  Add emacs and patch exclusions.

* CMakeLists.txt
  Add -DCOLOR=1 to gcc cmd, so I can read the long output easier.
  Colors will be removed again, but it makes it much easier to spot
  things (for me)

* DocFormats/core/src/xml/DFNameMap.c

  Reason: Needed to access DFNameMap but could not do so because it
  was defined inside this file.  Move to the header file.

  (HASH_TABLE_SIZE): Remove.
  (DFNameEntry): Remove.
  (DFNameHashTable): Remove.
  (DFNameMap): Remove.

* DocFormats/core/src/xml/DFNameMap.h
  (HASH_TABLE_SIZE): Add.
  (DFNameEntry): Add.
  (DFNameHashTable): Add.
  (DFNameMap): Add..

* DocFormats/filters/odf/CMakeLists.txt
  (set): Add temporary color.* files.

* DocFormats/filters/odf/src/text/ODFText.c
  (ODFTextGet): Put in a better structure.

* DocFormats/filters/odf/src/text/color.h
* DocFormats/filters/odf/src/text/color.c

  ANSI colors for easier debugging of long lists of text.

* DocFormats/filters/odf/src/text/gbg_test.c
  (#include) "DFNameMap.h"

  (find_HTML): Add lots of switch cases and a structure that reports
    missing tags and prints them as ready code to stdout.

  (show_nodes): dev tool -- print all the nodes.

  (print_node_info): dev tool -- print everything possible about a node.

  (node_id_info): dev tool -- print minimalist info about a node.

  (missing_tag_info): dev tool -- create minimalist char* about a
    missing node.

  (print_line): dev tool -- 3 styles of printed lines, to make
     recognition easier.

* DocFormats/filters/odf/src/text/gbg_test.h

  (#define) TAG_NOT_FOUND:   New tag that has never been seen before.
            TAG_NOT_MATCHED: Known tag that has no HTML match yet.

  (various): prototype definitions for gbg_test.c


Project: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/commit/295caa80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/tree/295caa80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-corinthia/diff/295caa80

Branch: refs/heads/odf-filter-attempt2
Commit: 295caa80be4cfc37e0e7bdd4aa3fcc6ad7b1a1b6
Parents: f60c7ce
Author: Gabriela Gibson <gb...@apache.org>
Authored: Sat May 23 00:21:12 2015 +0100
Committer: Gabriela Gibson <gb...@apache.org>
Committed: Sat May 23 00:21:12 2015 +0100

----------------------------------------------------------------------
 .gitignore                                      |   5 +
 CMakeLists.txt                                  |   3 +-
 DocFormats/core/src/xml/DFNameMap.c             |  25 -
 DocFormats/core/src/xml/DFNameMap.h             |  37 +-
 DocFormats/filters/odf/CMakeLists.txt           |   1 +
 DocFormats/filters/odf/src/text/ODFText.c       |  61 +-
 DocFormats/filters/odf/src/text/color.c         |  31 +
 DocFormats/filters/odf/src/text/color.h         |  26 +-
 DocFormats/filters/odf/src/text/gbg_test.c      | 584 ++++++++-----------
 DocFormats/filters/odf/src/text/gbg_test.h      |  31 +-
 sample/documents/odf/Table.odt                  | Bin 0 -> 8998 bytes
 sample/documents/odf/bold-italic-underlined.odt | Bin 0 -> 8975 bytes
 sample/documents/odf/headers.odt                | Bin 0 -> 9780 bytes
 sample/documents/odf/lists.odt                  | Bin 0 -> 9506 bytes
 14 files changed, 407 insertions(+), 397 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 3d66e2c..f5c656a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -196,6 +196,11 @@ ClientBin/
 *.pfx
 *.publishsettings
 node_modules/
+TAGS
+*.patch
+
+# Emacs
+*#*
 
 # RIA/Silverlight projects
 Generated_Code/

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3fdf6ca..09d1df0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,7 +36,8 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 
 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
-    set(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -g -fPIC")
+    set(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -g -fPIC -DCOLOR_ON=1")
+###    set(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -g -fPIC ")
     set(LIBS ${LIBS} m pthread xml2 z SDL2 SDL2_image)
 endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/core/src/xml/DFNameMap.c
----------------------------------------------------------------------
diff --git a/DocFormats/core/src/xml/DFNameMap.c b/DocFormats/core/src/xml/DFNameMap.c
index eb5d868..9f37868 100644
--- a/DocFormats/core/src/xml/DFNameMap.c
+++ b/DocFormats/core/src/xml/DFNameMap.c
@@ -33,20 +33,6 @@ static void NameMap_staticInit();
 //                                                                                                //
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-#define HASH_TABLE_SIZE 983
-
-typedef struct DFNameEntry {
-    char *name;
-    char *URI;
-    Tag tag;
-    unsigned int namespaceID;
-    TagDecl tagDecl;
-    struct DFNameEntry *next;
-} DFNameEntry;
-
-typedef struct DFNameHashTable {
-    DFNameEntry *bins[HASH_TABLE_SIZE];
-} DFNameHashTable;
 
 static uint32_t DFNameHashTableHash(const char *name, const char *URI)
 {
@@ -182,17 +168,6 @@ DFNameHashTable *defaultTagsByNameURI = NULL;
 static void DFNameMapAddNamespace(DFNameMap *map, NamespaceID nsId, const char *URI, const char *prefix);
 
 
-struct DFNameMap {
-    DFHashTable *namespacesByID;  // NSNumber -> NamespaceInfo
-    DFHashTable *namespacesByURI; // NSString -> NamespaceInfo
-    DFHashTable *tagsByID;        // NSNumber -> TagInfo
-
-
-    DFNameHashTable *localTagsByNameURI;
-    NamespaceID nextNamespaceId;
-    Tag nextTag;
-};
-
 DFNameMap *DFNameMapNew(void)
 {
     DFNameMap *map = (DFNameMap *)xcalloc(1,sizeof(DFNameMap));

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/core/src/xml/DFNameMap.h
----------------------------------------------------------------------
diff --git a/DocFormats/core/src/xml/DFNameMap.h b/DocFormats/core/src/xml/DFNameMap.h
index 1a8c76b..6348631 100644
--- a/DocFormats/core/src/xml/DFNameMap.h
+++ b/DocFormats/core/src/xml/DFNameMap.h
@@ -20,6 +20,7 @@
 
 #include "DFXMLNamespaces.h"
 #include "DFXMLNames.h"
+#include "DFHashTable.h" 
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 //                                                                                                //
@@ -27,8 +28,40 @@
 //                                                                                                //
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-/** TODO */
-typedef struct DFNameMap DFNameMap;
+
+/** TODO ...? :)  (1i: Maybe done?)
+*
+* 1i: Moved this section from DFNameMap.c
+*/
+#define HASH_TABLE_SIZE 983  // 1i: why is this not in DFHashTable.h?
+
+typedef struct DFNameEntry {
+    char *name;
+    char *URI;
+    Tag tag;
+    unsigned int namespaceID;
+    TagDecl tagDecl;
+    struct DFNameEntry *next;
+} DFNameEntry;
+
+typedef struct DFNameHashTable {
+    DFNameEntry *bins[HASH_TABLE_SIZE];
+} DFNameHashTable;
+
+typedef struct DFNameMap DFNameMap; // 1i: this was here already.
+
+struct DFNameMap {
+    DFHashTable *namespacesByID;  // NSNumber -> NamespaceInfo
+    DFHashTable *namespacesByURI; // NSString -> NamespaceInfo
+    DFHashTable *tagsByID;        // NSNumber -> TagInfo
+
+
+    DFNameHashTable *localTagsByNameURI;
+    NamespaceID nextNamespaceId;
+    Tag nextTag;
+};
+
+/* 1i: end of move section */
 
 DFNameMap *DFNameMapNew(void);
 void DFNameMapFree(DFNameMap *map);

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/CMakeLists.txt b/DocFormats/filters/odf/CMakeLists.txt
index af02635..521b915 100644
--- a/DocFormats/filters/odf/CMakeLists.txt
+++ b/DocFormats/filters/odf/CMakeLists.txt
@@ -27,6 +27,7 @@ set(GroupSrc
 
 set(GroupSrcText
     src/text/color.h
+    src/text/color.c
     src/text/gbg_test.h
     src/text/gbg_test.c
     src/text/ODFText.h

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/src/text/ODFText.c
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/src/text/ODFText.c b/DocFormats/filters/odf/src/text/ODFText.c
index 7749b9c..4ef0068 100644
--- a/DocFormats/filters/odf/src/text/ODFText.c
+++ b/DocFormats/filters/odf/src/text/ODFText.c
@@ -35,25 +35,42 @@ typedef struct {
     DFHashTable *htmlIdByNumId;
 } ODFPutData;
 
+// I'm not sure what ODFTextConverter ise used here for.  
 static void traverseContent(ODFTextConverter *conv, DFNode *odfNode, DFNode *htmlNode)
 {
-    DFNode *child;
-
     for (DFNode *odfChild = odfNode->first; odfChild != NULL; odfChild = odfChild->next) {
-        if (odfChild->tag == 2) { // we have some text here.
-            child = DFCreateChildElement(htmlNode, odfChild->tag);
-            child->value = xstrdup(odfChild->value);
+
+        if (odfChild->tag == DOM_TEXT) { // we have some text or a text modfier here.
+            // DFNode *check = 
+            DFCreateChildTextNode(htmlNode, odfChild->value);
+            printf(YELLOW "DOM_TEXT: %s \n" RESET,
+                   odfChild->value
+                   );
+
+            // print_node_info(check);
+            // print_line(1);          
         }
         else {
-            Tag newTag = locate_HTML(odfChild);
-            if (newTag) {  // we find an already mapped ODF -> HTML tag
-                child = DFCreateChildElement(htmlNode, newTag);
+            Tag newTag = find_HTML(odfChild, htmlNode);
+            if (newTag == TAG_NOT_FOUND) {
+                // We found a new tag that we need to add to
+                // find_HTML(), which reports this to stdout
+                // currently.
+                ; 
+            }
+            else if (newTag == TAG_NOT_MATCHED) {  
+                // we find tag that we have not managed to match, but
+                // that is in find_HTML() already.
+
+                DFCreateChildTextNode(htmlNode, missing_tag_info(odfChild));
+                ;
+            }
+            else if (!newTag) {
+                ;  // we added an attribute node already in find_HTML (for now)
+                // DFNode *newChild =  DFCreateChildElement(htmlNode, newTag);
             }
-            else {  // We found a missing tag
-                child = DFCreateChildElement(htmlNode, 0);
-                child->value = printMissingTag(odfChild->tag);
-                if (odfChild->attrs)
-                    DFSetAttribute(child, odfChild->attrs->tag, odfChild->attrs->value);
+            else {
+                DFCreateChildElement(htmlNode, newTag);
             }
         }
         traverseContent(conv,odfChild,htmlNode);
@@ -80,20 +97,34 @@ DFDocument *ODFTextGet(DFStorage *concreteStorage, DFStorage *abstractStorage, c
     body = DFCreateChildElement(html->root, HTML_BODY);
     conv = ODFTextConverterNew(html, abstractStorage, package, idPrefix);
 
+    printf(YELLOW
+           "============================================================\n"
+           "Showing ODF nodes prior to the traverseContent function\n"
+           "============================================================\n"
+           RESET);
+
+    show_nodes(package->contentDoc->root);
+    
+    print_line(2);
+    print_line(2);
+    print_line(2);
+
     // TODO: Traverse the DOM tree of package->contentDoc, adding elements to the HTML document.
     // contentDoc is loaded from content.xml, and represents the most important information in
     // the document, i.e. the text, tables, lists, etc.
 
     traverseContent(conv, package->contentDoc->root, body);
 
-    printf(GREEN 
+    // uncomment to see the result. (spammy!)
+    printf(GREEN
            "============================================================\n"
-           "Showing the result of the traverseContent function\n"
+           "Showing HTML nodes after the traverseContent function\n"
            "============================================================\n"
            RESET);
 
     show_nodes(body);
 
+
     // TODO: Once this basic traversal is implemented and is capable of producing paragraphs,
     // tables, lists, and spans, add ids to the HTML elements as they are created. That is, set
     // the id attribute of each new HTML element to a string containing the idPrefix followed by

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/src/text/color.c
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/src/text/color.c b/DocFormats/filters/odf/src/text/color.c
new file mode 100644
index 0000000..993cffd
--- /dev/null
+++ b/DocFormats/filters/odf/src/text/color.c
@@ -0,0 +1,31 @@
+#include "color.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+char *show_color(char *color, const char* str)
+{
+    char *r;
+    if (COLOR_ON) {
+        size_t len = strlen (str) + 2 * COLOR_SIZEOF + 1;
+        r = malloc(len);
+        snprintf (r, len, "%s%s%s", color, str, RESET);
+    }
+    else {
+        size_t len = strlen (str) + 1;
+        r = malloc(len);
+        snprintf (r, len, "%s",  str);
+    }
+
+    return r;
+}
+
+char *red(const char *str) { return show_color(RED, str); }
+char *blue(const char *str) { return show_color(BLUE, str); }
+char *green(const char *str) { return show_color(GREEN, str); }
+char *yellow(const char *str) { return show_color(YELLOW, str); }
+char *cyan(const char *str) { return show_color(CYAN, str); }
+char *magenta(const char *str) { return show_color(MAGENTA, str); }
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/src/text/color.h
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/src/text/color.h b/DocFormats/filters/odf/src/text/color.h
index d82d5ef..3dc3b69 100644
--- a/DocFormats/filters/odf/src/text/color.h
+++ b/DocFormats/filters/odf/src/text/color.h
@@ -1,5 +1,19 @@
 #ifndef __COLOR_H
 #define __COLOR_H
+//
+#ifndef COLOR_ON
+#define COLOR_ON 0
+#define RED     ""
+#define GREEN   ""
+#define YELLOW  ""
+#define BLUE    ""
+#define MAGENTA ""
+#define CYAN    ""
+#define RESET   ""
+#define COLOR_SIZEOF 0
+//  
+#else // let's light the X-mas tree!
+//
 #define RED     "\x1b[31m"
 #define GREEN   "\x1b[32m"
 #define YELLOW  "\x1b[33m"
@@ -7,4 +21,14 @@
 #define MAGENTA "\x1b[35m"
 #define CYAN    "\x1b[36m"
 #define RESET   "\x1b[0m"
-#endif
+#define COLOR_SIZEOF 8  
+#endif // COLOR_ON
+//
+#endif // __COLOR_H
+
+char *red(const char *str);
+char *blue(const char *str);
+char *green(const char *str);
+char *yellow(const char *str);
+char *cyan(const char *str);
+char *magenta(const char *str);

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/src/text/gbg_test.c
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/src/text/gbg_test.c b/DocFormats/filters/odf/src/text/gbg_test.c
index 41abd91..fae6c42 100644
--- a/DocFormats/filters/odf/src/text/gbg_test.c
+++ b/DocFormats/filters/odf/src/text/gbg_test.c
@@ -7,373 +7,289 @@
 #include <string.h>
 #include <stdlib.h>
 #include "DFXMLNames.h"
+#include "DFNameMap.h"
 #include "color.h"
 #include "gbg_test.h"
 
-#define HTML_VARIOUS 4444444 // one ODF key mapping to various HTML keys
-#define ENDMARKER 555555
-ODF_to_HTML_key ODF_to_HTML_keys [] = {
-    { 1, HTML_A, no_op},
-    { 1, HTML_ABBR, no_op},
-    { 1, HTML_ABOUT, no_op},
-    { 1, HTML_ACCEPT, no_op},
-    { 1, HTML_ACCEPT_CHARSET, no_op},
-    { 1, HTML_ACCESSKEY, no_op},
-    { 1, HTML_ACTION, no_op},
-    { 1, HTML_ADDRESS, no_op},
-    { 1, HTML_ALT, no_op},
-    { 1, HTML_AREA, no_op},
-    { 1, HTML_ARTICLE, no_op},
-    { 1, HTML_ASIDE, no_op},
-    { 1, HTML_ASYNC, no_op},
-    { 1, HTML_AUDIO, no_op},
-    { 1, HTML_AUTOCOMPLETE, no_op},
-    { 1, HTML_AUTOFOCUS, no_op},
-    { 1, HTML_AUTOPLAY, no_op},
-    { 1, HTML_B, no_op},
-    { 1, HTML_BASE, no_op},
-    { 1, HTML_BDI, no_op},
-    { 1, HTML_BDO, no_op},
-    { 1, HTML_BLOCKQUOTE, no_op},
-    { OFFICE_BODY, HTML_BODY, no_op },
-    { 1, HTML_BR, no_op },
-    { 1, HTML_BUTTON, no_op},
-    { 1, HTML_CANVAS, no_op},
-    { 1, HTML_CAPTION, no_op},
-    { 1, HTML_CHALLENGE, no_op},
-    { 1, HTML_CHARSET, no_op},
-    { 1, HTML_CHECKED, no_op},
-    { 1, HTML_CITE, no_op},
-    { 1, HTML_CLASS, no_op},
-    { 1, HTML_CODE, no_op},
-    { 1, HTML_COL, no_op},
-    { 1, HTML_COLGROUP, no_op},
-    { 1, HTML_COLS, no_op},
-    { 1, HTML_COLSPAN, no_op},
-    { 1, HTML_COMMAND, no_op},
-    { 1, HTML_CONTENT, no_op},
-    { 1, HTML_CONTENTEDITABLE, no_op},
-    { 1, HTML_CONTEXTMENU, no_op},
-    { 1, HTML_CONTROLS, no_op},
-    { 1, HTML_COORDS, no_op},
-    { 1, HTML_CROSSORIGIN, no_op},
-    { 1, HTML_DATA, no_op},
-    { 1, HTML_DATALIST, no_op},
-    { 1, HTML_DATATYPE, no_op},
-    { 1, HTML_DATETIME, no_op},
-    { 1, HTML_DD, no_op},
-    { 1, HTML_DEFAULT, no_op},
-    { 1, HTML_DEFER, no_op},
-    { 1, HTML_DEL, no_op},
-    { 1, HTML_DETAILS, no_op},
-    { 1, HTML_DFN, no_op},
-    { 1, HTML_DIALOG, no_op},
-    { 1, HTML_DIR, no_op},
-    { 1, HTML_DIRNAME, no_op},
-    { 1, HTML_DISABLED, no_op},
-    { 1, HTML_DIV, no_op},
-    { 1, HTML_DL, no_op},
-    { 1, HTML_DOWNLOAD, no_op},
-    { 1, HTML_DRAGGABLE, no_op},
-    { 1, HTML_DROPZONE, no_op},
-    { 1, HTML_DT, no_op},
-    { 1, HTML_EM, no_op},
-    { 1, HTML_EMBED, no_op},
-    { 1, HTML_EMBED, no_op},
-    { 1, HTML_ENCTYPE, no_op},
-    { 1, HTML_FIELDSET, no_op},
-    { 1, HTML_FIGCAPTION, no_op},
-    { 1, HTML_FIGURE, no_op},
-    { 1, HTML_FOOTER, no_op},
-    { 1, HTML_FOR, no_op},
-    { 1, HTML_FORM, no_op},
-    { 1, HTML_FORMACTION, no_op},
-    { 1, HTML_FORMENCTYPE, no_op},
-    { 1, HTML_FORMMETHOD, no_op},
-    { 1, HTML_FORMNOVALIDATE, no_op},
-    { 1, HTML_FORMTARGET, no_op},
-    { TEXT_H, HTML_VARIOUS, text_h },
-    { 1, HTML_HEAD, no_op},
-    { 1, HTML_HEADER, no_op},
-    { 1, HTML_HEADERS, no_op},
-    { 1, HTML_HEIGHT, no_op},
-    { 1, HTML_HGROUP, no_op},
-    { 1, HTML_HIDDEN, no_op},
-    { 1, HTML_HIGH, no_op},
-    { 1, HTML_HR, no_op},
-    { 1, HTML_HREF, no_op},
-    { 1, HTML_HREFLANG, no_op},
-    { 1, HTML_HTML, no_op},
-    { 1, HTML_HTTP_EQUIV, no_op},
-    { 1, HTML_I, no_op},
-    { 1, HTML_ICON, no_op},
-    { 1, HTML_ID, no_op},
-    { 1, HTML_IFRAME, no_op},
-    { 1, HTML_IMG, no_op},
-    { 1, HTML_INERT, no_op},
-    { 1, HTML_INPUT, no_op},
-    { 1, HTML_INPUTMODE, no_op},
-    { 1, HTML_INS, no_op},
-    { 1, HTML_ISMAP, no_op},
-    { 1, HTML_ITEMID, no_op},
-    { 1, HTML_ITEMPROP, no_op},
-    { 1, HTML_ITEMREF, no_op},
-    { 1, HTML_ITEMSCOPE, no_op},
-    { 1, HTML_ITEMTYPE, no_op},
-    { 1, HTML_KBD, no_op},
-    { 1, HTML_KEYGEN, no_op},
-    { 1, HTML_KEYTYPE, no_op},
-    { 1, HTML_KIND, no_op},
-    { 1, HTML_LABEL, no_op},
-    { 1, HTML_LANG, no_op},
-    { 1, HTML_LEGEND, no_op},
-    { 1, HTML_LI, no_op},
-    { 1, HTML_LINK, no_op},
-    { 1, HTML_LIST, no_op},
-    { 1, HTML_LOOP, no_op},
-    { 1, HTML_LOW, no_op},
-    { 1, HTML_MANIFEST, no_op},
-    { 1, HTML_MAP, no_op},
-    { 1, HTML_MARK, no_op},
-    { 1, HTML_MAX, no_op},
-    { 1, HTML_MAXLENGTH, no_op},
-    { 1, HTML_MEDIA, no_op},
-    { 1, HTML_MEDIAGROUP, no_op},
-    { 1, HTML_MENU, no_op},
-    { 1, HTML_META, no_op},
-    { 1, HTML_METER, no_op},
-    { 1, HTML_METHOD, no_op},
-    { 1, HTML_MIN, no_op},
-    { 1, HTML_MULTIPLE, no_op},
-    { 1, HTML_MUTED, no_op},
-    { 1, HTML_NAME, no_op},
-    { 1, HTML_NAV, no_op},
-    { 1, HTML_NOSCRIPT, no_op},
-    { 1, HTML_NOVALIDATE, no_op},
-    { 1, HTML_OBJECT, no_op},
-    { 1, HTML_OL, no_op},
-    { 1, HTML_ONABORT, no_op},
-    { 1, HTML_ONAFTERPRINT, no_op},
-    { 1, HTML_ONBEFOREPRINT, no_op},
-    { 1, HTML_ONBEFOREUNLOAD, no_op},
-    { 1, HTML_ONBLUR, no_op},
-    { 1, HTML_ONCANCEL, no_op},
-    { 1, HTML_ONCANPLAY, no_op},
-    { 1, HTML_ONCANPLAYTHROUGH, no_op},
-    { 1, HTML_ONCHANGE, no_op},
-    { 1, HTML_ONCLICK, no_op},
-    { 1, HTML_ONCLOSE, no_op},
-    { 1, HTML_ONCONTEXTMENU, no_op},
-    { 1, HTML_ONCUECHANGE, no_op},
-    { 1, HTML_ONDBLCLICK, no_op},
-    { 1, HTML_ONDRAG, no_op},
-    { 1, HTML_ONDRAGEND, no_op},
-    { 1, HTML_ONDRAGENTER, no_op},
-    { 1, HTML_ONDRAGLEAVE, no_op},
-    { 1, HTML_ONDRAGOVER, no_op},
-    { 1, HTML_ONDRAGSTART, no_op},
-    { 1, HTML_ONDROP, no_op},
-    { 1, HTML_ONDURATIONCHANGE, no_op},
-    { 1, HTML_ONEMPTIED, no_op},
-    { 1, HTML_ONENDED, no_op},
-    { 1, HTML_ONERROR, no_op},
-    { 1, HTML_ONFOCUS, no_op},
-    { 1, HTML_ONHASHCHANGE, no_op},
-    { 1, HTML_ONINPUT, no_op},
-    { 1, HTML_ONINVALID, no_op},
-    { 1, HTML_ONKEYDOWN, no_op},
-    { 1, HTML_ONKEYPRESS, no_op},
-    { 1, HTML_ONKEYUP, no_op},
-    { 1, HTML_ONLOAD, no_op},
-    { 1, HTML_ONLOADEDDATA, no_op},
-    { 1, HTML_ONLOADEDMETADATA, no_op},
-    { 1, HTML_ONLOADSTART, no_op},
-    { 1, HTML_ONMESSAGE, no_op},
-    { 1, HTML_ONMOUSEDOWN, no_op},
-    { 1, HTML_ONMOUSEMOVE, no_op},
-    { 1, HTML_ONMOUSEOUT, no_op},
-    { 1, HTML_ONMOUSEOVER, no_op},
-    { 1, HTML_ONMOUSEUP, no_op},
-    { 1, HTML_ONMOUSEWHEEL, no_op},
-    { 1, HTML_ONOFFLINE, no_op},
-    { 1, HTML_ONONLINE, no_op},
-    { 1, HTML_ONPAGEHIDE, no_op},
-    { 1, HTML_ONPAGESHOW, no_op},
-    { 1, HTML_ONPAUSE, no_op},
-    { 1, HTML_ONPLAY, no_op},
-    { 1, HTML_ONPLAYING, no_op},
-    { 1, HTML_ONPOPSTATE, no_op},
-    { 1, HTML_ONPROGRESS, no_op},
-    { 1, HTML_ONRATECHANGE, no_op},
-    { 1, HTML_ONRESET, no_op},
-    { 1, HTML_ONRESIZE, no_op},
-    { 1, HTML_ONSCROLL, no_op},
-    { 1, HTML_ONSEEKED, no_op},
-    { 1, HTML_ONSEEKING, no_op},
-    { 1, HTML_ONSELECT, no_op},
-    { 1, HTML_ONSHOW, no_op},
-    { 1, HTML_ONSTALLED, no_op},
-    { 1, HTML_ONSTORAGE, no_op},
-    { 1, HTML_ONSUBMIT, no_op},
-    { 1, HTML_ONSUSPEND, no_op},
-    { 1, HTML_ONTIMEUPDATE, no_op},
-    { 1, HTML_ONUNLOAD, no_op},
-    { 1, HTML_ONVOLUMECHANGE, no_op},
-    { 1, HTML_ONWAITING, no_op},
-    { 1, HTML_OPEN, no_op},
-    { 1, HTML_OPTGROUP, no_op},
-    { 1, HTML_OPTIMUM, no_op},
-    { 1, HTML_OPTION, no_op},
-    { 1, HTML_OUTPUT, no_op},
-    { TEXT_P, HTML_P, no_op},
-    { 1, HTML_PARAM, no_op},
-    { 1, HTML_PATTERN, no_op},
-    { 1, HTML_PING, no_op},
-    { 1, HTML_PLACEHOLDER, no_op},
-    { 1, HTML_POSTER, no_op},
-    { 1, HTML_PRE, no_op},
-    { 1, HTML_PRELOAD, no_op},
-    { 1, HTML_PROGRESS, no_op},
-    { 1, HTML_PROPERTY, no_op},
-    { 1, HTML_Q, no_op},
-    { 1, HTML_RADIOGROUP, no_op},
-    { 1, HTML_READONLY, no_op},
-    { 1, HTML_REL, no_op},
-    { 1, HTML_REQUIRED, no_op},
-    { 1, HTML_REVERSED, no_op},
-    { 1, HTML_ROWS, no_op},
-    { 1, HTML_ROWSPAN, no_op},
-    { 1, HTML_RP, no_op},
-    { 1, HTML_RT, no_op},
-    { 1, HTML_RUBY, no_op},
-    { 1, HTML_S, no_op},
-    { 1, HTML_SAMP, no_op},
-    { 1, HTML_SANDBOX, no_op},
-    { 1, HTML_SCOPE, no_op},
-    { 1, HTML_SCOPED, no_op},
-    { OFFICE_SCRIPT, HTML_SCRIPT, no_op},
-    { 1, HTML_SEAMLESS, no_op},
-    { 1, HTML_SECTION, no_op},
-    { 1, HTML_SELECT, no_op},
-    { 1, HTML_SELECTED, no_op},
-    { 1, HTML_SHAPE, no_op},
-    { 1, HTML_SIZE, no_op},
-    { 1, HTML_SIZES, no_op},
-    { 1, HTML_SMALL, no_op},
-    { 1, HTML_SOURCE, no_op},
-    { 1, HTML_SPAN, no_op},
-    { 1, HTML_SPELLCHECK, no_op},
-    { 1, HTML_SRC, no_op},
-    { 1, HTML_SRCDOC, no_op},
-    { 1, HTML_SRCLANG, no_op},
-    { 1, HTML_START, no_op},
-    { 1, HTML_STEP, no_op},
-    { 1, HTML_STRONG, no_op},
-    { STYLE_STYLE, HTML_STYLE, no_op },
-    { 1, HTML_SUB, no_op },
-    { 1, HTML_SUMMARY, no_op},
-    { 1, HTML_SUP, no_op},
-    { 1, HTML_TABINDEX, no_op},
-    { 1, HTML_TABLE, no_op},
-    { 1, HTML_TARGET, no_op},
-    { 1, HTML_TBODY, no_op},
-    { 1, HTML_TD, no_op},
-    { OFFICE_TEXT, HTML_TEXTAREA, no_op },
-    { 1, HTML_TFOOT, no_op },
-    { 1, HTML_TH, no_op},
-    { 1, HTML_THEAD, no_op},
-    { 1, HTML_TIME, no_op},
-    { 1, HTML_TITLE, no_op},
-    { 1, HTML_TR, no_op},
-    { 1, HTML_TRACK, no_op},
-    { 1, HTML_TRANSLATE, no_op},
-    { 1, HTML_TYPE, no_op},
-    { 1, HTML_TYPEMUSTMATCH, no_op},
-    { 1, HTML_U, no_op},
-    { 1, HTML_UL, no_op},
-    { 1, HTML_USEMAP, no_op},
-    { 1, HTML_VALUE, no_op},
-    { 1, HTML_VAR, no_op},
-    { 1, HTML_VIDEO, no_op},
-    { 1, HTML_WBR, no_op},
-    { 1, HTML_WIDTH, no_op},
-    { 1, HTML_WRAP, no_op},
-    { 0,ENDMARKER, no_op},
-};
-
-Tag no_op(DFNode *node) 
-{
-    return 0; 
-}
+/*
+  G: Advice I have still to cover:
+  ================================
 
-Tag text_h(DFNode *node) 
-{
-    char *s = node->attrs->value;
-    if ((int)s[11] > 55 || strlen(s) == 13)
-        return HTML_H6;
-    else
-        return HTML_H1 + (int)s[11] - 49;
-}
+  printNode:
+
+  The attrs field of the DFNode struct is an array, not a single
+  object. It contains attrsCount elements. Accessing it in the way that
+  printNode does is incorrect for two reasons:
+
+  1) The fact that attrs is non-NULL doesn’t necessarily mean that the
+  node has attributes. It’s possible that it did at one point have
+  attributes, but those were all removed. In such a case, attrsCount
+  will be zero, but attrs will still be non-NULL. Have a look at the
+  implementation of DFGetAttribute, DFSetAttribute, DFRemoveAttribute in
+  DFDOM.c to see how attrs, attrsCount, and attrsAlloc are used.
+
+  2) If there are multiple attributes, this will only print the first.
+
+  To go through all the attributes and print out their tags & values,
+  you would use a loop:
+
+
+  You can also use DFGetAttribute if you want to already know the tag
+  you are looking for (e.g. TEXT_OUTLINE_LEVEL). This function will
+  return NULL if the attribute does not exist, or the attribute value if
+  it does.
+
+
+  > Tag text_h(DFNode *node)
+  > {
+  >    char *s = node->attrs->value;
+
+Referencing node->attrs->value is incorrect, as you don’t know
+whether the node will have any attributes, and it if does, whether the
+style name (which is what I assume you’re looking for here) will
+happen to be the first one. DFGetAttribute(node,TEXT_STYLE_NAME) is
+how you would get this reliably.
+
+G: Does not always happen so :( see TEXT_H entry for a failure
+(probably on my part :-)
 
-Tag locate_HTML(DFNode *odfNode)
+    // TODO: Once this basic traversal is implemented and is capable of producing paragraphs,
+    // tables, lists, and spans, add ids to the HTML elements as they are created. That is, set
+    // the id attribute of each new HTML element to a string containing the idPrefix followed by
+
+Q: what is that idPrefix thing and how do I find/generate this?
+
+    // the seqNo field of the node in contentDoc from which the HTML element was generated.
+
+Q: As in: adjust the automatic counter that works currently?  Ok, but
+it'll leave holes in the count :(
+
+Note: I still found the translateXMLEnumName array informative, so I
+put it back again as a dev aid.
+
+*/
+
+/**
+ * Temp function: Collect all the possible translations from ODF to
+ * HTML.  Will probably still change shape a lot.
+ *
+ * Input:    DFNode from ODF document that is currently being examined.
+ *
+ * Returns: Tag with HTMl value or TAG_NOT_MATCHED, or, writes code to
+ * screen that can be added to the switch function.  (see default: )
+ */
+Tag find_HTML(DFNode *odfNode, DFNode *htmlNode)
 {
-    int index = (int)odfNode->tag;
-
-    if (index > -1) {
-        for (int i = 0; ODF_to_HTML_keys[i].HTML_KEY != ENDMARKER; i++) {
-            if (ODF_to_HTML_keys[i].ODF_KEY == index) {
-                if (odfNode->attrs)
-                    return ODF_to_HTML_keys[i].attribute_function(odfNode); 
-                else 
-                    return ODF_to_HTML_keys[i].HTML_KEY; 
+    // I added a couple of #defines for dev purposes.  
+    //
+    // TAG_NOT_MATCHED shows me stuff I know about but haven't managed
+    // to match up.
+    //
+    // default sends back TAG_NOT_FOUND and so catches new tags and
+    // helpfully prints out code for adding to the switch statement
+    // ;-)
+    //
+    // for some weird reason, c-mode in emacs gives me a funky
+    // indentation in switch functions.  I'll fix it once this
+    // function settled.
+
+    printf(MAGENTA "find_HTML(): TAG NAME: %s  Value: %d \n" RESET,
+           translateXMLEnumName[odfNode->tag],
+           odfNode->tag
+           );
+
+    switch(odfNode->tag) {
+
+    case TEXT_H : { //headers h1 - h6, h7+ returns as p
+        
+        const char* s = DFGetAttribute(odfNode,TEXT_STYLE_NAME);
+
+        // Grab the very last digit.  If it's a 0-5 we have a proper
+        // header, otherwise, we have heading 6-10.
+        int s_val = atoi(&s[strlen(s)-1]) - 1;
+        if (s_val >= 0 && s_val < 6)
+            return HTML_H1 + s_val;
+        else
+            return HTML_P;
+    }
+        // paragraph
+    case TEXT_P : { return HTML_P; }
+
+        // lists
+    case TEXT_LIST :      { return HTML_LIST; }
+    case TEXT_LIST_ITEM : { return HTML_LI; }
+
+        // tables
+    case TABLE_TABLE :        { return HTML_TABLE; }
+    case TABLE_TABLE_COLUMN : { return HTML_COL; }
+    case TABLE_TABLE_ROW :    { return HTML_ROWS; }
+
+    case  TABLE_TABLE_CELL :              { return TAG_NOT_MATCHED; }
+    case  STYLE_TABLE_CELL_PROPERTIES :   { return TAG_NOT_MATCHED; }
+    case  STYLE_TABLE_COLUMN_PROPERTIES : { return TAG_NOT_MATCHED; }
+    case  STYLE_TABLE_PROPERTIES :        { return TAG_NOT_MATCHED; }
+
+    case  STYLE_TEXT_PROPERTIES : {
+
+        // no output:
+        // const char* s = DFGetAttribute(odfNode,STYLE_TEXT_PROPERTIES);
+        const char* s = DFGetAttribute(odfNode,DOM_TEXT);
+        
+        for (int i = 0; i < odfNode->attrsCount; i++) {
+
+            if (odfNode->attrs[i].tag == FO_FONT_WEIGHT 
+                && !strcmp("bold",odfNode->attrs[i].value)) {          
+                DFCreateChildElement(htmlNode, HTML_B);
+                return 0;
+            }
+
+            if (odfNode->attrs[i].tag == FO_FONT_STYLE 
+                && !strcmp("italic",odfNode->attrs[i].value)) {
+                DFCreateChildElement(htmlNode, HTML_I);
+                return 0; 
+            }
+
+            if (odfNode->attrs[i].tag == STYLE_TEXT_UNDERLINE_STYLE) {
+                DFCreateChildElement(htmlNode, HTML_U);
+                return 0; 
             }
-        }        
+
+            printf(RED "Failure: " RESET
+                   "tag %u tag name %s value %s\n",
+                   odfNode->attrs[i].tag,
+                   translateXMLEnumName[odfNode->attrs[i].tag],
+                   odfNode->attrs[i].value);
+        }
+
+        return TAG_NOT_MATCHED;
+    }
+        // document
+    case  OFFICE_AUTOMATIC_STYLES : { return TAG_NOT_MATCHED; }
+    case  OFFICE_BODY :             { return TAG_NOT_MATCHED; }
+    case  OFFICE_FONT_FACE_DECLS :  { return TAG_NOT_MATCHED; }
+    case  OFFICE_SCRIPTS :          { return TAG_NOT_MATCHED; }
+    case  OFFICE_TEXT :             { return TAG_NOT_MATCHED; }
+        
+        // fonts, styles'n'things.
+    case  STYLE_FONT_FACE :     { return TAG_NOT_MATCHED; }
+    case  STYLE_STYLE :         { return TAG_NOT_MATCHED; }
+    case  TEXT_SEQUENCE_DECL :  { return TAG_NOT_MATCHED; }
+    case  TEXT_SEQUENCE_DECLS : { return TAG_NOT_MATCHED; }
+    
+    default: {
+        // rm foo.html; make ; ./bin/dfconvert get bin/lists.odt foo.html | sort -u
+        // ... because we are too lazy to type.
+        printf("case  %s : { return TAG_NOT_MATCHED; }\n",
+               translateXMLEnumName[odfNode->tag]);     
+        return TAG_NOT_FOUND;
+    }
     }
-    return 0;
 }
 
-
+/**
+ * Dev tool: List all the nodes following the given one.  
+ */
 void show_nodes(DFNode *odfNode)
 {
     for (DFNode *odfChild = odfNode->first; odfChild != NULL; odfChild = odfChild->next) {
-        printNode(odfChild);
+        print_node_info(odfChild);
+        print_line(0);
     }
 }
 
-void printNode(DFNode *n)
+/**
+ * Dev tool: List everything about a Node that's fit to print..  
+ */
+void print_node_info(DFNode *n)
 {
     if (n == NULL) return;
 
-    if (n->tag) printf("Tag tag: %zu\n",n->tag);
+    if (n->tag) printf("Tag tag: %zu name = %s\n",n->tag, translateXMLEnumName[n->tag]);
     printf("unsigned int seqNo: %d\n",n->seqNo);
     // printf("struct DFDocument *doc: %p\n",n->doc);
     if (n->js)      printf("void *js: %p\n",n->js);
     if (n->changed) printf("int changed: %d\n",n->changed);
     if (n->childrenChanged) printf("int childrenChanged %d\n",n->childrenChanged);
     if (n->seqNoHashNext) printf("DFNode *seqNoHashNext %p\n", n->seqNoHashNext);
+
+    DFNameMap *map = n->doc->map; 
+    const TagDecl *td = DFNameMapNameForTag(map,n->tag);
+    const NamespaceDecl *ns = DFNameMapNamespaceForID(map,td->namespaceID);
+
+    // Attributes
+    if (n->tag >= MIN_ELEMENT_TAG) {
+        for (unsigned int i = 0; i < n->attrsCount; i++) {
+            Tag t = n->attrs[i].tag;
+            const TagDecl *attrDecl = DFNameMapNameForTag(map,t);
+            printf("iteration %d === tag: %d  name: %s namespaceID = %d localName = %s\n",
+                   i, t, translateXMLEnumName[t], 
+                   td->namespaceID, 
+                   td->localName);
+        }
+    }
+    if (ns->namespaceURI) printf("namespace URI = %s\n",ns->namespaceURI);
+    if (td->localName) printf("local name = %s\n",td->localName);
+    if (n->attrsCount) printf(RED "unsigned int attrsCount: %d  \n" RESET,n->attrsCount);
     if (n->attrs) {
-        printf("DFAttribute *attrs: %p ",n->attrs);
-        printf(", Tag tags: %zu ",n->attrs->tag);
-        printf(", char *value: %s ",n->attrs->value);
-        printf("HTML TAG = %d ", n->attrs->tag);
-        if (n->tag)
-            printf("%s ", translateXMLEnumName[locate_HTML(n)]);
-        printf("\n");
+        // printf("DFAttribute *attrs: %p ",n->attrs);
+        if (n->attrs->tag) printf(", Tag tags: %zu ",n->attrs->tag);
+        if (n->attrs->value) printf(", char *value: %s ",n->attrs->value);
+        printf(" Tag Name = %s\n", translateXMLEnumName[n->attrs->tag]);
+    }
+
+    for (int i = 0; i < n->attrsCount; i++) {
+        printf(BLUE "attrsCount %d tag %u value %s\n" RESET,
+               i, n->attrs[i].tag,n->attrs[i].value);
     }
-    if (n->attrsCount) printf("unsigned int attrsCount: %d\n",n->attrsCount);
+
     if (n->attrsAlloc) printf("unsigned int attrsAlloc: %d\n", n->attrsAlloc);
     if (n->target) printf("char *target: %s\n", n->target);
     if (n->value) printf("char *value: %s\n", n->value);
-    if (n->tag > 2)
-        printf("Tag Text = %s\n", translateXMLEnumName[n->tag]);
-    printf("================================================================================================\n");
 }
 
-char *printMissingTag(Tag tag)
+/**
+ * Dev tool: List less info about a node than print_node_info().
+ */
+char *node_id_info(DFNode *node)
 {
-    char *s = translateXMLEnumName[tag];
-    int len = strlen(s)+14+20;
+    const char *local_name = DFNodeName(node);
+    //const char *namespace_URI = DFNodeURI(node);
+    const char *enum_name = translateXMLEnumName[node->tag];
+    int len = strlen (local_name) + strlen(enum_name) + 30; //strlen( namespace_URI)+30;
     char *r = malloc(len);
-    snprintf(r, len, "%s Missing tag: %s %s",RED, s, RESET);
+    snprintf(r, len, "Tag name = %s DFNodeName: %s",
+             // " DFNodeURI: %s", 
+             enum_name,
+             local_name
+             //namespace_URI
+             );
     return r;
 }
+
+/**
+ * Dev tool: List some info about a missing tag, alone with some high
+ * lighting for easy viewing spotting.
+ */
+char *missing_tag_info(DFNode *node)
+{
+    char *inform = red("Tag not matched: ");
+    char *facts  = node_id_info(node);
+    int len = strlen(inform)+strlen(facts)+2;
+    char *r = malloc(len);
+    snprintf(r, len, "%s%s", inform, facts);
+    return r;
+}
+
+/**
+ * Dev tool: A selection of snazzy lines because I watched too many serger vids.
+ */
+void print_line(int style)
+{ 
+    if (!style)
+        printf("=============================================================\n");
+    else if (style == 1)
+        printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
+    else if (style == 2)
+        printf("=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n");
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/DocFormats/filters/odf/src/text/gbg_test.h
----------------------------------------------------------------------
diff --git a/DocFormats/filters/odf/src/text/gbg_test.h b/DocFormats/filters/odf/src/text/gbg_test.h
index 7158744..636165f 100644
--- a/DocFormats/filters/odf/src/text/gbg_test.h
+++ b/DocFormats/filters/odf/src/text/gbg_test.h
@@ -1,30 +1,21 @@
 #ifndef GBG_TEST_H
 #define GBG_TEST_H
 
-void printNode(DFNode *node);  // temp func, just for some convenience
+#define TAG_NOT_FOUND 4040404
+#define TAG_NOT_MATCHED 777777
 
-Tag locate_HTML(DFNode *odfNode);
+Tag  find_HTML(DFNode *odfNode, DFNode *htmlNode);  
+void print_node_info(DFNode *node);  
+void show_nodes(DFNode *node); 
+char *node_id_info(DFNode *node);  
+char *missing_tag_info(DFNode *node);
+void print_line(int style);
 
-// show all the nodes in a node list
-void show_nodes(DFNode *node);
-
-char *printMissingTag(Tag tag);
-
-// list of functions in ODF_TO_HTML_KEY []
-Tag no_op(DFNode *node);
-Tag text_h(DFNode *node);
-
-// it may be that the Tag Attribute is not needed.
-typedef struct {
-    Tag ODF_KEY;
-    Tag HTML_KEY;
-    Tag (*attribute_function)(DFNode*);
-} ODF_to_HTML_key;
 
 static char* translateXMLEnumName[] = {
     "one",
     "two",
-    "three",
+    "DOM_TEXT",
     "four",
     "five",
     "six",
@@ -3376,6 +3367,8 @@ static char* translateXMLEnumName[] = {
     "XML_LANG",
     "XML_SPACE",
     "PREDEFINED_TAG_COUNT",
-};
+}
+;
+
 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/sample/documents/odf/Table.odt
----------------------------------------------------------------------
diff --git a/sample/documents/odf/Table.odt b/sample/documents/odf/Table.odt
new file mode 100644
index 0000000..8f708a7
Binary files /dev/null and b/sample/documents/odf/Table.odt differ

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/sample/documents/odf/bold-italic-underlined.odt
----------------------------------------------------------------------
diff --git a/sample/documents/odf/bold-italic-underlined.odt b/sample/documents/odf/bold-italic-underlined.odt
new file mode 100644
index 0000000..be14136
Binary files /dev/null and b/sample/documents/odf/bold-italic-underlined.odt differ

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/sample/documents/odf/headers.odt
----------------------------------------------------------------------
diff --git a/sample/documents/odf/headers.odt b/sample/documents/odf/headers.odt
new file mode 100644
index 0000000..c5e1870
Binary files /dev/null and b/sample/documents/odf/headers.odt differ

http://git-wip-us.apache.org/repos/asf/incubator-corinthia/blob/295caa80/sample/documents/odf/lists.odt
----------------------------------------------------------------------
diff --git a/sample/documents/odf/lists.odt b/sample/documents/odf/lists.odt
new file mode 100644
index 0000000..7a42f8c
Binary files /dev/null and b/sample/documents/odf/lists.odt differ