diff options
Diffstat (limited to 'parsers')
-rw-r--r-- | parsers/BackButton.java | 22 | ||||
-rw-r--r-- | parsers/CodeBlocks.java | 42 | ||||
-rw-r--r-- | parsers/DocumentName.java | 18 | ||||
-rw-r--r-- | parsers/Footer.java | 17 | ||||
-rw-r--r-- | parsers/Header.java | 37 | ||||
-rw-r--r-- | parsers/Headings.java | 21 | ||||
-rw-r--r-- | parsers/Images.java | 20 | ||||
-rw-r--r-- | parsers/LineBreak.java | 16 | ||||
-rw-r--r-- | parsers/Links.java | 17 | ||||
-rw-r--r-- | parsers/NullIt.java | 15 | ||||
-rw-r--r-- | parsers/Paragraphs.java | 19 | ||||
-rw-r--r-- | parsers/Parser.java | 24 | ||||
-rw-r--r-- | parsers/ParserList.java | 31 | ||||
-rw-r--r-- | parsers/WordDecoration.java | 31 |
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 |