diff --git a/nbproject/project.properties b/nbproject/project.properties
index ac5d4e0..6c55589 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -64,7 +64,7 @@
 jnlp.signing=
 jnlp.signing.alias=
 jnlp.signing.keystore=
-main.class=
+main.class=prettify.example.Example
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 mkdist.disabled=false
diff --git a/src/prettify/Prettify.java b/src/prettify/Prettify.java
index 58c4eb7..20310cd 100644
--- a/src/prettify/Prettify.java
+++ b/src/prettify/Prettify.java
@@ -233,7 +233,7 @@
             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, "\'"}));
+            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)}));
@@ -510,7 +510,7 @@
                         // beginning which would cause us to infinitely recurse on the
                         // entire token, so we catch the right context in match[2].
                         embeddedSourceEnd = token.length() - match[2].length();
-                        embeddedSourceStart = embeddedSourceEnd = embeddedSource.length();
+                        embeddedSourceStart = embeddedSourceEnd - embeddedSource.length();
                     }
                     String lang = style.substring(5);
                     // Decorate the left of the embedded source
@@ -746,7 +746,7 @@
         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 = Util.test(Pattern.compile("^\\s&<"), source)
+            extension = Util.test(Pattern.compile("^\\s*<"), source)
                     ? "default-markup"
                     : "default-code";
         }
diff --git a/src/prettify/SyntaxHighlighter.java b/src/prettify/SyntaxHighlighter.java
index a53cf26..e4d95da 100644
--- a/src/prettify/SyntaxHighlighter.java
+++ b/src/prettify/SyntaxHighlighter.java
@@ -24,7 +24,7 @@
 
     static {
         // set debug mode
-        System.setProperty("PrettifyDebugMode", "false");
+        System.setProperty("PrettifyDebugMode", "true");
     }
     private static final long serialVersionUID = 1L;
     /**
@@ -40,6 +40,10 @@
      */
     protected Theme theme;
     /**
+     * The Prettify object.
+     */
+    protected Prettify prettify;
+    /**
      * The content of the syntax highlighter, null if there is no content so far.
      */
     protected String content;
@@ -68,6 +72,7 @@
         }
 
         this.theme = theme;
+        prettify = new Prettify();
 
         setBorder(null);
 
@@ -86,17 +91,18 @@
      * This will re-parse the content and set the style.
      */
     protected void render() {
-//        if (content != null) {
-//            Parser parser = new Parser();
-//            // stop the change listener on the row header to speed up rendering
-//            highlighterRowHeader.setListenToDocumentUpdate(false);
-//            highlighter.setStyle(parser.parse(brush, htmlScript, content.toCharArray(), 0, content.length()));
-//            // resume the change listener on the row header
-//            highlighterRowHeader.setListenToDocumentUpdate(true);
-//            // notify the row header to update its information related to the SyntaxHighlighterPane
-//            // need to call this because we have stopped the change listener of the row header in previous code
-//            highlighterRowHeader.checkPanelSize();
-//        }
+        if (content != null) {
+            // stop the change listener on the row header to speed up rendering
+            highlighterRowHeader.setListenToDocumentUpdate(false);
+            Job job = new Job(0, content);
+            prettify.langHandlerForExtension(null, content).decorate(job);
+            highlighter.setStyle(job.getDecorations());
+            // resume the change listener on the row header
+            highlighterRowHeader.setListenToDocumentUpdate(true);
+            // notify the row header to update its information related to the SyntaxHighlighterPane
+            // need to call this because we have stopped the change listener of the row header in previous code
+            highlighterRowHeader.checkPanelSize();
+        }
     }
 
     /**
diff --git a/src/prettify/SyntaxHighlighterPane.java b/src/prettify/SyntaxHighlighterPane.java
index 82059ec..9df1190 100644
--- a/src/prettify/SyntaxHighlighterPane.java
+++ b/src/prettify/SyntaxHighlighterPane.java
@@ -19,9 +19,7 @@
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.JTextPane;
@@ -83,9 +81,9 @@
      */
     protected Theme theme;
     /**
-     * The style list. see {@link #setStyle(java.util.Map)}.
+     * The style list. see {@link #setStyle(java.util.List)}.
      */
