summaryrefslogtreecommitdiffstats
path: root/parsers
diff options
context:
space:
mode:
Diffstat (limited to 'parsers')
-rw-r--r--parsers/BackButton.java22
-rw-r--r--parsers/CodeBlocks.java42
-rw-r--r--parsers/DocumentName.java18
-rw-r--r--parsers/Footer.java17
-rw-r--r--parsers/Header.java37
-rw-r--r--parsers/Headings.java21
-rw-r--r--parsers/Images.java20
-rw-r--r--parsers/LineBreak.java16
-rw-r--r--parsers/Links.java17
-rw-r--r--parsers/NullIt.java15
-rw-r--r--parsers/Paragraphs.java19
-rw-r--r--parsers/Parser.java24
-rw-r--r--parsers/ParserList.java31
-rw-r--r--parsers/WordDecoration.java31
14 files changed, 330 insertions, 0 deletions
diff --git a/parsers/BackButton.java b/parsers/BackButton.java
new file mode 100644
index 0000000..e20b640
--- /dev/null
+++ b/parsers/BackButton.java
@@ -0,0 +1,22 @@
+package scruf.parsers;
+
+import java.io.*;
+import scruf.io.*;
+
+public class BackButton implements Parser {
+ // this method doesn't modify the filContent.
+ public String parse(String fileContent) {
+ StringBuilder button = new StringBuilder();
+ button.append("\n<div class=\"back\">\n");
+ button.append("<a href=\"");
+ if(PresentFile.file.getName().equals("index")) {
+ button.append("../\"> home ");
+ }else {
+ button.append("./\"> back ");
+ }
+ button.append("</a>\n");
+ button.append("</div>");
+ PresentFile.backButton = button.toString();
+ return fileContent;
+ }
+} \ No newline at end of file
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
diff --git a/parsers/DocumentName.java b/parsers/DocumentName.java
new file mode 100644
index 0000000..d0360c1
--- /dev/null
+++ b/parsers/DocumentName.java
@@ -0,0 +1,18 @@
+package scruf.parsers;
+
+import java.io.*;
+import scruf.io.*;
+
+public class DocumentName implements Parser {
+ public String parse(String fileContent) {
+ BufferedReader read =
+ new BufferedReader(new StringReader(fileContent));
+ try {
+ PresentFile.name = read.readLine();
+ }catch(IOException e) {
+ System.err.println("Error reading string "+e);
+ }
+ fileContent = new NullIt().nullIt(fileContent,PresentFile.name);
+ return fileContent;
+ }
+} \ No newline at end of file
diff --git a/parsers/Footer.java b/parsers/Footer.java
new file mode 100644
index 0000000..4ff50ed
--- /dev/null
+++ b/parsers/Footer.java
@@ -0,0 +1,17 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+import scruf.io.*;
+public class Footer implements Parser {
+ public String parse(String fileContent) {
+ Pattern pattern = Pattern.compile("\\-{70}\\n(.+)\\n\\-{70}");
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ while(matcher.find()) {
+ PresentFile.footer = "<footer>"+matcher.group(1)+"</footer>";
+ fileContent = new NullIt().nullIt(fileContent,matcher.group());
+ }
+
+ return fileContent;
+ }
+} \ No newline at end of file
diff --git a/parsers/Header.java b/parsers/Header.java
new file mode 100644
index 0000000..99114ae
--- /dev/null
+++ b/parsers/Header.java
@@ -0,0 +1,37 @@
+package scruf.parsers;
+
+import scruf.io.*;
+
+public class Header implements Parser {
+
+ private String fileContent;
+ private StringBuilder sbuilder;
+
+ public String parse(String fileContent) {
+
+ sbuilder = new StringBuilder();
+
+ // Embed necessay headers.
+ sbuilder.append("<!DOCTYPE html> \n");
+ sbuilder.append("<head> \n");
+ sbuilder.append(" <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" /> \n");
+ sbuilder.append("<title>");
+ sbuilder.append(PresentFile.name);
+ sbuilder.append("</title>");
+ sbuilder.append("</head> \n");
+ sbuilder.append("<body> \n");
+ // insert File Content.
+ sbuilder.append(fileContent);
+ // insert back button.
+ sbuilder.append(PresentFile.backButton);
+ // Close body
+ sbuilder.append("\n</body>\n");
+ if(PresentFile.footer!=null) {
+ sbuilder.append(PresentFile.footer);
+ }
+ sbuilder.append("</html>\n");
+
+ return sbuilder.toString();
+ }
+
+} \ No newline at end of file
diff --git a/parsers/Headings.java b/parsers/Headings.java
new file mode 100644
index 0000000..b23966c
--- /dev/null
+++ b/parsers/Headings.java
@@ -0,0 +1,21 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class Headings implements Parser {
+ public String parse(String fileContent) {
+ int size;
+ Pattern pattern = Pattern.compile("(\\={10,})\\n(.+?)\\n(\\1)");
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ while(matcher.find()) {
+ size = (matcher.group(1).length())/10;
+ matcher.appendReplacement(sbuffer,
+ "<h"+size+"> "+
+ "$2 "+
+ "</h"+size+">");
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+}
diff --git a/parsers/Images.java b/parsers/Images.java
new file mode 100644
index 0000000..c55018a
--- /dev/null
+++ b/parsers/Images.java
@@ -0,0 +1,20 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class Images implements Parser {
+ public String parse(String fileContent) {
+ Pattern pattern = Pattern.compile("\\{\\{(.+\\.(png|jpg))\\|(.+)\\}\\}");
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ StringBuilder replacementString = new StringBuilder();
+ replacementString.append("<div class=\"img\">");
+ replacementString.append("<image src=\"$1\" alt=\"$3\" />");
+ replacementString.append("</div>");
+ while(matcher.find()) {
+ matcher.appendReplacement(sbuffer,replacementString.toString());
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+} \ No newline at end of file
diff --git a/parsers/LineBreak.java b/parsers/LineBreak.java
new file mode 100644
index 0000000..09aee07
--- /dev/null
+++ b/parsers/LineBreak.java
@@ -0,0 +1,16 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class LineBreak implements Parser {
+ public String parse(String fileContent) {
+ Pattern pattern = Pattern.compile("\\n");
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ while(matcher.find()) {
+ matcher.appendReplacement(sbuffer,"<br />");
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+} \ No newline at end of file
diff --git a/parsers/Links.java b/parsers/Links.java
new file mode 100644
index 0000000..caa258d
--- /dev/null
+++ b/parsers/Links.java
@@ -0,0 +1,17 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class Links implements Parser {
+ public String parse(String fileContent) {
+ Pattern pattern = Pattern.compile("\\[\\[(.+?)\\|(.+?)\\]\\]");
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ String replacementString = "<a href=\"$1\" target=\"_blank\">$2</a>";
+ while(matcher.find()) {
+ matcher.appendReplacement(sbuffer,replacementString);
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+} \ No newline at end of file
diff --git a/parsers/NullIt.java b/parsers/NullIt.java
new file mode 100644
index 0000000..29fdf00
--- /dev/null
+++ b/parsers/NullIt.java
@@ -0,0 +1,15 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class NullIt {
+ public String nullIt(String content,String regex) {
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(content);
+ while(matcher.find()) {
+ content = matcher.replaceFirst("");
+ break;
+ }
+ return content;
+ }
+} \ No newline at end of file
diff --git a/parsers/Paragraphs.java b/parsers/Paragraphs.java
new file mode 100644
index 0000000..0d6fda6
--- /dev/null
+++ b/parsers/Paragraphs.java
@@ -0,0 +1,19 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+
+public class Paragraphs implements Parser {
+
+ public String parse(String fileContent) {
+
+ Pattern pattern = Pattern.compile("((^.+$)\\n)+",Pattern.MULTILINE);
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuilder sbuilder = new StringBuilder();
+ while(matcher.find()) {
+ sbuilder.append("\n<p>\n");
+ sbuilder.append(matcher.group());
+ sbuilder.append("</p>\n");
+ }
+ return sbuilder.toString();
+ }
+} \ No newline at end of file
diff --git a/parsers/Parser.java b/parsers/Parser.java
new file mode 100644
index 0000000..7bddbdc
--- /dev/null
+++ b/parsers/Parser.java
@@ -0,0 +1,24 @@
+/*+
+ * Copyright (C) 2012-2013 rsiddharth
+ * email me : rsiddharth@ninthfloor.org
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package scruf.parsers;
+
+public interface Parser {
+ public String parse(String fileContent);
+}
+
diff --git a/parsers/ParserList.java b/parsers/ParserList.java
new file mode 100644
index 0000000..11e3de0
--- /dev/null
+++ b/parsers/ParserList.java
@@ -0,0 +1,31 @@
+package scruf.parsers;
+
+import java.util.*;
+
+public class ParserList {
+ private List<Parser> parsers;
+ public ParserList() {
+ parsers = new ArrayList<Parser>();
+ // add Parsers.
+ parsers.add(new DocumentName());
+ parsers.add(new WordDecoration());
+ parsers.add(new CodeBlocks());
+ parsers.add(new Headings());
+ parsers.add(new Paragraphs());
+ parsers.add(new Links());
+ parsers.add(new Images());
+ parsers.add(new Footer());
+ parsers.add(new BackButton());
+ parsers.add(new Header());
+ }
+ public List<Parser> list() {
+ return new ArrayList<Parser>(parsers);
+ }
+ public static void main(String[] args) {
+ ParserList pl = new ParserList();
+ List<Parser> parser = pl.list();
+ parser.remove(0);
+ for(Parser p:pl.list())
+ System.out.println(p);
+ }
+}
diff --git a/parsers/WordDecoration.java b/parsers/WordDecoration.java
new file mode 100644
index 0000000..b2df37e
--- /dev/null
+++ b/parsers/WordDecoration.java
@@ -0,0 +1,31 @@
+package scruf.parsers;
+
+import java.util.regex.*;
+import java.util.*;
+import java.io.*;
+import scruf.io.*;
+
+public class WordDecoration implements Parser {
+ private HashMap<String, String> tagMap;
+ public WordDecoration() {
+ tagMap = new HashMap<String, String>();
+ tagMap.put("''","<i>$6</i>");
+ tagMap.put("__","<u>$6</u>");
+ tagMap.put("'''","<b>$6</b>");
+ tagMap.put("%%%","<blockquote>$6</blockquote>");
+ }
+ public String parse(String fileContent) {
+ Pattern pattern =
+ Pattern.compile("((\\'\\'\\')|(\\_\\_)|(\\'\\')|(\\%\\%\\%))(.+?)((\\2)|(\\3)|(\\4)|(\\5))",
+ Pattern.DOTALL);
+ Matcher matcher = pattern.matcher(fileContent);
+ StringBuffer sbuffer = new StringBuffer();
+ String replacement;
+ while(matcher.find()) {
+ replacement = tagMap.get(matcher.group(1));
+ matcher.appendReplacement(sbuffer,replacement);
+ }
+ matcher.appendTail(sbuffer);
+ return sbuffer.toString();
+ }
+} \ No newline at end of file