- update to r233 of google-code-prettify (added R/S language testcases)
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java
index 7a360cb..844e92a 100644
--- a/test/prettify/PrettifyTest.java
+++ b/test/prettify/PrettifyTest.java
@@ -162,6 +162,7 @@
     test("yaml", "yaml1", false);
     test("yaml", "yaml2", false);
     test("tcl", "tcl_lang", false);
+    test("r", "r_lang", false);
   }
 
   /**
diff --git a/test/prettify/PrettifyTest/result/r_lang.txt b/test/prettify/PrettifyTest/result/r_lang.txt
new file mode 100644
index 0000000..035cc8b
--- /dev/null
+++ b/test/prettify/PrettifyTest/result/r_lang.txt
@@ -0,0 +1,152 @@
+`COM### Example R script for syntax highlighting`END`PLN
+
+`END`COM# This is a comment`END`PLN
+
+`END`COM## Valid names`END`PLN
+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV0123456789._a `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+.foo_ `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+._foo `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+
+`END`COM## Invalid names`END`PLN
+`END`LIT0`END`PLNabc `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+`END`LIT.0`END`PLNabc `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+abc`END`PUN+`END`PLNcde `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+
+`END`COM## Reserved Words`END`PLN
+`END`LITNA`END`PLN
+`END`LITNA_integer_`END`PLN
+`END`LITNA_real_`END`PLN
+`END`LITNA_character_`END`PLN
+`END`LITNA_complex_`END`PLN
+`END`LITNULL`END`PLN
+`END`LITNaN`END`PLN
+`END`LITInf`END`PLN
+`END`COM## Not reserved`END`PLN
+NULLa `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+NULL1 `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+NULL. `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+NA_foo_ `END`PUN<-`END`PLN `END`LITNULL`END`PLN
+
+`END`COM## Numbers`END`PLN
+`END`LIT12345678901`END`PLN
+`END`LIT123456.78901`END`PLN
+`END`LIT123e3`END`PLN
+`END`LIT123E3`END`PLN
+`END`LIT1.23e-3`END`PLN
+`END`LIT1.23e3`END`PLN
+`END`LIT1.23e-3`END`PLN
+`END`COM## integer constants`END`PLN
+`END`LIT123L`END`PLN
+`END`LIT1.23L`END`PLN
+`END`COM## imaginary numbers`END`PLN
+`END`LIT123i`END`PLN
+`END`LIT-123i`END`PLN
+`END`LIT123e4i`END`PLN
+`END`LIT123e-4i`END`PLN
+`END`COM## Hex numbers`END`PLN
+`END`LIT0xabcdefABCDEF01234`END`PLN
+`END`LIT0xabcp123`END`PLN
+`END`LIT0xabcP123`END`PLN
+`END`COM## Not hex`END`PLN
+`END`LIT0`END`PLNxg
+
+`END`COM## Special operators %xyz%`END`PLN
+`END`COM## %xyz%`END`PLN
+`END`LIT1`END`PLN `END`PUN%%`END`PLN `END`LIT2`END`PLN
+diag`END`PUN(`END`LIT2`END`PUN)`END`PLN `END`PUN%*%`END`PLN diag`END`PUN(`END`LIT2`END`PUN)`END`PLN
+`END`LIT1`END`PLN `END`PUN%/%`END`PLN `END`LIT2`END`PLN
+`END`LIT1`END`PLN `END`PUN%in%`END`PLN `END`LIT1`END`PUN:`END`LIT10`END`PLN
+diag`END`PUN(`END`LIT2`END`PUN)`END`PLN `END`PUN%o%`END`PLN diag`END`PUN(`END`LIT2`END`PUN)`END`PLN
+diag`END`PUN(`END`LIT2`END`PUN)`END`PLN `END`PUN%x%`END`PLN diag`END`PUN(`END`LIT2`END`PUN)`END`PLN
+`END`STR`%foo bar%``END`PLN `END`PUN<-`END`PLN `END`KWDfunction`END`PUN(`END`PLNx`END`PUN,`END`PLN y`END`PUN)`END`PLN x `END`PUN+`END`PLN y
+`END`LIT1`END`PLN `END`PUN%foo bar%`END`PLN `END`LIT2`END`PLN
+
+`END`COM## Control Structures (3.2) and Function`END`PLN
+`END`COM## if, else`END`PLN
+`END`KWDif`END`PLN `END`PUN(`END`LITTRUE`END`PUN)`END`PLN print`END`PUN(`END`STR"foo"`END`PUN)`END`PLN `END`KWDelse`END`PLN print`END`PUN(`END`STR"bar"`END`PUN)`END`PLN
+`END`COM## For, in`END`PLN
+`END`KWDfor`END`PUN(`END`PLNi `END`KWDin`END`PLN `END`LIT1`END`PUN:`END`LIT5`END`PUN)`END`PLN `END`PUN{`END`PLN
+    print`END`PUN(`END`PLNi`END`PUN)`END`PLN
+`END`PUN}`END`PLN
+`END`COM## While, break`END`PLN
+i `END`PUN<-`END`PLN `END`LIT1`END`PLN
+`END`KWDwhile`END`PLN `END`PUN(`END`LITTRUE`END`PUN)`END`PLN `END`PUN{`END`PLN
+    i `END`PUN<-`END`PLN i `END`PUN+`END`PLN `END`LIT1`END`PLN
+    `END`KWDif`END`PLN `END`PUN(`END`PLNi `END`PUN>`END`PLN `END`LIT3`END`PUN)`END`PLN `END`KWDbreak`END`PLN
+`END`PUN}`END`PLN
+`END`COM## Repeat`END`PLN
+`END`KWDrepeat`END`PLN `END`PUN{`END`LIT1+1`END`PUN}`END`PLN
+`END`COM## Switch`END`PLN
+x `END`PUN<-`END`PLN `END`LIT3`END`PLN
+`END`KWDswitch`END`PUN(`END`PLNx`END`PUN,`END`PLN `END`LIT2+2`END`PUN,`END`PLN mean`END`PUN(`END`LIT1`END`PUN:`END`LIT10`END`PUN),`END`PLN rnorm`END`PUN(`END`LIT5`END`PUN))`END`PLN
+`END`COM## Function, dot-dot-dot, return`END`PLN
+foo `END`PUN<-`END`PLN `END`KWDfunction`END`PUN(`END`LIT...`END`PUN)`END`PLN `END`PUN{`END`PLN
+    `END`KWDreturn`END`PUN(`END`PLNsum`END`PUN(`END`LIT...`END`PUN))`END`PLN
+`END`PUN}`END`PLN
+`END`COM# Not keywords`END`PLN
+functiona `END`PUN<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+function. `END`PUN<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+function1 `END`PUN<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+
+
+`END`COM## Grouping Tokens 10.3.7`END`PLN
+`END`COM## Parentheses`END`PLN
+`END`LIT1`END`PLN `END`PUN+`END`PLN `END`PUN(`END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT3`END`PUN)`END`PLN
+`END`COM## brackets`END`PLN
+foo `END`PUN<-`END`PLN `END`KWDfunction`END`PUN(`END`PLNa`END`PUN)`END`PLN `END`PUN{`END`PLN
+    a `END`PUN+`END`PLN `END`LIT1`END`PLN
+`END`PUN}`END`PLN
+
+`END`COM## Indexing 10.3.8`END`PLN
+`END`COM## []`END`PLN
+bar `END`PUN<-`END`PLN `END`LIT1`END`PUN:`END`LIT10`END`PLN
+bar`END`PUN[`END`LIT3`END`PUN]`END`PLN
+`END`COM## [[]]`END`PLN
+foo `END`PUN<-`END`PLN list`END`PUN(`END`PLNa`END`PUN=`END`LIT1`END`PUN,`END`PLN b`END`PUN=`END`LIT2`END`PUN,`END`PLN c`END`PUN=`END`LIT3`END`PUN)`END`PLN
+foo`END`PUN[[`END`STR"a"`END`PUN]]`END`PLN
+`END`COM## $`END`PLN
+foo`END`PUN$`END`PLNa
+foo`END`PUN$`END`STR"a"`END`PLN
+
+`END`COM## Operators`END`PLN
+`END`LIT2`END`PLN `END`PUN-`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN~`END`PLN `END`LIT2`END`PLN
+`END`PUN!`END`PLN `END`LITTRUE`END`PLN
+`END`PUN?`END`STR"help"`END`PLN
+`END`LIT1`END`PUN:`END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN*`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN/`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PUN^`END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN<`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN>`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN==`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN>=`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN<=`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN!=`END`PLN `END`LIT2`END`PLN
+`END`LITTRUE`END`PLN `END`PUN&`END`PLN `END`LITFALSE`END`PLN
+`END`LITTRUE`END`PLN `END`PUN&&`END`PLN `END`LITFALSE`END`PLN
+`END`LITTRUE`END`PLN `END`PUN|`END`PLN `END`LITFALSE`END`PLN
+`END`LITTRUE`END`PLN `END`PUN||`END`PLN `END`LITFALSE`END`PLN
+foo `END`PUN<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+foo `END`PUN=`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN `END`PUN->`END`PLN foo
+foo `END`PUN<<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN
+`END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END`PLN `END`PUN->>`END`PLN foo
+base`END`PUN:::`END`PLNsum
+base`END`PUN::`END`PLNsum
+
+`END`COM## Strings`END`PLN
+foo `END`PUN<-`END`PLN `END`STR"hello, world!"`END`PLN
+foo `END`PUN<-`END`PLN `END`STR'hello, world!'`END`PLN
+foo `END`PUN<-`END`PLN `END`STR"Hello, 'world!"`END`PLN
+foo `END`PUN<-`END`PLN `END`STR'Hello, "world!'`END`PLN
+foo `END`PUN<-`END`PLN `END`STR'Hello, \'world!\''`END`PLN
+foo `END`PUN<-`END`PLN `END`STR"Hello, \"world!\""`END`PLN
+foo `END`PUN<-`END`PLN `END`STR"Hello,
+world!"`END`PLN
+foo `END`PUN<-`END`PLN `END`STR'Hello,
+world!'`END`PLN
+
+`END`COM## Backtick strings`END`PLN
+`END`STR`foo123 +!"bar'baz``END`PLN `END`PUN<-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END'
diff --git a/test/prettify/PrettifyTest/source/r_lang.txt b/test/prettify/PrettifyTest/source/r_lang.txt
new file mode 100644
index 0000000..ae41e91
--- /dev/null
+++ b/test/prettify/PrettifyTest/source/r_lang.txt
@@ -0,0 +1,152 @@
+### Example R script for syntax highlighting
+
+# This is a comment
+
+## Valid names
+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV0123456789._a <- NULL
+.foo_ <- NULL
+._foo <- NULL
+
+## Invalid names
+0abc <- NULL
+.0abc <- NULL
+abc+cde <- NULL
+
+## Reserved Words
+NA
+NA_integer_
+NA_real_
+NA_character_
+NA_complex_
+NULL
+NaN
+Inf
+## Not reserved
+NULLa <- NULL
+NULL1 <- NULL
+NULL. <- NULL
+NA_foo_ <- NULL
+
+## Numbers
+12345678901
+123456.78901
+123e3
+123E3
+1.23e-3
+1.23e3
+1.23e-3
+## integer constants
+123L
+1.23L
+## imaginary numbers
+123i
+-123i
+123e4i
+123e-4i
+## Hex numbers
+0xabcdefABCDEF01234
+0xabcp123
+0xabcP123
+## Not hex
+0xg
+
+## Special operators %xyz%
+## %xyz%
+1 %% 2
+diag(2) %*% diag(2)
+1 %/% 2
+1 %in% 1:10
+diag(2) %o% diag(2)
+diag(2) %x% diag(2)
+`%foo bar%` <- function(x, y) x + y
+1 %foo bar% 2
+
+## Control Structures (3.2) and Function
+## if, else
+if (TRUE) print("foo") else print("bar")
+## For, in
+for(i in 1:5) {
+    print(i)
+}
+## While, break
+i <- 1
+while (TRUE) {
+    i <- i + 1
+    if (i > 3) break
+}
+## Repeat
+repeat {1+1}
+## Switch
+x <- 3
+switch(x, 2+2, mean(1:10), rnorm(5))
+## Function, dot-dot-dot, return
+foo <- function(...) {
+    return(sum(...))
+}
+# Not keywords
+functiona <- 2 + 2
+function. <- 2 + 2
+function1 <- 2 + 2
+
+
+## Grouping Tokens 10.3.7
+## Parentheses
+1 + (2 + 3)
+## brackets
+foo <- function(a) {
+    a + 1
+}
+
+## Indexing 10.3.8
+## []
+bar <- 1:10
+bar[3]
+## [[]]
+foo <- list(a=1, b=2, c=3)
+foo[["a"]]
+## $
+foo$a
+foo$"a"
+
+## Operators
+2 - 2
+2 + 2
+2 ~ 2
+! TRUE
+?"help"
+1:2
+2 * 2
+2 / 2
+2^2
+2 < 2
+2 > 2
+2 == 2
+2 >= 2
+2 <= 2
+2 != 2
+TRUE & FALSE
+TRUE && FALSE
+TRUE | FALSE
+TRUE || FALSE
+foo <- 2 + 2
+foo = 2 + 2
+2 + 2 -> foo
+foo <<- 2 + 2
+2 + 2 ->> foo
+base:::sum
+base::sum
+
+## Strings
+foo <- "hello, world!"
+foo <- 'hello, world!'
+foo <- "Hello, 'world!"
+foo <- 'Hello, "world!'
+foo <- 'Hello, \'world!\''
+foo <- "Hello, \"world!\""
+foo <- "Hello,
+world!"
+foo <- 'Hello,
+world!'
+
+## Backtick strings
+`foo123 +!"bar'baz` <- 2 + 2
\ No newline at end of file