From 2ee4f9f4e57399b2d70bcfcad7ba5ac9849a4f59 Mon Sep 17 00:00:00 2001 From: low012 Date: Wed, 31 Aug 2005 14:43:55 +0000 Subject: [PATCH] *) added escape characters [= and =] to yacyWiki git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@622 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/data/wikiCode.java | 515 +++++++++++++++------------- 1 file changed, 278 insertions(+), 237 deletions(-) diff --git a/source/de/anomic/data/wikiCode.java b/source/de/anomic/data/wikiCode.java index 933219035..fb7dc0b89 100644 --- a/source/de/anomic/data/wikiCode.java +++ b/source/de/anomic/data/wikiCode.java @@ -71,6 +71,9 @@ public class wikiCode { private String ListLevel=""; private String defListLevel=""; private plasmaSwitchboard sb; + private boolean escape = false; //needed for escape + private boolean escapeSpan = false; //needed for escape symbols [= and =] spanning over several lines + public wikiCode(plasmaSwitchboard switchboard){ sb=switchboard; } @@ -109,272 +112,305 @@ public class wikiCode { p0 = 0; while ((p0 = result.indexOf(">", p0+1)) >= 0) result = result.substring(0, p0) + ">" + result.substring(p0 + 1); //p0 = 0; while ((p0 = result.indexOf("*", p0+1)) >= 0) result = result.substring(0, p0) + "•" + result.substring(p0 + 1); p0 = 0; while ((p0 = result.indexOf("(C)", p0+1)) >= 0) result = result.substring(0, p0) + "©" + result.substring(p0 + 3); + + + //check if line contains any escape symbol of if we are in an esacpe sequence already + //if that's the case the program will continue further below [MN] + if((result.indexOf("[=")<0)&&(result.indexOf("=]")<0)&&(!escapeSpan)){ - // format lines - if (result.startsWith(" ")) result = "" + result + ""; - if (result.startsWith("----")) result = "
"; + // format lines + if (result.startsWith(" ")) result = "" + result + ""; + if (result.startsWith("----")) result = "
"; - // citings contributed by [MN] - if(result.startsWith(":")){ - String head = ""; - String tail = ""; - while(result.startsWith(":")){ - head = head + "
"; - tail = tail + "
"; - result = result.substring(1); - } - result = head + result + tail; - } - // end contrib [MN] + // citings contributed by [MN] + if(result.startsWith(":")){ + String head = ""; + String tail = ""; + while(result.startsWith(":")){ + head = head + "
"; + tail = tail + "
"; + result = result.substring(1); + } + result = head + result + tail; + } + // end contrib [MN] - // format headers - if ((p0 = result.indexOf("====")) >= 0) { - p1 = result.indexOf("====", p0 + 4); - if (p1 >= 0) result = result.substring(0, p0) + "

" + - result.substring(p0 + 4, p1) + "

" + - result.substring(p1 + 4); - } - if ((p0 = result.indexOf("===")) >= 0) { - p1 = result.indexOf("===", p0 + 3); - if (p1 >= 0) result = result.substring(0, p0) + "

" + - result.substring(p0 + 3, p1) + "

" + - result.substring(p1 + 3); - } - if ((p0 = result.indexOf("==")) >= 0) { - p1 = result.indexOf("==", p0 + 2); - if (p1 >= 0) result = result.substring(0, p0) + "

" + - result.substring(p0 + 2, p1) + "

" + - result.substring(p1 + 2); - } + // format headers + if ((p0 = result.indexOf("====")) >= 0) { + p1 = result.indexOf("====", p0 + 4); + if (p1 >= 0) result = result.substring(0, p0) + "

" + + result.substring(p0 + 4, p1) + "

" + + result.substring(p1 + 4); + } + if ((p0 = result.indexOf("===")) >= 0) { + p1 = result.indexOf("===", p0 + 3); + if (p1 >= 0) result = result.substring(0, p0) + "

" + + result.substring(p0 + 3, p1) + "

" + + result.substring(p1 + 3); + } + if ((p0 = result.indexOf("==")) >= 0) { + p1 = result.indexOf("==", p0 + 2); + if (p1 >= 0) result = result.substring(0, p0) + "

" + + result.substring(p0 + 2, p1) + "

" + + result.substring(p1 + 2); + } - if ((p0 = result.indexOf("''''")) >= 0) { - p1 = result.indexOf("''''", p0 + 4); - if (p1 >= 0) result = result.substring(0, p0) + "" + - result.substring(p0 + 4, p1) + "" + - result.substring(p1 + 4); - } - if ((p0 = result.indexOf("'''")) >= 0) { - p1 = result.indexOf("'''", p0 + 3); - if (p1 >= 0) result = result.substring(0, p0) + "" + - result.substring(p0 + 3, p1) + "" + - result.substring(p1 + 3); - } - if ((p0 = result.indexOf("''")) >= 0) { - p1 = result.indexOf("''", p0 + 2); - if (p1 >= 0) result = result.substring(0, p0) + "" + - result.substring(p0 + 2, p1) + "" + - result.substring(p1 + 2); - } + if ((p0 = result.indexOf("''''")) >= 0) { + p1 = result.indexOf("''''", p0 + 4); + if (p1 >= 0) result = result.substring(0, p0) + "" + + result.substring(p0 + 4, p1) + "" + + result.substring(p1 + 4); + } + if ((p0 = result.indexOf("'''")) >= 0) { + p1 = result.indexOf("'''", p0 + 3); + if (p1 >= 0) result = result.substring(0, p0) + "" + + result.substring(p0 + 3, p1) + "" + + result.substring(p1 + 3); + } + if ((p0 = result.indexOf("''")) >= 0) { + p1 = result.indexOf("''", p0 + 2); + if (p1 >= 0) result = result.substring(0, p0) + "" + + result.substring(p0 + 2, p1) + "" + + result.substring(p1 + 2); + } - //* unorderd Lists contributed by [AS] - //** Sublist - if(result.startsWith(ListLevel + "*")){ //more stars - p0 = result.indexOf(ListLevel); - p1 = result.length(); - result = ""; + i--; + } + ListLevel = ListLevel.substring(0,i); + p0 = ListLevel.length(); + p1 = result.length(); - if(ListLevel.length() > 0){ - result = tmp + - "
  • " + - result.substring(p0, p1) + - "
  • "; - }else{ + if(ListLevel.length() > 0){ + result = tmp + + "
  • " + + result.substring(p0, p1) + + "
  • "; + }else{ result = tmp + result.substring(p0, p1); - } - } + } + } - //# sorted Lists contributed by [AS] - //## Sublist - if(result.startsWith(numListLevel + "#")){ //more # - p0 = result.indexOf(numListLevel); - p1 = result.length(); - result = "
      " + serverCore.crlfString + - "
    1. " + - result.substring(numListLevel.length() + 1, p1) + - "
    2. "; - numListLevel += "#"; - }else if(numListLevel.length() > 0 && result.startsWith(numListLevel)){ //equal number of # - p0 = result.indexOf(numListLevel); - p1 = result.length(); - result = "
    3. " + - result.substring(numListLevel.length(), p1) + - "
    4. "; - }else if(numListLevel.length() > 0){ //less # - int i = numListLevel.length(); - String tmp = ""; + //# sorted Lists contributed by [AS] + //## Sublist + if(result.startsWith(numListLevel + "#")){ //more # + p0 = result.indexOf(numListLevel); + p1 = result.length(); + result = "
        " + serverCore.crlfString + + "
      1. " + + result.substring(numListLevel.length() + 1, p1) + + "
      2. "; + numListLevel += "#"; + }else if(numListLevel.length() > 0 && result.startsWith(numListLevel)){ //equal number of # + p0 = result.indexOf(numListLevel); + p1 = result.length(); + result = "
      3. " + + result.substring(numListLevel.length(), p1) + + "
      4. "; + }else if(numListLevel.length() > 0){ //less # + int i = numListLevel.length(); + String tmp = ""; - while(! result.startsWith(numListLevel.substring(0,i)) ){ - tmp += "
      "; - i--; - } - numListLevel = numListLevel.substring(0,i); - p0 = numListLevel.length(); - p1 = result.length(); + while(! result.startsWith(numListLevel.substring(0,i)) ){ + tmp += "
    "; + i--; + } + numListLevel = numListLevel.substring(0,i); + p0 = numListLevel.length(); + p1 = result.length(); - if(numListLevel.length() > 0){ - result = tmp + - "
  • " + - result.substring(p0, p1) + - "
  • "; - }else{ - result = tmp + result.substring(p0, p1); - } - } - // end contrib [AS] + if(numListLevel.length() > 0){ + result = tmp + + "
  • " + + result.substring(p0, p1) + + "
  • "; + }else{ + result = tmp + result.substring(p0, p1); + } + } + // end contrib [AS] - //* definition Lists contributed by [MN] based on unordered list code by [AS] - if(result.startsWith(defListLevel + ";")){ //more semicolons - String dt = ""; - String dd = ""; - p0 = result.indexOf(defListLevel); - p1 = result.length(); - String resultCopy = result.substring(defListLevel.length() + 1, p1); - if((p0 = resultCopy.indexOf(":")) > 0){ - dt = resultCopy.substring(0,p0); - dd = resultCopy.substring(p0+1); - result = "
    " + "
    " + dt + "
    " + "
    " + dd; - defList = true; - } - defListLevel += ";"; - }else if(defListLevel.length() > 0 && result.startsWith(defListLevel)){ //equal number of semicolons - String dt = ""; - String dd = ""; - p0 = result.indexOf(defListLevel); - p1 = result.length(); - String resultCopy = result.substring(defListLevel.length(), p1); - if((p0 = resultCopy.indexOf(":")) > 0){ - dt = resultCopy.substring(0,p0); - dd = resultCopy.substring(p0+1); - result = "
    " + dt + "
    " + "
    " + dd; - defList = true; - } - }else if(defListLevel.length() > 0){ //less semicolons - String dt = ""; - String dd = ""; - int i = defListLevel.length(); - String tmp = ""; - while(! result.startsWith(defListLevel.substring(0,i)) ){ - tmp += "
    "; - i--; - } - defListLevel = defListLevel.substring(0,i); - p0 = defListLevel.length(); - p1 = result.length(); - if(defListLevel.length() > 0){ - String resultCopy = result.substring(p0, p1); - if((p0 = resultCopy.indexOf(":")) > 0){ - dt = resultCopy.substring(0,p0); - dd = resultCopy.substring(p0+1); - result = tmp + "
    " + dt + "
    " + "
    " + dd; - defList = true; - } + //* definition Lists contributed by [MN] based on unordered list code by [AS] + if(result.startsWith(defListLevel + ";")){ //more semicolons + String dt = ""; + String dd = ""; + p0 = result.indexOf(defListLevel); + p1 = result.length(); + String resultCopy = result.substring(defListLevel.length() + 1, p1); + if((p0 = resultCopy.indexOf(":")) > 0){ + dt = resultCopy.substring(0,p0); + dd = resultCopy.substring(p0+1); + result = "
    " + "
    " + dt + "
    " + "
    " + dd; + defList = true; + } + defListLevel += ";"; + }else if(defListLevel.length() > 0 && result.startsWith(defListLevel)){ //equal number of semicolons + String dt = ""; + String dd = ""; + p0 = result.indexOf(defListLevel); + p1 = result.length(); + String resultCopy = result.substring(defListLevel.length(), p1); + if((p0 = resultCopy.indexOf(":")) > 0){ + dt = resultCopy.substring(0,p0); + dd = resultCopy.substring(p0+1); + result = "
    " + dt + "
    " + "
    " + dd; + defList = true; + } + }else if(defListLevel.length() > 0){ //less semicolons + String dt = ""; + String dd = ""; + int i = defListLevel.length(); + String tmp = ""; + while(! result.startsWith(defListLevel.substring(0,i)) ){ + tmp += "
    "; + i--; + } + defListLevel = defListLevel.substring(0,i); + p0 = defListLevel.length(); + p1 = result.length(); + if(defListLevel.length() > 0){ + String resultCopy = result.substring(p0, p1); + if((p0 = resultCopy.indexOf(":")) > 0){ + dt = resultCopy.substring(0,p0); + dd = resultCopy.substring(p0+1); + result = tmp + "
    " + dt + "
    " + "
    " + dd; + defList = true; + } - }else{ - result = tmp + result.substring(p0, p1); - } - } - // end contrib [MN] + }else{ + result = tmp + result.substring(p0, p1); + } + } + // end contrib [MN] - // create links - String kl, kv, alt, align; - int p; - // internal links and images - while ((p0 = result.indexOf("[[")) >= 0) { - p1 = result.indexOf("]]", p0 + 2); - if (p1 <= p0) break; else; { - kl = result.substring(p0 + 2, p1); + // create links + String kl, kv, alt, align; + int p; + // internal links and images + while ((p0 = result.indexOf("[[")) >= 0) { + p1 = result.indexOf("]]", p0 + 2); + if (p1 <= p0) break; else; { + kl = result.substring(p0 + 2, p1); - // this is the part of the code that's responsible for images - // contibuted by [MN] - if(kl.startsWith("Image:")){ - alt = ""; - align = ""; - kv = ""; - kl = kl.substring(6); + // this is the part of the code that's responsible for images + // contibuted by [MN] + if(kl.startsWith("Image:")){ + alt = ""; + align = ""; + kv = ""; + kl = kl.substring(6); - // are there any arguments for the image? - if ((p = kl.indexOf("|")) > 0) { - kv = kl.substring(p+1); - kl = kl.substring(0, p); + // are there any arguments for the image? + if ((p = kl.indexOf("|")) > 0) { + kv = kl.substring(p+1); + kl = kl.substring(0, p); - // if there are 2 arguments, write them into ALIGN and ALT - if ((p = kv.indexOf("|")) > 0) { - align = " align=\"" + kv.substring(0, p) +"\""; - alt = " alt=\"" + kv.substring(p + 1) +"\""; - } + // if there are 2 arguments, write them into ALIGN and ALT + if ((p = kv.indexOf("|")) > 0) { + align = " align=\"" + kv.substring(0, p) +"\""; + alt = " alt=\"" + kv.substring(p + 1) +"\""; + } - // if there is just one, put it into ALT - else alt = " alt=\"" + kv +"\""; - } + // if there is just one, put it into ALT + else alt = " alt=\"" + kv +"\""; + } - result = result.substring(0, p0) + "" + result.substring(p1 + 2); - } - // end contrib [MN] + result = result.substring(0, p0) + "" + result.substring(p1 + 2); + } + // end contrib [MN] - // if it's no image, it might be an internal link - else { + // if it's no image, it might be an internal link + else { - if ((p = kl.indexOf("|")) > 0) { - kv = kl.substring(p + 1); - kl = kl.substring(0, p); - } else { - kv = kl; - } - if (switchboard.wikiDB.read(kl) != null) - result = result.substring(0, p0) + - "" + kv + "" + - result.substring(p1 + 2); - else - result = result.substring(0, p0) + - "" + kv + "" + - result.substring(p1 + 2); - } + if ((p = kl.indexOf("|")) > 0) { + kv = kl.substring(p + 1); + kl = kl.substring(0, p); + } else { + kv = kl; + } + if (switchboard.wikiDB.read(kl) != null) + result = result.substring(0, p0) + + "" + kv + "" + + result.substring(p1 + 2); + else + result = result.substring(0, p0) + + "" + kv + "" + + result.substring(p1 + 2); + } + } } - } - // external links - while ((p0 = result.indexOf("[")) >= 0) { - p1 = result.indexOf("]", p0 + 1); - if (p1 <= p0) break; else { - kl = result.substring(p0 + 1, p1); - if ((p = kl.indexOf(" ")) > 0) { - kv = kl.substring(p + 1); - kl = kl.substring(0, p); - } else { - kv = kl; - } - if (!(kl.startsWith("http://"))) kl = "http://" + kl; - result = result.substring(0, p0) + - "" + kv + "" + - result.substring(p1 + 1); + // external links + while ((p0 = result.indexOf("[")) >= 0) { + p1 = result.indexOf("]", p0 + 1); + if (p1 <= p0) break; else { + kl = result.substring(p0 + 1, p1); + if ((p = kl.indexOf(" ")) > 0) { + kv = kl.substring(p + 1); + kl = kl.substring(0, p); + } else { + kv = kl; + } + if (!(kl.startsWith("http://"))) kl = "http://" + kl; + result = result.substring(0, p0) + + "" + kv + "" + + result.substring(p1 + 1); + } } } - if ((result.endsWith(""))||(defList)) return result; else return result + "
    "; + //escape code contributed by [MN] + //both [= and =] in the same line + else if(((p0 = result.indexOf("[="))>=0)&&((p1 = result.indexOf("=]"))>=0)){ + String escapeText = result.substring(p0+2,p1); + result = transformLine(result.substring(0,p0)+"!escape!!Text!"+result.substring(p1+2), switchboard); + result = result.replaceAll("!escape!!Text!", escapeText); + } + + //start [= + else if(((p0 = result.indexOf("[="))>=0)&&(!escapeSpan)){ + escape = true; //prevent surplus line breaks + String escapeText = result.substring(p0+2); + result = transformLine(result.substring(0,p0)+"!escape!!Text!", switchboard); + result = result.replaceAll("!escape!!Text!", escapeText); + escape = false; + escapeSpan = true; + } + + //end =] + else if(((p0 = result.indexOf("=]"))>=0)&&(escapeSpan)){ + escapeSpan = false; + String escapeText = result.substring(0,p0); + result = transformLine("!escape!!Text!"+result.substring(p0+2), switchboard); + result = result.replaceAll("!escape!!Text!", escapeText); + } + //end contrib [MN] + + if ((result.endsWith(""))||(defList)||(escape)) return result; else return result + "
    "; } /* what we need: @@ -402,6 +438,11 @@ public class wikiCode { A picture: [[Image:Wiki.png]] [[Image:Wiki.png|right|jigsaw globe]] (floating right-side with caption) + + + what we got in addition to that: + + [= escape characters =] */