*) changed anchors (TOC) according to thelis request in http://www.yacy-forum.de/viewtopic.php?t=1987

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@1851 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
low012 19 years ago
parent dce08771d1
commit 6000a38a05

@ -6,7 +6,7 @@
// Frankfurt, Germany, 2004 // Frankfurt, Germany, 2004
// //
// This file ist contributed by Alexander Schier // This file ist contributed by Alexander Schier
// last major change: 09.08.2004 // last major change: 08.03.2006
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -121,8 +121,8 @@ public class wikiCode {
* special characters in non UTF-8 capable browsers. * special characters in non UTF-8 capable browsers.
* @param text a string that possibly contains HTML * @param text a string that possibly contains HTML
* @return the string with all special characters encoded * @return the string with all special characters encoded
* @author Marc Nause, replaces code by Alexander Schier
*/ */
//[MN]
public static String replaceHTML(String text) { public static String replaceHTML(String text) {
text = replace(text, htmlentities); text = replace(text, htmlentities);
text = replace(text, characters); text = replace(text, characters);
@ -133,8 +133,8 @@ public class wikiCode {
* special characters in non UTF-8 capable browsers. * special characters in non UTF-8 capable browsers.
* @param text a string that possibly contains special characters * @param text a string that possibly contains special characters
* @return the string with all special characters encoded * @return the string with all special characters encoded
* @author Marc Nause, replaces code by Alexander Schier
*/ */
//[MN]
public static String replaceCharacters(String text) { public static String replaceCharacters(String text) {
text = replace(text, characters); text = replace(text, characters);
return text; return text;
@ -143,8 +143,8 @@ public class wikiCode {
/** Replaces special characters from a string. Avoids XSS attacks. /** Replaces special characters from a string. Avoids XSS attacks.
* @param text a string that possibly contains HTML * @param text a string that possibly contains HTML
* @return the string without any HTML-tags that can be used for XSS * @return the string without any HTML-tags that can be used for XSS
* @author Marc Nause, replaces code by Alexander Schier
*/ */
//[MN]
public static String replaceHTMLonly(String text) { public static String replaceHTMLonly(String text) {
text = replace(text, htmlentities); text = replace(text, htmlentities);
return text; return text;
@ -154,8 +154,8 @@ public class wikiCode {
* @param text a string that possibly contains special characters * @param text a string that possibly contains special characters
* @param entities array that contains characters to be replaced and characters it will be replaced by * @param entities array that contains characters to be replaced and characters it will be replaced by
* @return the string with all characters replaced by the corresponding character from array * @return the string with all characters replaced by the corresponding character from array
* @author Franz Brausse, few changes by Marc Nause, replaces code by Alexander Schier
*/ */
//[FB], changes by [MN]
public static String replace(String text, String[] entities) { public static String replace(String text, String[] entities) {
if (text==null) { return null; } if (text==null) { return null; }
for (int x=0;x<=entities.length-1;x=x+2) { for (int x=0;x<=entities.length-1;x=x+2) {
@ -285,8 +285,8 @@ public class wikiCode {
/** This method processes tables in the wiki code. /** This method processes tables in the wiki code.
* @param a string that might contain parts of a table * @param a string that might contain parts of a table
* @return a string with wiki code of parts of table replaced by HTML code for table * @return a string with wiki code of parts of table replaced by HTML code for table
* @author Franz Brausse, changes by Marc Nause
*/ */
//[FB], changes by [MN]
private String processTable(String result, plasmaSwitchboard switchboard){ private String processTable(String result, plasmaSwitchboard switchboard){
String line=""; String line="";
if ((result.startsWith("{|")) && (!table)) { if ((result.startsWith("{|")) && (!table)) {
@ -507,19 +507,34 @@ public class wikiCode {
int level1 = 0; int level1 = 0;
int level2 = 0; int level2 = 0;
int level3 = 0; int level3 = 0;
int doubles = 0;
String anchorext = "";
if((s=dirElements.size())>2){ if((s=dirElements.size())>2){
for(int i=0;i<s;i++){ for(int i=0;i<s;i++){
element = dirElements.get(i).toString(); element = dirElements.get(i).toString();
if (element.startsWith("###")){ //counting double headlines
doubles = 0;
for(int j=0;j<i;j++){
if(dirElements.get(j).toString().substring(1).equals(element.substring(1))){
doubles++;
}
}
//if there are doubles, create anchorextension
if(doubles>0){
anchorext = "_" + (doubles+1);
}
if (element.startsWith("3")){
if(level<3){ if(level<3){
level = 3; level = 3;
level3 = 0; level3 = 0;
} }
level3++; level3++;
element=level1+"."+level2+"."+level3+" "+element.substring(3); String temp = element.substring(1);
directory = directory + "&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#"+i+"\" class=\"WikiTOC\">"+element+"</a><br>\n"; element=level1+"."+level2+"."+level3+" "+temp;
directory = directory + "&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#"+replaceHTML(temp.replaceAll(" ","_"))+anchorext+"\" class=\"WikiTOC\">"+element+"</a><br>\n";
} }
else if (element.startsWith("##")){ else if (element.startsWith("2")){
if(level==1){ if(level==1){
level2 = 0; level2 = 0;
level = 2; level = 2;
@ -528,19 +543,22 @@ public class wikiCode {
level = 2; level = 2;
} }
level2++; level2++;
element=level1+"."+level2+" "+element.substring(2); String temp = element.substring(1);
directory = directory + "&nbsp;&nbsp;<a href=\"#"+i+"\" class=\"WikiTOC\">"+element+"</a><br>\n"; element=level1+"."+level2+" "+temp;
directory = directory + "&nbsp;&nbsp;<a href=\"#"+replaceHTML(temp.replaceAll(" ","_"))+anchorext+"\" class=\"WikiTOC\">"+element+"</a><br>\n";
} }
else if (element.startsWith("#")) { else if (element.startsWith("1")) {
if (level>1) { if (level>1) {
level = 1; level = 1;
level2 = 0; level2 = 0;
level3 = 0; level3 = 0;
} }
level1++; level1++;
element=level1+" "+element.substring(1); String temp = element.substring(1);
directory = directory + "<a href=\"#"+i+"\" class=\"WikiTOC\">"+element+"</a><br>\n"; element=level1+". "+temp;
directory = directory + "<a href=\"#"+replaceHTML(temp.replaceAll(" ","_"))+anchorext+"\" class=\"WikiTOC\">"+element+"</a><br>\n";
} }
anchorext="";
} }
directory = "<table><tr><td><div class=\"WikiTOCBox\">\n" + directory + "</div></td></tr></table>\n"; directory = "<table><tr><td><div class=\"WikiTOCBox\">\n" + directory + "</div></td></tr></table>\n";
} }
@ -550,12 +568,14 @@ public class wikiCode {
/** Replaces two occurences of a substring in a string by a pair of strings if /** Replaces two occurences of a substring in a string by a pair of strings if
* that substring occurs twice in the string. This method is not greedy! You'll * that substring occurs twice in the string. This method is not greedy! You'll
* have to run it in a loop if you want to replace all occurences of the substring. * have to run it in a loop if you want to replace all occurences of the substring.
* This method provides special treatment for headlines.
* @param input the string that something is to be replaced in * @param input the string that something is to be replaced in
* @param pat substring to be replaced * @param pat substring to be replaced
* @param repl1 string substring gets replaced by on uneven occurences * @param repl1 string substring gets replaced by on uneven occurences
* @param repl2 string substring gets replaced by on even occurences * @param repl2 string substring gets replaced by on even occurences
*/ */
public String pairReplace(String input, String pat, String repl1, String repl2){ //[MN]
private String pairReplace(String input, String pat, String repl1, String repl2){
String direlem = ""; //string to keep headlines until they get added to List dirElements String direlem = ""; //string to keep headlines until they get added to List dirElements
int p0 = 0; int p0 = 0;
int p1 = 0; int p1 = 0;
@ -563,14 +583,28 @@ public class wikiCode {
if ((p0 = input.indexOf(pat)) >= 0) { if ((p0 = input.indexOf(pat)) >= 0) {
p1 = input.indexOf(pat, p0 + l); p1 = input.indexOf(pat, p0 + l);
if (p1 >= 0) { if (p1 >= 0) {
//extra treatment for headlines
if((pat.equals("===="))||(pat.equals("==="))||(pat.equals("=="))){ if((pat.equals("===="))||(pat.equals("==="))||(pat.equals("=="))){
input = input.substring(0, p0) + "<a name=\""+headlines+"\">" + repl1 + //add anchor and create headline
(direlem = input.substring(p0 + l, p1)) + repl2 + "</a>" + direlem = input.substring(p0 + l, p1);
input.substring(p1 + l); //counting double headlines
int doubles = 0;
if(pat.equals("====")) dirElements.add("###"+direlem); for(int i=0;i<headlines;i++){
else if(pat.equals("===")) dirElements.add("##"+direlem); if(dirElements.get(i).toString().substring(1).equals(direlem)){
else if(pat.equals("==")) dirElements.add("#"+direlem); doubles++;
}
}
String anchor = replaceHTML(direlem.replaceAll(" ","_")); //replace blanks with underscores
//if there are doubles, add underscore and number of doubles plus one
if(doubles>0){
anchor = anchor + "_" + (doubles+1);
}
input = input.substring(0, p0) + "<a name=\""+anchor+"\"></a>" + repl1 +
direlem + repl2 + input.substring(p1 + l);
//add headlines to list of headlines (so TOC can be created)
if(pat.equals("====")) dirElements.add("3"+direlem);
else if(pat.equals("===")) dirElements.add("2"+direlem);
else if(pat.equals("==")) dirElements.add("1"+direlem);
headlines++; headlines++;
} }
else{ else{

Loading…
Cancel
Save