diff options
-rw-r--r-- | parsers/CodeBlocks.java | 85 | ||||
-rw-r--r-- | parsers/ParserList.java | 2 | ||||
-rw-r--r-- | parsers/QuoteSpecialText.java | 4 |
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("!","!"); + put("\"","""); + put("#","#"); + put("$","$"); + put("%","%"); + put("&","&"); + put("'","'"); + put("(","("); + put(")",")"); + put("*","*"); + put("+","+"); + put(",",","); + put("-","-"); + put(".","."); + put("/","/"); + put(":",":"); + put(";",";"); + put("<","<"); + put("=","="); + put(">",">"); + put("?","?"); + put("@","@"); + put("[","["); + put("\\","\"); + put("]","]"); + put("^","^"); + put("_","_"); + put("`","`"); + put("{","{"); + put("|","|"); + put("}","}"); + put("~","~"); + } +} +/** + +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(">",">"); } 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())); } |