- update from r195 to r216 of google-code-prettify
diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
index e30d0ee..5d2a48b 100644
--- a/nbproject/build-impl.xml
+++ b/nbproject/build-impl.xml
@@ -20,10 +20,10 @@
 

         -->

 <project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="Prettify-impl">

-    <fail message="Please build using Ant 1.7.1 or higher.">

+    <fail message="Please build using Ant 1.8.0 or higher.">

         <condition>

             <not>

-                <antversion atleast="1.7.1"/>

+                <antversion atleast="1.8.0"/>

             </not>

         </condition>

     </fail>

@@ -198,6 +198,7 @@
         <property name="javac.fork" value="${jdkBug6558476}"/>

         <property name="jar.index" value="false"/>

         <property name="jar.index.metainf" value="${jar.index}"/>

+        <property name="copylibs.rebase" value="true"/>

         <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>

     </target>

     <target name="-post-init">

@@ -384,6 +385,7 @@
                 <property environment="env"/>

                 <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>

                 <java classname="@{classname}" dir="${profiler.info.dir}" fork="true" jvm="${profiler.info.jvm}">

+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>

                     <jvmarg value="${profiler.info.jvmargs.agent}"/>

                     <jvmarg line="${profiler.info.jvmargs}"/>

                     <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>

@@ -514,7 +516,7 @@
                     </chainedmapper>

                 </pathconvert>

                 <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>

-                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" runtimeclasspath="${run.classpath.without.build.classes.dir}">

+                <copylibs compress="${jar.compress}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">

                     <fileset dir="${build.classes.dir}"/>

                     <manifest>

                         <attribute name="Class-Path" value="${jar.classpath}"/>

@@ -839,6 +841,14 @@
             -->

     <target depends="init" if="have.sources" name="-javadoc-build">

         <mkdir dir="${dist.javadoc.dir}"/>

+        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">

+            <and>

+                <isset property="endorsed.classpath.cmd.line.arg"/>

+                <not>

+                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>

+                </not>

+            </and>

+        </condition>

         <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">

             <classpath>

                 <path path="${javac.classpath}"/>

@@ -850,6 +860,7 @@
                 <include name="**/*.java"/>

                 <exclude name="*.java"/>

             </fileset>

+            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>

         </javadoc>

         <copy todir="${dist.javadoc.dir}">

             <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">

diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties
index cde3213..b191729 100644
--- a/nbproject/genfiles.properties
+++ b/nbproject/genfiles.properties
@@ -4,5 +4,5 @@
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.

 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.

 nbproject/build-impl.xml.data.CRC32=4d2699c2

-nbproject/build-impl.xml.script.CRC32=95d36cae

-nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45

+nbproject/build-impl.xml.script.CRC32=8f94e7f0

+nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46

diff --git a/nbproject/project.properties b/nbproject/project.properties
index c048c89..eb942db 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -1,5 +1,6 @@
 annotation.processing.enabled=true

 annotation.processing.enabled.in.editor=false

+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

diff --git a/src/prettify/lang/LangCss.java b/src/prettify/lang/LangCss.java
index 71f1d32..f644f2f 100644
--- a/src/prettify/lang/LangCss.java
+++ b/src/prettify/lang/LangCss.java
@@ -49,7 +49,7 @@
     // Quoted strings.  <string1> and <string2>
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^\\\"(?:[^\n\r\f\\\\\\\"]|\\\\(?:\r\n?|\n|\f)|\\\\[\\s\\S])*\\\""), null}));
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^\\'(?:[^\n\r\f\\\\\\']|\\\\(?:\r\n?|\n|\f)|\\\\[\\s\\S])*\\'"), null}));
-    _fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-css-str", Pattern.compile("^url\\(([^\\)\\\"\\']*)\\)", Pattern.CASE_INSENSITIVE)}));
+    _fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-css-str", Pattern.compile("^url\\(([^\\)\\\"\\']+)\\)", Pattern.CASE_INSENSITIVE)}));
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:url|rgb|\\!important|@import|@page|@media|@charset|inherit)(?=[^\\-\\w]|$)", Pattern.CASE_INSENSITIVE), null}));
     // A property name -- an identifier followed by a colon.
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{"lang-css-kw", Pattern.compile("^(-?(?:[_a-z]|(?:\\\\[0-9a-f]+ ?))(?:[_a-z0-9\\-]|\\\\(?:\\\\[0-9a-f]+ ?))*)\\s*:", Pattern.CASE_INSENSITIVE)}));
diff --git a/src/prettify/lang/LangLisp.java b/src/prettify/lang/LangLisp.java
index 9e7721e..b7617a1 100644
--- a/src/prettify/lang/LangLisp.java
+++ b/src/prettify/lang/LangLisp.java
@@ -102,6 +102,6 @@
   }
 
   public static List<String> getFileExtensions() {
-    return Arrays.asList(new String[]{"cl", "el", "lisp", "lsp", "scm"});
+    return Arrays.asList(new String[]{"cl", "el", "lisp", "lsp", "scm", "ss", "rkt"});
   }
 }
