diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..2306fc9
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="Prettify" default="default" basedir=".">
+    <description>Builds, tests, and runs the project Prettify.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties
+      -post-init:                called after initialization of project properties
+      -pre-compile:              called before javac compilation
+      -post-compile:             called after javac compilation
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-jar:                  called before JAR building
+      -post-jar:                 called after JAR building
+      -post-clean:               called after cleaning build products
+
+    (Targets beginning with '-' are not intended to be called on their own.)
+
+    Example of inserting an obfuscator after compilation could look like this:
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Another way to customize the build is by overriding existing main targets.
+    The targets of interest are: 
+
+      -init-macrodef-javac:     defines macro for javac compilation
+      -init-macrodef-junit:     defines macro for junit execution
+      -init-macrodef-debug:     defines macro for class debugging
+      -init-macrodef-java:      defines macro for class execution
+      -do-jar-with-manifest:    JAR building (if you are using a manifest)
+      -do-jar-without-manifest: JAR building (if you are not using a manifest)
+      run:                      execution of project 
+      -javadoc-build:           Javadoc generation
+      test-report:              JUnit report generation
+
+    An example of overriding the target for project execution could look like this:
+
+        <target name="run" depends="Prettify-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that the overridden target depends on the jar target and not only on 
+    the compile target as the regular run target does. Again, for a list of available 
+    properties which you can use, check the target you are overriding in the
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
diff --git a/manifest.mf b/manifest.mf
new file mode 100644
index 0000000..d12ceec
--- /dev/null
+++ b/manifest.mf
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+X-COMMENT: 
+
diff --git a/nbproject/project.properties b/nbproject/project.properties
index f4a767d..ac5d4e0 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -1,9 +1,9 @@
 annotation.processing.enabled=true
 annotation.processing.enabled.in.editor=false
-annotation.processing.processor.options=
-annotation.processing.processors.list=
 annotation.processing.run.all.processors=true
 annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=Java Prettify
+application.vendor=Chan Wai Shing
 build.classes.dir=${build.dir}/classes
 build.classes.excludes=**/*.java,**/*.form
 # This directory is removed when the project is cleaned:
@@ -24,24 +24,28 @@
 dist.dir=dist
 dist.jar=${dist.dir}/Prettify.jar
 dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
 excludes=
 includes=**
-jar.compress=false
+jar.archive.disabled=${jnlp.enabled}
+jar.compress=true
+jar.index=${jnlp.enabled}
 javac.classpath=
 # Space-separated list of extra javac options
 javac.compilerargs=
-javac.deprecation=false
+javac.deprecation=true
 javac.processorpath=\
     ${javac.classpath}
 javac.source=1.6
 javac.target=1.6
 javac.test.classpath=\
     ${javac.classpath}:\
-    ${build.classes.dir}
+    ${build.classes.dir}:\
+    ${libs.junit_4.classpath}
 javac.test.processorpath=\
     ${javac.test.classpath}
 javadoc.additionalparam=
-javadoc.author=false
+javadoc.author=true
 javadoc.encoding=${source.encoding}
 javadoc.noindex=false
 javadoc.nonavbar=false
@@ -49,8 +53,17 @@
 javadoc.private=false
 javadoc.splitindex=true
 javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
+javadoc.version=true
+javadoc.windowtitle=Java Prettify
+jnlp.codebase.type=no.codebase
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.mixed.code=default
+jnlp.offline-allowed=false
+jnlp.signed=false
+jnlp.signing=
+jnlp.signing.alias=
+jnlp.signing.keystore=
 main.class=
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
diff --git a/src/prettify/CombinePrefixPattern.java b/src/prettify/CombinePrefixPattern.java
index d9348d3..e75500b 100644
--- a/src/prettify/CombinePrefixPattern.java
+++ b/src/prettify/CombinePrefixPattern.java
@@ -46,7 +46,7 @@
             Pattern regex = regexs.get(i);
             if ((regex.flags() & Pattern.CASE_INSENSITIVE) != 0) {
                 ignoreCase = true;
-            } else if (regex.pattern().replaceAll("(?i)\\\\u[0-9a-f]{4}|\\\\x[0-9a-f]{2}|\\\\[^ux]", "").matches("(?i)[a-z]")) {
+            } else if (Util.test(Pattern.compile("[a-z]", Pattern.CASE_INSENSITIVE), regex.pattern().replaceAll("\\\\[Uu][0-9A-Fa-f]{4}|\\\\[Xx][0-9A-Fa-f]{2}|\\\\[^UuXx]", ""))) {
                 needToFoldCase = true;
                 ignoreCase = false;
                 break;
@@ -121,7 +121,7 @@
 
         for (int i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
             String p = charsetParts[i];
-            if (p.matches("(?i)\\\\[bdsw]")) {  // Don't muck with named groups.
+            if (Util.test(Pattern.compile("\\\\[bdsw]", Pattern.CASE_INSENSITIVE), p)) {  // Don't muck with named groups.
                 out.add(p);
             } else {
                 int start = decodeEscape(p);
@@ -158,26 +158,26 @@
             }
         });
         List<List<Integer>> consolidatedRanges = new ArrayList<List<Integer>>();
-        Map<Integer, Integer> lastRange = new HashMap<Integer, Integer>();
+//        List<Integer> lastRange = Arrays.asList(new Integer[]{0, 0});
+        List<Integer> lastRange = new ArrayList<Integer>(Arrays.asList(new Integer[]{0, 0}));
         for (int i = 0; i < ranges.size(); ++i) {
             List<Integer> range = ranges.get(i);
             if (lastRange.get(1) != null && range.get(0) <= lastRange.get(1) + 1) {
-                lastRange.put(1, Math.max(lastRange.get(1), range.get(1)));
+                lastRange.set(1, Math.max(lastRange.get(1), range.get(1)));
             } else {
-                consolidatedRanges.add(range);
-                lastRange.put(0, range.get(0));
-                lastRange.put(1, range.get(1));
+                // reference of lastRange is added
+                consolidatedRanges.add(lastRange = range);
             }
         }
 
         for (int i = 0; i < consolidatedRanges.size(); ++i) {
             List<Integer> range = consolidatedRanges.get(i);
-            out.add(encodeEscape((int) range.get(0)));
+            out.add(encodeEscape(range.get(0)));
             if (range.get(1) > range.get(0)) {
                 if (range.get(1) + 1 > range.get(0)) {
                     out.add("-");
                 }
-                out.add(encodeEscape((int) range.get(1)));
+                out.add(encodeEscape(range.get(1)));
             }
         }
         out.add("]");
@@ -267,16 +267,17 @@
         if ((regex.flags() & Pattern.CASE_INSENSITIVE) != 0 && needToFoldCase) {
             for (int i = 0; i < n; ++i) {
                 String p = parts[i];
-                char ch0 = p.charAt(0);
+                char ch0 = p.length() > 0 ? p.charAt(0) : 0;
                 if (p.length() >= 2 && ch0 == '[') {
                     parts[i] = caseFoldCharset(p);
-                } else if (ch0 == '\\') {
+                } else if (ch0 != '\\') {
                     // TODO: handle letters in numeric escapes.
                     StringBuffer sb = new StringBuffer();
                     Matcher _matcher = Pattern.compile("[a-zA-Z]").matcher(p);
                     while (_matcher.find()) {
                         int cc = _matcher.group(0).codePointAt(0);
-                        _matcher.appendReplacement(sb, "[" + Character.toString((char) (cc & ~32)) + Character.toString((char) (cc | 32)) + "]");
+                        _matcher.appendReplacement(sb, "");
+                        sb.append("[").append(Character.toString((char) (cc & ~32))).append(Character.toString((char) (cc | 32))).append("]");
                     }
                     _matcher.appendTail(sb);
                     parts[i] = sb.toString();
diff --git a/src/prettify/Prettify.java b/src/prettify/Prettify.java
index 5e50f7a..cf7ddfb 100644
--- a/src/prettify/Prettify.java
+++ b/src/prettify/Prettify.java
@@ -13,12 +13,12 @@
 // limitations under the License.
 package prettify;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.regex.Pattern;
@@ -121,7 +121,7 @@
     /**
      * token style for a type
      */
-    public static final String PR_TYPE = "';";
+    public static final String PR_TYPE = "typ";
     /**
      * token style for a literal value.  e.g. 1, null, true.
      */
@@ -212,8 +212,10 @@
             shortcutStylePatterns = new ArrayList<List<Object>>();
             fallthroughStylePatterns = new ArrayList<List<Object>>();
             shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_PLAIN, Pattern.compile("^[\\s]+"), null, " \t\r\n"}));
-            shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_ATTRIB_VALUE, Pattern.compile("^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)"), null, " \t\r\n"}));
-            fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-uq.val", Pattern.compile("^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$", Pattern.CASE_INSENSITIVE)}));
+            shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_ATTRIB_VALUE, Pattern.compile("^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)"), null, "\'"}));
+            fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_TAG, Pattern.compile("^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$", Pattern.CASE_INSENSITIVE)}));
+            fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_ATTRIB_NAME, Pattern.compile("^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?", Pattern.CASE_INSENSITIVE)}));
+            fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-uq.val", Pattern.compile("^=\\s*([^>\\'\\\"\\s]*(?:[^>\\'\\\"\\s\\/]|\\/(?=\\s)))", Pattern.CASE_INSENSITIVE)}));
             fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_PUNCTUATION, Pattern.compile("^[=<>\\/]+")}));
             fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-js", Pattern.compile("^on\\w+\\s*=\\s*\\\"([^\\\"]+)\\\"", Pattern.CASE_INSENSITIVE)}));
             fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-js", Pattern.compile("^on\\w+\\s*=\\s*\\'([^\\']+)\\'", Pattern.CASE_INSENSITIVE)}));
@@ -379,7 +381,7 @@
             Map<String, Object> regexKeys = new HashMap<String, Object>();
             for (int i = 0, n = allPatterns.size(); i < n; ++i) {
                 List<Object> patternParts = allPatterns.get(i);
-                String shortcutChars = patternParts.size() > 4 ? (String) patternParts.get(3) : null;
+                String shortcutChars = patternParts.size() > 3 ? (String) patternParts.get(3) : null;
                 if (shortcutChars != null) {
                     for (int c = shortcutChars.length(); --c >= 0;) {
                         shortcuts.put(shortcutChars.charAt(c), patternParts);
@@ -495,7 +497,25 @@
                 }
             }
 
-            job.setDecorations(decorations);
+            List<Object> newDecorations = new ArrayList<Object>();
+
+            // use TreeMap to remove entrys with same pos
+            Map<Integer, String> posToStyleMap = new TreeMap<Integer, String>();
+            for (int i = 0, iEnd = decorations.size(); i < iEnd;) {
+                posToStyleMap.put((Integer) decorations.get(i++), (String) decorations.get(i++));
+            }
+            // remove adjacent style
+            String previousStyle = null;
+            for (Integer _pos : posToStyleMap.keySet()) {
+                if (previousStyle != null && previousStyle.equals(posToStyleMap.get(_pos))) {
+                    continue;
+                }
+                newDecorations.add(_pos);
+                newDecorations.add(posToStyleMap.get(_pos));
+                previousStyle = posToStyleMap.get(_pos);
+            }
+
+            job.setDecorations(newDecorations);
         }
     }
 
