[hmath-commits] org.hmath.server/WEB-INF/src/org/hartmath/server/filter CachedWikipediaParser.java,1
Status: Pre-Alpha
Brought to you by:
jsurfer
|
From: Klaus H. <js...@us...> - 2004-05-12 21:20:26
|
Update of /cvsroot/hmath/org.hmath.server/WEB-INF/src/org/hartmath/server/filter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15572/WEB-INF/src/org/hartmath/server/filter Modified Files: CachedWikipediaParser.java CachedWikipediaFilter.java Log Message: Improved wikipedi syntax for internal/external links Index: CachedWikipediaFilter.java =================================================================== RCS file: /cvsroot/hmath/org.hmath.server/WEB-INF/src/org/hartmath/server/filter/CachedWikipediaFilter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CachedWikipediaFilter.java 2 May 2004 12:43:07 -0000 1.2 --- CachedWikipediaFilter.java 12 May 2004 21:20:14 -0000 1.3 *************** *** 818,821 **** --- 818,932 ---- } + public static void handleWikipediaLink(StringBuffer result, RenderEngine wikiEngine, String name, String suffix) { + if (name != null) { + int index = name.indexOf("http://"); + // User probably wrote [http://radeox.org] instead of http://radeox.org + if (index != -1) { + // createExternalLink(result, wikiEngine, name.substring(index)); + String urlString = name.substring(index); + // Wikipedia like style: + int pipeIndex = urlString.indexOf(' '); + String alias = ""; + if (-1 != pipeIndex) { + alias = urlString.substring(pipeIndex + 1); + urlString = urlString.substring(0, pipeIndex); + } else { + alias = urlString; + } + + if (wikiEngine instanceof ImageRenderEngine) { + result.append(((ImageRenderEngine) wikiEngine).getExternalImageLink()); + } + result.append("<span class=\"nobr\">"); + result.append("<a href=\""); + result.append(Encoder.escape(urlString)); + result.append("\">"); + result.append(Encoder.toEntity(alias.charAt(0)) + alias.substring(1)); + result.append("</a></span>"); + } else { + if (suffix==null) { + suffix=""; + } + // trim the name and unescape it + name = Encoder.unescape(name.trim()); + // Is there an alias like [alias|link] ? + int pipeIndex = name.indexOf('|'); + String alias = ""; + if (-1 != pipeIndex) { + alias = name.substring(pipeIndex + 1); + name = name.substring(0, pipeIndex); + } + + int hashIndex = name.lastIndexOf('#'); + + String hash = ""; + if (-1 != hashIndex && hashIndex != name.length() - 1) { + hash = name.substring(hashIndex + 1); + name = name.substring(0, hashIndex); + } + + int colonIndex = name.indexOf(':'); + // typed link ? + if (-1 != colonIndex) { + // for now throw away the type information + name = name.substring(colonIndex + 1); + } + + int atIndex = name.lastIndexOf('@'); + // InterWiki link ? + if (-1 != atIndex) { + String extSpace = name.substring(atIndex + 1); + // known external space ? + InterWiki interWiki = InterWiki.getInstance(); + if (interWiki.contains(extSpace)) { + name = name.substring(0, atIndex); + Writer writer = new StringBufferWriter(result); + 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 { + result.append("[<span class=\"error\">"); + result.append(name); + result.append("?</span>]"); + } + } else { + // internal link + if (wikiEngine != null && wikiEngine instanceof WikiRenderEngine) { + if (((WikiRenderEngine) wikiEngine).exists(name)) { + String view = name+suffix; + if (-1 != pipeIndex) { + view = alias+suffix; + } + // Do not add hash if an alias was given + if (-1 != hashIndex) { + ((WikiRenderEngine) wikiEngine).appendLink(result, name, view, hash); + } else { + ((WikiRenderEngine) wikiEngine).appendLink(result, name, view); + } + } else if (((WikiRenderEngine) wikiEngine).showCreate()) { + ((WikiRenderEngine) wikiEngine).appendCreateLink(result, name, name+suffix); + // links with "create" are not cacheable because + // a missing wiki could be created + // TODO is this ok? + // fContext.getRenderContext().setCacheable(false); + } else { + // cannot display/create wiki, so just display the text + result.append(name); + } + } else { + // cannot display/create wiki, so just display the text + result.append(name); + } + } + } + } + } + public static void handleTeXMath(StringBuffer result, String[] mathStrings) { Map map = Application.get().getParameters(); Index: CachedWikipediaParser.java =================================================================== RCS file: /cvsroot/hmath/org.hmath.server/WEB-INF/src/org/hartmath/server/filter/CachedWikipediaParser.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** CachedWikipediaParser.java 11 May 2004 20:55:10 -0000 1.4 --- CachedWikipediaParser.java 12 May 2004 21:20:14 -0000 1.5 *************** *** 44,47 **** --- 44,48 ---- import org.hartmath.server.taglib.MathSniffer; import org.hartmath.tex2mml.TeXParser; + import org.radeox.api.engine.ImageRenderEngine; import org.radeox.api.engine.IncludeRenderEngine; import org.radeox.api.engine.RenderEngine; *************** *** 708,712 **** if (readUntilString("]]")) { String name = new String(fSource, startLinkPosition, fCurrentPosition - startLinkPosition - 2); ! handleSnipLink(name); continue; } --- 709,731 ---- if (readUntilString("]]")) { String name = new String(fSource, startLinkPosition, fCurrentPosition - startLinkPosition - 2); ! // test for suffix string ! int temp = fCurrentPosition; ! StringBuffer suffixBuffer = new StringBuffer(); ! try { ! while (true) { ! fCurrentCharacter = fSource[fCurrentPosition++]; ! if (! Character.isLetterOrDigit(fCurrentCharacter)) { ! fCurrentPosition--; ! break; ! } ! suffixBuffer.append(fCurrentCharacter); ! } ! handleWikipediaLink(name, suffixBuffer.toString()); ! continue; ! } catch (IndexOutOfBoundsException e) { ! fCurrentPosition = temp; ! } ! ! handleWikipediaLink(name, ""); continue; } *************** *** 1070,1082 **** fCurrentPosition += 3; if (readUntilString("-->")) { ! String htmlCommentContent = new String(fSource, htmlStartPosition + 3, fCurrentPosition - htmlStartPosition - 6); if (htmlCommentContent != null) { copyWhite(fWhiteStart, fWhiteStartPosition, fCurrentPosition - htmlStartPosition + 1); fWhiteStart = false; // insert html comment for visual checks only: ! /* fResultBuffer.append("<!--"); ! copyWhite(htmlCommentContent); ! fResultBuffer.append("-->"); ! */ continue; } --- 1089,1101 ---- fCurrentPosition += 3; if (readUntilString("-->")) { ! String htmlCommentContent = ! new String(fSource, htmlStartPosition + 3, fCurrentPosition - htmlStartPosition - 6); if (htmlCommentContent != null) { copyWhite(fWhiteStart, fWhiteStartPosition, fCurrentPosition - htmlStartPosition + 1); fWhiteStart = false; // insert html comment for visual checks only: ! /* ! * fResultBuffer.append(" <!--"); copyWhite(htmlCommentContent); fResultBuffer.append("-->"); ! */ continue; } *************** *** 1316,1320 **** String encodedMathContent = Encoder.escape(mathContent); StringBuffer mathmlBuffer = new StringBuffer(); ! String shortImageName = "____tex_" + (fImageCounter++); String longImageName = shortImageName + ".gif"; mathmlBuffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); --- 1335,1339 ---- String encodedMathContent = Encoder.escape(mathContent); StringBuffer mathmlBuffer = new StringBuffer(); ! String shortImageName = "____tex_" + (fImageCounter++); String longImageName = shortImageName + ".gif"; mathmlBuffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); *************** *** 1348,1357 **** // String test = // "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><math ! // mode=\"display\"><mrow><munderover><mo>∫</mo><mn>1</mn><mi>x</mi></munderover><mfrac><mi>dt</mi><mi>t</mi></mfrac></mrow></math>"; try { File imageFile = conv.convert(mathmlBuffer.toString(), gifFilename); if (imageFile != null) { ! Attachment attachment = new Attachment(longImageName, "image/gif", imageFile.length(), new Date(), snipname + "/" + longImageName, true); ! // fSnip.getAttachments().addAttachment(longImageName, "image/gif", imageFile.length(), snipname + "/" + longImageName, true); fSnip.getAttachments().addAttachment(attachment); StringWriter writer = new StringWriter(); --- 1367,1378 ---- // String test = // "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><math ! // mode=\"display\"><mrow><munderover><mo>∫</mo><mn>1</mn><mi>x</mi></munderover><mfrac><mi>dt</mi><mi>t</mi></mfrac></mrow></math>"; try { File imageFile = conv.convert(mathmlBuffer.toString(), gifFilename); if (imageFile != null) { ! Attachment attachment = ! new Attachment(longImageName, "image/gif", imageFile.length(), new Date(), snipname + "/" + longImageName, true); ! // fSnip.getAttachments().addAttachment(longImageName, "image/gif", imageFile.length(), snipname + "/" + longImageName, ! // true); fSnip.getAttachments().addAttachment(attachment); StringWriter writer = new StringWriter(); *************** *** 1384,1390 **** // User probably wrote [http://radeox.org] instead of http://radeox.org if (index != -1) { ! CachedWikipediaFilter.createExternalLink(fResultBuffer, fWikiEngine, name.substring(index)); ! // show error ! // fResult.append("<div class=\"error\">Do not surround URLs with [...].</div>"); } else { // trim the name and unescape it --- 1405,1429 ---- // User probably wrote [http://radeox.org] instead of http://radeox.org if (index != -1) { ! // CachedWikipediaFilter.createExternalLink(fResultBuffer, fWikiEngine, name.substring(index)); ! String urlString = name.substring(index); ! // Wikipedia like style: ! int pipeIndex = urlString.indexOf(' '); ! String alias = ""; ! if (-1 != pipeIndex) { ! alias = urlString.substring(pipeIndex + 1); ! urlString = urlString.substring(0, pipeIndex); ! } else { ! alias = urlString; ! } ! ! if (fWikiEngine instanceof ImageRenderEngine) { ! fResultBuffer.append(((ImageRenderEngine) fWikiEngine).getExternalImageLink()); ! } ! fResultBuffer.append("<span class=\"nobr\">"); ! fResultBuffer.append("<a href=\""); ! fResultBuffer.append(Encoder.escape(urlString)); ! fResultBuffer.append("\">"); ! fResultBuffer.append(Encoder.toEntity(alias.charAt(0)) + alias.substring(1)); ! fResultBuffer.append("</a></span>"); } else { // trim the name and unescape it *************** *** 1443,1450 **** fCacheStaticBlockActive = false; } ! fCachedPage.addLink(name); if (fCachedPage == CachedWikipediaFilter.DUMMY_CACHED_PAGE) { if (((WikiRenderEngine) fWikiEngine).exists(name)) { ! String view = getWikiView(name); if (-1 != pipeIndex) { view = alias; --- 1482,1489 ---- fCacheStaticBlockActive = false; } ! fCachedPage.addSnipLink(name); if (fCachedPage == CachedWikipediaFilter.DUMMY_CACHED_PAGE) { if (((WikiRenderEngine) fWikiEngine).exists(name)) { ! String view = name; if (-1 != pipeIndex) { view = alias; *************** *** 1457,1461 **** } } else if (((WikiRenderEngine) fWikiEngine).showCreate()) { ! ((WikiRenderEngine) fWikiEngine).appendCreateLink(fResultBuffer, name, getWikiView(name)); // links with "create" are not cacheable because // a missing wiki could be created --- 1496,1601 ---- } } else if (((WikiRenderEngine) fWikiEngine).showCreate()) { ! ((WikiRenderEngine) fWikiEngine).appendCreateLink(fResultBuffer, name, name); ! // links with "create" are not cacheable because ! // a missing wiki could be created ! fContext.getRenderContext().setCacheable(false); ! } else { ! // cannot display/create wiki, so just display the text ! fResultBuffer.append(name); ! } ! } ! if (!fCacheStaticBlockActive) { ! fCacheStaticBlockActive = true; ! fCacheStaticBlockStartPosition = fResultBuffer.length(); ! } ! } else { ! // cannot display/create wiki, so just display the text ! fResultBuffer.append(name); ! } ! } ! } ! } ! } ! ! private void handleWikipediaLink(String linkText, String suffix) { ! String name = linkText; ! if (name != null) { ! int index = name.indexOf("http://"); ! // User probably wrote [http://radeox.org] instead of http://radeox.org ! if (index != -1) { ! CachedWikipediaFilter.createExternalLink(fResultBuffer, fWikiEngine, name.substring(index)); ! // show error ! // fResult.append("<div class=\"error\">Do not surround URLs with [...].</div>"); ! } else { ! // trim the name and unescape it ! name = Encoder.unescape(name.trim()); ! // Is there an alias like [alias|link] ? ! int pipeIndex = name.indexOf('|'); ! String alias = ""; ! if (-1 != pipeIndex) { ! alias = name.substring(pipeIndex + 1); ! name = name.substring(0, pipeIndex); ! } ! ! int hashIndex = name.lastIndexOf('#'); ! ! String hash = ""; ! if (-1 != hashIndex && hashIndex != name.length() - 1) { ! hash = name.substring(hashIndex + 1); ! name = name.substring(0, hashIndex); ! } ! ! int colonIndex = name.indexOf(':'); ! // typed link ? ! if (-1 != colonIndex) { ! // for now throw away the type information ! name = name.substring(colonIndex + 1); ! } ! ! 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("[<span class=\"error\">"); ! fResultBuffer.append(name); ! fResultBuffer.append("?</span>]"); ! } ! } else { ! // internal link ! if (fWikiEngine != null && fWikiEngine instanceof WikiRenderEngine) { ! if (fCacheStaticBlockActive) { ! fCachedPage.addHTML(fResultBuffer.substring(fCacheStaticBlockStartPosition, fResultBuffer.length())); ! fCacheStaticBlockActive = false; ! } ! fCachedPage.addWikipediaLink(linkText, suffix); ! if (fCachedPage == CachedWikipediaFilter.DUMMY_CACHED_PAGE) { ! if (((WikiRenderEngine) fWikiEngine).exists(name)) { ! String view = name + suffix; ! if (-1 != pipeIndex) { ! view = alias + suffix; ! } ! // Do not add hash if an alias was given ! if (-1 != hashIndex) { ! ((WikiRenderEngine) fWikiEngine).appendLink(fResultBuffer, name, view, hash); ! } else { ! ((WikiRenderEngine) fWikiEngine).appendLink(fResultBuffer, name, view); ! } ! } else if (((WikiRenderEngine) fWikiEngine).showCreate()) { ! ((WikiRenderEngine) fWikiEngine).appendCreateLink(fResultBuffer, name, name + suffix); // links with "create" are not cacheable because // a missing wiki could be created *************** *** 1690,1696 **** * @return view The view of the wiki name */ ! protected String getWikiView(String name) { ! return name; ! } private void handleMacro(String completeMacroSubString, String command, String unsplittedMacroParameters, String group3) { --- 1830,1836 ---- * @return view The view of the wiki name */ ! // protected String getWikiView(String name) { ! // return name; ! // } private void handleMacro(String completeMacroSubString, String command, String unsplittedMacroParameters, String group3) { |