- 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