@@ -684,20 +704,10 @@
         if (!(extension != null && langHandlerRegistry.get(extension) != null)) {
             // Treat it as markup if the first non whitespace character is a < and
             // the last non-whitespace character is a >.
-            extension = source.matches("^\\s&<")
+            extension = Util.test(Pattern.compile("^\\s&<"), source)
                     ? "default-markup"
                     : "default-code";
         }
         return langHandlerRegistry.get(extension);
     }
-
-    public static void main(String[] args) throws IOException {
-        Job job = new Job();
-        job.setBasePos(0);
-        job.setSourceCode(new String(Util.readResourceFile("/prettify/example.html")));
-        Prettify prettify = new Prettify();
-        prettify.langHandlerRegistry.get("html").decorate(job);
-        List<Object> decorations = job.getDecorations();
-        System.out.println(decorations);
-    }
 }
diff --git a/src/prettify/Util.java b/src/prettify/Util.java
index 3f53f93..d4afa9c 100644
--- a/src/prettify/Util.java
+++ b/src/prettify/Util.java
@@ -1,8 +1,5 @@
 package prettify;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -13,43 +10,6 @@
  */
 public class Util {
 
-    /**
-     * Read the resource file from the jar.
-     * @param path the resource path
-     * @return the content of the resource file in byte array
-     * @throws IOException error occurred when reading the content from the file
-     */
-    public static byte[] readResourceFile(String path) throws IOException {
-        if (path == null) {
-            throw new NullPointerException("argument 'path' cannot be null");
-        }
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        InputStream in = null;
-        try {
-            in = Util.class.getResourceAsStream(path);
-            if (in == null) {
-                throw new IOException("Resources not found: " + path);
-            }
-
-            int byteRead = 0;
-            byte[] b = new byte[8096];
-
-            while ((byteRead = in.read(b)) != -1) {
-                bout.write(b, 0, byteRead);
-            }
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException ex) {
-                }
-            }
-        }
-
-        return bout.toByteArray();
-    }
-
     public static String[] match(Pattern pattern, String string) {
         List<String> matchesList = new ArrayList<String>();
 
@@ -61,6 +21,11 @@
         return matchesList.toArray(new String[matchesList.size()]);
     }
 
+    public static boolean test(Pattern pattern, String string) {
+        Matcher matcher = pattern.matcher(string);
+        return matcher.find();
+    }
+
     public static String join(List<String> strings) {
         return join(strings.toArray(new String[strings.size()]));
     }
