commit d281cf145789e048e3eb1addd2f3161733d96c7c
Author: maxcom <maxcom@jet.msk.su>
Date:   Fri Sep 25 15:42:55 2009 +0400

    TIKA-283:  XWPFWordExtractorDecorator does not extract links in tables

diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
index d77b7b9..a4fd8fa 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
@@ -78,7 +78,7 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
         }
 
         // then all document tables
-        extractTableContent(document.getDocument().getBody().getTblArray(),
+        extractTableContent(document, document.getDocument().getBody().getTblArray(),
                 xhtml);
         extractFooters(xhtml, hfPolicy);
     }
@@ -111,7 +111,7 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
     /**
      * Low level structured parsing of document tables.
      */
-    private void extractTableContent(CTTbl[] tables, XHTMLContentHandler xhtml)
+    private void extractTableContent(XWPFDocument doc, CTTbl[] tables, XHTMLContentHandler xhtml)
             throws SAXException {
         for (CTTbl table : tables) {
             xhtml.startElement("table");
@@ -124,14 +124,14 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
                     xhtml.startElement("td");
                     CTP[] content = tc.getPArray();
                     for (CTP ctp : content) {
-                        CTR[] inner = ctp.getRArray();
-                        for (CTR ctr : inner) {
-                            CTText[] text = ctr.getTArray();
-                            for (CTText textContent : text) {
-                                xhtml.characters(textContent.getStringValue());
-                            }
-                        }
+                        XWPFParagraph p = new MyXWPFParagraph(ctp, doc);
+
+                        XWPFParagraphDecorator decorator = new XWPFCommentsDecorator(
+                                new XWPFHyperlinkDecorator(p, null, true));
+
+                        xhtml.element("p", decorator.getText());
                     }
+
                     xhtml.endElement("td");
                 }
                 xhtml.endElement("tr");
@@ -140,4 +140,10 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
             xhtml.endElement("table");
         }
     }
+
+    private class MyXWPFParagraph extends XWPFParagraph {
+        private MyXWPFParagraph(CTP ctp, XWPFDocument xwpfDocument) {
+            super(ctp, xwpfDocument);
+        }
+    }
 }
