- update to r232 of google-code-prettify (issue 233 : patch for R / S language support)
diff --git a/src/prettify/lang/LangR.java b/src/prettify/lang/LangR.java
new file mode 100644
index 0000000..0a5e5c9
--- /dev/null
+++ b/src/prettify/lang/LangR.java
@@ -0,0 +1,71 @@
+// Copyright (C) 2012 Jeffrey B. Arnold
+//
+// 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 prettify.parser.Prettify;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * This is similar to the lang-r.js in JavaScript Prettify.
+ * <p/>
+ * 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-r"> code </pre>
+ * <p/>
+ * Language definition from
+ * http://cran.r-project.org/doc/manuals/R-lang.html.
+ * Many of the regexes are shared  with the pygments SLexer,
+ * http://pygments.org/.
+ * <p/>
+ * Original: https://raw.github.com/jrnold/prettify-lang-r-bugs/master/lang-r.js
+ *
+ * @author jeffrey.arnold@gmail.com
+ */
+public class LangR extends Lang {
+
+    public LangR() {
+        List<List<Object>> _shortcutStylePatterns = new ArrayList<List<Object>>();
+        List<List<Object>> _fallthroughStylePatterns = new ArrayList<List<Object>>();
+
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^[\\t\\n\\r \\xA0]+"), null, "\t\n\r " + Character.toString((char) 0xA0)}));
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S])*(?:\\\"|$)"), null, "\""}));
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^\\'(?:[^\\'\\\\]|\\\\[\\s\\S])*(?:\\'|$)"), null, "'"}));
+
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^#.*")}));
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![A-Za-z0-9_.])")}));
+        // hex numbes
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^0[xX][a-fA-F0-9]+([pP][0-9]+)?[Li]?")}));
+        // Decimal numbers
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^[+-]?([0-9]+(\\.[0-9]+)?|\\.[0-9]+)([eE][+-]?[0-9]+)?[Li]?")}));
+        // builtin symbols
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\\.\\.(?:\\.|[0-9]+))(?![A-Za-z0-9_.])")}));
+        // assignment, operators, and parens, etc.
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PUNCTUATION, Pattern.compile("^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\\|\\|?|\\*|\\+|\\^|\\/|!|%.*?%|=|~|\\$|@|:{1,3}|[\\[\\](){};,?])")}));
+        // valid variable names
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^(?:[A-Za-z]+[A-Za-z0-9_.]*|\\.[a-zA-Z_][0-9a-zA-Z\\._]*)(?![A-Za-z0-9_.])")}));
+        // string backtick
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^`.+`")}));
+
+        setShortcutStylePatterns(_shortcutStylePatterns);
+        setFallthroughStylePatterns(_fallthroughStylePatterns);
+    }
+
+    public static List<String> getFileExtensions() {
+        return Arrays.asList(new String[]{"r", "s", "R", "S", "Splus"});
+    }
+}
diff --git a/src/prettify/lang/LangRd.java b/src/prettify/lang/LangRd.java
new file mode 100644
index 0000000..5527097
--- /dev/null
+++ b/src/prettify/lang/LangRd.java
@@ -0,0 +1,66 @@
+// Copyright (C) 2012 Jeffrey Arnold
+//
+// 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 prettify.parser.Prettify;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * This is similar to the lang-rd.js in JavaScript Prettify.
+ * <p/>
+ * Support for R documentation (Rd) files
+ * <p/>
+ * Minimal highlighting or Rd files, basically just highlighting
+ * macros. It does not try to identify verbatim or R-like regions of
+ * macros as that is too complicated for a lexer.  Descriptions of the
+ * Rd format can be found
+ * http://cran.r-project.org/doc/manuals/R-exts.html and
+ * http://developer.r-project.org/parseRd.pdf.
+ *
+ * @author Jeffrey Arnold
+ */
+public class LangRd extends Lang {
+
+    public LangRd() {
+        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)}));
+        // all comments begin with '%'
+        _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^%[^\\r\\n]*"), null, "%"}));
+
+        // special macros with no args
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^\\\\(?:cr|l?dots|R|tab)\\b")}));
+        // macros
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^\\\\[a-zA-Z@]+")}));
+        // highlighted as macros, since technically they are
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^#(?:ifn?def|endif)")}));
+        // catch escaped brackets
+        _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^\\\\[{}]")}));
+        // 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[]{"Rd", "rd"});
+    }
+}
diff --git a/src/prettify/lang/LangTcl.java b/src/prettify/lang/LangTcl.java
index 259e7b6..c80aca9 100644
--- a/src/prettify/lang/LangTcl.java
+++ b/src/prettify/lang/LangTcl.java
@@ -21,8 +21,9 @@
 import java.util.regex.Pattern;
 
 /**
- * Registers a language handler for TCL
+ * This is similar to the lang-tcl.js in JavaScript Prettify.
  *
+ * All comments are adapted from the JavaScript Prettify.
  *
  * To use, include prettify.js and this file in your HTML page.
  * Then put your code in an HTML tag like
diff --git a/src/prettify/parser/Prettify.java b/src/prettify/parser/Prettify.java
index 807d46c..0e45774 100644
--- a/src/prettify/parser/Prettify.java
+++ b/src/prettify/parser/Prettify.java
@@ -33,6 +33,8 @@
 import prettify.lang.LangLua;
 import prettify.lang.LangMl;
 import prettify.lang.LangN;
+import prettify.lang.LangR;
+import prettify.lang.LangRd;
 import prettify.lang.LangScala;
 import prettify.lang.LangSql;
 import prettify.lang.LangTcl;
@@ -358,6 +360,8 @@
       register(LangLua.class);
       register(LangMl.class);
       register(LangN.class);
+      register(LangR.class);
+      register(LangRd.class);
       register(LangScala.class);
       register(LangSql.class);
       register(LangTex.class);