diff --git a/src/prettify/example.html b/src/prettify/example.html
deleted file mode 100644
index 1ef22ae..0000000
--- a/src/prettify/example.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<head>
-    <title> HTML Script Example </title>
-    <style type="text/css">
-        body {
-            font-family: Helvetica, Geneva, Arial, sans-serif;
-            font-size: 1em;
-            margin: 4em 15em 4em 4em;
-        }
-        body.with_sponsor { margin-right: 410px; }
-        a.external {
-            background: url(../images/external.png) right 50% no-repeat;
-            padding-right: 12px;
-        }
-        code, pre, .file-list {
-            font-family: Consolas, Monaco, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
-        }
-    </style>
-    <script type="text/javascript">
-        var _gaq = _gaq || [];
-        _gaq.push(['_setAccount', 'UA-XXXXX-XX']);
-        _gaq.push(['_trackPageview']);
-
-        (function() {
-            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-        })();
-    </script>
-</head>
-<body>
-
-<div style="font-weight: bold"><?= str_replace("\n", "<br/>", $var) ?></div>
-<?php
-    /***********************************
-    ** Multiline block comments
-    **********************************/
-
-    $stringWithUrl = "http://alexgorbatchev.com";
-    $stringWithUrl = 'http://alexgorbatchev.com';
-
-    ob_start("parseOutputBuffer");      // Start Code Buffering
-    session_start();
-?>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java
new file mode 100644
index 0000000..8d4cf42
--- /dev/null
+++ b/test/prettify/PrettifyTest.java
@@ -0,0 +1,338 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package prettify;
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.ListIterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.ArrayList;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class PrettifyTest {
+
+    protected final String packagePath = "test/" + this.getClass().getCanonicalName().replace('.', '/') + "/";
+
+    public PrettifyTest() {
+    }
+
+    protected static String getClassName() {
+        return new Object() {
+        }.getClass().getEnclosingClass().getName();
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        System.out.println("***** " + getClassName() + " *****");
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+        System.out.println("******************************\r\n");
+    }
+
+    @Before
+    public void setUp() {
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+    @Test
+    public void test() throws IOException {
+        System.out.println("+++++ test +++++");
+
+        Prettify prettify = new Prettify();
+        Job job;
+        String source;
+        List<Object> decorations, compare;
+
+        source = new String(readFile(new File(packagePath + "source/bash.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/bash.txt"))));
+        assertArrayEquals("bash", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/bash_lang.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension("sh", source).decorate(job);
+        decorations = removeNewLine(job.getDecorations(), source);
+        compare = readResult(new String(readFile(new File(packagePath + "result/bash_lang.txt"))), true);
+        assertArrayEquals("bash_lang", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/java.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/java.txt"))));
+        assertArrayEquals("java", decorations.toArray(), compare.toArray());
+
+
+        source = new String(readFile(new File(packagePath + "source/java_lang.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension("java", source).decorate(job);
+        decorations = removeNewLine(job.getDecorations(), source);
+        compare = readResult(new String(readFile(new File(packagePath + "result/java_lang.txt"))), true);
+        assertArrayEquals("java_lang", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/C.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/C.txt"))));
+        assertArrayEquals("C", decorations.toArray(), compare.toArray());
+
+
+        source = new String(readFile(new File(packagePath + "source/C_lang.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension("c", source).decorate(job);
+        decorations = removeNewLine(job.getDecorations(), source);
+        compare = readResult(new String(readFile(new File(packagePath + "result/C_lang.txt"))), true);
+        assertArrayEquals("C_lang", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/Cpp.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/Cpp.txt"))));
+        assertArrayEquals("Cpp", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/Cpp_lang.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension("cpp", source).decorate(job);
+        decorations = removeNewLine(job.getDecorations(), source);
+        compare = readResult(new String(readFile(new File(packagePath + "result/Cpp_lang.txt"))), true);
+        assertArrayEquals("Cpp_lang", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/javascript.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/javascript.txt"))));
+        assertArrayEquals("javascript", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/perl.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/perl.txt"))));
+        assertArrayEquals("perl", decorations.toArray(), compare.toArray());
+
+
+        source = new String(readFile(new File(packagePath + "source/python.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension(null, source).decorate(job);
+        decorations = job.getDecorations();
+        compare = readResult(new String(readFile(new File(packagePath + "result/python.txt"))));
+        assertArrayEquals("python", decorations.toArray(), compare.toArray());
+
+        source = new String(readFile(new File(packagePath + "source/python_lang.txt")));
+        job = new Job();
+        job.setBasePos(0);
+        job.setSourceCode(source);
+        prettify.langHandlerForExtension("py", source).decorate(job);
+        decorations = removeNewLine(job.getDecorations(), source);
+        compare = readResult(new String(readFile(new File(packagePath + "result/python_lang.txt"))), true);
+        assertArrayEquals("python_lang", decorations.toArray(), compare.toArray());
+
+    }
+
+    /**
+     * Read the whole file and return the content in byte array.
+     * @param file the file to read
+     * @return the content of the file in byte array
+     * @throws IOException error occurred when reading the content from the file
+     */
+    public static byte[] readFile(File file) throws IOException {
+        if (file == null) {
+            throw new NullPointerException("argument 'file' cannot be null");
+        }
+
+        long fileLength = file.length();
+        byte[] content = new byte[(int) fileLength];
+
+        FileInputStream fin = null;
+        try {
+            fin = new FileInputStream(file);
+
+            int byteRead = 0, cumulateByteRead = 0;
+            while ((byteRead = fin.read(content, cumulateByteRead, content.length - cumulateByteRead)) != -1) {
+                cumulateByteRead += byteRead;
+                if (cumulateByteRead >= fileLength) {
+                    break;
+                }
+            }
+
+            if (cumulateByteRead != fileLength) {
+                throw new IOException("The total number of bytes read does not match the file size. Actual file size: " + fileLength + ", bytes read: " + cumulateByteRead + ", path: " + file.getAbsolutePath());
+            }
+        } finally {
+            if (fin != null) {
+                try {
+                    fin.close();
+                } catch (IOException ex) {
+                }
+            }
+        }
+
+        return content;
+    }
+
+    public static List<Object> removeNewLine(List<Object> decorations, String source) {
+        StringBuffer sb = new StringBuffer();
+        Pattern pattern = Pattern.compile("\r\n");
+        Matcher matcher = pattern.matcher(source);
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, "");
+            int posStart = sb.length();
+            ListIterator<Object> iterator = decorations.listIterator();
+            while (iterator.hasNext()) {
+                Integer pos = (Integer) iterator.next();
+                if (pos > posStart) {
+                    iterator.set(pos - 2);
+                }
+                iterator.next();
+            }
+        }
+//        matcher.appendTail(sb);
+
+        // use TreeMap to remove entrys with same pos
+        Map<Integer, Object> orderedMap = new TreeMap<Integer, Object>();
+        for (int i = 0, iEnd = decorations.size(); i < iEnd; i++) {
+            orderedMap.put((Integer) decorations.get(i), decorations.get(i + 1));
+            i++;
+        }
+        // remove adjacent style
+        List<Object> returnList = new ArrayList<Object>(orderedMap.size() + 1);
+        String previousStyle = null;
+        for (Integer _pos : orderedMap.keySet()) {
+            if (previousStyle != null && previousStyle.equals(orderedMap.get(_pos))) {
+                continue;
+            }
+            returnList.add(_pos);
+            returnList.add(orderedMap.get(_pos));
+            previousStyle = (String) orderedMap.get(_pos);
+        }
+
+        return returnList;
+    }
+
+    public static List<Object> readResult(String result) {
+        return readResult(result, false);
+    }
+
+    public static List<Object> readResult(String result, boolean removeNewLine) {
+        List<Object> returnList = new ArrayList<Object>();
+
+        int count = 0;
+
+        if (removeNewLine) {
+            while (true) {
+                StringBuffer sb = new StringBuffer();
+                result = result.replaceAll("[\r\n]", "");
+                Pattern pattern = Pattern.compile("(`[A-Z]{3})([^`]+?)`END\\1([^`]+?)`END", Pattern.MULTILINE | Pattern.DOTALL);
+                Matcher matcher = pattern.matcher(result);
+                boolean found = false;
+                while (matcher.find()) {
+                    matcher.appendReplacement(sb, "");
+                    sb.append(matcher.group(1)).append(matcher.group(2)).append(matcher.group(3)).append("`END");
+                    found = true;
+                }
+                matcher.appendTail(sb);
+                result = sb.toString();
+                if (!found) {
+                    break;
+                }
+            }
+        }
+
+        StringBuffer sb = new StringBuffer();
+        Pattern pattern = Pattern.compile("`([A-Z]{3})([^`]*?)`END", Pattern.MULTILINE | Pattern.DOTALL);
+        Matcher matcher = pattern.matcher(result);
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, "");
+            sb.append(matcher.group(2));
+
+            returnList.add(count);
+            returnList.add(matcher.group(1).toLowerCase());
+            count += matcher.group(2).length();
+        }
+        matcher.appendTail(sb);
+        String plainCode = sb.toString();
+
+        if (removeNewLine) {
+            // use TreeMap to remove entrys with same pos
+            Map<Integer, Object> orderedMap = new TreeMap<Integer, Object>();
+            for (int i = 0, iEnd = returnList.size(); i < iEnd; i++) {
+                orderedMap.put((Integer) returnList.get(i), returnList.get(i + 1));
+                i++;
+            }
+            // remove adjacent style
+            List<Object> _returnList = new ArrayList<Object>(orderedMap.size() + 1);
+            String previousStyle = null;
+            for (Integer _pos : orderedMap.keySet()) {
+                if (previousStyle != null && previousStyle.equals(orderedMap.get(_pos))) {
+                    continue;
+                }
+                _returnList.add(_pos);
+                _returnList.add(orderedMap.get(_pos));
+                previousStyle = (String) orderedMap.get(_pos);
+            }
+            returnList = _returnList;
+        }
+
+//        System.out.println(plainCode);
+        for (int i = 0, iEnd = returnList.size(); i < iEnd; i++) {
+            int end = i + 2 < iEnd ? (Integer) returnList.get(i + 2) : plainCode.length();
+//            System.out.println(returnList.get(i) + ": " + returnList.get(i + 1) + ": " + plainCode.substring((Integer) returnList.get(i), end));
+            i++;
+        }
+
+        return returnList;
+    }
+}
diff --git a/test/prettify/PrettifyTest/result/C.txt b/test/prettify/PrettifyTest/result/C.txt
new file mode 100644
index 0000000..d4e9249
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/C.txt
@@ -0,0 +1,18 @@
+`COM#include`END`PLN `END`STR<stdio.h>`END`PLN
+
+`END`COM/* the n-th fibonacci number.
+ */`END`PLN
+`END`KWDunsigned`END`PLN `END`KWDint`END`PLN fib`END`PUN(`END`KWDunsigned`END`PLN `END`KWDint`END`PLN n`END`PUN)`END`PLN `END`PUN{`END`PLN
+  `END`KWDunsigned`END`PLN `END`KWDint`END`PLN a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END`PLN
+  `END`KWDunsigned`END`PLN `END`KWDint`END`PLN tmp`END`PUN;`END`PLN
+  `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>=`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END`PLN
+    tmp `END`PUN=`END`PLN a`END`PUN;`END`PLN
+    a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+    b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+  `END`PUN}`END`PLN
+  `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+main`END`PUN()`END`PLN `END`PUN{`END`PLN
+  printf`END`PUN(`END`STR"%u"`END`PUN,`END`PLN fib`END`PUN(`END`LIT10`END`PUN));`END`PLN
+`END`PUN}`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/C_lang.txt b/test/prettify/PrettifyTest/result/C_lang.txt
new file mode 100644
index 0000000..9e666f6
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/C_lang.txt
@@ -0,0 +1,22 @@
+`COM#include`END`PLN `END`STR<stdio.h>`END`PLN
+
+`END`COM/* the nth fibonacci number. */`END`PLN
+`END`TYPuint32`END`PLN fib`END`PUN(`END`KWDunsigned`END`PLN `END`TYPint`END`PLN n`END`PUN)`END`PLN `END`PUN{`END`PLN
+  `END`TYPuint32`END`PLN a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END`PLN
+  `END`TYPuint32`END`PLN tmp`END`PUN;`END`PLN
+  `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>=`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END`PLN
+    tmp `END`PUN=`END`PLN a`END`PUN;`END`PLN
+    a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+    b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+  `END`PUN}`END`PLN
+  `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+`END`KWDvoid`END`PLN main`END`PUN()`END`PLN `END`PUN{`END`PLN
+  `END`TYPsize_t`END`PLN size `END`PUN=`END`PLN `END`KWDsizeof`END`PUN(`END`TYPwchar_t`END`PUN);`END`PLN
+  ASSERT_EQ`END`PUN(`END`PLNsize`END`PUN,`END`PLN `END`LIT1`END`PUN);`END`PLN
+  printf`END`PUN(`END`STR"%u"`END`PUN,`END`PLN fib`END`PUN(`END`LIT10`END`PUN));`END`PLN
+`END`PUN}`END`PLN
+
+`END`COM#define`END`PLN ZERO `END`LIT0`END`PLN `END`COM/* a
+  multiline comment */`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/Cpp.txt b/test/prettify/PrettifyTest/result/Cpp.txt
new file mode 100644
index 0000000..8c7abb1
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/Cpp.txt
@@ -0,0 +1,22 @@
+`COM#include`END`PLN `END`STR<iostream>`END`PLN
+
+`END`KWDusing`END`PLN `END`KWDnamespace`END`PLN std`END`PUN;`END`PLN
+
+`END`COM//! fibonacci numbers with gratuitous use of templates.`END`PLN
+`END`COM//! \param n an index into the fibonacci series`END`PLN
+`END`COM//! \param fib0 element 0 of the series`END`PLN
+`END`COM//! \return the nth element of the fibonacci series`END`PLN
+`END`KWDtemplate`END`PLN `END`PUN<`END`KWDclass`END`PLN T`END`PUN>`END`PLN
+T fib`END`PUN(`END`KWDunsigned`END`PLN `END`KWDint`END`PLN n`END`PUN,`END`PLN `END`KWDconst`END`PLN T`END`PUN&`END`PLN fib0`END`PUN)`END`PLN `END`PUN{`END`PLN
+  T a`END`PUN(`END`PLNfib0`END`PUN),`END`PLN b`END`PUN(`END`PLNfib0`END`PUN);`END`PLN
+  `END`KWDfor`END`PLN `END`PUN(;`END`PLN n`END`PUN;`END`PLN `END`PUN--`END`PLNn`END`PUN)`END`PLN `END`PUN{`END`PLN
+    T tmp`END`PUN(`END`PLNa`END`PUN);`END`PLN
+    a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+    b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+  `END`PUN}`END`PLN
+  `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+`END`KWDint`END`PLN main`END`PUN(`END`KWDint`END`PLN argc`END`PUN,`END`PLN `END`KWDchar`END`PLN `END`PUN**`END`PLNargv`END`PUN)`END`PLN `END`PUN{`END`PLN
+  cout `END`PUN<<`END`PLN fib`END`PUN(`END`LIT10`END`PUN,`END`PLN `END`LIT1U`END`PUN);`END`PLN
+`END`PUN}`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/Cpp_lang.txt b/test/prettify/PrettifyTest/result/Cpp_lang.txt
new file mode 100644
index 0000000..079520f
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/Cpp_lang.txt
@@ -0,0 +1,22 @@
+`COM#include`END`PLN `END`STR<iostream>`END`PLN
+
+`END`KWDusing`END`PLN `END`KWDnamespace`END`PLN std`END`PUN;`END`PLN
+
+`END`COM//! fibonacci numbers with gratuitous use of templates.`END`PLN
+`END`COM//! \param n an index into the fibonacci series`END`PLN
+`END`COM//! \param fib0 element 0 of the series`END`PLN
+`END`COM//! \return the nth element of the fibonacci series`END`PLN
+`END`KWDtemplate`END`PLN `END`PUN<`END`KWDclass`END`PLN T`END`PUN>`END`PLN
+T fib`END`PUN(`END`TYPint`END`PLN n`END`PUN,`END`PLN `END`KWDconst`END`PLN T`END`PUN&`END`PLN fib0`END`PUN)`END`PLN `END`PUN{`END`PLN
+  T a`END`PUN(`END`PLNfib0`END`PUN),`END`PLN b`END`PUN(`END`PLNfib0`END`PUN);`END`PLN
+  `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>=`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END`PLN
+    T tmp`END`PUN(`END`PLNa`END`PUN);`END`PLN
+    a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+    b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+  `END`PUN}`END`PLN
+  `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+`END`TYPint`END`PLN main`END`PUN(`END`TYPint`END`PLN argc`END`PUN,`END`PLN `END`KWDchar`END`PLN `END`PUN**`END`PLNargv`END`PUN)`END`PLN `END`PUN{`END`PLN
+  cout `END`PUN<<`END`PLN fib`END`PUN(`END`LIT10`END`PUN,`END`PLN `END`LIT1U`END`PUN);`END`PLN
+`END`PUN}`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/PHP.txt b/test/prettify/PrettifyTest/result/PHP.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/PHP.txt
diff --git a/test/prettify/PrettifyTest/result/bash.txt b/test/prettify/PrettifyTest/result/bash.txt
new file mode 100644
index 0000000..7652a66
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/bash.txt
@@ -0,0 +1,17 @@
+`COM#!/bin/bash`END`PLN
+
+`END`COM# Fibonacci numbers`END`PLN
+`END`COM# Writes an infinite series to stdout, one entry per line`END`PLN
+`END`KWDfunction`END`PLN fib`END`PUN()`END`PLN `END`PUN{`END`PLN
+  `END`KWDlocal`END`PLN a`END`PUN=`END`LIT1`END`PLN
+  `END`KWDlocal`END`PLN b`END`PUN=`END`LIT1`END`PLN
+  `END`KWDwhile`END`PLN `END`KWDtrue`END`PLN `END`PUN;`END`PLN `END`KWDdo`END`PLN
+    echo $a
+    `END`KWDlocal`END`PLN tmp`END`PUN=`END`PLN$a
+    a`END`PUN=`END`PLN$`END`PUN((`END`PLN $a `END`PUN+`END`PLN $b `END`PUN))`END`PLN
+    b`END`PUN=`END`PLN$tmp
+  `END`KWDdone`END`PLN
+`END`PUN}`END`PLN
+
+`END`COM# output the 10th element of the series and halt`END`PLN
+fib `END`PUN|`END`PLN head `END`PUN-`END`LIT10`END`PLN `END`PUN|`END`PLN tail `END`PUN-`END`LIT1`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/bash_lang.txt b/test/prettify/PrettifyTest/result/bash_lang.txt
new file mode 100644
index 0000000..c959536
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/bash_lang.txt
@@ -0,0 +1,17 @@
+`COM#!/bin/bash`END
+`PLN `END
+`COM# Fibonacci numbers`END
+`COM# Writes an infinite series to stdout, one entry per line`END
+`KWDfunction`END`PLN fib`END`PUN()`END`PLN `END`PUN{`END
+`PLN  `END`KWDlocal`END`PLN a`END`PUN=`END`LIT1`END
+`PLN  `END`KWDlocal`END`PLN b`END`PUN=`END`LIT1`END
+`PLN  `END`KWDwhile`END`PLN true `END`PUN;`END`PLN `END`KWDdo`END
+`PLN    echo $a`END
+`PLN    `END`KWDlocal`END`PLN tmp`END`PUN=`END`PLN$a`END
+`PLN    a`END`PUN=`END`PLN$`END`PUN((`END`PLN $a `END`PUN+`END`PLN $b `END`PUN))`END
+`PLN    b`END`PUN=`END`PLN$tmp`END
+`PLN  `END`KWDdone`END
+`PUN}`END
+`PLN `END
+`COM# output the 10th element of the series and halt`END
+`PLNfib `END`PUN|`END`PLN `END`PUN/`END`PLNusr`END`PUN/`END`PLNbin`END`PUN/*`END`PLNhead `END`PUN-`END`LIT10`END`PLN `END`PUN|`END`PLN tail `END`PUN-`END`LIT1`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/coffee.txt b/test/prettify/PrettifyTest/result/coffee.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/coffee.txt
diff --git a/test/prettify/PrettifyTest/result/css.txt b/test/prettify/PrettifyTest/result/css.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/css.txt
diff --git a/test/prettify/PrettifyTest/result/go.txt b/test/prettify/PrettifyTest/result/go.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/go.txt
diff --git a/test/prettify/PrettifyTest/result/html.txt b/test/prettify/PrettifyTest/result/html.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/html.txt
diff --git a/test/prettify/PrettifyTest/result/htmlXmp.txt b/test/prettify/PrettifyTest/result/htmlXmp.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/htmlXmp.txt
diff --git a/test/prettify/PrettifyTest/result/html_lang.txt b/test/prettify/PrettifyTest/result/html_lang.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/html_lang.txt
diff --git a/test/prettify/PrettifyTest/result/issue12.txt b/test/prettify/PrettifyTest/result/issue12.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue12.txt
diff --git a/test/prettify/PrettifyTest/result/issue12_lang.txt b/test/prettify/PrettifyTest/result/issue12_lang.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue12_lang.txt
diff --git a/test/prettify/PrettifyTest/result/issue14a.txt b/test/prettify/PrettifyTest/result/issue14a.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue14a.txt
diff --git a/test/prettify/PrettifyTest/result/issue14b.txt b/test/prettify/PrettifyTest/result/issue14b.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue14b.txt
diff --git a/test/prettify/PrettifyTest/result/issue20.txt b/test/prettify/PrettifyTest/result/issue20.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue20.txt
diff --git a/test/prettify/PrettifyTest/result/issue21.txt b/test/prettify/PrettifyTest/result/issue21.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue21.txt
diff --git a/test/prettify/PrettifyTest/result/issue24.txt b/test/prettify/PrettifyTest/result/issue24.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue24.txt
diff --git a/test/prettify/PrettifyTest/result/issue27.txt b/test/prettify/PrettifyTest/result/issue27.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue27.txt
diff --git a/test/prettify/PrettifyTest/result/issue30.txt b/test/prettify/PrettifyTest/result/issue30.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue30.txt
diff --git a/test/prettify/PrettifyTest/result/issue33.txt b/test/prettify/PrettifyTest/result/issue33.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue33.txt
diff --git a/test/prettify/PrettifyTest/result/issue4.txt b/test/prettify/PrettifyTest/result/issue4.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue4.txt
diff --git a/test/prettify/PrettifyTest/result/issue42.txt b/test/prettify/PrettifyTest/result/issue42.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue42.txt
diff --git a/test/prettify/PrettifyTest/result/issue79.txt b/test/prettify/PrettifyTest/result/issue79.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue79.txt
diff --git a/test/prettify/PrettifyTest/result/issue8.txt b/test/prettify/PrettifyTest/result/issue8.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue8.txt
diff --git a/test/prettify/PrettifyTest/result/issue84.txt b/test/prettify/PrettifyTest/result/issue84.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue84.txt
diff --git a/test/prettify/PrettifyTest/result/issue92.txt b/test/prettify/PrettifyTest/result/issue92.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue92.txt
diff --git a/test/prettify/PrettifyTest/result/issue93.txt b/test/prettify/PrettifyTest/result/issue93.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/issue93.txt
diff --git a/test/prettify/PrettifyTest/result/isue45.txt b/test/prettify/PrettifyTest/result/isue45.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/isue45.txt
diff --git a/test/prettify/PrettifyTest/result/java.txt b/test/prettify/PrettifyTest/result/java.txt
new file mode 100644
index 0000000..fbebc19
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/java.txt
@@ -0,0 +1,44 @@
+`KWDpackage`END`PLN foo`END`PUN;`END`PLN
+
+`END`KWDimport`END`PLN java`END`PUN.`END`PLNutil`END`PUN.`END`TYPIterator`END`PUN;`END`PLN
+
+`END`COM/**
+ * the fibonacci series implemented as an Iterable.
+ */`END`PLN
+`END`KWDpublic`END`PLN `END`KWDfinal`END`PLN `END`KWDclass`END`PLN `END`TYPFibonacci`END`PLN `END`KWDimplements`END`PLN `END`TYPIterable`END`PUN<`END`TYPInteger`END`PUN>`END`PLN `END`PUN{`END`PLN
+  `END`COM/** the next and previous members of the series. */`END`PLN
+  `END`KWDprivate`END`PLN `END`KWDint`END`PLN a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END`PLN
+
+  `END`LIT@Override`END`PLN
+  `END`KWDpublic`END`PLN `END`TYPIterator`END`PUN<`END`TYPInteger`END`PUN>`END`PLN iterator`END`PUN()`END`PLN `END`PUN{`END`PLN
+    `END`KWDreturn`END`PLN `END`KWDnew`END`PLN `END`TYPIterator`END`PUN<`END`TYPInteger`END`PUN>()`END`PLN `END`PUN{`END`PLN
+      `END`COM/** the series is infinite. */`END`PLN
+      `END`KWDpublic`END`PLN `END`KWDboolean`END`PLN hasNext`END`PUN()`END`PLN `END`PUN{`END`PLN `END`KWDreturn`END`PLN `END`KWDtrue`END`PUN;`END`PLN `END`PUN}`END`PLN
+      `END`KWDpublic`END`PLN `END`TYPInteger`END`PLN `END`KWDnext`END`PUN()`END`PLN `END`PUN{`END`PLN
+        `END`KWDint`END`PLN tmp `END`PUN=`END`PLN a`END`PUN;`END`PLN
+        a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+        b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+        `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+      `END`PUN}`END`PLN
+      `END`KWDpublic`END`PLN `END`KWDvoid`END`PLN remove`END`PUN()`END`PLN `END`PUN{`END`PLN `END`KWDthrow`END`PLN `END`KWDnew`END`PLN `END`TYPUnsupportedOperationException`END`PUN();`END`PLN `END`PUN}`END`PLN
+    `END`PUN};`END`PLN
+  `END`PUN}`END`PLN
+
+  `END`COM/**
+   * the n<sup>th</sup> element of the given series.
+   * @throws NoSuchElementException if there are less than n elements in the
+   *   given Iterable's {@link Iterable#iterator iterator}.
+   */`END`PLN
+  `END`KWDpublic`END`PLN `END`KWDstatic`END`PLN `END`PUN<`END`PLNT`END`PUN>`END`PLN
+  T nth`END`PUN(`END`KWDint`END`PLN n`END`PUN,`END`PLN `END`TYPIterable`END`PUN<`END`PLNT`END`PUN>`END`PLN iterable`END`PUN)`END`PLN `END`PUN{`END`PLN
+    `END`TYPIterator`END`PUN<?`END`PLN `END`KWDextends`END`PLN T`END`PUN>`END`PLN it `END`PUN=`END`PLN iterable`END`PUN.`END`PLNiterator`END`PUN();`END`PLN
+    `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END`PLN
+      it`END`PUN.`END`KWDnext`END`PUN();`END`PLN
+    `END`PUN}`END`PLN
+    `END`KWDreturn`END`PLN it`END`PUN.`END`KWDnext`END`PUN();`END`PLN
+  `END`PUN}`END`PLN
+
+  `END`KWDpublic`END`PLN `END`KWDstatic`END`PLN `END`KWDvoid`END`PLN main`END`PUN(`END`TYPString`END`PUN[]`END`PLN args`END`PUN)`END`PLN `END`PUN{`END`PLN
+    `END`TYPSystem`END`PUN.`END`KWDout`END`PUN.`END`KWDprint`END`PUN(`END`PLNnth`END`PUN(`END`LIT10`END`PUN,`END`PLN `END`KWDnew`END`PLN `END`TYPFibonacci`END`PUN()));`END`PLN
+  `END`PUN}`END`PLN
+`END`PUN}`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/java_lang.txt b/test/prettify/PrettifyTest/result/java_lang.txt
new file mode 100644
index 0000000..84dc207
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/java_lang.txt
@@ -0,0 +1,47 @@
+`KWDpackage`END`PLN foo`END`PUN;`END
+`PLN `END
+`KWDimport`END`PLN java`END`PUN.`END`PLNutil`END`PUN.`END`TYPIterator`END`PUN;`END
+`PLN `END
+`COM/**`END
+`COM * the fibonacci series implemented as an Iterable.`END
+`COM */`END
+`KWDpublic`END`PLN `END`KWDfinal`END`PLN `END`KWDclass`END`PLN `END`TYPFibonacci`END`PLN `END`KWDimplements`END`PLN `END`TYPIterable`END`PUN<`END`TYPInteger`END`PUN>`END`PLN `END`PUN{`END
+`PLN  `END`COM/** the next and previous members of the series. */`END
+`PLN  `END`KWDprivate`END`PLN `END`KWDint`END`PLN a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END
+`PLN `END
+`PLN  `END`LIT@Override`END
+`PLN  `END`KWDpublic`END`PLN `END`TYPIterator`END`PUN<`END`TYPInteger`END`PUN>`END`PLN iterator`END`PUN()`END`PLN `END`PUN{`END
+`PLN    `END`KWDreturn`END`PLN `END`KWDnew`END`PLN `END`TYPIterator`END`PUN<`END`TYPInteger`END`PUN>()`END`PLN `END`PUN{`END
+`PLN      `END`COM/** the series is infinite. */`END
+`PLN      `END`KWDpublic`END`PLN `END`KWDboolean`END`PLN hasNext`END`PUN()`END`PLN `END`PUN{`END`PLN `END`KWDreturn`END`PLN `END`KWDtrue`END`PUN;`END`PLN `END`PUN}`END
+`PLN      `END`KWDpublic`END`PLN `END`TYPInteger`END`PLN next`END`PUN()`END`PLN `END`PUN{`END
+`PLN        `END`KWDint`END`PLN tmp `END`PUN=`END`PLN a`END`PUN;`END
+`PLN        a `END`PUN+=`END`PLN b`END`PUN;`END
+`PLN        b `END`PUN=`END`PLN tmp`END`PUN;`END
+`PLN        `END`KWDreturn`END`PLN a`END`PUN;`END
+`PLN      `END`PUN}`END
+`PLN      `END`KWDpublic`END`PLN `END`KWDvoid`END`PLN remove`END`PUN()`END`PLN `END`PUN{`END`PLN `END`KWDthrow`END`PLN `END`KWDnew`END`PLN `END`TYPUnsupportedOperationException`END`PUN();`END`PLN `END`PUN}`END
+`PLN    `END`PUN};`END
+`PLN  `END`PUN}`END
+`PLN `END
+`PLN  `END`COM/**`END
+`COM   * the n<sup>th</sup> element of the given series.`END
+`COM   * @throws NoSuchElementException if there are less than n elements in the`END
+`COM   *   given Iterable's {@link Iterable#iterator iterator}.`END
+`COM   */`END
+`PLN  `END`KWDpublic`END`PLN `END`KWDstatic`END`PLN `END`PUN<`END`PLNT`END`PUN>`END
+`PLN  T nth`END`PUN(`END`KWDint`END`PLN n`END`PUN,`END`PLN `END`TYPIterable`END`PUN<`END`PLNT`END`PUN>`END`PLN iterable`END`PUN)`END`PLN `END`PUN{`END
+`PLN    `END`TYPIterator`END`PUN<?`END`PLN `END`KWDextends`END`PLN T`END`PUN>`END`PLN in `END`PUN=`END`PLN iterable`END`PUN.`END`PLNiterator`END`PUN();`END
+`PLN    `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END
+`PLN      in`END`PUN.`END`PLNnext`END`PUN();`END
+`PLN    `END`PUN}`END
+`PLN    `END`KWDreturn`END`PLN in`END`PUN.`END`PLNnext`END`PUN();`END
+`PLN  `END`PUN}`END
+`PLN `END
+`PLN  `END`KWDpublic`END`PLN `END`KWDstatic`END`PLN `END`KWDvoid`END`PLN main`END`PUN(`END`TYPString`END`PUN[]`END`PLN args`END`PUN)`END`PLN `END`PUN{`END
+`PLN    `END`TYPSystem`END`PUN.`END`PLNout`END`PUN.`END`PLNprint`END`PUN(`END`PLNnth`END`PUN(`END`LIT10`END`PUN,`END`PLN `END`KWDnew`END`PLN `END`TYPFibonacci`END`PUN()));`END
+`PLN  `END`PUN}`END
+`PUN}`END
+`PLN `END
+`PUN#`END`PLN not a java comment`END
+`PUN#`END`PLN not keywords`END`PUN:`END`PLN static_cast and namespace`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/javascript.txt b/test/prettify/PrettifyTest/result/javascript.txt
new file mode 100644
index 0000000..c2daa2b
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/javascript.txt
@@ -0,0 +1,17 @@
+`COM/**
+ * nth element in the fibonacci series.
+ * @param n >= 0
+ * @return the nth element, >= 0.
+ */`END`PLN
+`END`KWDfunction`END`PLN fib`END`PUN(`END`PLNn`END`PUN)`END`PLN `END`PUN{`END`PLN
+  `END`KWDvar`END`PLN a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END`PLN
+  `END`KWDvar`END`PLN tmp`END`PUN;`END`PLN
+  `END`KWDwhile`END`PLN `END`PUN(--`END`PLNn `END`PUN>=`END`PLN `END`LIT0`END`PUN)`END`PLN `END`PUN{`END`PLN
+    tmp `END`PUN=`END`PLN a`END`PUN;`END`PLN
+    a `END`PUN+=`END`PLN b`END`PUN;`END`PLN
+    b `END`PUN=`END`PLN tmp`END`PUN;`END`PLN
+  `END`PUN}`END`PLN
+  `END`KWDreturn`END`PLN a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+document`END`PUN.`END`PLNwrite`END`PUN(`END`PLNfib`END`PUN(`END`LIT10`END`PUN));`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/misc1.txt b/test/prettify/PrettifyTest/result/misc1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/misc1.txt
diff --git a/test/prettify/PrettifyTest/result/perl.txt b/test/prettify/PrettifyTest/result/perl.txt
new file mode 100644
index 0000000..31ccf14
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/perl.txt
@@ -0,0 +1,15 @@
+`COM#!/usr/bin/perl`END`PLN
+
+`END`KWDuse`END`PLN strict`END`PUN;`END`PLN
+`END`KWDuse`END`PLN integer`END`PUN;`END`PLN
+
+`END`COM# the nth element of the fibonacci series`END`PLN
+`END`COM# param n - an int >= 0`END`PLN
+`END`COM# return an int >= 0`END`PLN
+`END`KWDsub`END`PLN fib`END`PUN(`END`PLN$`END`PUN)`END`PLN `END`PUN{`END`PLN
+  `END`KWDmy`END`PLN $n `END`PUN=`END`PLN shift`END`PUN,`END`PLN $a `END`PUN=`END`PLN `END`LIT1`END`PUN,`END`PLN $b `END`PUN=`END`PLN `END`LIT1`END`PUN;`END`PLN
+  `END`PUN(`END`PLN$a`END`PUN,`END`PLN $b`END`PUN)`END`PLN `END`PUN=`END`PLN `END`PUN(`END`PLN$a `END`PUN+`END`PLN $b`END`PUN,`END`PLN $a`END`PUN)`END`PLN `END`KWDuntil`END`PLN `END`PUN(--`END`PLN$n `END`PUN<`END`PLN `END`LIT0`END`PUN);`END`PLN
+  `END`KWDreturn`END`PLN $a`END`PUN;`END`PLN
+`END`PUN}`END`PLN
+
+`END`KWDprint`END`PLN fib`END`PUN(`END`LIT10`END`PUN);`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/proto.txt b/test/prettify/PrettifyTest/result/proto.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/proto.txt
diff --git a/test/prettify/PrettifyTest/result/python.txt b/test/prettify/PrettifyTest/result/python.txt
new file mode 100644
index 0000000..4b1173b
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/python.txt
@@ -0,0 +1,24 @@
+`COM#!/usr/bin/python2.4`END`PLN
+
+`END`KWDdef`END`PLN fib`END`PUN():`END`PLN
+  `END`STR'''
+  a generator that produces the elements of the fibonacci series
+  '''`END`PLN
+
+  a `END`PUN=`END`PLN `END`LIT1`END`PLN
+  b `END`PUN=`END`PLN `END`LIT1`END`PLN
+  `END`KWDwhile`END`PLN `END`KWDTrue`END`PUN:`END`PLN
+    a`END`PUN,`END`PLN b `END`PUN=`END`PLN a `END`PUN+`END`PLN b`END`PUN,`END`PLN a
+    `END`KWDyield`END`PLN a
+
+`END`KWDdef`END`PLN nth`END`PUN(`END`PLNseries`END`PUN,`END`PLN n`END`PUN):`END`PLN
+  `END`STR'''
+  returns the nth element of a series,
+  consuming the earlier elements of the series
+  '''`END`PLN
+
+  `END`KWDfor`END`PLN x `END`KWDin`END`PLN series`END`PUN:`END`PLN
+    n `END`PUN=`END`PLN n `END`PUN-`END`PLN `END`LIT1`END`PLN
+    `END`KWDif`END`PLN n `END`PUN<=`END`PLN `END`LIT0`END`PUN:`END`PLN `END`KWDreturn`END`PLN x
+
+`END`KWDprint`END`PLN nth`END`PUN(`END`PLNfib`END`PUN(),`END`PLN `END`LIT10`END`PUN)`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/python_lang.txt b/test/prettify/PrettifyTest/result/python_lang.txt
new file mode 100644
index 0000000..03b4ed2
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/python_lang.txt
@@ -0,0 +1,26 @@
+`COM#!/usr/bin/python2.4`END`PLN
+
+`END`KWDdef`END`PLN fib`END`PUN():`END`PLN
+  `END`STR'''
+  a generator that produces the fibonacci series's elements
+  '''`END`PLN
+
+  a `END`PUN=`END`PLN `END`LIT1`END`PLN
+  b `END`PUN=`END`PLN `END`LIT1`END`PLN
+  `END`KWDwhile`END`PLN `END`KWDTrue`END`PUN:`END`PLN
+    a`END`PUN,`END`PLN b `END`PUN=`END`PLN a `END`PUN+`END`PLN b`END`PUN,`END`PLN a
+    `END`KWDyield`END`PLN a
+
+`END`KWDdef`END`PLN nth`END`PUN(`END`PLNseries`END`PUN,`END`PLN n`END`PUN):`END`PLN
+  `END`STR'''
+  returns the nth element of a series,
+  consuming the series' earlier elements.
+  '''`END`PLN
+
+  `END`KWDfor`END`PLN x `END`KWDin`END`PLN series`END`PUN:`END`PLN
+    n `END`PUN-=`END`PLN `END`LIT1`END`PLN
+    `END`KWDif`END`PLN n `END`PUN<=`END`PLN `END`LIT0`END`PUN:`END`PLN `END`KWDreturn`END`PLN x
+
+`END`KWDprint`END`PLN nth`END`PUN(`END`PLNfib`END`PUN(),`END`PLN `END`LIT10`END`PUN)`END`PLN
+
+`END`PUN/*`END`PLN `END`KWDnot`END`PLN a comment `END`KWDand`END`PLN `END`KWDnot`END`PLN keywords`END`PUN:`END`PLN null char true `END`PUN*/`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/scala.txt b/test/prettify/PrettifyTest/result/scala.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/scala.txt
diff --git a/test/prettify/PrettifyTest/result/sql_lang.txt b/test/prettify/PrettifyTest/result/sql_lang.txt
new file mode 100644
index 0000000..afaad91
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/sql_lang.txt
@@ -0,0 +1,9 @@
+`COM/* A multi-line
+ * comment */`END`PLN
+`END`STR'Another string /* Isn\'t a comment'`END`PUN,`END`PLN
+`END`STR"A string */"`END`PLN
+`END`COM-- A line comment`END`PLN
+`END`KWDSELECT`END`PLN `END`PUN*`END`PLN `END`KWDFROM`END`PLN users `END`KWDWHERE`END`PLN id `END`KWDIN`END`PLN `END`PUN(`END`LIT1`END`PUN,`END`PLN `END`LIT2.0`END`PUN,`END`PLN `END`LIT+30e-1`END`PUN);`END`PLN
+`END`COM-- keywords are case-insensitive.`END`PLN
+`END`COM-- Note: user-table is a single identifier, not a pair of keywords`END`PLN
+`END`KWDselect`END`PLN `END`PUN*`END`PLN `END`KWDfrom`END`PLN user-table `END`KWDwhere`END`PLN id `END`KWDin`END`PLN `END`PUN(`END`PLNx`END`PUN,`END`PLN y`END`PUN,`END`PLN z`END`PUN);`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/vhdl.txt b/test/prettify/PrettifyTest/result/vhdl.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/vhdl.txt
diff --git a/test/prettify/PrettifyTest/result/wiki.txt b/test/prettify/PrettifyTest/result/wiki.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/wiki.txt
diff --git a/test/prettify/PrettifyTest/result/xhtml.txt b/test/prettify/PrettifyTest/result/xhtml.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/xhtml.txt
diff --git a/test/prettify/PrettifyTest/result/xml.txt b/test/prettify/PrettifyTest/result/xml.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/xml.txt
diff --git a/test/prettify/PrettifyTest/result/xsl.txt b/test/prettify/PrettifyTest/result/xsl.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/xsl.txt
diff --git a/test/prettify/PrettifyTest/result/yaml1.txt b/test/prettify/PrettifyTest/result/yaml1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/yaml1.txt
diff --git a/test/prettify/PrettifyTest/result/yaml2.txt b/test/prettify/PrettifyTest/result/yaml2.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/yaml2.txt
diff --git a/test/prettify/PrettifyTest/source/C.txt b/test/prettify/PrettifyTest/source/C.txt
new file mode 100644
index 0000000..d112459
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/C.txt
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+/* the n-th fibonacci number.
+ */
+unsigned int fib(unsigned int n) {
+  unsigned int a = 1, b = 1;
+  unsigned int tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+main() {
+  printf("%u", fib(10));
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/C_lang.txt b/test/prettify/PrettifyTest/source/C_lang.txt
new file mode 100644
index 0000000..69bd4eb
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/C_lang.txt
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+/* the nth fibonacci number. */
+uint32 fib(unsigned int n) {
+  uint32 a = 1, b = 1;
+  uint32 tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+void main() {
+  size_t size = sizeof(wchar_t);
+  ASSERT_EQ(size, 1);
+  printf("%u", fib(10));
+}
+
+#define ZERO 0 /* a
+  multiline comment */
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/Cpp.txt b/test/prettify/PrettifyTest/source/Cpp.txt
new file mode 100644
index 0000000..449d7d6
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/Cpp.txt
@@ -0,0 +1,22 @@
+#include <iostream>
+
+using namespace std;
+
+//! fibonacci numbers with gratuitous use of templates.
+//! \param n an index into the fibonacci series
+//! \param fib0 element 0 of the series
+//! \return the nth element of the fibonacci series
+template <class T>
+T fib(unsigned int n, const T& fib0) {
+  T a(fib0), b(fib0);
+  for (; n; --n) {
+    T tmp(a);
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+int main(int argc, char **argv) {
+  cout << fib(10, 1U);
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/Cpp_lang.txt b/test/prettify/PrettifyTest/source/Cpp_lang.txt
new file mode 100644
index 0000000..fe6c544
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/Cpp_lang.txt
@@ -0,0 +1,22 @@
+#include <iostream>
+
+using namespace std;
+
+//! fibonacci numbers with gratuitous use of templates.
+//! \param n an index into the fibonacci series
+//! \param fib0 element 0 of the series
+//! \return the nth element of the fibonacci series
+template <class T>
+T fib(int n, const T& fib0) {
+  T a(fib0), b(fib0);
+  while (--n >= 0) {
+    T tmp(a);
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+int main(int argc, char **argv) {
+  cout << fib(10, 1U);
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/PHP.txt b/test/prettify/PrettifyTest/source/PHP.txt
new file mode 100644
index 0000000..9525d8c
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/PHP.txt
@@ -0,0 +1,25 @@
+<html>
+  <head>
+    <title><?= 'Fibonacci numbers' ?></title>
+
+    <?php
+      // PHP has a plethora of comment types
+      /* What is a
+         "plethora"? */
+      function fib($n) {
+        # I don't know.
+        $a = 1;
+        $b = 1;
+        while (--$n >= 0) {
+          echo "$a\n";
+          $tmp = $a;
+          $a += $b;
+          $b = $tmp;
+        }
+      }
+    ?>
+  </head>
+  <body>
+    <?= fib(10) ?>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/bash.txt b/test/prettify/PrettifyTest/source/bash.txt
new file mode 100644
index 0000000..4dd5499
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/bash.txt
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Fibonacci numbers
+# Writes an infinite series to stdout, one entry per line
+function fib() {
+  local a=1
+  local b=1
+  while true ; do
+    echo $a
+    local tmp=$a
+    a=$(( $a + $b ))
+    b=$tmp
+  done
+}
+
+# output the 10th element of the series and halt
+fib | head -10 | tail -1
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/bash_lang.txt b/test/prettify/PrettifyTest/source/bash_lang.txt
new file mode 100644
index 0000000..eba1ab1
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/bash_lang.txt
@@ -0,0 +1,17 @@
+#!/bin/bash
+ 
+# Fibonacci numbers
+# Writes an infinite series to stdout, one entry per line
+function fib() {
+  local a=1
+  local b=1
+  while true ; do
+    echo $a
+    local tmp=$a
+    a=$(( $a + $b ))
+    b=$tmp
+  done
+}
+ 
+# output the 10th element of the series and halt
+fib | /usr/bin/*head -10 | tail -1
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/coffee.txt b/test/prettify/PrettifyTest/source/coffee.txt
new file mode 100644
index 0000000..c2240a7
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/coffee.txt
@@ -0,0 +1,47 @@
+class Animal
+  constructor: (@name) ->
+  move: (meters, loc) ->
+    alert @name + " moved " + meters + "m."
+  travel: (path...) ->
+    for place in path
+      @move place.distance, place.location
+
+class Horse extends Animal
+  ###
+  @param name Horse name
+  @param jumper Jumping ability
+  ###
+  constructor: (name, jumper) ->
+    super name
+    @capable = jumper
+  step: ->
+    alert '''
+          Step,
+          step...
+          '''
+  jump: ->
+    @capable
+  move: (meters, where) ->
+    switch where
+      when "ground"
+        @step()
+        super meters
+      when "hurdle"
+        super meters if @jump()
+
+# Create horse
+tom = new Horse "Tommy", yes
+
+street =
+  location: "ground"
+  distance: 12
+car =
+  location: "hurdle"
+  distance: 2
+
+###
+Tell him to travel:
+1. through the street
+2. over the car
+###
+tom.travel street, car
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/css.txt b/test/prettify/PrettifyTest/source/css.txt
new file mode 100644
index 0000000..be19d0b
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/css.txt
@@ -0,0 +1,19 @@
+<!--
+@charset('UTF-8');
+
+/** A url that is not quoted. */
+@import(url(/more-styles.css));
+
+HTML { content-before: 'hello\20'; content-after: 'w\6f rld';
+       -moz-spiff: inherit !important }
+
+/* Test units on numbers. */
+BODY { margin-bottom: 4px; margin-left: 3in; margin-bottom: 0; margin-top: 5% }
+
+/** Test number literals and quoted values. */
+TABLE.foo TR.bar A#visited { color: #001123; font-family: "monospace" }
+/** bolder is not a name, so should be plain.  !IMPORTANT is a keyword
+  * regardless of case.
+  */
+blink { text-decoration: BLINK !IMPORTANT; font-weight: bolder }
+-->
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/go.txt b/test/prettify/PrettifyTest/source/go.txt
new file mode 100644
index 0000000..7fe63b2
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/go.txt
@@ -0,0 +1,11 @@
+package main  /* Package of which this program is part. */
+
+import fmt "fmt"  // Package implementing formatted I/O.
+
+
+func main() {
+    fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界\n")  // Semicolon inserted here
+}
+
+/* " */  "foo /* "  /*/  */
+/* ` */  `foo /* `  /*/  */
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/html.txt b/test/prettify/PrettifyTest/source/html.txt
new file mode 100644
index 0000000..aac4627
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/html.txt
@@ -0,0 +1,38 @@
+<html>
+  <head>
+    <title>Fibonacci number</title>
+    <style><!-- BODY { text-decoration: blink } --></style>
+    <script src="foo.js"></script>
+    <script src="bar.js"></script>
+  </head>
+  <body>
+    <noscript>
+      <dl>
+        <dt>Fibonacci numbers</dt>
+        <dd>1</dd>
+        <dd>1</dd>
+        <dd>2</dd>
+        <dd>3</dd>
+        <dd>5</dd>
+        <dd>8</dd>
+        &hellip;
+      </dl>
+    </noscript>
+
+    <script type="text/javascript"><!--
+function fib(n) {
+  var a = 1, b = 1;
+  var tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+document.writeln(fib(10));
+// -->
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/htmlXmp.txt b/test/prettify/PrettifyTest/source/htmlXmp.txt
new file mode 100644
index 0000000..26402d1
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/htmlXmp.txt
@@ -0,0 +1,35 @@
+<html>
+  <head>
+    <title>Fibonacci number</title>
+  </head>
+  <body>
+    <noscript>
+      <dl>
+        <dt>Fibonacci numbers</dt>
+        <dd>1</dd>
+        <dd>1</dd>
+        <dd>2</dd>
+        <dd>3</dd>
+        <dd>5</dd>
+        <dd>8</dd>
+        &hellip;
+      </dl>
+    </noscript>
+
+    <script type="text/javascript"><!--
+function fib(n) {
+  var a = 1, b = 1;
+  var tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+document.writeln(fib(10));
+// -->
+    </script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/html_lang.txt b/test/prettify/PrettifyTest/source/html_lang.txt
new file mode 100644
index 0000000..987efec
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/html_lang.txt
@@ -0,0 +1,30 @@
+Fibonacci Numbers
+
+<noscript>
+  <dl style="list-style: disc">
+    <dt>Fibonacci numbers</dt>
+    <dd>1</dd>
+    <dd>1</dd>
+    <dd>2</dd>
+    <dd>3</dd>
+    <dd>5</dd>
+    <dd>8</dd>
+    &hellip;
+  </dl>
+</noscript>
+
+<script type="text/javascript"><!--
+function fib(n) {
+  var a = 1, b = 1;
+  var tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+document.writeln(fib(10));
+// -->
+</script>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue12.txt b/test/prettify/PrettifyTest/source/issue12.txt
new file mode 100644
index 0000000..19e214e
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue12.txt
@@ -0,0 +1,40 @@
+/foo/;  // a slash starting a line treated as a regexp beginning
+"foo".match(/fo+$/);
+// this line comment not treated as a regular expressions
+"foo /bar/".test(/"baz"/);  // test string and regexp boundaries
+var division = /\b\d+\/\d+/g;  // test char sets and escaping of specials
+var allSpecials = /([^\(\)\[\]\{\}\-\?\+\*\.\^\$\/]+)\\/;
+var slashInCharset = /[^/]/g, notCloseSq = /[^\]]/;
+
+// test that slash used in numeric context treated as an operator
+1 / 2;
+1. / x;
+x / y;
+(x) / y;
+1 /* foo */ / 2;
+1 /* foo *// 2;
+1/2;
+1./x;
+x/y;
+(x)/y;
+
+// test split over two lines.  line comment should not fool it
+1//
+/2;
+
+x++/y;
+x--/y;
+x[y] / z;
+f() / n;
+
+// test that slash after non postfix operator is start of regexp
+log('matches = ' + /foo/.test(foo));
+
+// test keyword preceders
+return /a regexp/;
+division = notreturn / not_a_regexp / 2;  // keyword suffix does not match
+
+// & not used as prefix operator in javascript but this should still work
+&/foo/;
+
+extends = /extends/;
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue12_lang.txt b/test/prettify/PrettifyTest/source/issue12_lang.txt
new file mode 100644
index 0000000..19e214e
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue12_lang.txt
@@ -0,0 +1,40 @@
+/foo/;  // a slash starting a line treated as a regexp beginning
+"foo".match(/fo+$/);
+// this line comment not treated as a regular expressions
+"foo /bar/".test(/"baz"/);  // test string and regexp boundaries
+var division = /\b\d+\/\d+/g;  // test char sets and escaping of specials
+var allSpecials = /([^\(\)\[\]\{\}\-\?\+\*\.\^\$\/]+)\\/;
+var slashInCharset = /[^/]/g, notCloseSq = /[^\]]/;
+
+// test that slash used in numeric context treated as an operator
+1 / 2;
+1. / x;
+x / y;
+(x) / y;
+1 /* foo */ / 2;
+1 /* foo *// 2;
+1/2;
+1./x;
+x/y;
+(x)/y;
+
+// test split over two lines.  line comment should not fool it
+1//
+/2;
+
+x++/y;
+x--/y;
+x[y] / z;
+f() / n;
+
+// test that slash after non postfix operator is start of regexp
+log('matches = ' + /foo/.test(foo));
+
+// test keyword preceders
+return /a regexp/;
+division = notreturn / not_a_regexp / 2;  // keyword suffix does not match
+
+// & not used as prefix operator in javascript but this should still work
+&/foo/;
+
+extends = /extends/;
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue14a.txt b/test/prettify/PrettifyTest/source/issue14a.txt
new file mode 100644
index 0000000..fbf1b37
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue14a.txt
@@ -0,0 +1,3 @@
+//comment
+int main(int argc, char **argv)
+{}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue14b.txt b/test/prettify/PrettifyTest/source/issue14b.txt
new file mode 100644
index 0000000..e5b23c3
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue14b.txt
@@ -0,0 +1,2 @@
+<!-- There's an HTML comment in my comment -->
+<p>And another one inside the end tag</p>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue20.txt b/test/prettify/PrettifyTest/source/issue20.txt
new file mode 100644
index 0000000..a531038
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue20.txt
@@ -0,0 +1,3 @@
+<html>
+
+<head>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue21.txt b/test/prettify/PrettifyTest/source/issue21.txt
new file mode 100644
index 0000000..dd3551a
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue21.txt
@@ -0,0 +1,5 @@
+<html>
+  <head>
+    <title>Test</title>
+  </head>
+</html>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue24.txt b/test/prettify/PrettifyTest/source/issue24.txt
new file mode 100644
index 0000000..a57ff46
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue24.txt
@@ -0,0 +1,51 @@
+os=require("os")
+math=require("math")
+
+-- Examples from the language reference
+     a = 'alo\n123"'
+     a = "alo\n123\""
+     a = '\97lo\10\04923"'
+     a = [[alo
+     123"]]
+     a = [==[
+     alo
+     123"]==]
+
+3   3.0   3.1416   314.16e-2   0.31416E1   0xff   0x56
+
+-- Some comments that demonstrate long brackets
+double_quoted = "Not a long bracket [=["
+--[=[ quoting out
+ [[ foo ]]
+ [==[does not end comment either]==]
+]=]
+past_end_of_comment
+--]=]
+
+-- Example code courtesy Joseph Harmbruster
+#
+do
+  local function ssgeneral(t, n, before)
+    for _, h in ipairs(incs) do
+      for i = h + 1, n do
+        local v = t[i]
+        for j = i - h, 1, -h do
+          local testval = t[j]
+          if not before(v, testval) then break end
+          t[i] = testval; i = j
+        end
+        t[i] = v
+      end 
+    end
+    return t
+  end
+
+  function shellsort(t, before, n)
+    n = n or #t
+    if not before or before == "<" then return ssup(t, n)
+    elseif before == ">" then return ssdown(t, n)
+    else return ssgeneral(t, n, before)
+    end
+  end
+  return shellsort
+end
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue27.txt b/test/prettify/PrettifyTest/source/issue27.txt
new file mode 100644
index 0000000..5e251e2
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue27.txt
@@ -0,0 +1,43 @@
+Imports System
+
+Class [class]
+    Shared Sub [shared](ByVal [boolean] As Boolean)
+        If [boolean] Then
+            Console.WriteLine("true")
+        Else
+            Console.WriteLine("false")
+        End If
+    End Sub
+End Class
+
+Module [module]
+    Sub Main()
+        [class].[shared](True)
+
+        ' This prints out: ".
+        Console.WriteLine("""")
+
+        ' This prints out: a"b.
+        Console.WriteLine("a""b")
+
+        ' This prints out: a.
+        Console.WriteLine("a"c)
+
+        ' This prints out: ".
+        Console.WriteLine(""""c)
+    End Sub
+End Module
+
+Dim d As Date
+d = # 8/23/1970 3:45:39AM #
+d = # 8/23/1970 #
+d = # 3:45:39AM #
+d = # 3:45:39 #
+d = # 13:45:39 #
+d = # 13:45:39PM #
+
+Dim n As Float
+n = (0.0, .99F, 1.0E-2D, 1.0E+3D, .5E4, 1E3R, 4D)
+
+Dim i As Integer
+i = (0, 123, 45L, &HA0I, &O177S)
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue30.txt b/test/prettify/PrettifyTest/source/issue30.txt
new file mode 100644
index 0000000..b37d4ac
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue30.txt
@@ -0,0 +1,26 @@
+-- A comment
+Not(--"a comment")
+Also.not(--(A.comment))
+
+module Foo(bar) where
+import Blah
+import BlahBlah(blah)
+import Monads(Exception(..), FIO(..),unFIO,handle,runFIO,fixFIO,fio,
+              write,writeln,HasNext(..),HasOutput(..))
+
+{- nested comments
+ - don't work {-yet-} -}
+instance Thingy Foo where
+  a = b
+
+data Foo :: (* -> * -> *) -> * > * -> * where
+  Nil :: Foo a b c
+  Cons :: a b c -> Foo abc -> Foo a b c
+
+str = "Foo\\Bar"
+char = 'x'
+Not.A.Char = 'too long'  -- Don't barf.  Show that 't is a lexical error.
+
+(ident, ident', Fo''o.b'ar)
+
+(0, 12, 0x45, 0xA7, 0o177, 0O377, 0.1, 1.0, 1e3, 0.5E-3, 1.0E+45)
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue33.txt b/test/prettify/PrettifyTest/source/issue33.txt
new file mode 100644
index 0000000..f079526
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue33.txt
@@ -0,0 +1,19 @@
+(*
+ * Print the 10th fibonacci number
+ *)
+
+//// A line comment
+"A string";;
+(0, 125, 0xa0, -1.0, 1e6, 1.2e-3);;  // number literals
+
+#if fibby
+  let
+    rec fib = function (0, a, _) -> a
+                     | (n, a, b) -> fib(n - 1, a + b, a)
+  in
+    print_int(fib(10, 1, 1));;
+#endif
+
+let zed = 'z'
+
+let f' x' = x' + 1
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue4.txt b/test/prettify/PrettifyTest/source/issue4.txt
new file mode 100644
index 0000000..f0027f1
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue4.txt
@@ -0,0 +1,10 @@
+<script type="text/javascript">
+   var savedTarget=null;                           // The target layer (effectively vidPane)
+   var orgCursor=null;                             // The original mouse style so we can restore it
+   var dragOK=false;                               // True if we're allowed to move the element under mouse
+   var dragXoffset=0;                              // How much we've moved the element on the horozontal
+   var dragYoffset=0;                              // How much we've moved the element on the verticle
+   vidPaneID = document.getElementById('vidPane'); // Our movable layer
+   vidPaneID.style.top='75px';                     // Starting location horozontal
+   vidPaneID.style.left='75px';                    // Starting location verticle
+<script>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue42.txt b/test/prettify/PrettifyTest/source/issue42.txt
new file mode 100644
index 0000000..9289c3e
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue42.txt
@@ -0,0 +1,39 @@
+; -*- mode: lisp -*-
+
+(defun back-six-lines () (interactive) (forward-line -6))
+(defun forward-six-lines () (interactive) (forward-line 6))
+
+(global-set-key "\M-l" 'goto-line)
+(global-set-key "\C-z" 'advertised-undo)
+(global-set-key [C-insert] 'clipboard-kill-ring-save)
+(global-set-key [S-insert] 'clipboard-yank)
+(global-set-key [C-up] 'back-six-lines)
+(global-set-key [C-down] 'forward-six-lines)
+
+(setq visible-bell t)
+(setq user-mail-address "foo@bar.com")
+(setq default-major-mode 'text-mode)
+
+(setenv "TERM" "emacs")
+(c-set-offset 'case-label 2)
+(setq c-basic-offset 2)
+(setq perl-indent-level 0x2)
+(setq delete-key-deletes-forward t)
+(setq indent-tabs-mode nil)
+
+;; Text mode
+(add-hook 'text-mode-hook 
+  '(lambda ()
+     (turn-on-auto-fill)
+   )
+)
+
+;; Fundamental mode
+(add-hook 'fundamental-mode-hook 
+  '(lambda ()
+     (turn-on-auto-fill)
+   )
+)
+
+;; Define and cond are keywords in scheme
+(define (sqt x) (sqrt-iter 1.0 2.0 x))
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue79.txt b/test/prettify/PrettifyTest/source/issue79.txt
new file mode 100644
index 0000000..0fe82bc
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue79.txt
@@ -0,0 +1,16 @@
+<style type='text/css'>
+/* desert scheme ported from vim to google prettify */
+code.prettyprint { display: block; padding: 2px; border: 1px solid #888;
+background-color: #333; }
+.str { color: #ffa0a0; } /* string  - pink */
+.kwd { color: #f0e68c; font-weight: bold; }
+.com { color: #87ceeb; } /* comment - skyblue */
+.typ { color: #98fb98; } /* type    - lightgreen */
+.lit { color: #cd5c5c; } /* literal - darkred */
+.pun { color: #fff; }    /* punctuation */
+.pln { color: #fff; }    /* plaintext */
+.tag { color: #f0e68c; font-weight: bold; } /* html/xml tag    - lightyellow*/
+.atn { color: #bdb76b; font-weight: bold; } /* attribute name  - khaki*/
+.atv { color: #ffa0a0; } /* attribute value - pink */
+.dec { color: #98fb98; } /* decimal         - lightgreen */
+</style>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue8.txt b/test/prettify/PrettifyTest/source/issue8.txt
new file mode 100644
index 0000000..5892e73
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue8.txt
@@ -0,0 +1,3 @@
+one	Two	three	Four	five	|
+Six	seven	Eight	nine	Ten	|
+eleven	Twelve	thirteen	Fourteen	fifteen	|
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue84.txt b/test/prettify/PrettifyTest/source/issue84.txt
new file mode 100644
index 0000000..4994711
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue84.txt
@@ -0,0 +1 @@
+super("&nbsp;");
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue92.txt b/test/prettify/PrettifyTest/source/issue92.txt
new file mode 100644
index 0000000..2e56ccb
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue92.txt
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2">
+  <Placemark>
+    <name>Simple placemark</name>
+    <description Lang="en">Attached to the ground. Intelligently places itself 
+       at the height of the underlying terrain.</description>
+    <Point>
+      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
+    </Point>
+  </Placemark>
+</kml>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue93.txt b/test/prettify/PrettifyTest/source/issue93.txt
new file mode 100644
index 0000000..bebad94
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/issue93.txt
@@ -0,0 +1,4 @@
+// The normal string syntax
+string a = "C:\\";
+// is equivalent to a verbatim string
+string b = @"C:\";
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/isue45.txt b/test/prettify/PrettifyTest/source/isue45.txt
new file mode 100644
index 0000000..44624b6
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/isue45.txt
@@ -0,0 +1,3 @@
+throw new RuntimeException("Element [" + element.getName() + 
+  "] missing attribute.");
+variable++;
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/java.txt b/test/prettify/PrettifyTest/source/java.txt
new file mode 100644
index 0000000..daab483
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/java.txt
@@ -0,0 +1,44 @@
+package foo;
+
+import java.util.Iterator;
+
+/**
+ * the fibonacci series implemented as an Iterable.
+ */
+public final class Fibonacci implements Iterable<Integer> {
+  /** the next and previous members of the series. */
+  private int a = 1, b = 1;
+
+  @Override
+  public Iterator<Integer> iterator() {
+    return new Iterator<Integer>() {
+      /** the series is infinite. */
+      public boolean hasNext() { return true; }
+      public Integer next() {
+        int tmp = a;
+        a += b;
+        b = tmp;
+        return a;
+      }
+      public void remove() { throw new UnsupportedOperationException(); }
+    };
+  }
+
+  /**
+   * the n<sup>th</sup> element of the given series.
+   * @throws NoSuchElementException if there are less than n elements in the
+   *   given Iterable's {@link Iterable#iterator iterator}.
+   */
+  public static <T>
+  T nth(int n, Iterable<T> iterable) {
+    Iterator<? extends T> it = iterable.iterator();
+    while (--n > 0) {
+      it.next();
+    }
+    return it.next();
+  }
+
+  public static void main(String[] args) {
+    System.out.print(nth(10, new Fibonacci()));
+  }
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/java_lang.txt b/test/prettify/PrettifyTest/source/java_lang.txt
new file mode 100644
index 0000000..844443b
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/java_lang.txt
@@ -0,0 +1,47 @@
+package foo;
+ 
+import java.util.Iterator;
+ 
+/**
+ * the fibonacci series implemented as an Iterable.
+ */
+public final class Fibonacci implements Iterable<Integer> {
+  /** the next and previous members of the series. */
+  private int a = 1, b = 1;
+ 
+  @Override
+  public Iterator<Integer> iterator() {
+    return new Iterator<Integer>() {
+      /** the series is infinite. */
+      public boolean hasNext() { return true; }
+      public Integer next() {
+        int tmp = a;
+        a += b;
+        b = tmp;
+        return a;
+      }
+      public void remove() { throw new UnsupportedOperationException(); }
+    };
+  }
+ 
+  /**
+   * the n<sup>th</sup> element of the given series.
+   * @throws NoSuchElementException if there are less than n elements in the
+   *   given Iterable's {@link Iterable#iterator iterator}.
+   */
+  public static <T>
+  T nth(int n, Iterable<T> iterable) {
+    Iterator<? extends T> in = iterable.iterator();
+    while (--n > 0) {
+      in.next();
+    }
+    return in.next();
+  }
+ 
+  public static void main(String[] args) {
+    System.out.print(nth(10, new Fibonacci()));
+  }
+}
+ 
+# not a java comment
+# not keywords: static_cast and namespace
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/javascript.txt b/test/prettify/PrettifyTest/source/javascript.txt
new file mode 100644
index 0000000..3bc54e3
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/javascript.txt
@@ -0,0 +1,17 @@
+/**
+ * nth element in the fibonacci series.
+ * @param n >= 0
+ * @return the nth element, >= 0.
+ */
+function fib(n) {
+  var a = 1, b = 1;
+  var tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+
+document.write(fib(10));
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/misc1.txt b/test/prettify/PrettifyTest/source/misc1.txt
new file mode 100644
index 0000000..6f3a3ba
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/misc1.txt
@@ -0,0 +1,2 @@
+// ends with line comment token
+//
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/perl.txt b/test/prettify/PrettifyTest/source/perl.txt
new file mode 100644
index 0000000..a9ed533
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/perl.txt
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+use strict;
+use integer;
+
+# the nth element of the fibonacci series
+# param n - an int >= 0
+# return an int >= 0
+sub fib($) {
+  my $n = shift, $a = 1, $b = 1;
+  ($a, $b) = ($a + $b, $a) until (--$n < 0);
+  return $a;
+}
+
+print fib(10);
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/proto.txt b/test/prettify/PrettifyTest/source/proto.txt
new file mode 100644
index 0000000..ff97de5
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/proto.txt
@@ -0,0 +1,15 @@
+message SearchRequest {
+  required string query = 1;
+  optional int32 page_number = 2;
+  optional int32 result_per_page = 3 [default = 10];
+  enum Corpus {
+    UNIVERSAL = 0;
+    WEB = 1;
+    IMAGES = 2;
+    LOCAL = 3;
+    NEWS = 4;
+    PRODUCTS = 5;
+    VIDEO = 6;
+  }
+  optional Corpus corpus = 4 [default = UNIVERSAL];
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/python.txt b/test/prettify/PrettifyTest/source/python.txt
new file mode 100644
index 0000000..6cc14aa
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/python.txt
@@ -0,0 +1,24 @@
+#!/usr/bin/python2.4
+
+def fib():
+  '''
+  a generator that produces the elements of the fibonacci series
+  '''
+
+  a = 1
+  b = 1
+  while True:
+    a, b = a + b, a
+    yield a
+
+def nth(series, n):
+  '''
+  returns the nth element of a series,
+  consuming the earlier elements of the series
+  '''
+
+  for x in series:
+    n = n - 1
+    if n <= 0: return x
+
+print nth(fib(), 10)
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/python_lang.txt b/test/prettify/PrettifyTest/source/python_lang.txt
new file mode 100644
index 0000000..982efaf
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/python_lang.txt
@@ -0,0 +1,26 @@
+#!/usr/bin/python2.4
+
+def fib():
+  '''
+  a generator that produces the fibonacci series's elements
+  '''
+
+  a = 1
+  b = 1
+  while True:
+    a, b = a + b, a
+    yield a
+
+def nth(series, n):
+  '''
+  returns the nth element of a series,
+  consuming the series' earlier elements.
+  '''
+
+  for x in series:
+    n -= 1
+    if n <= 0: return x
+
+print nth(fib(), 10)
+
+/* not a comment and not keywords: null char true */
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/scala.txt b/test/prettify/PrettifyTest/source/scala.txt
new file mode 100644
index 0000000..df3bbca
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/scala.txt
@@ -0,0 +1,55 @@
+/* comment 1 */
+/*
+comment 2
+*/
+/* comment / * comment 3 **/
+// strings
+"Hello, World!", "\n",
+`an-identifier`, `\n`,
+'A', '\n',
+'aSymbol,
+"""Hello,
+World""", """Hello,\nWorld""",
+"""Hello, "World"!""",
+"""Hello, \"World\""""
+
+// Numbers
+0
+0123
+0xa0
+0XA0L
+123
+123.45
+1.50F
+0.50
+.50
+123e-1
+123.45e+1
+1.50e2
+0.50e-6
+.50e+42f
+
+// Values
+false, true, null, this;
+
+// Keywords
+class MyClass;
+import foo.bar;
+package baz;
+
+// From scala-lang.org/node/242
+def act() {
+  var pongCount = 0
+  loop {
+    react {
+      case Ping =>
+        if (pongCount % 1000 == 0)
+          Console.println("Pong: ping "+pongCount)
+        sender ! Pong
+        pongCount = pongCount + 1
+      case Stop =>
+        Console.println("Pong: stop")
+        exit()
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/sql_lang.txt b/test/prettify/PrettifyTest/source/sql_lang.txt
new file mode 100644
index 0000000..6205558
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/sql_lang.txt
@@ -0,0 +1,9 @@
+/* A multi-line
+ * comment */
+'Another string /* Isn\'t a comment',
+"A string */"
+-- A line comment
+SELECT * FROM users WHERE id IN (1, 2.0, +30e-1);
+-- keywords are case-insensitive.
+-- Note: user-table is a single identifier, not a pair of keywords
+select * from user-table where id in (x, y, z);
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/vhdl.txt b/test/prettify/PrettifyTest/source/vhdl.txt
new file mode 100644
index 0000000..b3e9dee
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/vhdl.txt
@@ -0,0 +1,36 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- A line comment
+entity foo_entity is
+
+  generic (-- comment after punc
+    a : natural := 42;
+    x : real := 16#ab.cd#-3
+  );
+  port (
+    clk_i : in  std_logic;
+    b_i   : in  natural range 0 to 100;
+    c_o   : out std_logic_vector(5 downto 0);
+    \a "name"\ : out integer  -- extended identifier
+  );
+
+end entity foo_entity;
+
+architecture foo_architecture of foo_entity is
+  signal bar_s : std_logic_vector(2 downto 0);
+begin
+  
+  bar_s <= b"101";
+
+  dummy_p : process (clk_i)
+  begin
+    if b_i = 1 then
+      c_o <= (others => '0');
+    elsif rising_edge(clk_i) then
+      c_o <= "1011" & bar_s(1 downto 0);
+    end if;
+  end process dummy_p;
+
+end architecture foo_architecture;
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/wiki.txt b/test/prettify/PrettifyTest/source/wiki.txt
new file mode 100644
index 0000000..adcd7dd
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/wiki.txt
@@ -0,0 +1,23 @@
+#summary hello world
+#labels HelloWorld WikiWord Hiya
+
+[http://www.google.com/?q=WikiSyntax+site:code.google.com WikiSyntax]
+
+Lorem Ipsum `while (1) print("blah blah");`
+
+   * Bullet
+   * Points
+      * NestedBullet
+
+==DroningOnAndOn==
+{{{
+  // Some EmbeddedSourceCode
+  void main() {
+    Print('hello world');
+  }
+}}}
+
+{{{
+  <!-- Embedded XML -->
+  <foo bar="baz"><boo /><foo>
+}}}
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/xhtml.txt b/test/prettify/PrettifyTest/source/xhtml.txt
new file mode 100644
index 0000000..5d2c119
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/xhtml.txt
@@ -0,0 +1,20 @@
+<xhtml>
+  <head>
+    <title>Fibonacci number</title>
+  </head>
+  <body onload="alert(fib(10))">
+    <script type="text/javascript"><![CDATA[
+function fib(n) {
+  var a = 1, b = 1;
+  var tmp;
+  while (--n >= 0) {
+    tmp = a;
+    a += b;
+    b = tmp;
+  }
+  return a;
+}
+]]>
+    </script>
+  </body>
+</xhtml>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/xml.txt b/test/prettify/PrettifyTest/source/xml.txt
new file mode 100644
index 0000000..5c7ec82
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/xml.txt
@@ -0,0 +1,11 @@
+<!DOCTYPE series PUBLIC "fibonacci numbers">
+
+<series.root base="1" step="s(n-2) + s(n-1)">
+  <element i="0">1</element>
+  <element i="1">1</element>
+  <element i="2">2</element>
+  <element i="3">3</element>
+  <element i="4">5</element>
+  <element i="5">8</element>
+  ...
+</series.root>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/xsl.txt b/test/prettify/PrettifyTest/source/xsl.txt
new file mode 100644
index 0000000..d5a45c5
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/xsl.txt
@@ -0,0 +1,7 @@
+<!-- Test elements and attributes with namespaces -->
+
+<xsl:stylesheet xml:lang="en">
+  <xsl:template match=".">
+    <xsl:text>Hello World</xsl:text>
+  </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/yaml1.txt b/test/prettify/PrettifyTest/source/yaml1.txt
new file mode 100644
index 0000000..52e0fe5
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/yaml1.txt
@@ -0,0 +1,24 @@
+application: mirah-lang
+version: 1
+
+# Here's a comment
+handlers:
+  - url: /red/*
+     servlet: mysite.server.TeamServlet
+     init_params:
+       teamColor: red
+       bgColor: "#CC0000"
+     name: redteam
+  - url: /blue/*
+     servlet: mysite.server.TeamServlet
+     init_params:
+       teamColor: blue
+       bgColor: "#0000CC"
+     name: blueteam
+  - url: /register/*
+     jsp: /register/start.jsp
+  - url: *.special
+     filter: mysite.server.LogFilterImpl
+     init_params:
+       logType: special
+  
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/yaml2.txt b/test/prettify/PrettifyTest/source/yaml2.txt
new file mode 100644
index 0000000..9e2d716
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/yaml2.txt
@@ -0,0 +1,16 @@
+%YAML 1.1
+---
+!!map {
+  ? !!str ""
+  : !!str "value",
+  ? !!str "explicit key"
+  : !!str "value",
+  ? !!str "simple key"
+  : !!str "value",
+  ? !!seq [
+    !!str "collection",
+    !!str "simple",
+    !!str "key"
+  ]
+  : !!str "value"
+}
\ No newline at end of file