diff --git a/src/prettify/lang/LangSql.java b/src/prettify/lang/LangSql.java
index 2610fc8..83def8c 100644
--- a/src/prettify/lang/LangSql.java
+++ b/src/prettify/lang/LangSql.java
@@ -34,8 +34,9 @@
  *
  *
  * http://savage.net.au/SQL/sql-99.bnf.html is the basis for the grammar, and
- * http://msdn.microsoft.com/en-us/library/aa238507(SQL.80).aspx as the basis
- * for the keyword list.
+ * http://msdn.microsoft.com/en-us/library/aa238507(SQL.80).aspx and
+ * http://meta.stackoverflow.com/q/92352/137403 as the bases for the keyword
+ * list.
  *
  * @author mikesamuel@gmail.com
  */
@@ -52,7 +53,7 @@
     // A comment is either a line comment that starts with two dashes, or
     // two dashes preceding a long bracketed block.
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^(?:--[^\\r\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$))")}));
-    _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|MATCH|MERGE|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\\w-]|$)", Pattern.CASE_INSENSITIVE), null}));
+    _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:ADD|ALL|ALTER|AND|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOLLOWING|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|MATCH|MERGE|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECEDING|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|ROWS?|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNBOUNDED|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\\w-]|$)", Pattern.CASE_INSENSITIVE), null}));
     // A number is a hex integer literal, a decimal real literal, or in
     // scientific notation.
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^[+-]?(?:0x[\\da-f]+|(?:(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+\\-]?\\d+)?))", Pattern.CASE_INSENSITIVE)}));
diff --git a/src/prettify/lang/LangVb.java b/src/prettify/lang/LangVb.java
index ee89311..99c96ed 100644
--- a/src/prettify/lang/LangVb.java
+++ b/src/prettify/lang/LangVb.java
@@ -50,7 +50,10 @@
     // A single character can be suffixed with C.
     _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^(?:[\\\"\\u201C\\u201D](?:[^\\\"\\u201C\\u201D]|[\\\"\\u201C\\u201D]{2})(?:[\\\"\\u201C\\u201D]c|$)|[\\\"\\u201C\\u201D](?:[^\\\"\\u201C\\u201D]|[\\\"\\u201C\\u201D]{2})*(?:[\\\"\\u201C\\u201D]|$))", Pattern.CASE_INSENSITIVE), null, "\"\u201C\u201D"}));
     // A comment starts with a single quote and runs until the end of the line.
-    _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^[\\'\\u2018\\u2019][^\\r\\n\\u2028\\u2029]*"), null, "'\u2018\u2019"}));
+    // VB6 apparently allows _ as an escape sequence for newlines though
+    // this is not a documented feature of VB.net.
+    // http://meta.stackoverflow.com/q/121497/137403
+    _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^[\\'\\u2018\\u2019](?:_(?:\r\n?|[^\r]?)|[^\\r\\n_\\u2028\\u2029])*"), null, "'\u2018\u2019"}));
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\\b", Pattern.CASE_INSENSITIVE), null}));
     // A second comment form
     _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^REM[^\\r\\n\\u2028\\u2029]*", Pattern.CASE_INSENSITIVE)}));
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java
index f81c2cf..ab6714e 100644
--- a/src/prettify/parser/Prettify.java
+++ b/src/prettify/parser/Prettify.java
@@ -104,12 +104,13 @@
           + "transient";
   public static final String CSHARP_KEYWORDS = JAVA_KEYWORDS + ","
           + "as,base,by,checked,decimal,delegate,descending,dynamic,event,"
-          + "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,"
-          + "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,"
-          + "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var";
+          + "fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,"
+          + "lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,"
+          + "sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,"
+          + "var,virtual,where";
   public static final String COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally,"
           + "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,"
-          + "true,try,unless,until,when,while,yes";
+          + "throw,true,try,unless,until,when,while,yes";
   public static final String JSCRIPT_KEYWORDS = COMMON_KEYWORDS + ","
           + "debugger,eval,export,function,get,null,set,undefined,var,with,"
           + "Infinity,NaN";
@@ -621,8 +622,9 @@
                     null,
                     "#"}));
         }
