summaryrefslogtreecommitdiffstats
path: root/parsers/CodeBlocks.java
diff options
context:
space:
mode:
authorrsiddharth <rsiddharth@ninthfloor.org>2012-06-23 22:44:40 +0530
committerrsiddharth <rsiddharth@ninthfloor.org>2012-06-23 22:44:40 +0530
commit8bcd7f58acd38f5d5e1731f89be4a10a79d0fdb7 (patch)
tree6c1d4dfc97d77230ecf95d4e0f8b4fe1cde5b739 /parsers/CodeBlocks.java
scruf is "bzr"ed now.
Diffstat (limited to 'parsers/CodeBlocks.java')
-rw-r--r--parsers/CodeBlocks.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/parsers/CodeBlocks.java b/parsers/CodeBlocks.java
new file mode 100644
index 0000000..f3adb52
--- /dev/null
+++ b/parsers/CodeBlocks.java
@@ -0,0 +1,42 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class CodeBlocks implements Parser {
+ public String parse(String fileContent) {
+ Pattern pattern = Pattern.compile("(\\~\\~)\\n*(.+?)\\n*(\\1)",
+ Pattern.DOTALL);
+ Matcher matcher = pattern.matcher(fileContent);
+ LineBreak lbreak = new LineBreak();
+ StringBuffer sbuffer = new StringBuffer();
+ StringBuilder replacement = new StringBuilder();
+ while(matcher.find()) {
+ replacement.delete(0,replacement.length());
+ replacement.append("<code>");
+ replacement.append(quote(lbreak.parse(matcher.group(2))));
+ replacement.append("</code>");
+ matcher.appendReplacement(sbuffer,replacement.toString());
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+ /**
+ * this method quotes special characters -- `\` &
+ * `$`, in the replacment string as they have
+ * special meaning.
+ *
+ */
+ private String quote(String string) {
+ Pattern pattern = Pattern.compile("\\$|\\\\");
+ Matcher matcher = pattern.matcher(string);
+ StringBuffer sbuffer = new StringBuffer();
+ String rep;
+ while(matcher.find()) {
+ rep = "\\\\\\"+matcher.group();
+ matcher.appendReplacement(sbuffer,rep);
+
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+} \ No newline at end of file