Improved rendering
[phpeclipse.git] / archive / org.plog4u.wiki / src / org / plog4u / wiki / filter / WikipediaParser.java
index 08a0e3b..0662a87 100644 (file)
@@ -1,14 +1,10 @@
 package org.plog4u.wiki.filter;
 
-import java.io.IOException;
-import java.io.Writer;
 import java.util.ArrayList;
 import java.util.NoSuchElementException;
 import java.util.Stack;
 import java.util.StringTokenizer;
 
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
 import org.plog4u.wiki.filter.WikipediaFilter.InvalidInputException;
 import org.plog4u.wiki.filter.tags.AbstractTag;
 import org.plog4u.wiki.filter.tags.CloseTagToken;
@@ -20,11 +16,9 @@ import org.radeox.api.engine.IncludeRenderEngine;
 import org.radeox.api.engine.RenderEngine;
 import org.radeox.api.engine.WikiRenderEngine;
 import org.radeox.filter.context.FilterContext;
-import org.radeox.filter.interwiki.InterWiki;
 import org.radeox.macro.Macro;
 import org.radeox.macro.MacroRepository;
 import org.radeox.macro.parameter.MacroParameter;
-import org.radeox.util.Encoder;
 import org.radeox.util.StringBufferWriter;
 
 /**
@@ -199,7 +193,7 @@ public class WikipediaParser {
           } else {
             lastIndex++;
           }
-          fResultBuffer.append("&");
+          fResultBuffer.append("&");
           break;
         case '\'': // special html escape character
           if (lastIndex < (currentIndex - 1)) {
@@ -217,7 +211,7 @@ public class WikipediaParser {
           } else {
             lastIndex++;
           }
-          fResultBuffer.append("&#34;");
+          fResultBuffer.append("&quot;");
           break;
         }
       }
@@ -242,7 +236,7 @@ public class WikipediaParser {
           fResultBuffer.append(text.substring(lastIndex, currentIndex - 1));
           lastIndex = currentIndex;
         }
-        fResultBuffer.append("&#60;");
+        fResultBuffer.append("&lt;");
         break;
       case '>': // special html escape character
         if (lastIndex < (currentIndex - 1)) {
@@ -251,7 +245,7 @@ public class WikipediaParser {
         } else {
           lastIndex++;
         }
-        fResultBuffer.append("&#62;");
+        fResultBuffer.append("&gt;");
         break;
       case '&': // special html escape character
         if (lastIndex < (currentIndex - 1)) {
@@ -260,7 +254,7 @@ public class WikipediaParser {
         } else {
           lastIndex++;
         }
-        fResultBuffer.append("&#38;");
+        fResultBuffer.append("&amp;");
         break;
       case '\'': // special html escape character
         if (lastIndex < (currentIndex - 1)) {
@@ -278,7 +272,7 @@ public class WikipediaParser {
         } else {
           lastIndex++;
         }
-        fResultBuffer.append("&#34;");
+        fResultBuffer.append("&quot;");
         break;
       }
     }
@@ -700,7 +694,7 @@ public class WikipediaParser {
             copyWhite(fWhiteStart, fWhiteStartPosition, 1);
             fWhiteStart = false;
 
-            int startHeadPosition = fCurrentPosition-1;
+            int startHeadPosition = fCurrentPosition - 1;
             if (readUntilEOL()) {
               // TODO not correct - improve this
               String head = new String(fSource, startHeadPosition, fCurrentPosition - startHeadPosition);
@@ -837,7 +831,7 @@ public class WikipediaParser {
           if (foundUrl) {
             String urlString = new String(fSource, urlStartPosition - 1, fCurrentPosition - urlStartPosition);
             fCurrentPosition--;
-            WikipediaFilter.createExternalLink(fResultBuffer, fWikiEngine, urlString);
+            createExternalLink(urlString);
             continue;
           }
           break;
@@ -912,17 +906,17 @@ public class WikipediaParser {
             // table
             // syntax
             continue;
-//          } else {
-// SnipSnap / Radeox Macro Syntax
-//            if (readUntilChar('}')) {
-//              String macroStartTag;
-//
-//              macroStartTag = new String(fSource, startMacroPosition, fCurrentPosition - startMacroPosition - 1);
-//              if (macroStartTag != null) {
-//                createMacro(startMacroPosition, macroStartTag);
-//                continue;
-//              }
-//            }
+            //          } else {
+            // SnipSnap / Radeox Macro Syntax
+            //            if (readUntilChar('}')) {
+            //              String macroStartTag;
+            //
+            //              macroStartTag = new String(fSource, startMacroPosition, fCurrentPosition - startMacroPosition - 1);
+            //              if (macroStartTag != null) {
+            //                createMacro(startMacroPosition, macroStartTag);
+            //                continue;
+            //              }
+            //            }
           }
           break;
         case '<':
@@ -1341,9 +1335,11 @@ public class WikipediaParser {
         }
         fResultBuffer.append("<span class=\"nobr\">");
         fResultBuffer.append("<a href=\"");
-        fResultBuffer.append(Encoder.escape(urlString));
+//        fResultBuffer.append(Encoder.escape(urlString));
+        copyWhite(urlString);
         fResultBuffer.append("\">");
-        fResultBuffer.append(Encoder.toEntity(alias.charAt(0)) + alias.substring(1));
+//        fResultBuffer.append(Encoder.toEntity(alias.charAt(0)) + alias.substring(1));
+        copyWhite(alias); 
         fResultBuffer.append("</a></span>");
       }
       //      else {
@@ -1796,6 +1792,21 @@ public class WikipediaParser {
   //    fCurrentPosition = temp - 1;
   //    return false;
   //  }
+  public void createExternalLink(String urlString) {
+    // Does our engine know images?
+    if (fWikiEngine instanceof ImageRenderEngine) {
+      fResultBuffer.append(((ImageRenderEngine) fWikiEngine).getExternalImageLink());
+    }
+    fResultBuffer.append("<span class=\"nobr\">");
+    fResultBuffer.append("<a href=\"");
+//  fResultBuffer.append(Encoder.escape(urlString));
+    copyWhite(urlString);
+    fResultBuffer.append("\">");
+//  fResultBuffer.append(Encoder.escape(urlString));
+    copyWhite(urlString);
+    fResultBuffer.append("</a></span>");
+  }
+
   private void handleWikipediaLink(String linkText, String suffix) {
     String name = linkText;
     if (name != null) {
@@ -1803,7 +1814,7 @@ public class WikipediaParser {
       // Configuration probably wrote [http://radeox.org] instead of
       // http://radeox.org
       if (index != -1) {
-        WikipediaFilter.createExternalLink(fResultBuffer, fWikiEngine, name.substring(index));
+        createExternalLink(name.substring(index));
         // show error
         // fResult.append("<div class=\"error\">Do not surround URLs
         // with [...].</div>");
@@ -1833,31 +1844,32 @@ public class WikipediaParser {
         //                                     name = name.substring(colonIndex + 1);
         //                             }
 
-        int atIndex = name.lastIndexOf('@');
+//        int atIndex = name.lastIndexOf('@');
         // InterWiki link ?
-        if (-1 != atIndex) {
-          String extSpace = name.substring(atIndex + 1);
-          // known extarnal space ?
-          InterWiki interWiki = InterWiki.getInstance();
-          if (interWiki.contains(extSpace)) {
-            name = name.substring(0, atIndex);
-            Writer writer = new StringBufferWriter(fResultBuffer);
-            try {
-              if (-1 != hashIndex) {
-                interWiki.expand(writer, extSpace, name, hash);
-              } else {
-                interWiki.expand(writer, extSpace, name, "");
-              }
-            } catch (IOException e) {
-              //              log.debug("InterWiki " + extSpace + " not found.");
-            }
-          } else {
-            fResultBuffer.append("&#91;<span class=\"error\">");
-            fResultBuffer.append(name);
-            fResultBuffer.append("?</span>&#93;");
-          }
-        } else {
+//        if (-1 != atIndex) {
+//          String extSpace = name.substring(atIndex + 1);
+//          // known extarnal space ?
+//          InterWiki interWiki = InterWiki.getInstance();
+//          if (interWiki.contains(extSpace)) {
+//            name = name.substring(0, atIndex);
+//            Writer writer = new StringBufferWriter(fResultBuffer);
+//            try {
+//              if (-1 != hashIndex) {
+//                interWiki.expand(writer, extSpace, name, hash);
+//              } else {
+//                interWiki.expand(writer, extSpace, name, "");
+//              }
+//            } catch (IOException e) {
+//              //              log.debug("InterWiki " + extSpace + " not found.");
+//            }
+//          } else {
+//            fResultBuffer.append("&#91;<span class=\"error\">");
+//            fResultBuffer.append(name);
+//            fResultBuffer.append("?</span>&#93;");
+//          }
+//        } else {
           // internal link
+          name = Encoder.escape(name);
           if (name.startsWith("Image:") && (fWikiEngine instanceof ImageRenderEngine)) {
             // server part of rendering images
             ImageRenderEngine imageEngine = (ImageRenderEngine) fWikiEngine;
@@ -1898,7 +1910,7 @@ public class WikipediaParser {
             // cannot display/create wiki, so just display the text
             fResultBuffer.append(name);
           }
-        }
+//        }
       }
     }
   }