+        // #include <stdio.h>
         fallthroughStylePatterns.add(Arrays.asList(new Object[]{PR_STRING,
-                  Pattern.compile("^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>"),
+                  Pattern.compile("^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>"),
                   null}));
       } else {
         shortcutStylePatterns.add(Arrays.asList(new Object[]{PR_COMMENT,
diff --git a/test/prettify/PrettifyTest/result/css.txt b/test/prettify/PrettifyTest/result/css.txt
index e61e3ff..583fa07 100644
--- a/test/prettify/PrettifyTest/result/css.txt
+++ b/test/prettify/PrettifyTest/result/css.txt
@@ -16,4 +16,6 @@
   * regardless of case.

   */`END`PLN

 blink `END`PUN{`END`PLN `END`KWDtext-decoration`END`PUN:`END`PLN BLINK `END`KWD!IMPORTANT`END`PUN;`END`PLN `END`KWDfont-weight`END`PUN:`END`PLN bolder `END`PUN}`END`PLN

+`END`COM/* Empty url() was causing infinite recursion */`END`PLN

+a `END`PUN{`END`PLN `END`KWDbackground-image`END`PUN:`END`PLN `END`KWDurl`END`PUN();`END`PLN `END`PUN}`END`PLN

 `END`COM--&gt;`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/result/issue27.txt b/test/prettify/PrettifyTest/result/issue27.txt
index 49af8d5..49d93ae 100644
--- a/test/prettify/PrettifyTest/result/issue27.txt
+++ b/test/prettify/PrettifyTest/result/issue27.txt
@@ -1,43 +1,46 @@
-`KWDImports`END`PLN System

-

-`END`KWDClass`END`PLN [class]

-    `END`KWDShared`END`PLN `END`KWDSub`END`PLN [shared]`END`PUN(`END`KWDByVal`END`PLN [boolean] `END`KWDAs`END`PLN `END`KWDBoolean`END`PUN)`END`PLN

-        `END`KWDIf`END`PLN [boolean] `END`KWDThen`END`PLN

-            Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"true"`END`PUN)`END`PLN

-        `END`KWDElse`END`PLN

-            Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"false"`END`PUN)`END`PLN

-        `END`KWDEnd`END`PLN `END`KWDIf`END`PLN

-    `END`KWDEnd`END`PLN `END`KWDSub`END`PLN

-`END`KWDEnd`END`PLN `END`KWDClass`END`PLN

-

-`END`KWDModule`END`PLN [module]

-    `END`KWDSub`END`PLN Main`END`PUN()`END`PLN

-        [class]`END`PUN.`END`PLN[shared]`END`PUN(`END`LITTrue`END`PUN)`END`PLN

-

-        `END`COM' This prints out: ".`END`PLN

-        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR""""`END`PUN)`END`PLN

-

-        `END`COM' This prints out: a"b.`END`PLN

-        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"a""b"`END`PUN)`END`PLN

-

-        `END`COM' This prints out: a.`END`PLN

-        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"a"c`END`PUN)`END`PLN

-

-        `END`COM' This prints out: ".`END`PLN

-        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR""""c`END`PUN)`END`PLN

-    `END`KWDEnd`END`PLN `END`KWDSub`END`PLN

-`END`KWDEnd`END`PLN `END`KWDModule`END`PLN

-

-`END`KWDDim`END`PLN d `END`KWDAs`END`PLN `END`KWDDate`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 8/23/1970 3:45:39AM #`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 8/23/1970 #`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 3:45:39AM #`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 3:45:39 #`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 13:45:39 #`END`PLN

-d `END`PUN=`END`PLN `END`LIT# 13:45:39PM #`END`PLN

-

-`END`KWDDim`END`PLN n `END`KWDAs`END`PLN Float

-n `END`PUN=`END`PLN `END`PUN(`END`LIT0.0`END`PUN,`END`PLN `END`LIT.99F`END`PUN,`END`PLN `END`LIT1.0E-2D`END`PUN,`END`PLN `END`LIT1.0E+3D`END`PUN,`END`PLN `END`LIT.5E4`END`PUN,`END`PLN `END`LIT1E3R`END`PUN,`END`PLN `END`LIT4D`END`PUN)`END`PLN

-

-`END`KWDDim`END`PLN i `END`KWDAs`END`PLN `END`KWDInteger`END`PLN

+`KWDImports`END`PLN System
+
+`END`KWDClass`END`PLN [class]
+    `END`KWDShared`END`PLN `END`KWDSub`END`PLN [shared]`END`PUN(`END`KWDByVal`END`PLN [boolean] `END`KWDAs`END`PLN `END`KWDBoolean`END`PUN)`END`PLN
+        `END`KWDIf`END`PLN [boolean] `END`KWDThen`END`PLN
+            Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"true"`END`PUN)`END`PLN
+        `END`KWDElse`END`PLN
+            Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"false"`END`PUN)`END`PLN
+        `END`KWDEnd`END`PLN `END`KWDIf`END`PLN
+    `END`KWDEnd`END`PLN `END`KWDSub`END`PLN
+`END`KWDEnd`END`PLN `END`KWDClass`END`PLN
+
+`END`COM' Comment`END`PLN
+`END`COM‘ Second Line comment with a smart quote _
+  continued line using VB6 syntax.`END`PLN
+`END`KWDModule`END`PLN [module]
+    `END`KWDSub`END`PLN Main`END`PUN()`END`PLN
+        [class]`END`PUN.`END`PLN[shared]`END`PUN(`END`LITTrue`END`PUN)`END`PLN
+
+        `END`COM' This prints out: ".`END`PLN
+        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR""""`END`PUN)`END`PLN
+
+        `END`COM' This prints out: a"b.`END`PLN
+        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"a""b"`END`PUN)`END`PLN
+
+        `END`COM' This prints out: a.`END`PLN
+        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR"a"c`END`PUN)`END`PLN
+
+        `END`COM' This prints out: ".`END`PLN
+        Console`END`PUN.`END`PLNWriteLine`END`PUN(`END`STR""""c`END`PUN)`END`PLN
+    `END`KWDEnd`END`PLN `END`KWDSub`END`PLN
+`END`KWDEnd`END`PLN `END`KWDModule`END`PLN
+
+`END`KWDDim`END`PLN d `END`KWDAs`END`PLN `END`KWDDate`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 8/23/1970 3:45:39AM #`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 8/23/1970 #`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 3:45:39AM #`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 3:45:39 #`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 13:45:39 #`END`PLN
+d `END`PUN=`END`PLN `END`LIT# 13:45:39PM #`END`PLN
+
+`END`KWDDim`END`PLN n `END`KWDAs`END`PLN Float
+n `END`PUN=`END`PLN `END`PUN(`END`LIT0.0`END`PUN,`END`PLN `END`LIT.99F`END`PUN,`END`PLN `END`LIT1.0E-2D`END`PUN,`END`PLN `END`LIT1.0E+3D`END`PUN,`END`PLN `END`LIT.5E4`END`PUN,`END`PLN `END`LIT1E3R`END`PUN,`END`PLN `END`LIT4D`END`PUN)`END`PLN
+
+`END`KWDDim`END`PLN i `END`KWDAs`END`PLN `END`KWDInteger`END`PLN
 i `END`PUN=`END`PLN `END`PUN(`END`LIT0`END`PUN,`END`PLN `END`LIT123`END`PUN,`END`PLN `END`LIT45L`END`PUN,`END`PLN `END`LIT&amp;HA0I`END`PUN,`END`PLN `END`LIT&amp;O177S`END`PUN)`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/css.txt b/test/prettify/PrettifyTest/source/css.txt
index be19d0b..c0dab2c 100644
--- a/test/prettify/PrettifyTest/source/css.txt
+++ b/test/prettify/PrettifyTest/source/css.txt
@@ -16,4 +16,6 @@
   * regardless of case.

   */

 blink { text-decoration: BLINK !IMPORTANT; font-weight: bolder }

+/* Empty url() was causing infinite recursion */

+a { background-image: url(); }

 -->
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/issue27.txt b/test/prettify/PrettifyTest/source/issue27.txt
index 5e251e2..0045f4a 100644
--- a/test/prettify/PrettifyTest/source/issue27.txt
+++ b/test/prettify/PrettifyTest/source/issue27.txt
@@ -1,43 +1,46 @@
-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

+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
+
+' Comment
+‘ Second Line comment with a smart quote _
+  continued line using VB6 syntax.
+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