porting in progress
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