From 030817ca58453e2894a989bbcd321aba408422f8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 13 Sep 2011 22:28:22 +0000 Subject: [PATCH] First draft of jOOQ website --- jOOQ-website/.project | 11 + jOOQ-website/css/jooq.css | 138 +++ jOOQ-website/favicon-16.png | Bin 0 -> 700 bytes jOOQ-website/favicon-32.png | Bin 0 -> 1852 bytes jOOQ-website/favicon.ico | Bin 0 -> 4286 bytes jOOQ-website/fnt/Infinity.ttf | Bin 0 -> 20224 bytes jOOQ-website/frame.php | 64 + jOOQ-website/img/bodytile.jpg | Bin 0 -> 79068 bytes jOOQ-website/img/forkme.png | Bin 0 -> 6893 bytes jOOQ-website/img/joox-small.png | Bin 0 -> 11022 bytes jOOQ-website/img/logo.png | Bin 0 -> 34015 bytes jOOQ-website/index.php | 196 +++ jOOQ-website/js/prettify/lang-apollo.js | 51 + jOOQ-website/js/prettify/lang-clj.js | 64 + jOOQ-website/js/prettify/lang-css.js | 78 ++ jOOQ-website/js/prettify/lang-go.js | 58 + jOOQ-website/js/prettify/lang-hs.js | 101 ++ jOOQ-website/js/prettify/lang-lisp.js | 93 ++ jOOQ-website/js/prettify/lang-lua.js | 59 + jOOQ-website/js/prettify/lang-ml.js | 56 + jOOQ-website/js/prettify/lang-n.js | 62 + jOOQ-website/js/prettify/lang-proto.js | 35 + jOOQ-website/js/prettify/lang-scala.js | 54 + jOOQ-website/js/prettify/lang-sql.js | 57 + jOOQ-website/js/prettify/lang-tex.js | 46 + jOOQ-website/js/prettify/lang-vb.js | 61 + jOOQ-website/js/prettify/lang-vhdl.js | 34 + jOOQ-website/js/prettify/lang-wiki.js | 53 + jOOQ-website/js/prettify/lang-xq.js | 67 + jOOQ-website/js/prettify/lang-yaml.js | 27 + jOOQ-website/js/prettify/prettify.css | 49 + jOOQ-website/js/prettify/prettify.js | 1477 +++++++++++++++++++++++ jOOQ-website/links.php | 54 + 33 files changed, 3045 insertions(+) create mode 100644 jOOQ-website/css/jooq.css create mode 100644 jOOQ-website/favicon-16.png create mode 100644 jOOQ-website/favicon-32.png create mode 100644 jOOQ-website/favicon.ico create mode 100644 jOOQ-website/fnt/Infinity.ttf create mode 100644 jOOQ-website/frame.php create mode 100644 jOOQ-website/img/bodytile.jpg create mode 100644 jOOQ-website/img/forkme.png create mode 100644 jOOQ-website/img/joox-small.png create mode 100644 jOOQ-website/img/logo.png create mode 100644 jOOQ-website/index.php create mode 100644 jOOQ-website/js/prettify/lang-apollo.js create mode 100644 jOOQ-website/js/prettify/lang-clj.js create mode 100644 jOOQ-website/js/prettify/lang-css.js create mode 100644 jOOQ-website/js/prettify/lang-go.js create mode 100644 jOOQ-website/js/prettify/lang-hs.js create mode 100644 jOOQ-website/js/prettify/lang-lisp.js create mode 100644 jOOQ-website/js/prettify/lang-lua.js create mode 100644 jOOQ-website/js/prettify/lang-ml.js create mode 100644 jOOQ-website/js/prettify/lang-n.js create mode 100644 jOOQ-website/js/prettify/lang-proto.js create mode 100644 jOOQ-website/js/prettify/lang-scala.js create mode 100644 jOOQ-website/js/prettify/lang-sql.js create mode 100644 jOOQ-website/js/prettify/lang-tex.js create mode 100644 jOOQ-website/js/prettify/lang-vb.js create mode 100644 jOOQ-website/js/prettify/lang-vhdl.js create mode 100644 jOOQ-website/js/prettify/lang-wiki.js create mode 100644 jOOQ-website/js/prettify/lang-xq.js create mode 100644 jOOQ-website/js/prettify/lang-yaml.js create mode 100644 jOOQ-website/js/prettify/prettify.css create mode 100644 jOOQ-website/js/prettify/prettify.js create mode 100644 jOOQ-website/links.php diff --git a/jOOQ-website/.project b/jOOQ-website/.project index a8c5f3b344..425d26b89b 100644 --- a/jOOQ-website/.project +++ b/jOOQ-website/.project @@ -5,7 +5,18 @@ + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + org.eclipse.php.core.PHPNature diff --git a/jOOQ-website/css/jooq.css b/jOOQ-website/css/jooq.css new file mode 100644 index 0000000000..869f831003 --- /dev/null +++ b/jOOQ-website/css/jooq.css @@ -0,0 +1,138 @@ +body { + font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; + font-weight: normal; + text-shadow: 0 1px 0 #FFFFFF; + font-size: 16px; + font-style: normal; + font-weight: 400; + color: #000000; + letter-spacing: 0; + line-height: 1.4; + text-decoration: none; + text-shadow: none; + text-transform: none; + word-spacing: 0; + margin: 0; + padding: 0; +} + +h1, h2, h3, h4, h5, h6 { + font-family: 'Georgia',Serif; + font-weight: normal; + color: #000000; +} + +h1 { + font-size: 4em; + text-shadow: 0 1px 1px #666666; +} + +h2 { + font-size: 2.5em; + text-shadow: 0 1px 1px #666666; +} + +h3 { + font-size: 1.3em; + text-shadow: 0 1px 0 #666666; +} + +pre { + background: none repeat scroll 0 0 #ffeedd; + border-radius: 10px 10px 10px 10px; + border-width: 1px; + border-style: solid; + border-color: #882222; + box-shadow: 5px 5px 20px #aa6633; + color: #000000; + display: block; + font-family: monospace; + font-size: 12px; + line-height: 1.5em; + margin: 1.5em 0; + padding: 1em; + white-space: pre-wrap; + word-wrap: break-word; + text-align: left; +} + +p { +} + +p.slogan { + padding-left: 2em; + color: #888888; + font-family: 'Georgia',Serif; + font-style: italic; +} + +td.left { + padding-right: 5px; + padding-bottom: 5px; + vertical-align: top; + text-align: right; +} +td.right { + padding-left: 5px; + padding-bottom: 5px; + vertical-align: top; + text-align: left; +} + +td h3 { + white-space: nowrap; +} + +ul { + padding: 0; + margin: 0; + list-style-image:url(../favicon-16.png); +} + +a, a:link, a:visited, a:hover, a:active { + color: #882222; + text-decoration: none; + text-shadow: 0 1px 1px #666666; +} + +a:hover { + text-decoration: none; +} + +#wrapper { + background: url("../img/bodytile.jpg") repeat scroll left top #FFFFFF; + height: auto; + min-height: 101%; +} + +#all { + background-color: #FFFFFF; + margin: 0 auto; + position: relative; + width: 940px; + + padding-top: 1em; + padding-left: 3em; + padding-right: 3em; + border-width: 0; + border-style: solid; + border-color: #882222; + box-shadow: 0 0 20px #aa6633; +} + +#header { + height: 240px; +} + +#navigation { + height: 40px; +} + +div.navigation-item-left { + float: left; + padding-right: 2em; +} + +#content { +} + diff --git a/jOOQ-website/favicon-16.png b/jOOQ-website/favicon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..58d2c8b32ef01a32a57128235ecdd8ad1d2e1b88 GIT binary patch literal 700 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 literal 0 HcmV?d00001 diff --git a/jOOQ-website/fnt/Infinity.ttf b/jOOQ-website/fnt/Infinity.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f67855a26c6783d72cf8fbd5db9cc4292964c637 GIT binary patch literal 20224 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 J1iL6n{~P~cHb(#e literal 0 HcmV?d00001 diff --git a/jOOQ-website/frame.php b/jOOQ-website/frame.php new file mode 100644 index 0000000000..512929ac3b --- /dev/null +++ b/jOOQ-website/frame.php @@ -0,0 +1,64 @@ + + + jOOQ + + + + + +
+
+ +
+ + +
+ +
+
+
+
+ + Fork me on GitHub + + diff --git a/jOOQ-website/img/bodytile.jpg b/jOOQ-website/img/bodytile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c0ef3d09ccf5e7b6f0b0c450730d9e7ac6356ce GIT binary patch literal 79068 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

os+m<8wB|BFG%0_DlNxb zA02$&PvP#V_D!y06B8z{QwQC?A;l6W_XXi_h7vyOV$lFQ#7Kl zU>?X!>Qj&qiXZRZV}N_(r656qhA83hoNA9lN}lmHNEY5)c!2n=X=V1c`wIs0l0(l2 z1Q$7&(P*P&r!y91EDopdb^J8c2RqBRFfNhC7mL!27fGcrfIFG2e=1Fg(|&axSGr;~ zTa#VBpje?w<4;ZZWXF$XKYChEr_-9og<`Q%(!wL|mCc z8TwX+5=|;46AE6__=S~N>^wuskDJx-cNrb96lw`DhEU*!#};`Qmhb?`;IN;OE2H1@l3vl z9@47DTYd0Ov-Gkuwy+0o?n}%bZW_R#Z?|b0G8k150BD80sF5M7lZCOxZ`*;oVAMQb zpc~Wos(6Zl6gy{-sIC%V8c#Hbo&wi>V(`YOaB>n!p=e~eC=Hcp;4ZAQ1(*gz3EQWo zr&pBn2^Bb0YWl~rnz5qu4Pfhx9bU%S7&K`;XriPo@jn^2A?}hY_g;f~SvrUcxokT4 z>@x~#nZ`i5%#ic>%Tz3u(8>GVH!ZMwrAFSW-y zxen)7aYiOjNJsy>okruN`Z4n2%*_Fcf(4VxYSU@bEI?G@Av&oVUAw$-y1(|Wlc8+ti#G@P4 zeTSP1sI)6!tA0S@O;u%9r{1C6vq1T0j67iod*kVp>8~RcXyxR(hTi7SPtAZ0-k6~S{;Sg-!u8X#y7Amdd1 zpA(|{bA>I9r%hz}>R&bU=ix@4S)f Stw#EP1<=tl)U1ZvWBv~ks^vBS literal 0 HcmV?d00001 diff --git a/jOOQ-website/img/joox-small.png b/jOOQ-website/img/joox-small.png new file mode 100644 index 0000000000000000000000000000000000000000..732bd28df3cba3f72666f5c0bb1ce1e3dd00efe0 GIT binary patch literal 11022 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%0DsH^Hr;lV6wi48g@<|K7UMdwed^rgbJ#x=KuNZmj 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 IM6N<$f(?&hwg3PC literal 0 HcmV?d00001 diff --git a/jOOQ-website/img/logo.png b/jOOQ-website/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..469bec4463866c2bf3d45dda6d98bf63babc0b5a GIT binary patch literal 34015 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 b008)Z2LZ*^8uPCZ00000NkvXXu0mjf)XBIk literal 0 HcmV?d00001 diff --git a/jOOQ-website/index.php b/jOOQ-website/index.php new file mode 100644 index 0000000000..c198b4d370 --- /dev/null +++ b/jOOQ-website/index.php @@ -0,0 +1,196 @@ + +

SQL was never meant to be abstracted. To be confined in the narrow boundaries +of heavy mappers, hiding the beauty and simplicity of relational data. +SQL was never meant to be object-oriented. SQL was never meant to be +anything other than... SQL!

+ +

What does jOOQ code look like?

+

It's simple. With the jOOQ DSL, SQL looks almost as if it were +natively supported by Java.

+ + + + + + + + + + +

A simple SQL statement

...and its equivalent in jOOQ

+-- get all books published in 2011, ordered by title
+
+  SELECT *
+    FROM BOOK
+   WHERE PUBLISHED_IN = 2011
+ORDER BY TITLE
+Result<Book> books =
+create.selectFrom(BOOK)
+      .where(PUBLISHED_IN.equal(2011))
+      .orderBy(TITLE)
+      .fetch();
+      
+ + + + + + + + + + +

jOOQ also supports more complex SQL statements

...and its equivalent in jOOQ

+-- get all authors' first and last names, and the number 
+-- of books they've written in German, if they have written
+-- more than five books in German in the last three years 
+-- (from 2011), and sort those authors by last names
+-- limiting results to the second and third row, then lock
+-- first and last names columns for update
+
+  SELECT FIRST_NAME, LAST_NAME, COUNT(*)
+    FROM AUTHOR
+    JOIN BOOK ON AUTHOR.ID = BOOK.AUTHOR_ID
+   WHERE LANGUAGE = 'DE'
+     AND PUBLISHED > '2008-01-01'
+GROUP BY FIRST_NAME, LAST_NAME
+  HAVING COUNT(*) > 5
+ORDER BY LAST_NAME ASC NULLS FIRST
+   LIMIT 2 
+  OFFSET 1
+     FOR UPDATE
+      OF FIRST_NAME, LAST_NAME
+
+
+
+
+
+Result<Record> result =
+create.select(FIRST_NAME, LAST_NAME, create.count())
+      .from(AUTHOR)
+      .join(BOOK).on(Author.ID.equal(Book.AUTHOR_ID))
+      .where(LANGUAGE.equal("DE"))
+      .and(PUBLISHED.greaterThan(parseDate('2008-01-01')))
+      .groupBy(FIRST_NAME, LAST_NAME)
+      .having(create.count().greaterThan(5))
+      .orderBy(LAST_NAME.asc().nullsFirst())
+      .limit(2)
+      .offset(1)
+      .forUpdate()
+      .of(FIRST_NAME, LAST_NAME)
+      .fetch();
+ +

What's jOOQ

+

jOOQ stands for Java Object Oriented Querying. It combines these essential features:

+ + + + + + + + + + + + + + + + + + + + + + +

Code Generation:

jOOQ generates a simple Java representation of your database schema. Every table, view, stored procedure, enum, UDT is a class.

Active records:

jOOQ implements an easy-to-use active record pattern. It is NOT an OR-mapper, but provides a 1:1 mapping between tables/views and classes. Between columns and members.

Typesafe SQL:

jOOQ allows for writing compile-time typesafe querying using its built-in fluent API.

SQL standard:

jOOQ supports all standard SQL language features including the more complex UNION's, nested SELECTs, joins, aliasing

Vendor-specific feature support:

jOOQ encourages the use of vendor-specific extensions such as stored procedures, UDT's and ARRAY's, recursive queries, and many more.

+ +

How does jOOQ help you?

+
    +
  • Your database always comes FIRST! That's where the schema is, not in your Java code or some XML mapping file.
  • +
  • Your schema is generated in Java. You can use auto-completion in your IDE!
  • +
  • Your "value objects" or "data transfer objects" are generated too. This keeps things DRY
  • +
  • Your Java code won't compile anymore when you modify your schema. That means less runtime errors.
  • +
  • You and your DBA can be friends again because you have full control over your SQL.
  • +
  • You can port your SQL to a new database. jOOQ will generate SQL that works on any database.
  • +
  • You won't have syntax errors in your query.
  • +
  • You won't forget to bind variables correctly. No SQL injection, either.
  • +
  • You can forget about JDBC's verbosity (especially useful when dealing with UDTs, ARRAYs and stored procedures).
  • +
+

Or in short:

+
    +
  • You can be productive again!
  • +
+ +

When to use jOOQ

+
+ +

When not to use jOOQ

+

On the other hand, many people like the ease of use of Hibernate or other products, when it comes to simply persisting any domain model in any database. You should not use jOOQ...

+
    +
  • When you don't care about your database (or "persistence" as you would probably call it).
  • +
  • When you don't really need SQL.
  • +
  • When you want to map your object-oriented domain model to a database and not vice versa.
  • +
  • When your schema changes more frequently than you can re-deploy jOOQ-generated source code.
  • +
  • When you need to write DDL statements. jOOQ only supports DML statements.
  • +
+ +

What databases are supported

+

Every RDMBS out there has its own little specialties. jOOQ considers those specialties as much as possible, while trying to standardise the behaviour in jOOQ. In order to increase the quality of jOOQ, unit tests are run for syntax and variable binding verification, as well as integration tests for any of these databases:

+
    +
  • DB2 9.7
  • +
  • Derby 10.8
  • +
  • H2 1.3.155
  • +
  • HSQLDB 2.2.5
  • +
  • Ingres 10.1.0
  • +
  • MySQL 5.1.41 and 5.5.8
  • +
  • Oracle XE 10.2.0.1.0
  • +
  • PostGreSQL 9.0
  • +
  • SQLite with inofficial JDBC driver v056
  • +
  • SQL Server 2008 R8
  • +
  • Sybase Adaptive Server Enterprise 15.5
  • +
  • Sybase SQL Anywhere 12
  • +
+ +

Planned (Contributions and suggestions are very welcome!)

+
    +
  • Firebird
  • +
  • Informix
  • +
  • Interbase
  • +
  • SQL Azure
  • +
  • Teradata
  • +
+ +

Other requirements

+

jOOQ runs with Java 1.6+

+ +

License

+

jOOQ is licensed under the Apache Software License 2.0

+ + +

Thanks

+

YourKit is kindly supporting open source projects with its +full-featured Java Profiler. YourKit, LLC is the creator of innovative +and intelligent tools for profiling Java and .NET applications. Take a +look at YourKit's leading software products: YourKit Java +Profiler and YourKit .NET +Profiler.

+ \ No newline at end of file diff --git a/jOOQ-website/js/prettify/lang-apollo.js b/jOOQ-website/js/prettify/lang-apollo.js new file mode 100644 index 0000000000..9fa1d24c64 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-apollo.js @@ -0,0 +1,51 @@ +// Copyright (C) 2009 Onno Hommes. +// +// 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. + + +/** + * @fileoverview + * Registers a language handler for the AGC/AEA Assembly Language as described + * at http://virtualagc.googlecode.com + *

+ * This file could be used by goodle code to allow syntax highlight for + * Virtual AGC SVN repository or if you don't want to commonize + * the header for the agc/aea html assembly listing. + * + * @author ohommes@alumni.cmu.edu + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // A line comment that starts with ; + [PR['PR_COMMENT'], /^#[^\r\n]*/, null, '#'], + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double quoted, possibly multi-line, string. + [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'] + ], + [ + [PR['PR_KEYWORD'], /^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,null], + [PR['PR_TYPE'], /^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null], + // A single quote possibly followed by a word that optionally ends with + // = ! or ?. + [PR['PR_LITERAL'], + /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/], + // Any word including labels that optionally ends with = ! or ?. + [PR['PR_PLAIN'], + /^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i], + // A printable non-space non-special character + [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0()\"\\\';]+/] + ]), + ['apollo', 'agc', 'aea']); diff --git a/jOOQ-website/js/prettify/lang-clj.js b/jOOQ-website/js/prettify/lang-clj.js new file mode 100644 index 0000000000..0758335f36 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-clj.js @@ -0,0 +1,64 @@ +/** + * @license Copyright (C) 2011 Google Inc. + * + * 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. + */ + +/** + * @fileoverview + * Registers a language handler for Clojure. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *

(my lisp code)
+ * The lang-cl class identifies the language as common lisp. + * This file supports the following language extensions: + * lang-clj - Clojure + * + * + * I used lang-lisp.js as the basis for this adding the clojure specific + * keywords and syntax. + * + * "Name" = 'Clojure' + * "Author" = 'Rich Hickey' + * "Version" = '1.2' + * "About" = 'Clojure is a lisp for the jvm with concurrency primitives and a richer set of types.' + * + * + * I used Clojure.org Reference as + * the basis for the reserved word list. + * + * + * @author jwall@google.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // clojure has more paren types than minimal lisp. + ['opn', /^[\(\{\[]+/, null, '([{'], + ['clo', /^[\)\}\]]+/, null, ')]}'], + // A line comment that starts with ; + [PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'], + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double quoted, possibly multi-line, string. + [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'] + ], + [ + // clojure has a much larger set of keywords + [PR['PR_KEYWORD'], /^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/, null], + [PR['PR_TYPE'], /^:[0-9a-zA-Z\-]+/] + ]), + ['clj']); diff --git a/jOOQ-website/js/prettify/lang-css.js b/jOOQ-website/js/prettify/lang-css.js new file mode 100644 index 0000000000..034bd59575 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-css.js @@ -0,0 +1,78 @@ +// Copyright (C) 2009 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for CSS. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *

+ *
+ *
+ * http://www.w3.org/TR/CSS21/grammar.html Section G2 defines the lexical
+ * grammar.  This scheme does not recognize keywords containing escapes.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // The space production 
+         [PR['PR_PLAIN'],       /^[ \t\r\n\f]+/, null, ' \t\r\n\f']
+        ],
+        [
+         // Quoted strings.   and 
+         [PR['PR_STRING'],
+          /^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/, null],
+         [PR['PR_STRING'],
+          /^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/, null],
+         ['lang-css-str', /^url\(([^\)\"\']*)\)/i],
+         [PR['PR_KEYWORD'],
+          /^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,
+          null],
+         // A property name -- an identifier followed by a colon.
+         ['lang-css-kw', /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],
+         // A C style block comment.  The  production.
+         [PR['PR_COMMENT'], /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
+         // Escaping text spans
+         [PR['PR_COMMENT'], /^(?:)/],
+         // A number possibly containing a suffix.
+         [PR['PR_LITERAL'], /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],
+         // A hex color
+         [PR['PR_LITERAL'], /^#(?:[0-9a-f]{3}){1,2}/i],
+         // An identifier
+         [PR['PR_PLAIN'],
+          /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],
+         // A run of punctuation
+         [PR['PR_PUNCTUATION'], /^[^\s\w\'\"]+/]
+        ]),
+    ['css']);
+PR['registerLangHandler'](
+    PR['createSimpleLexer']([],
+        [
+         [PR['PR_KEYWORD'],
+          /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]
+        ]),
+    ['css-kw']);
+PR['registerLangHandler'](
+    PR['createSimpleLexer']([],
+        [
+         [PR['PR_STRING'], /^[^\)\"\']+/]
+        ]),
+    ['css-str']);
diff --git a/jOOQ-website/js/prettify/lang-go.js b/jOOQ-website/js/prettify/lang-go.js
new file mode 100644
index 0000000000..f329e29b32
--- /dev/null
+++ b/jOOQ-website/js/prettify/lang-go.js
@@ -0,0 +1,58 @@
+// Copyright (C) 2010 Google Inc.
+//
+// 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.
+
+
+
+/**
+ * @fileoverview
+ * Registers a language handler for the Go language..
+ * 

+ * Based on the lexical grammar at + * http://golang.org/doc/go_spec.html#Lexical_elements + *

+ * Go uses a minimal style for highlighting so the below does not distinguish + * strings, keywords, literals, etc. by design. + * From a discussion with the Go designers: + *

+ * On Thursday, July 22, 2010, Mike Samuel <...> wrote:
+ * > On Thu, Jul 22, 2010, Rob 'Commander' Pike <...> wrote:
+ * >> Personally, I would vote for the subdued style godoc presents at http://golang.org
+ * >>
+ * >> Not as fancy as some like, but a case can be made it's the official style.
+ * >> If people want more colors, I wouldn't fight too hard, in the interest of
+ * >> encouragement through familiarity, but even then I would ask to shy away
+ * >> from technicolor starbursts.
+ * >
+ * > Like http://golang.org/pkg/go/scanner/ where comments are blue and all
+ * > other content is black?  I can do that.
+ * 
+ * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace is made up of spaces, tabs and newline characters. + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // Not escaped as a string. See note on minimalism above. + [PR['PR_PLAIN'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])+(?:\'|$)|`[^`]*(?:`|$))/, null, '"\''] + ], + [ + // Block comments are delimited by /* and */. + // Single-line comments begin with // and extend to the end of a line. + [PR['PR_COMMENT'], /^(?:\/\/[^\r\n]*|\/\*[\s\S]*?\*\/)/], + [PR['PR_PLAIN'], /^(?:[^\/\"\'`]|\/(?![\/\*]))+/i] + ]), + ['go']); diff --git a/jOOQ-website/js/prettify/lang-hs.js b/jOOQ-website/js/prettify/lang-hs.js new file mode 100644 index 0000000000..4a15cf08ac --- /dev/null +++ b/jOOQ-website/js/prettify/lang-hs.js @@ -0,0 +1,101 @@ +// Copyright (C) 2009 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for Haskell. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *
(my lisp code)
+ * The lang-cl class identifies the language as common lisp. + * This file supports the following language extensions: + * lang-cl - Common Lisp + * lang-el - Emacs Lisp + * lang-lisp - Lisp + * lang-scm - Scheme + * + * + * I used http://www.informatik.uni-freiburg.de/~thiemann/haskell/haskell98-report-html/syntax-iso.html + * as the basis, but ignore the way the ncomment production nests since this + * makes the lexical grammar irregular. It might be possible to support + * ncomments using the lookbehind filter. + * + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace + // whitechar -> newline | vertab | space | tab | uniWhite + // newline -> return linefeed | return | linefeed | formfeed + [PR['PR_PLAIN'], /^[\t\n\x0B\x0C\r ]+/, null, '\t\n\x0B\x0C\r '], + // Single line double and single-quoted strings. + // char -> ' (graphic<' | \> | space | escape<\&>) ' + // string -> " {graphic<" | \> | space | escape | gap}" + // escape -> \ ( charesc | ascii | decimal | o octal + // | x hexadecimal ) + // charesc -> a | b | f | n | r | t | v | \ | " | ' | & + [PR['PR_STRING'], /^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/, + null, '"'], + [PR['PR_STRING'], /^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/, + null, "'"], + // decimal -> digit{digit} + // octal -> octit{octit} + // hexadecimal -> hexit{hexit} + // integer -> decimal + // | 0o octal | 0O octal + // | 0x hexadecimal | 0X hexadecimal + // float -> decimal . decimal [exponent] + // | decimal exponent + // exponent -> (e | E) [+ | -] decimal + [PR['PR_LITERAL'], + /^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i, + null, '0123456789'] + ], + [ + // Haskell does not have a regular lexical grammar due to the nested + // ncomment. + // comment -> dashes [ any {any}] newline + // ncomment -> opencom ANYseq {ncomment ANYseq}closecom + // dashes -> '--' {'-'} + // opencom -> '{-' + // closecom -> '-}' + [PR['PR_COMMENT'], /^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/], + // reservedid -> case | class | data | default | deriving | do + // | else | if | import | in | infix | infixl | infixr + // | instance | let | module | newtype | of | then + // | type | where | _ + [PR['PR_KEYWORD'], /^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/, null], + // qvarid -> [ modid . ] varid + // qconid -> [ modid . ] conid + // varid -> (small {small | large | digit | ' }) + // conid -> large {small | large | digit | ' } + // modid -> conid + // small -> ascSmall | uniSmall | _ + // ascSmall -> a | b | ... | z + // uniSmall -> any Unicode lowercase letter + // large -> ascLarge | uniLarge + // ascLarge -> A | B | ... | Z + // uniLarge -> any uppercase or titlecase Unicode letter + [PR['PR_PLAIN'], /^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/], + // matches the symbol production + [PR['PR_PUNCTUATION'], /^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/] + ]), + ['hs']); diff --git a/jOOQ-website/js/prettify/lang-lisp.js b/jOOQ-website/js/prettify/lang-lisp.js new file mode 100644 index 0000000000..3bf75d721b --- /dev/null +++ b/jOOQ-website/js/prettify/lang-lisp.js @@ -0,0 +1,93 @@ +// Copyright (C) 2008 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for Common Lisp and related languages. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *
(my lisp code)
+ * The lang-cl class identifies the language as common lisp. + * This file supports the following language extensions: + * lang-cl - Common Lisp + * lang-el - Emacs Lisp + * lang-lisp - Lisp + * lang-scm - Scheme + * + * + * I used http://www.devincook.com/goldparser/doc/meta-language/grammar-LISP.htm + * as the basis, but added line comments that start with ; and changed the atom + * production to disallow unquoted semicolons. + * + * "Name" = 'LISP' + * "Author" = 'John McCarthy' + * "Version" = 'Minimal' + * "About" = 'LISP is an abstract language that organizes ALL' + * | 'data around "lists".' + * + * "Start Symbol" = [s-Expression] + * + * {Atom Char} = {Printable} - {Whitespace} - [()"\''] + * + * Atom = ( {Atom Char} | '\'{Printable} )+ + * + * [s-Expression] ::= [Quote] Atom + * | [Quote] '(' [Series] ')' + * | [Quote] '(' [s-Expression] '.' [s-Expression] ')' + * + * [Series] ::= [s-Expression] [Series] + * | + * + * [Quote] ::= '' !Quote = do not evaluate + * | + * + * + * I used Practical Common Lisp as + * the basis for the reserved word list. + * + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + ['opn', /^\(+/, null, '('], + ['clo', /^\)+/, null, ')'], + // A line comment that starts with ; + [PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'], + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double quoted, possibly multi-line, string. + [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"'] + ], + [ + [PR['PR_KEYWORD'], /^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, null], + [PR['PR_LITERAL'], + /^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i], + // A single quote possibly followed by a word that optionally ends with + // = ! or ?. + [PR['PR_LITERAL'], + /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/], + // A word that optionally ends with = ! or ?. + [PR['PR_PLAIN'], + /^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i], + // A printable non-space non-special character + [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0()\"\\\';]+/] + ]), + ['cl', 'el', 'lisp', 'scm']); diff --git a/jOOQ-website/js/prettify/lang-lua.js b/jOOQ-website/js/prettify/lang-lua.js new file mode 100644 index 0000000000..7a3f9766db --- /dev/null +++ b/jOOQ-website/js/prettify/lang-lua.js @@ -0,0 +1,59 @@ +// Copyright (C) 2008 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for Lua. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *
(my Lua code)
+ * + * + * I used http://www.lua.org/manual/5.1/manual.html#2.1 + * Because of the long-bracket concept used in strings and comments, Lua does + * not have a regular lexical grammar, but luckily it fits within the space + * of irregular grammars supported by javascript regular expressions. + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double or single quoted, possibly multi-line, string. + [PR['PR_STRING'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/, null, '"\''] + ], + [ + // A comment is either a line comment that starts with two dashes, or + // two dashes preceding a long bracketed block. + [PR['PR_COMMENT'], /^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/], + // A long bracketed block not preceded by -- is a string. + [PR['PR_STRING'], /^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/], + [PR['PR_KEYWORD'], /^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/, null], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR['PR_LITERAL'], + /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + // An identifier + [PR['PR_PLAIN'], /^[a-z_]\w*/i], + // A run of punctuation + [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/] + ]), + ['lua']); diff --git a/jOOQ-website/js/prettify/lang-ml.js b/jOOQ-website/js/prettify/lang-ml.js new file mode 100644 index 0000000000..b5a4c171d2 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-ml.js @@ -0,0 +1,56 @@ +// Copyright (C) 2008 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for OCaml, SML, F# and similar languages. + * + * Based on the lexical grammar at + * http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597388 + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace is made up of spaces, tabs and newline characters. + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // #if ident/#else/#endif directives delimit conditional compilation + // sections + [PR['PR_COMMENT'], + /^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i, + null, '#'], + // A double or single quoted, possibly multi-line, string. + // F# allows escaped newlines in strings. + [PR['PR_STRING'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/, null, '"\''] + ], + [ + // Block comments are delimited by (* and *) and may be + // nested. Single-line comments begin with // and extend to + // the end of a line. + // TODO: (*...*) comments can be nested. This does not handle that. + [PR['PR_COMMENT'], /^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/], + [PR['PR_KEYWORD'], /^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR['PR_LITERAL'], + /^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + [PR['PR_PLAIN'], /^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i], + // A printable non-space non-special character + [PR['PR_PUNCTUATION'], /^[^\t\n\r \xA0\"\'\w]+/] + ]), + ['fs', 'ml']); diff --git a/jOOQ-website/js/prettify/lang-n.js b/jOOQ-website/js/prettify/lang-n.js new file mode 100644 index 0000000000..babe8f370e --- /dev/null +++ b/jOOQ-website/js/prettify/lang-n.js @@ -0,0 +1,62 @@ +// Copyright (C) 2011 Zimin A.V. +// +// 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. + + +/** + * @fileoverview + * Registers a language handler for the Nemerle language. + * http://nemerle.org + * @author Zimin A.V. + */ +(function () { + var keywords = 'abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|' + + 'fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|' + + 'null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|' + + 'syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|' + + 'assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|' + + 'otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield'; + + var shortcutStylePatterns = [ + [PR.PR_STRING, /^(?:\'(?:[^\\\'\r\n]|\\.)*\'|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, null, '"'], + [PR.PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/, null, '#'], + [PR.PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0'] + ]; + + var fallthroughStylePatterns = [ + [PR.PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null], + [PR.PR_STRING, /^<#(?:[^#>])*(?:#>|$)/, null], + [PR.PR_STRING, /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/, null], + [PR.PR_COMMENT, /^\/\/[^\r\n]*/, null], + [PR.PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null], + [PR.PR_KEYWORD, new RegExp('^(?:' + keywords + ')\\b'), null], + [PR.PR_TYPE, /^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/, null], + [PR.PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null], + [PR.PR_TYPE, /^@[A-Z]+[a-z][A-Za-z_$@0-9]*/, null], + [PR.PR_PLAIN, /^'?[A-Za-z_$][a-z_$@0-9]*/i, null], + [PR.PR_LITERAL, new RegExp( + '^(?:' + // A hex number + + '0x[a-f0-9]+' + // or an octal or decimal number, + + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)' + // possibly in scientific notation + + '(?:e[+\\-]?\\d+)?' + + ')' + // with an optional modifier like UL for unsigned long + + '[a-z]*', 'i'), null, '0123456789'], + + [PR.PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null] + ]; + PR.registerLangHandler(PR.createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns), ['n', 'nemerle']); +})(); diff --git a/jOOQ-website/js/prettify/lang-proto.js b/jOOQ-website/js/prettify/lang-proto.js new file mode 100644 index 0000000000..539549152b --- /dev/null +++ b/jOOQ-website/js/prettify/lang-proto.js @@ -0,0 +1,35 @@ +// Copyright (C) 2006 Google Inc. +// +// 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. + + +/** + * @fileoverview + * Registers a language handler for Protocol Buffers as described at + * http://code.google.com/p/protobuf/. + * + * Based on the lexical grammar at + * http://research.microsoft.com/fsharp/manual/spec2.aspx#_Toc202383715 + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler'](PR['sourceDecorator']({ + 'keywords': ( + 'bytes,default,double,enum,extend,extensions,false,' + + 'group,import,max,message,option,' + + 'optional,package,repeated,required,returns,rpc,service,' + + 'syntax,to,true'), + 'types': /^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/, + 'cStyleComments': true + }), ['proto']); diff --git a/jOOQ-website/js/prettify/lang-scala.js b/jOOQ-website/js/prettify/lang-scala.js new file mode 100644 index 0000000000..db9b484c82 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-scala.js @@ -0,0 +1,54 @@ +// Copyright (C) 2010 Google Inc. +// +// 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. + + +/** + * @fileoverview + * Registers a language handler for Scala. + * + * Derived from http://lampsvn.epfl.ch/svn-repos/scala/scala-documentation/trunk/src/reference/SyntaxSummary.tex + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double or single quoted string + // or a triple double-quoted multi-line string. + [PR['PR_STRING'], + /^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/, + null, '"'], + [PR['PR_LITERAL'], /^`(?:[^\r\n\\`]|\\.)*`?/, null, '`'], + [PR['PR_PUNCTUATION'], /^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/, null, + '!#%&()*+,-:;<=>?@[\\]^{|}~'] + ], + [ + // A symbol literal is a single quote followed by an identifier with no + // single quote following + // A character literal has single quotes on either side + [PR['PR_STRING'], /^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/], + [PR['PR_LITERAL'], /^'[a-zA-Z_$][\w$]*(?!['$\w])/], + [PR['PR_KEYWORD'], /^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/], + [PR['PR_LITERAL'], /^(?:true|false|null|this)\b/], + [PR['PR_LITERAL'], /^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i], + // Treat upper camel case identifiers as types. + [PR['PR_TYPE'], /^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/], + [PR['PR_PLAIN'], /^[$a-zA-Z_][\w$]*/], + [PR['PR_COMMENT'], /^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/], + [PR['PR_PUNCTUATION'], /^(?:\.+|\/)/] + ]), + ['scala']); diff --git a/jOOQ-website/js/prettify/lang-sql.js b/jOOQ-website/js/prettify/lang-sql.js new file mode 100644 index 0000000000..a4adec875f --- /dev/null +++ b/jOOQ-website/js/prettify/lang-sql.js @@ -0,0 +1,57 @@ +// Copyright (C) 2008 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for SQL. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *
(my SQL code)
+ * + * + * http://savage.net.au/SQL/sql-99.bnf.html is the basis for the grammar, and + * http://msdn.microsoft.com/en-us/library/aa238507(SQL.80).aspx as the basis + * for the keyword list. + * + * @author mikesamuel@gmail.com + */ + +PR['registerLangHandler']( + PR['createSimpleLexer']( + [ + // Whitespace + [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // A double or single quoted, possibly multi-line, string. + [PR['PR_STRING'], /^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/, null, + '"\''] + ], + [ + // A comment is either a line comment that starts with two dashes, or + // two dashes preceding a long bracketed block. + [PR['PR_COMMENT'], /^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/], + [PR['PR_KEYWORD'], /^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|MATCH|MERGE|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|USING|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i, null], + // A number is a hex integer literal, a decimal real literal, or in + // scientific notation. + [PR['PR_LITERAL'], + /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i], + // An identifier + [PR['PR_PLAIN'], /^[a-z_][\w-]*/i], + // A run of punctuation + [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/] + ]), + ['sql']); diff --git a/jOOQ-website/js/prettify/lang-tex.js b/jOOQ-website/js/prettify/lang-tex.js new file mode 100644 index 0000000000..57d0ac4cfd --- /dev/null +++ b/jOOQ-website/js/prettify/lang-tex.js @@ -0,0 +1,46 @@ +// Copyright (C) 2011 Martin S. +// +// 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. + +/** + * @fileoverview + * Support for tex highlighting as discussed on + * meta.tex.stackexchange.com. + * + * @author Martin S. + */ + +PR.registerLangHandler( + PR.createSimpleLexer( + [ + // whitespace + [PR.PR_PLAIN, /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'], + // all comments begin with '%' + [PR.PR_COMMENT, /^%[^\r\n]*/, null, '%'] + ], + [ + //[PR.PR_DECLARATION, /^\\([egx]?def|(new|renew|provide)(command|environment))\b/], + // any command starting with a \ and contains + // either only letters (a-z,A-Z), '@' (internal macros) + [PR.PR_KEYWORD, /^\\[a-zA-Z@]+/], + // or contains only one character + [PR.PR_KEYWORD, /^\\./], + // Highlight dollar for math mode and ampersam for tabular + [PR.PR_TYPE, /^[$&]/], + // numeric measurement values with attached units + [PR.PR_LITERAL, + /[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i], + // punctuation usually occurring within commands + [PR.PR_PUNCTUATION, /^[{}()\[\]=]+/] + ]), + ['latex', 'tex']); diff --git a/jOOQ-website/js/prettify/lang-vb.js b/jOOQ-website/js/prettify/lang-vb.js new file mode 100644 index 0000000000..5fb4a380e3 --- /dev/null +++ b/jOOQ-website/js/prettify/lang-vb.js @@ -0,0 +1,61 @@ +// Copyright (C) 2009 Google Inc. +// +// 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. + + + +/** + * @fileoverview + * Registers a language handler for various flavors of basic. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *

+ *
+ *
+ * http://msdn.microsoft.com/en-us/library/aa711638(VS.71).aspx defines the
+ * visual basic grammar lexical grammar.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // Whitespace
+         [PR['PR_PLAIN'],       /^[\t\n\r \xA0\u2028\u2029]+/, null, '\t\n\r \xA0\u2028\u2029'],
+         // A double quoted string with quotes escaped by doubling them.
+         // A single character can be suffixed with C.
+         [PR['PR_STRING'],      /^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i, null,
+          '"\u201C\u201D'],
+         // A comment starts with a single quote and runs until the end of the
+         // line.
+         [PR['PR_COMMENT'],     /^[\'\u2018\u2019][^\r\n\u2028\u2029]*/, null, '\'\u2018\u2019']
+        ],
+        [
+         [PR['PR_KEYWORD'], /^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i, null],
+         // A second comment form
+         [PR['PR_COMMENT'], /^REM[^\r\n\u2028\u2029]*/i],
+         // A boolean, numeric, or date literal.
+         [PR['PR_LITERAL'],
+          /^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],
+         // An identifier?
+         [PR['PR_PLAIN'], /^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i],
+         // A run of punctuation
+         [PR['PR_PUNCTUATION'],
+          /^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],
+         // Square brackets
+         [PR['PR_PUNCTUATION'], /^(?:\[|\])/]
+        ]),
+    ['vb', 'vbs']);
diff --git a/jOOQ-website/js/prettify/lang-vhdl.js b/jOOQ-website/js/prettify/lang-vhdl.js
new file mode 100644
index 0000000000..f6410bc73e
--- /dev/null
+++ b/jOOQ-website/js/prettify/lang-vhdl.js
@@ -0,0 +1,34 @@
+/**
+ * @fileoverview
+ * Registers a language handler for VHDL '93.
+ *
+ * Based on the lexical grammar and keywords at
+ * http://www.iis.ee.ethz.ch/~zimmi/download/vhdl93_syntax.html
+ *
+ * @author benoit@ryder.fr
+ */
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // Whitespace
+         [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0']
+        ],
+        [
+         // String, character or bit string
+         [PR['PR_STRING'], /^(?:[BOX]?"(?:[^\"]|"")*"|'.')/i],
+         // Comment, from two dashes until end of line.
+         [PR['PR_COMMENT'], /^--[^\r\n]*/],
+         [PR['PR_KEYWORD'], /^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i, null],
+         // Type, predefined or standard
+         [PR['PR_TYPE'], /^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i, null],
+         // Predefined attributes
+         [PR['PR_TYPE'], /^\'(?:ACTIVE|ASCENDING|BASE|DELAYED|DRIVING|DRIVING_VALUE|EVENT|HIGH|IMAGE|INSTANCE_NAME|LAST_ACTIVE|LAST_EVENT|LAST_VALUE|LEFT|LEFTOF|LENGTH|LOW|PATH_NAME|POS|PRED|QUIET|RANGE|REVERSE_RANGE|RIGHT|RIGHTOF|SIMPLE_NAME|STABLE|SUCC|TRANSACTION|VAL|VALUE)(?=[^\w-]|$)/i, null],
+         // Number, decimal or based literal
+         [PR['PR_LITERAL'], /^\d+(?:_\d+)*(?:#[\w\\.]+#(?:[+\-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:E[+\-]?\d+(?:_\d+)*)?)/i],
+         // Identifier, basic or extended
+         [PR['PR_PLAIN'], /^(?:[a-z]\w*|\\[^\\]*\\)/i],
+         // Punctuation
+         [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0\-\"\']*/]
+        ]),
+    ['vhdl', 'vhd']);
diff --git a/jOOQ-website/js/prettify/lang-wiki.js b/jOOQ-website/js/prettify/lang-wiki.js
new file mode 100644
index 0000000000..660423e368
--- /dev/null
+++ b/jOOQ-website/js/prettify/lang-wiki.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2009 Google Inc.
+//
+// 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.
+
+
+/**
+ * @fileoverview
+ * Registers a language handler for Wiki pages.
+ *
+ * Based on WikiSyntax at http://code.google.com/p/support/wiki/WikiSyntax
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // Whitespace
+         [PR['PR_PLAIN'],       /^[\t \xA0a-gi-z0-9]+/, null,
+          '\t \xA0abcdefgijklmnopqrstuvwxyz0123456789'],
+         // Wiki formatting
+         [PR['PR_PUNCTUATION'], /^[=*~\^\[\]]+/, null, '=*~^[]']
+        ],
+        [
+         // Meta-info like #summary, #labels, etc.
+         ['lang-wiki.meta',  /(?:^^|\r\n?|\n)(#[a-z]+)\b/],
+         // A WikiWord
+         [PR['PR_LITERAL'],     /^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/
+          ],
+         // A preformatted block in an unknown language
+         ['lang-',           /^\{\{\{([\s\S]+?)\}\}\}/],
+         // A block of source code in an unknown language
+         ['lang-',           /^`([^\r\n`]+)`/],
+         // An inline URL.
+         [PR['PR_STRING'],
+          /^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i],
+         [PR['PR_PLAIN'],       /^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/]
+        ]),
+    ['wiki']);
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer']([[PR['PR_KEYWORD'], /^#[a-z]+/i, null, '#']], []),
+    ['wiki.meta']);
diff --git a/jOOQ-website/js/prettify/lang-xq.js b/jOOQ-website/js/prettify/lang-xq.js
new file mode 100644
index 0000000000..38ffd72d09
--- /dev/null
+++ b/jOOQ-website/js/prettify/lang-xq.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2011 Patrick Wied
+//
+// 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.
+
+
+
+/**
+ * @fileoverview
+ * Registers a language handler for XQuery.
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ *      

+ *
+ *
+ * @author Patrick Wied ( patpa7p@live.de )
+ * @version 2010-09-28
+ */
+
+// Falls back to plain for stylesheets that don't style fun.
+var PR_FUNCTION = 'fun pln';
+// Falls back to plaiin for stylesheets that don't style var.
+var PR_VARIABLE = 'var pln';
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // Matching $var-ia_bles
+         [PR_VARIABLE, /^\$[A-Za-z0-9_\-]+/, null, "$"]
+        ],
+        [
+         // Matching lt and gt operators
+         // Not the best matching solution but you have to differentiate between the gt operator and the tag closing char
+         [PR['PR_PLAIN'], /^[\s=][<>][\s=]/],
+         // Matching @Attributes
+         [PR['PR_LITERAL'], /^\@[\w-]+/],
+         // Matching xml tags
+         [PR['PR_TAG'], /^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
+         // Matching single or multiline xquery comments -> (:  :)
+         [PR['PR_COMMENT'], /^\(:[\s\S]*?:\)/],
+         // Tokenizing /{}:=;*,[]() as plain
+         [PR['PR_PLAIN'], /^[\/\{\};,\[\]\(\)]$/],
+         // Matching a double or single quoted, possibly multi-line, string.
+         // with the special condition that a { in a string changes to xquery context 
+         [PR['PR_STRING'], /^(?:\"(?:[^\"\\\{]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\\{]|\\[\s\S])*(?:\'|$))/, null, '"\''],
+         // Matching standard xquery keywords
+         [PR['PR_KEYWORD'], /^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\b/],
+         // Matching standard xquery types
+         [PR['PR_TYPE'], /^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\b/, null],
+         // Matching standard xquery functions
+         [PR_FUNCTION, /^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\b/],
+         // Matching normal words if none of the previous regular expressions matched
+         [PR['PR_PLAIN'], /^[A-Za-z0-9_\-\:]+/],
+         // Matching whitespaces
+         [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/]
+         ]),
+    ['xq', 'xquery']);
diff --git a/jOOQ-website/js/prettify/lang-yaml.js b/jOOQ-website/js/prettify/lang-yaml.js
new file mode 100644
index 0000000000..c2e52b2dea
--- /dev/null
+++ b/jOOQ-website/js/prettify/lang-yaml.js
@@ -0,0 +1,27 @@
+// Contributed by ribrdb @ code.google.com
+
+/**
+ * @fileoverview
+ * Registers a language handler for YAML.
+ *
+ * @author ribrdb
+ */
+
+PR['registerLangHandler'](
+  PR['createSimpleLexer'](
+    [
+      [PR['PR_PUNCTUATION'], /^[:|>?]+/, null, ':|>?'],
+      [PR['PR_DECLARATION'],  /^%(?:YAML|TAG)[^#\r\n]+/, null, '%'],
+      [PR['PR_TYPE'], /^[&]\S+/, null, '&'],
+      [PR['PR_TYPE'], /^!\S*/, null, '!'],
+      [PR['PR_STRING'], /^"(?:[^\\"]|\\.)*(?:"|$)/, null, '"'],
+      [PR['PR_STRING'], /^'(?:[^']|'')*(?:'|$)/, null, "'"],
+      [PR['PR_COMMENT'], /^#[^\r\n]*/, null, '#'],
+      [PR['PR_PLAIN'], /^\s+/, null, ' \t\r\n']
+    ],
+    [
+      [PR['PR_DECLARATION'], /^(?:---|\.\.\.)(?:[\r\n]|$)/],
+      [PR['PR_PUNCTUATION'], /^-/],
+      [PR['PR_KEYWORD'], /^\w+:[ \r\n]/],
+      [PR['PR_PLAIN'], /^\w+/]
+    ]), ['yaml', 'yml']);
diff --git a/jOOQ-website/js/prettify/prettify.css b/jOOQ-website/js/prettify/prettify.css
new file mode 100644
index 0000000000..90cfb39f20
--- /dev/null
+++ b/jOOQ-website/js/prettify/prettify.css
@@ -0,0 +1,49 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+/* SPAN elements with the classes below are added by prettyprint. */
+.pln { color: #000 }  /* plain text */
+
+@media screen {
+  .str { color: #080 }  /* string content */
+  .kwd { color: #008 }  /* a keyword */
+  .com { color: #800 }  /* a comment */
+  .typ { color: #606 }  /* a type name */
+  .lit { color: #066 }  /* a literal value */
+  /* punctuation, lisp open bracket, lisp close bracket */
+  .pun, .opn, .clo { color: #660 }
+  .tag { color: #008 }  /* a markup tag name */
+  .atn { color: #606 }  /* a markup attribute name */
+  .atv { color: #080 }  /* a markup attribute value */
+  .dec, .var { color: #606 }  /* a declaration; a variable name */
+  .fun { color: red }  /* a function name */
+}
+
+/* Use higher contrast and text-weight for printable form. */
+@media print, projection {
+  .str { color: #060 }
+  .kwd { color: #006; font-weight: bold }
+  .com { color: #600; font-style: italic }
+  .typ { color: #404; font-weight: bold }
+  .lit { color: #044 }
+  .pun, .opn, .clo { color: #440 }
+  .tag { color: #006; font-weight: bold }
+  .atn { color: #404 }
+  .atv { color: #060 }
+}
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
+li.L0,
+li.L1,
+li.L2,
+li.L3,
+li.L5,
+li.L6,
+li.L7,
+li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,
+li.L3,
+li.L5,
+li.L7,
+li.L9 { background: #eee }
diff --git a/jOOQ-website/js/prettify/prettify.js b/jOOQ-website/js/prettify/prettify.js
new file mode 100644
index 0000000000..037c26da4a
--- /dev/null
+++ b/jOOQ-website/js/prettify/prettify.js
@@ -0,0 +1,1477 @@
+// Copyright (C) 2006 Google Inc.
+//
+// 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.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ * 

+ * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  // We use things that coerce to strings to make them compact when minified
    +  // and to defeat aggressive optimizers that fold large string constants.
    +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
    +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
    +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
    +      "static,struct,switch,typedef,union,unsigned,void,volatile"];
    +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
    +      "new,operator,private,protected,public,this,throw,true,try,typeof"];
    +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
    +      "concept,concept_map,const_cast,constexpr,decltype," +
    +      "dynamic_cast,explicit,export,friend,inline,late_check," +
    +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
    +      "template,typeid,typename,using,virtual,where"];
    +  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
    +      "abstract,boolean,byte,extends,final,finally,implements,import," +
    +      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
    +      "transient"];
    +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
    +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
    +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
    +      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
    +      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
    +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
    +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
    +      "true,try,unless,until,when,while,yes";
    +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
    +      "debugger,eval,export,function,get,null,set,undefined,var,with," +
    +      "Infinity,NaN"];
    +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
    +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
    +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
    +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
    +      "elif,except,exec,finally,from,global,import,in,is,lambda," +
    +      "nonlocal,not,or,pass,print,raise,try,with,yield," +
    +      "False,True,None"];
    +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
    +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
    +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
    +      "BEGIN,END"];
    +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
    +      "function,in,local,set,then,until"];
    +  var ALL_KEYWORDS = [
    +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
    +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
    +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
    +
    +  // token style names.  correspond to css classes
    +  /**
    +   * token style for a string literal
    +   * @const
    +   */
    +  var PR_STRING = 'str';
    +  /**
    +   * token style for a keyword
    +   * @const
    +   */
    +  var PR_KEYWORD = 'kwd';
    +  /**
    +   * token style for a comment
    +   * @const
    +   */
    +  var PR_COMMENT = 'com';
    +  /**
    +   * token style for a type
    +   * @const
    +   */
    +  var PR_TYPE = 'typ';
    +  /**
    +   * token style for a literal value.  e.g. 1, null, true.
    +   * @const
    +   */
    +  var PR_LITERAL = 'lit';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PUNCTUATION = 'pun';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PLAIN = 'pln';
    +
    +  /**
    +   * token style for an sgml tag.
    +   * @const
    +   */
    +  var PR_TAG = 'tag';
    +  /**
    +   * token style for a markup declaration such as a DOCTYPE.
    +   * @const
    +   */
    +  var PR_DECLARATION = 'dec';
    +  /**
    +   * token style for embedded source.
    +   * @const
    +   */
    +  var PR_SOURCE = 'src';
    +  /**
    +   * token style for an sgml attribute name.
    +   * @const
    +   */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /**
    +   * token style for an sgml attribute value.
    +   * @const
    +   */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   * @const
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +
    +
    +/**
    + * A set of tokens that can precede a regular expression literal in
    + * javascript
    + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
    + * has the full list, but I've removed ones that might be problematic when
    + * seen in languages that don't support regular expression literals.
    + *
    + * <p>Specifically, I've removed any keywords that can't precede a regexp
    + * literal in a syntactically legal javascript program, and I've removed the
    + * "in" keyword since it's not a keyword in many languages, and might be used
    + * as a count of inches.
    + *
    + * <p>The link a above does not accurately describe EcmaScript rules since
    + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    + * very well in practice.
    + *
    + * @private
    + * @const
    + */
    +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
    +
    +// CAVEAT: this does not properly handle the case where a regular
    +// expression immediately follows another since a regular expression may
    +// have flags for case-sensitivity and the like.  Having regexp tokens
    +// adjacent is not valid in any language I'm aware of, so I'm punting.
    +// TODO: maybe style special characters inside a regexp as punctuation.
    +
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    var escapeCharToCodeUnit = {
    +      'b': 8,
    +      't': 9,
    +      'n': 0xa,
    +      'v': 0xb,
    +      'f': 0xc,
    +      'r': 0xd
    +    };
    +  
    +    function decodeEscape(charsetPart) {
    +      var cc0 = charsetPart.charCodeAt(0);
    +      if (cc0 !== 92 /* \\ */) {
    +        return cc0;
    +      }
    +      var c1 = charsetPart.charAt(1);
    +      cc0 = escapeCharToCodeUnit[c1];
    +      if (cc0) {
    +        return cc0;
    +      } else if ('0' <= c1 && c1 <= '7') {
    +        return parseInt(charsetPart.substring(1), 8);
    +      } else if (c1 === 'u' || c1 === 'x') {
    +        return parseInt(charsetPart.substring(2), 16);
    +      } else {
    +        return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
    +          groups.push(p);
    +        } else {
    +          var start = decodeEscape(p);
    +          var end;
    +          if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +            end = decodeEscape(charsetParts[i + 2]);
    +            i += 2;
    +          } else {
    +            end = start;
    +          }
    +          ranges.push([start, end]);
    +          // If the range might intersect letters, then expand it.
    +          // This case handling is too simplistic.
    +          // It does not deal with non-latin case folding.
    +          // It works for latin source code identifiers though.
    +          if (!(end < 65 || start > 122)) {
    +            if (!(end < 65 || start > 90)) {
    +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +            }
    +            if (!(end < 97 || start > 122)) {
    +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +            }
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   sourceCode: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      sourceCode: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      sourceCode: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  var notWs = /\S/;
    +
    +  /**
    +   * Given an element, if it contains only one child element and any text nodes
    +   * it contains contain only space characters, return the sole child element.
    +   * Otherwise returns undefined.
    +   * <p>
    +   * This is meant to return the CODE element in {@code <pre><code ...>} when
    +   * there is a single child element that contains all the non-space textual
    +   * content, but not to return anything where there are multiple child elements
    +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
    +   * is textual content.
    +   */
    +  function childContentWrapper(element) {
    +    var wrapper = undefined;
    +    for (var c = element.firstChild; c; c = c.nextSibling) {
    +      var type = c.nodeType;
    +      wrapper = (type === 1)  // Element Node
    +          ? (wrapper ? element : c)
    +          : (type === 3)  // Text Node
    +          ? (notWs.test(c.nodeValue) ? element : wrapper)
    +          : wrapper;
    +    }
    +    return wrapper === element ? undefined : wrapper;
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +
    +    /**
    +     * Lexes job.sourceCode and produces an output array job.decorations of
    +     * style classes preceded by the position at which they start in
    +     * job.sourceCode in order.
    +     *
    +     * @param {Object} job an object like <pre>{
    +     *    sourceCode: {string} sourceText plain text,
    +     *    basePos: {int} position of job.sourceCode in the larger chunk of
    +     *        sourceCode.
    +     * }</pre>
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.sourceCode, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      /**
    +       * @const
    +       */
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var types = options['types'];
    +    if (types) {
    +      fallthroughStylePatterns.push([PR_TYPE, types]);
    +    }
    +
    +    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
    +           null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.sourceCode} around style boundaries in
    +   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    sourceCode: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.sourceCode in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.sourceCode;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before
    +    // sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Remove all zero-length decorations.
    +    decorations[nDecorations] = sourceLength;
    +    var decPos, i;
    +    for (i = decPos = 0; i < nDecorations;) {
    +      if (decorations[i] !== decorations[i + 2]) {
    +        decorations[decPos++] = decorations[i++];
    +        decorations[decPos++] = decorations[i++];
    +      } else {
    +        i += 2;
    +      }
    +    }
    +    nDecorations = decPos;
    +  
    +    // Simplify decorations.
    +    for (i = decPos = 0; i < nDecorations;) {
    +      var startPos = decorations[i];
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[i + 1];
    +      var end = i + 2;
    +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      var styledText;
    +      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
    +          // Don't introduce spans around empty text nodes.
    +          && (styledText = source.substring(sourceIndex, end))) {
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        sourceCode: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.sourceCode in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if (window['console']) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'types': C_TYPES
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null,true,false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true,
    +          'types': C_TYPES
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.sourceCode;
    +      job.sourceCode = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return +(new Date); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
    +    var prettyPrintRe = /\bprettyprint\b/;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock['now']() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock['now']() < endTime; k++) {
    +        var cs = elements[k];
    +        var className = cs.className;
    +        if (className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          // HTML5 recommends that a language be specified using "language-"
    +          // as the prefix instead.  Google Code Prettify supports both.
    +          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
    +          var langExtension = className.match(langExtensionRe);
    +          // Support <pre class="prettyprint"><code class="language-c">
    +          var wrapper;
    +          if (!langExtension && (wrapper = childContentWrapper(cs))
    +              && "CODE" === wrapper.tagName) {
    +            langExtension = wrapper.className.match(langExtensionRe);
    +          }
    +
    +          if (langExtension) {
    +            langExtension = langExtension[1];
    +          }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +   /**
    +    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +    * {@code class=prettyprint} and prettify them.
    +    *
    +    * @param {Function?} opt_whenDone if specified, called when the last entry
    +    *     has been finished.
    +    */
    +  window['prettyPrintOne'] = prettyPrintOne;
    +   /**
    +    * Pretty print a chunk of code.
    +    *
    +    * @param {string} sourceCodeHtml code as html
    +    * @return {string} code as html, but prettier
    +    */
    +  window['prettyPrint'] = prettyPrint;
    +   /**
    +    * Contains functions for creating and registering new language handlers.
    +    * @type {Object}
    +    */
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/jOOQ-website/links.php b/jOOQ-website/links.php
    new file mode 100644
    index 0000000000..7d9a0acf94
    --- /dev/null
    +++ b/jOOQ-website/links.php
    @@ -0,0 +1,54 @@
    +<?php 
    +require 'frame.php';
    +function printSlogan() {}
    +function printContent() {
    +?>
    +<h2>NEWS</h2>
    +<ul>
    +	<li>Subscribe to the <a href="http://groups.google.com/group/jooq-user">jOOQ User Group</a></li>
    +	<li>Subscribe to the <a href="http://groups.google.com/group/jooq-developer">jOOQ Developer Group</a></li>
    +</ul>
    +
    +<h2>Follow jOOQ</h2>
    +<ul>
    +	<li>On Wordpress: <a href="http://lukaseder.wordpress.com/" title="Lukas Eder's blog about Java, SQL and jOOQ">http://lukaseder.wordpress.com/</a></li>
    +    <li>On SourceForge: <a href="https://sourceforge.net/projects/jooq/" title="jOOQ download and hosting on source forge">https://sourceforge.net/projects/jooq/</a></li>
    +    <li>On GitHub: <a href="https://github.com/lukaseder/jOOQ" title="fork jOOQ on GitHub">https://github.com/lukaseder/jOOQ</a></li>
    +    <li>On ohloh: <a href="https://www.ohloh.net/p/jooq" title="see some statistics about jOOQ on ohloh">https://www.ohloh.net/p/jooq</a></li>
    +    <li>On freshmeat: <a href="http://freshmeat.net/projects/jooq" title="subscribe to some jOOQ announcements on freshmeat">http://freshmeat.net/projects/jooq</a></li>
    +    <li>On Stack Overflow: <a href="http://stackoverflow.com/questions/tagged/jooq" title="ask questions about jOOQ on Stack Overflow">http://stackoverflow.com/questions/tagged/jooq</a></li> 
    +</ul>
    +
    +<h2>Similar products</h2>
    +<p>When you consider jOOQ for your project, you might also have considered any of these similar products:</p>
    +
    +<ul>
    +	<li><a href="http://source.mysema.com/display/querydsl/Querydsl" title="QueryDSL, a product similar to jOOQ">Querydsl</a>: Focusing on the DSL and abstracting "backend integrations", such as SQL, JPA, collections, etc.</li>
    +    <li><a href="http://www.h2database.com/html/jaqu.html" title="JaQu, a product similar to jOOQ">JaQu</a>: Writing SQL statements using actual Java expressions</li>
    +    <li><a href="http://iciql.com/" title="iciql, a fork of JaQu, a product similar to jOOQ">iciql</a>: A fork of JaQu</li>
    +</ul>
    +
    +<p>And database tools, such as</p>
    +<ul>
    +	<li><a href="http://code.google.com/p/activejdbc/" title="QueryDSL, a product similar to jOOQ">ActiveJDBC</a>: A simple mapping tool implementing ActiveRecords in a Ruby-like way</li>
    +</ul>
    +
    +<p>And OR-mapping tools, such as</p>
    +<ul>
    +	<li><a href="http://www.hibernate.org/" title="QueryDSL, a product similar to jOOQ">Hibernate</a>: The mother of all inspiration to Java persistence</li>
    +	<li><a href="http://www.oracle.com/technetwork/java/javaee/tech/persistence-jsp-140049.html" title="QueryDSL, a product similar to jOOQ">JPA</a>: The J2EE standard</li>
    +</ul>
    +
    +<h2>Other tools by Lukas Eder</h2>
    +<div style="height: 100px;">
    +	<img src="img/joox-small.png" alt="jOOX" style="float:left; margin-right: 4em;"/>
    +	<p><a href="http://code.google.com/p/joox/"
    +		title="jOOX, a product inspired by jOOQ">jOOX</a> stands for Java
    +	Object Oriented XML. It is a simple wrapper for the org.w3c.dom package,
    +	to allow for fluent XML document creation and manipulation where DOM is
    +	required but too verbose. jOOX only wraps the underlying document and
    +	can be used to enhance DOM, not as an alternative.</p>
    +</div>
    +<?php 
    +}
    +?>
    \ No newline at end of file