X-Git-Url: http://secure.phpeclipse.com
diff --git a/archive/org.plog4u.wiki/src/org/plog4u/wiki/filter/WikipediaParser.java b/archive/org.plog4u.wiki/src/org/plog4u/wiki/filter/WikipediaParser.java
index 5383fb7..0662a87 100644
--- a/archive/org.plog4u.wiki/src/org/plog4u/wiki/filter/WikipediaParser.java
+++ b/archive/org.plog4u.wiki/src/org/plog4u/wiki/filter/WikipediaParser.java
@@ -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;
/**
@@ -103,7 +97,6 @@ public class WikipediaParser {
// private String fSrcPath;
// private String fBinPath;
-
public WikipediaParser(MacroRepository macros, String stringSource, StringBuffer result, FilterContext context, int recursionLevel) {
fContext = context;
fWikiEngine = context.getRenderContext().getRenderEngine();
@@ -182,7 +175,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append("<");
+ fResultBuffer.append("<");
break;
case '>': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -191,7 +184,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append(">");
+ fResultBuffer.append(">");
break;
case '&': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -200,7 +193,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append("&");
+ fResultBuffer.append("&");
break;
case '\'': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -218,7 +211,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append(""");
+ fResultBuffer.append(""");
break;
}
}
@@ -243,7 +236,7 @@ public class WikipediaParser {
fResultBuffer.append(text.substring(lastIndex, currentIndex - 1));
lastIndex = currentIndex;
}
- fResultBuffer.append("<");
+ fResultBuffer.append("<");
break;
case '>': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -252,7 +245,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append(">");
+ fResultBuffer.append(">");
break;
case '&': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -261,7 +254,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append("&");
+ fResultBuffer.append("&");
break;
case '\'': // special html escape character
if (lastIndex < (currentIndex - 1)) {
@@ -279,7 +272,7 @@ public class WikipediaParser {
} else {
lastIndex++;
}
- fResultBuffer.append(""");
+ fResultBuffer.append(""");
break;
}
}
@@ -370,6 +363,7 @@ public class WikipediaParser {
char closeCharacter;
char nextCharacter;
if (getNextChar('/')) {
+ // end tag detected
currentHtmlPosition++;
// closing tag
int r = readUntilCharOrEOL('>');
@@ -405,24 +399,26 @@ public class WikipediaParser {
}
} else {
- // opening tag
+ // start tag
String tokenString;
int tagNameStart = fCurrentPosition;
int tokenLength = 0;
- while (Character.isJavaIdentifierStart(fSource[fCurrentPosition++])) {
+ while (Character.isJavaIdentifierStart(fSource[fCurrentPosition])) {
+ fCurrentPosition++;
tokenLength++;
}
try {
- tokenString = new String(fSource, tagNameStart, fCurrentPosition - tagNameStart - 1); //tagTokenizer.nextToken();
+ tokenString = new String(fSource, tagNameStart, fCurrentPosition - tagNameStart); //tagTokenizer.nextToken();
+
OpenTagToken token = (OpenTagToken) WikipediaFilter.OPEN_TAGS.get(tokenString);
if (token == null) {
return WikipediaFilter.TokenNotFound;
}
copyWhite(fWhiteStart, fWhiteStartPosition, (fCurrentPosition - tagNameStart) + 1);
fWhiteStart = false;
-
if (token instanceof SpecialTagToken) {
- fResultBuffer.append(token.getOpenTag());
+ // for
+
while (Character.isWhitespace(fSource[fCurrentPosition])) {
fCurrentPosition++;
}
@@ -431,17 +427,21 @@ public class WikipediaParser {
}
if (fSource[fCurrentPosition] == '>') {
fCurrentPosition++;
+ fWhiteStartPosition = fCurrentPosition;
+ // insert the special tag :
+ fResultBuffer.append(token.getOpenTag());
+ return WikipediaFilter.TokenIgnore;
}
+
} else if (token instanceof OpenTagToken) {
fResultBuffer.append("<");
fResultBuffer.append(token.getTagName());
fTokenStack.push(token);
- fCurrentPosition = token.scan(fResultBuffer, fSource, fCurrentPosition - 1);
+ fCurrentPosition = token.scan(fResultBuffer, fSource, fCurrentPosition);
fResultBuffer.append(">");
+ return WikipediaFilter.TokenIgnore;
}
-
- // System.out.println(fResultBuffer);
- return WikipediaFilter.TokenIgnore;
+ return WikipediaFilter.TokenNotFound;
} catch (NoSuchElementException e) {
return WikipediaFilter.TokenNotFound;
}
@@ -694,21 +694,21 @@ public class WikipediaParser {
copyWhite(fWhiteStart, fWhiteStartPosition, 1);
fWhiteStart = false;
- int startHeadPosition = fCurrentPosition;
+ int startHeadPosition = fCurrentPosition - 1;
if (readUntilEOL()) {
// TODO not correct - improve this
String head = new String(fSource, startHeadPosition, fCurrentPosition - startHeadPosition);
- int index = head.indexOf(": ");
+ int index = head.indexOf(" : ");
if (index > 0) {
fResultBuffer.append("- ");
- fResultBuffer.append(head.substring(0,index));
- fResultBuffer.append("
- ");
- fResultBuffer.append(head.substring(index+2));
+ fResultBuffer.append(head.substring(0, index));
+ fResultBuffer.append("
- ");
+ fResultBuffer.append(head.substring(index + 2));
fResultBuffer.append("
");
} else {
fResultBuffer.append("- ");
fResultBuffer.append(head);
- fResultBuffer.append("
");
+ fResultBuffer.append(" ");
}
continue;
}
@@ -716,79 +716,6 @@ public class WikipediaParser {
continue;
}
break;
- // case '\\': // special characters follow
- // copyWhite(fWhiteStart, fWhiteStartPosition, 1);
- // fWhiteStart = false;
- // try {
- // fCurrentCharacter = fSource[fCurrentPosition++];
- // switch (fCurrentCharacter) {
- // case '\\': // newline
- // if ((fCurrentCharacter = fSource[fCurrentPosition++]) == '\\') {
- // fResultBuffer.append(Encoder
- // .toEntity(fCurrentCharacter));
- // break;
- // } else {
- // fResultBuffer.append("
");
- // break;
- // }
- // default:
- // fResultBuffer.append(Encoder
- // .toEntity(fCurrentCharacter));
- // }
- // } catch (IndexOutOfBoundsException e) {
- //
- // }
- // continue;
- // case '$' : // detect tex math
- // copyWhite(fWhiteStart, fWhiteStartPosition, 1);
- // fWhiteStart = false;
- // startOfIndent = false;
- // int startMathPosition = fCurrentPosition;
- // if (getNextChar('$')) {
- // startMathPosition = fCurrentPosition;
- // copyWhite(fWhiteStart, fWhiteStartPosition, 2);
- // fWhiteStart = false;
- // if (readUntilString("$$")) {
- // String mathContent = new String(fSource, startMathPosition,
- // fCurrentPosition - startMathPosition - 2);
- // if (mathContent != null) {
- // handleTeXMath(mathContent, false);
- // continue;
- // }
- // }
- // } else {
- // if (readUntilChar('$')) {
- // String mathContent = new String(fSource, startMathPosition,
- // fCurrentPosition - startMathPosition - 1);
- // if (mathContent != null) {
- // handleTeXMath(mathContent, true);
- // continue;
- // }
- // }
- // }
- // break;
- case '{':
- // detect macros
- copyWhite(fWhiteStart, fWhiteStartPosition, 1);
- fWhiteStart = false;
- // boolean scanBody = true;
- int startMacroPosition = fCurrentPosition;
- if (getNextChar('|') && handleWikipediaTable()) { // Wikipedia
- // table
- // syntax
- continue;
- } else {
- if (readUntilChar('}')) {
- String macroStartTag;
-
- macroStartTag = new String(fSource, startMacroPosition, fCurrentPosition - startMacroPosition - 1);
- if (macroStartTag != null) {
- createMacro(startMacroPosition, macroStartTag);
- continue;
- }
- }
- }
- break;
case '[':
int startLinkPosition = fCurrentPosition;
if (getNextChar('[')) { // wikipedia link style
@@ -830,56 +757,6 @@ public class WikipediaParser {
}
}
break;
- // case '1': // heading filter ?
- // int temp1Position = checkWhitespaces(fWhiteStartPosition,
- // fCurrentPosition - 2);
- // if (temp1Position >= 0) {
- // copyWhite(fWhiteStart, fWhiteStartPosition, 1);
- // fWhiteStart = false;
- // int simpleHeader = getNextChar(' ', '.');
- // if (simpleHeader < 0) {
- // if (getNextChar('1')) {
- // fCurrentPosition--;
- // if (getList('1', "", "
")) {
- // continue;
- // }
- // }
- // break;
- // }
- // if (simpleHeader == 1 && !getNextChar('1')) {
- // fCurrentPosition--;
- // if (getList('1', "", "
")) {
- // continue;
- // }
- // break;
- // }
- // temp1Position = fCurrentPosition;
- // if (simpleHeader >= 0 && readUntilChar('\n')) {
- // String heading = new String(fSource, temp1Position,
- // fCurrentPosition - temp1Position - 1);
- // if (heading != null) {
- // fResultBuffer.append("");
- // // System.out.println(heading);
- // fResultBuffer
- // .append(WikipediaFilter
- // .filterParser(
- // heading,
- // fContext,
- // WikipediaFilter.DUMMY_CACHED_PAGE,
- // fMacros,
- // fRecursionLevel));
- // fResultBuffer.append("
");
- // continue;
- // }
- // }
- // }
- // break;
case '*': // list
case '#': // list
if (isStartOfLine()) {
@@ -891,92 +768,6 @@ public class WikipediaParser {
}
}
break;
- // case '#': // list
- // if (fCurrentPosition >= 2) {
- // char beforeChar = fSource[fCurrentPosition - 2];
- // if (beforeChar == '\n' || beforeChar == '\r') {
- //
- // int levelHash = getNumberOfChar('#') + 1;
- //
- // int tempHashPosition = checkWhitespaces(fWhiteStartPosition, fCurrentPosition - 1 - levelHash);
- // if (tempHashPosition >= 0) {
- // copyWhite(fWhiteStart, fWhiteStartPosition, levelHash);
- // fWhiteStart = false;
- // AbstractTag tok = (AbstractTag) fTokenStack.peek();
- // if (tok instanceof ListToken) {
- // ListToken listToken = (ListToken) tok;
- // int topLevel = listToken.getLevel();
- // if (listToken.getToken() == WikipediaFilter.TokenLIST_OL_START) {
- // if (levelHash > topLevel) {
- // fTokenStack.push(new ListToken(WikipediaFilter.TokenLIST_OL_START, topLevel + 1));
- // fResultBuffer.append("- ");
- // } else if (levelHash < topLevel) {
- // fTokenStack.pop();
- // fResultBuffer.append("
- ");
- // } else {
- // fResultBuffer.append("
- ");
- // }
- // } else {
- // fTokenStack.push(new ListToken(WikipediaFilter.TokenLIST_OL_START, levelHash));
- // fResultBuffer.append("
- ");
- // }
- // } else {
- // fTokenStack.push(new ListToken(WikipediaFilter.TokenLIST_OL_START, 1));
- // fResultBuffer.append("\n
- ");
- // }
- // continue;
- // }
- // }
- // // }
- // }
- // break;
-
- // case 'i': //
list
- // if (getList('i', "", "
")) {
- // continue;
- // }
- // break;
- // case 'I': // list
- // if (getList('i', "", "
")) {
- // continue;
- // }
- // break;
- // case 'a' : // list
- // if (getList('a', "", "
")) {
- // continue;
- // }
- // break;
- // case 'A' : // list
- // if (getList('A', "", "
")) {
- // continue;
- // }
- // break;
- // case 'g' : // list
- // if (getList('g', "", "
")) {
- // continue;
- // }
- // break;
- // case 'H' : // list
- // if (getList('H', "", "
")) {
- // continue;
- // }
- // break;
- // case 'k' : // list
- // if (getList('k', "", "
")) {
- // continue;
- // }
- // break;
- // case 'K' : // list
- // if (getList('K', "", "
")) {
- // continue;
- // }
- // break;
- // case 'j' : // list
- // if (getList('j', "", "
")) {
- // continue;
- // }
- // break;
-
case '\'':
if (getNextChar('\'')) {
if (getNextChar('\'')) {
@@ -989,20 +780,6 @@ public class WikipediaParser {
return WikipediaFilter.TokenEM;
}
break;
- // case '_':
- // if (getNextChar('_')) {
- // copyWhite(fWhiteStart, fWhiteStartPosition, 2);
- // fWhiteStart = false;
- // return WikipediaFilter.TokenBOLD;
- // }
- // break;
- // case '~':
- // if (getNextChar('~')) {
- // copyWhite(fWhiteStart, fWhiteStartPosition, 2);
- // fWhiteStart = false;
- // return WikipediaFilter.TokenITALIC;
- // }
- // break;
case '-':
int tempCurrPosition = fCurrentPosition;
try {
@@ -1022,60 +799,6 @@ public class WikipediaParser {
} catch (IndexOutOfBoundsException e) {
}
-
- // int levelMinus = getNumberOfChar('-') + 1;
- // if (getNextChar(' ')) {
- // int tempPosition = checkWhitespaces(
- // fWhiteStartPosition, fCurrentPosition - 2
- // - levelMinus);
- // if (tempPosition >= 0) {
- // copyWhite(fWhiteStart, fWhiteStartPosition,
- // 1 + levelMinus);
- // fWhiteStart = false;
- // AbstractTag tok = (AbstractTag) fTokenStack.peek();
- // if (tok instanceof ListToken) {
- // ListToken listToken = (ListToken) tok;
- // int topLevel = listToken.getLevel();
- // if (listToken.getToken() ==
- // WikipediaFilter.TokenLIST_UL_START) {
- // if (levelMinus > topLevel) {
- // fTokenStack
- // .push(new ListToken(
- // WikipediaFilter.TokenLIST_UL_START,
- // topLevel + 1));
- // fResultBuffer
- // .append("- ");
- // } else if (levelMinus < topLevel) {
- // fTokenStack.pop();
- // fResultBuffer
- // .append("
- ");
- // } else {
- // fResultBuffer.append("
- ");
- // }
- // } else {
- // fTokenStack
- // .push(new ListToken(
- // WikipediaFilter.TokenLIST_UL_START,
- // levelMinus));
- // fResultBuffer
- // .append("
- ");
- // }
- // } else {
- // fTokenStack
- // .push(new ListToken(
- // WikipediaFilter.TokenLIST_UL_START,
- // 1));
- // fResultBuffer
- // .append("\n