-    protected Map<String, List<Object>> styleList;
+    protected List<Object> styleList;
     /**
      * Record the mouse cursor is currently pointing at which line of the document. -1 means not any line.
      * It is used internally.
@@ -319,13 +317,12 @@
      * Apply the list of style to the script text pane.
      * @param styleList the style list
      */
-    public void setStyle(Map<String, List<Object>> styleList) {
+    public void setStyle(List<Object> styleList) {
         if (styleList == null) {
-            this.styleList = new HashMap<String, List<Object>>();
+            this.styleList = new ArrayList<Object>();
             return;
         }
-        // not a deep copy
-        this.styleList = new HashMap<String, List<Object>>(styleList);
+        this.styleList = new ArrayList<Object>(styleList);
 
         if (theme == null) {
             return;
@@ -335,15 +332,14 @@
         // clear all the existing style
         document.setCharacterAttributes(0, document.getLength(), theme.getPlain().getAttributeSet(), true);
 
-//        // apply style according to the style list
-//        for (String key : styleList.keySet()) {
-//            List<Object> posList = styleList.get(key);
-//
-//            AttributeSet attributeSet = theme.getStyle(key).getAttributeSet();
-//            for (Object pos : posList) {
-//                document.setCharacterAttributes(pos.getOffset(), pos.getLength(), attributeSet, true);
-//            }
-//        }
+        Integer startPos = 0, endPos = 0;
+        // apply style according to the style list
+        for (int i = 0, iEnd = styleList.size(); i < iEnd; i += 2) {
+            SimpleAttributeSet attributeSet = theme.getStyle((String) styleList.get(i + 1)).getAttributeSet();
+            endPos = i + 2 < iEnd ? (Integer) styleList.get(i + 2) : document.getLength();
+            startPos = (Integer) styleList.get(i);
+            document.setCharacterAttributes(startPos, endPos - startPos, attributeSet, true);
+        }
 
         repaint();
     }
diff --git a/src/prettify/Theme.java b/src/prettify/Theme.java
index cf60dbc..0c6f505 100644
--- a/src/prettify/Theme.java
+++ b/src/prettify/Theme.java
@@ -171,7 +171,7 @@
             return type;
         } else if (key.equals("lit")) {
             return literal;
-        } else if (key.equals("pub")) {
+        } else if (key.equals("pun")) {
             return punctuation;
         } else if (key.equals("pln")) {
             return plain;
diff --git a/src/prettify/Util.java b/src/prettify/Util.java
index b8c69e9..874a111 100644
--- a/src/prettify/Util.java
+++ b/src/prettify/Util.java
@@ -18,6 +18,9 @@
         Matcher matcher = pattern.matcher(string);
         while (matcher.find()) {
             matchesList.add(matcher.group(0));
+            for (int i = 1, iEnd = matcher.groupCount(); i <= iEnd; i++) {
+                matchesList.add(matcher.group(i));
+            }
         }
 
         return matchesList.toArray(new String[matchesList.size()]);
diff --git a/src/prettify/example/Example.java b/src/prettify/example/Example.java
new file mode 100644
index 0000000..5c528a2
--- /dev/null
+++ b/src/prettify/example/Example.java
@@ -0,0 +1,111 @@
+/**
+ * This is part of the Java SyntaxHighlighter.
+ * 
+ * It is distributed under MIT license. See the file 'readme.txt' for
+ * information on usage and redistribution of this file, and for a
+ * DISCLAIMER OF ALL WARRANTIES.
+ * 
+ * @author Chan Wai Shing <cws1989@gmail.com>
+ */
+package prettify.example;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import prettify.SyntaxHighlighter;
+import prettify.theme.ThemeDefault;
+
+/**
+ * Usage example. This will just cover some of the functions. To know other available functions, please read the JavaDoc.
+ * @author Chan Wai Shing <cws1989@gmail.com>
+ */
+public class Example {
+
+    /**
+     * 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 = Example.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 void main(String[] args) {
+        // set look & feel
+        try {
+            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+        } catch (Exception ex) {
+            Logger.getLogger(Example.class.getName()).log(Level.INFO, "Failed to set system look and feel.", ex);
+        }
+
+        SwingUtilities.invokeLater(new Runnable() {
+
+            @Override
+            public void run() {
+                try {
+                    // timer start
+                    long start, end;
+                    start = System.currentTimeMillis();
+
+                    // use XML (for HTML) brush and RDark theme
+                    SyntaxHighlighter highlighter = new SyntaxHighlighter(new ThemeDefault());
+                    // set the line number count from 10 instead of 1
+                    highlighter.setFirstLine(10);
+                    // set to highlight line 13, 27, 28, 38, 42, 43 and 53
+                    highlighter.setHighlightedLineList(Arrays.asList(13, 27, 28, 38, 42, 43, 53));
+                    // set the content of the script, the example.html is located in the jar: /syntaxhighlighter/example/example.html
+                    highlighter.setContent(new String(readResourceFile("/prettify/example/example.html")));
+
+                    // timer end
+                    end = System.currentTimeMillis();
+                    System.out.println("time elapsed: " + (end - start) + "ms");
+
+                    // initiate a frame and display
+                    JFrame frame = new JFrame();
+                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                    // SyntaxHighlighter is actually a JScrollPane
+                    frame.setContentPane(highlighter);
+                    frame.setLocationByPlatform(true);
+                    frame.pack();
+                    frame.setVisible(true);
+                } catch (Exception ex) {
+                    Logger.getLogger(Example.class.getName()).log(Level.SEVERE, null, ex);
+                }
+            }
+        });
+    }
+}
diff --git a/src/prettify/example/example.html b/src/prettify/example/example.html
new file mode 100644
index 0000000..d378884
--- /dev/null
+++ b/src/prettify/example/example.html
@@ -0,0 +1,47 @@
+<html var="value">
+<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/src/prettify/example/package-info.java b/src/prettify/example/package-info.java
new file mode 100644
index 0000000..736f3f9
--- /dev/null
+++ b/src/prettify/example/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Usage example.
+ */
+package prettify.example;
\ No newline at end of file
diff --git a/src/prettify/theme/ThemeDefault.java b/src/prettify/theme/ThemeDefault.java
index 43cdceb..5f7cc3e 100644
--- a/src/prettify/theme/ThemeDefault.java
+++ b/src/prettify/theme/ThemeDefault.java
@@ -15,71 +15,71 @@
         setFont(new Font("Consolas", Font.PLAIN, 12));
         setBackground(Color.white);
 
-        setHighlightedBackground(Color.decode("0xeee"));
+        setHighlightedBackground(Color.decode("0xcccccc"));
 
-        setGutterText(Color.decode("0x000"));
-        setGutterBorderColor(Color.decode("0xeee"));
+        setGutterText(Color.decode("0x000000"));
+        setGutterBorderColor(Color.decode("0xaaaaaa"));
         setGutterBorderWidth(3);
         setGutterTextFont(new Font("Verdana", Font.PLAIN, 11));
         setGutterTextPaddingLeft(7);
         setGutterTextPaddingRight(7);
 
         Style plainStyle = new Style();
-        plainStyle.setColor(Color.decode("0x000"));
+        plainStyle.setColor(Color.decode("0x000000"));
         setPlain(plainStyle);
 
         Style style;
 
         style = new Style();
-        style.setColor(Color.decode("0x080"));
+        style.setColor(Color.decode("0x008800"));
         setString(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x008"));
+        style.setColor(Color.decode("0x000088"));
         setKeyword(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x800"));
+        style.setColor(Color.decode("0x880000"));
         setComment(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x606"));
+        style.setColor(Color.decode("0x660066"));
         setType(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x066"));
+        style.setColor(Color.decode("0x006666"));
         setLiteral(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x660"));
+        style.setColor(Color.decode("0x666600"));
         setPunctuation(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x008"));
+        style.setColor(Color.decode("0x000088"));
         setTag(style);
 
         setDeclaration(plainStyle);
 
         style = new Style();
-        style.setColor(Color.decode("0x606"));
+        style.setColor(Color.decode("0x660066"));
         setAttributeName(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x080"));
+        style.setColor(Color.decode("0x008800"));
         setAttributeValue(style);
 
         setNoCode(plainStyle);
 
         style = new Style();
-        style.setColor(Color.decode("0x660"));
+        style.setColor(Color.decode("0x666600"));
         setOpenBracket(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x660"));
+        style.setColor(Color.decode("0x666600"));
         setCloseBracket(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x606"));
+        style.setColor(Color.decode("0x660066"));
         setVariable(style);
 
         style = new Style();
diff --git a/src/prettify/theme/ThemeDesert.java b/src/prettify/theme/ThemeDesert.java
index 70398d0..a967a8c 100644
--- a/src/prettify/theme/ThemeDesert.java
+++ b/src/prettify/theme/ThemeDesert.java
@@ -15,19 +15,19 @@
         /* desert scheme ported from vim to google prettify */
 
         setFont(new Font("Consolas", Font.PLAIN, 12));
-        setBackground(Color.decode("0x000"));
+        setBackground(Color.decode("0x111111"));
 
-        setHighlightedBackground(Color.decode("0x111"));
+        setHighlightedBackground(Color.decode("0x444444"));
 
-        setGutterText(Color.decode("0xfff"));
-        setGutterBorderColor(Color.decode("0x111"));
+        setGutterText(Color.decode("0xffffff"));
+        setGutterBorderColor(Color.decode("0x888888"));
         setGutterBorderWidth(3);
         setGutterTextFont(new Font("Verdana", Font.PLAIN, 11));
         setGutterTextPaddingLeft(7);
         setGutterTextPaddingRight(7);
 
         Style plainStyle = new Style();
-        plainStyle.setColor(Color.decode("0xfff"));
+        plainStyle.setColor(Color.decode("0xffffff"));
         setPlain(plainStyle);
 
         Style style;
@@ -54,7 +54,7 @@
         setLiteral(style);
 
         style = new Style();
-        style.setColor(Color.decode("0xfff"));
+        style.setColor(Color.decode("0xffffff"));
         setPunctuation(style);
 
         style = new Style();
@@ -77,7 +77,7 @@
         setAttributeValue(style);
 
         style = new Style();
-        style.setColor(Color.decode("0x333"));
+        style.setColor(Color.decode("0x333333"));
         setNoCode(style);
 
         setOpenBracket(plainStyle);
diff --git a/src/prettify/theme/ThemeSonsOfObsidian.java b/src/prettify/theme/ThemeSonsOfObsidian.java
index 08920bb..c6177c1 100644
--- a/src/prettify/theme/ThemeSonsOfObsidian.java
+++ b/src/prettify/theme/ThemeSonsOfObsidian.java
@@ -21,12 +21,12 @@
          */
 
         setFont(new Font("Consolas", Font.PLAIN, 12));
-        setBackground(Color.white);
+        setBackground(Color.decode("0x000000"));
 
-        setHighlightedBackground(Color.decode("0x111"));
+        setHighlightedBackground(Color.decode("0x333333"));
 
-        setGutterText(Color.decode("0xF1F2F3"));
-        setGutterBorderColor(Color.decode("0x111"));
+        setGutterText(Color.decode("0x555555"));
+        setGutterBorderColor(Color.decode("0x666666"));
         setGutterBorderWidth(3);
         setGutterTextFont(new Font("Verdana", Font.PLAIN, 11));
         setGutterTextPaddingLeft(7);
diff --git a/src/prettify/theme/ThemeSunburst.java b/src/prettify/theme/ThemeSunburst.java
index ef75c80..4865938 100644
--- a/src/prettify/theme/ThemeSunburst.java
+++ b/src/prettify/theme/ThemeSunburst.java
@@ -19,17 +19,17 @@
         setFont(new Font("Consolas", Font.PLAIN, 12));
         setBackground(Color.black);
 
-        setHighlightedBackground(Color.decode("0xAEAEAE"));
+        setHighlightedBackground(Color.decode("0x444444"));
 
-        setGutterText(Color.decode("0xfff"));
-        setGutterBorderColor(Color.decode("0xAEAEAE"));
+        setGutterText(Color.decode("0xffffff"));
+        setGutterBorderColor(Color.decode("0x777777"));
         setGutterBorderWidth(3);
         setGutterTextFont(new Font("Verdana", Font.PLAIN, 11));
         setGutterTextPaddingLeft(7);
         setGutterTextPaddingRight(7);
 
         Style plainStyle = new Style();
-        plainStyle.setColor(Color.decode("0xfff"));
+        plainStyle.setColor(Color.decode("0xffffff"));
         setPlain(plainStyle);
 
         Style style;
@@ -56,7 +56,7 @@
         setLiteral(style);
 
         style = new Style();
-        style.setColor(Color.decode("0xfff")); /* punctuation - white */
+        style.setColor(Color.decode("0xffffff")); /* punctuation - white */
         setPunctuation(style);
 
         style = new Style();
