summaryrefslogtreecommitdiffstats
path: root/parsers
diff options
context:
space:
mode:
Diffstat (limited to 'parsers')
-rw-r--r--parsers/CodeBlocks.java85
-rw-r--r--parsers/ParserList.java2
-rw-r--r--parsers/QuoteSpecialText.java4
3 files changed, 78 insertions, 13 deletions
diff --git a/parsers/CodeBlocks.java b/parsers/CodeBlocks.java
index 64e8841..251c4de 100644
--- a/parsers/CodeBlocks.java
+++ b/parsers/CodeBlocks.java
@@ -22,10 +22,12 @@
package scruf.parsers;
import java.util.regex.*;
+import java.util.*;
public class CodeBlocks implements Parser {
+ private SymbolMap symbolMap = new SymbolMap();
public String parse(String fileContent) {
- Pattern pattern = Pattern.compile("(\\#\\#\\#)(\\n+)(.+?)(\\n+)(\\1)",
+ Pattern pattern = Pattern.compile("(\\#\\#\\#)(\\n)(.+?)(\\n)(\\1)",
Pattern.DOTALL);
Matcher matcher = pattern.matcher(fileContent);
LineBreak lbreak = new LineBreak();
@@ -34,7 +36,7 @@ public class CodeBlocks implements Parser {
while(matcher.find()) {
replacement.delete(0,replacement.length());
replacement.append("<div class=\"code\">");
- replacement.append(lbreak.parse(quote(matcher.group(3))));
+ replacement.append(lbreak.parse(quote(matcher.group(3))));
replacement.append("</div>");
matcher.appendReplacement(sbuffer,replacement.toString());
}
@@ -42,21 +44,84 @@ public class CodeBlocks implements Parser {
return sbuffer.toString();
}
/**
- * this method quotes special characters -- `\` &
- * `$`, in the replacment string as they have
- * special meaning.
- *
+ * this method quotes symbols to a HTML number.
*/
private String quote(String string) {
- Pattern pattern = Pattern.compile("\\$|\\\\");
+ Pattern pattern = Pattern.compile("(\\&(amp|lt|gt|(\\#35))\\;)|(\\p{Punct})");
Matcher matcher = pattern.matcher(string);
StringBuffer sbuffer = new StringBuffer();
- String rep;
while(matcher.find()) {
- rep = "\\\\\\"+matcher.group();
- matcher.appendReplacement(sbuffer,rep);
+ if(matcher.group(4)!=null) {
+ matcher.appendReplacement(sbuffer,
+ symbolMap.get(matcher.group()));
+ }
}
matcher.appendTail(sbuffer);
return sbuffer.toString();
}
}
+
+/**
+ * Map of Symbols & their HTML equivalent numbers.
+ */
+class SymbolMap extends HashMap<String, String> {
+ public SymbolMap() {
+ put("!","&#33;");
+ put("\"","&#34;");
+ put("#","&#35;");
+ put("$","&#36;");
+ put("%","&#37;");
+ put("&","&#38;");
+ put("'","&#39;");
+ put("(","&#40;");
+ put(")","&#41;");
+ put("*","&#42;");
+ put("+","&#43;");
+ put(",","&#44;");
+ put("-","&#45;");
+ put(".","&#46;");
+ put("/","&#47;");
+ put(":","&#58;");
+ put(";","&#59;");
+ put("<","&#60;");
+ put("=","&#61;");
+ put(">","&#62;");
+ put("?","&#63;");
+ put("@","&#64;");
+ put("[","&#91;");
+ put("\\","&#92;");
+ put("]","&#93;");
+ put("^","&#94;");
+ put("_","&#95;");
+ put("`","&#96;");
+ put("{","&#123;");
+ put("|","&#124;");
+ put("}","&#125;");
+ put("~","&#126;");
+ }
+}
+/**
+
+Special Case:
+
+###
+
+.
+{
+###
+oced
+###
+.
+###
+code
+###
+.
+###
+fizz
+###
+}
+.
+###
+
+
+*/ \ No newline at end of file
diff --git a/parsers/ParserList.java b/parsers/ParserList.java
index 999dadc..685de25 100644
--- a/parsers/ParserList.java
+++ b/parsers/ParserList.java
@@ -30,9 +30,9 @@ public class ParserList {
// add Parsers. NOTE: parser order is significant.
parsers.add(new QuoteSpecialText());
parsers.add(new DocumentName());
+ parsers.add(new CodeBlocks());
parsers.add(new DocumentDate());
parsers.add(new WordDecoration());
- parsers.add(new CodeBlocks());
parsers.add(new Headings());
parsers.add(new Links());
parsers.add(new Images());
diff --git a/parsers/QuoteSpecialText.java b/parsers/QuoteSpecialText.java
index 165ffa9..76241cc 100644
--- a/parsers/QuoteSpecialText.java
+++ b/parsers/QuoteSpecialText.java
@@ -33,10 +33,10 @@ public class QuoteSpecialText implements Parser {
qmap.put(">","&gt;");
}
public String parse(String fileContent) {
- Pattern pattern = Pattern.compile("(\\&)|(\\<)|(\\>)");
+ Pattern pattern = Pattern.compile("(\\&\\#35\\;)|(\\&)|(\\<)|(\\>)");
Matcher matcher = pattern.matcher(fileContent);
StringBuffer sbuffer = new StringBuffer();
- while(matcher.find()) {
+ while(matcher.find() && matcher.group(1)==null) {
matcher.appendReplacement(sbuffer,
qmap.get(matcher.group()));
}