- update to r262 of google-code-prettify (LLVM mode courtesy Nikhil Dabas)
diff --git a/src/prettify/lang/LangLlvm.java b/src/prettify/lang/LangLlvm.java
new file mode 100644
index 0000000..0955dc5
--- /dev/null
+++ b/src/prettify/lang/LangLlvm.java
@@ -0,0 +1,73 @@
+// Copyright (C) 2013 Nikhil Dabas
+//
+// 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.lang;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+import prettify.parser.Prettify;
+
+/**
+ * This is similar to the lang-ml.js in JavaScript Prettify.
+ *
+ * All comments are adapted from the JavaScript Prettify.
+ *
+ * <p> Registers a language handler for LLVM. From
+ * https://gist.github.com/ndabas/2850418
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page. Then put your
+ * code in an HTML tag like <pre class="prettyprint lang-llvm">(my LLVM code)</pre>
+ *
+ *
+ * The regular expressions were adapted from:
+ * https://github.com/hansstimer/llvm.tmbundle/blob/76fedd8f50fd6108b1780c51d79fbe3223de5f34/Syntaxes/LLVM.tmLanguage
+ *
+ * http://llvm.org/docs/LangRef.html#constants describes the language grammar.
+ *
+ * @author Nikhil Dabas
+ */
+public class LangLlvm extends Lang {
+
+    public LangLlvm() {
+        List<List<Object>> _shortcutStylePatterns = new ArrayList<List<Object>>();
+        List<List<Object>> _fallthroughStylePatterns = new ArrayList<List<Object>>();
+
+        // Whitespace
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^[\t\n\r \\xA0]+"), null, "\t\n\r " + Character.toString((char) 0xA0)}));
+        // A double quoted, possibly multi-line, string.
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^!?\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S])*(?:\\\"|$)"), null, "\""}));
+        // comment.llvm
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^;[^\r\n]*"), null, ";"}));
+        // variable.llvm
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^[%@!](?:[-a-zA-Z$._][-a-zA-Z$._0-9]*|\\d+)")}));
+        // According to http://llvm.org/docs/LangRef.html#well-formedness
+        // These reserved words cannot conflict with variable names, because none of them start with a prefix character ('%' or '@').
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^[A-Za-z_][0-9A-Za-z_]*"), null}));
+        // constant.numeric.float.llvm
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^\\d+\\.\\d+")}));
+        // constant.numeric.integer.llvm
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^(?:\\d+|0[xX][a-fA-F0-9]+)")}));
+        // punctuation
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PUNCTUATION, Pattern.compile("^[()\\[\\]{},=*<>:]|\\.\\.\\.$")}));
+
+        setShortcutStylePatterns(_shortcutStylePatterns);
+        setFallthroughStylePatterns(_fallthroughStylePatterns);
+    }
+
+    public static List<String> getFileExtensions() {
+        return Arrays.asList(new String[]{"llvm", "ll"});
+    }
+}
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java
index 11e0906..3080e04 100644
--- a/src/prettify/parser/Prettify.java
+++ b/src/prettify/parser/Prettify.java
@@ -32,6 +32,7 @@
 import prettify.lang.LangGo;
 import prettify.lang.LangHs;
 import prettify.lang.LangLisp;
+import prettify.lang.LangLlvm;
 import prettify.lang.LangLua;
 import prettify.lang.LangMl;
 import prettify.lang.LangMumps;
@@ -372,6 +373,7 @@
       register(LangGo.class);
       register(LangHs.class);
       register(LangLisp.class);
+      register(LangLlvm.class);
       register(LangLua.class);
       register(LangMl.class);
       register(LangMumps.class);
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java
index 5571f09..d00d873 100644
--- a/test/prettify/PrettifyTest.java
+++ b/test/prettify/PrettifyTest.java
@@ -170,6 +170,7 @@
     test("r", "r_lang", false);
     test("erlang", "erlang", false);
     test("mumps", "mumps", false);
+    test("llvm", "llvm", false);
     test("pascal", "pascal_lang", false);
     test("basic", "basic_lang", false);
   }
diff --git a/test/prettify/PrettifyTest/result/llvm.txt b/test/prettify/PrettifyTest/result/llvm.txt
new file mode 100644
index 0000000..5895cc6
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/llvm.txt
@@ -0,0 +1,19 @@
+`COM; Declare the string constant as a global constant.`END`PLN

+@.str `END`PUN=`END`PLN `END`KWDprivate`END`PLN `END`KWDunnamed_addr`END`PLN `END`KWDconstant`END`PLN `END`PUN[`END`LIT13`END`PLN `END`KWDx`END`PLN `END`KWDi8`END`PUN]`END`PLN `END`KWDc`END`STR"hello world\0A\00"`END`PLN

+

+`END`COM; External declaration of the puts function`END`PLN

+`END`KWDdeclare`END`PLN `END`KWDi32`END`PLN @puts`END`PUN(`END`KWDi8`END`PUN*`END`PLN `END`KWDnocapture`END`PUN)`END`PLN `END`KWDnounwind`END`PLN

+

+`END`COM; Definition of main function`END`PLN

+`END`KWDdefine`END`PLN `END`KWDi32`END`PLN @main`END`PUN()`END`PLN `END`PUN{`END`PLN   `END`COM; i32()*`END`PLN

+  `END`COM; Convert [13 x i8]* to i8  *...`END`PLN

+  %cast210 `END`PUN=`END`PLN `END`KWDgetelementptr`END`PLN `END`PUN[`END`LIT13`END`PLN `END`KWDx`END`PLN `END`KWDi8`END`PUN]*`END`PLN @.str`END`PUN,`END`PLN `END`KWDi64`END`PLN `END`LIT0`END`PUN,`END`PLN `END`KWDi64`END`PLN `END`LIT0`END`PLN

+

+  `END`COM; Call puts function to write out the string to stdout.`END`PLN

+  `END`KWDcall`END`PLN `END`KWDi32`END`PLN @puts`END`PUN(`END`KWDi8`END`PUN*`END`PLN %cast210`END`PUN)`END`PLN

+  `END`KWDret`END`PLN `END`KWDi32`END`PLN `END`LIT0`END`PLN

+`END`PUN}`END`PLN

+

+`END`COM; Named metadata`END`PLN

+!1 `END`PUN=`END`PLN `END`KWDmetadata`END`PLN !`END`PUN{`END`KWDi32`END`PLN `END`LIT42`END`PUN}`END`PLN

+!foo `END`PUN=`END`PLN !`END`PUN{`END`PLN!1`END`PUN,`END`PLN `END`KWDnull`END`PUN}`END
\ No newline at end of file
diff --git a/test/prettify/PrettifyTest/source/llvm.txt b/test/prettify/PrettifyTest/source/llvm.txt
new file mode 100644
index 0000000..580e6d3
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/llvm.txt
@@ -0,0 +1,19 @@
+; Declare the string constant as a global constant.

+@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"

+

+; External declaration of the puts function

+declare i32 @puts(i8* nocapture) nounwind

+

+; Definition of main function

+define i32 @main() {   ; i32()*

+  ; Convert [13 x i8]* to i8  *...

+  %cast210 = getelementptr [13 x i8]* @.str, i64 0, i64 0

+

+  ; Call puts function to write out the string to stdout.

+  call i32 @puts(i8* %cast210)

+  ret i32 0

+}

+

+; Named metadata

+!1 = metadata !{i32 42}

+!foo = !{!1, null}
\ No newline at end of file