- 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);