Blog
+Pretty much anything I feel like writing.
+About
+A litte about me.
+diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/pages/index.md b/pages/index.md new file mode 100644 index 0000000..c5b6cc1 --- /dev/null +++ b/pages/index.md @@ -0,0 +1,19 @@ +title: '' +permalink: / + +
diff --git a/sitebuilder.py b/sitebuilder.py index 2c6c3f6..adac370 100755 --- a/sitebuilder.py +++ b/sitebuilder.py @@ -1,11 +1,8 @@ #!/usr/bin/env python import sys -from os.path import basename -from glob import glob -from flask import Flask, render_template, send_from_directory +from flask import Flask, render_template, request from flask_flatpages import FlatPages -from flask_frozen import Freezer import arrow @@ -18,59 +15,64 @@ FLATPAGES_MARKDOWN_EXTENSIONS = ['codehilite', 'extra'] app = Flask(__name__) app.config.from_object(__name__) pages = FlatPages(app) -freezer = Freezer(app) permalinks = {} blogposts = [] tags = set() +# Find all pages for page in pages: - parts = page.path.split('-') if page.meta.get('permalink', None): + # Special page page.meta['url'] = page.meta['permalink'] else: + # Blog post + blogposts.append(page) + tags.update(page.meta.get('tags', [])) + # Setup permalink + parts = page.path.split('-') page.meta['url'] = '/blog/{}/{}/{}/'.format(parts[0], parts[1], '-'.join(parts[3:])) + + # Find and format post publication date date = arrow.get('-'.join(parts[0:3])) page.meta['date'] = date page.meta['datestr'] = date.format('D MMM YYYY') - blogposts.append(page) - tags.update(page.meta.get('tags', [])) + permalinks[page.meta['url']] = page blogposts = sorted(blogposts, key=lambda p: p.meta['date'], reverse=True) -# Static files -@app.route("/src/(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
(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, - /^[+\-]?(?:0x[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/src/lang-lua.js b/src/lang-lua.js deleted file mode 100644 index 68bb30b..0000000 --- a/src/lang-lua.js +++ /dev/null @@ -1,59 +0,0 @@ -// 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/src/lang-ml.js b/src/lang-ml.js deleted file mode 100644 index c5a3db7..0000000 --- a/src/lang-ml.js +++ /dev/null @@ -1,56 +0,0 @@ -// 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/fsharp/manual/spec2.aspx#_Toc202383715 - * - * @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/src/lang-nasm.js b/src/lang-nasm.js deleted file mode 100644 index 965ead6..0000000 --- a/src/lang-nasm.js +++ /dev/null @@ -1,48 +0,0 @@ -// 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'] - ], - [ - [PR.PR_KEYWORD, /^\[[\w\s]+\]/], - [PR.PR_KEYWORD, /^\%\w+/], - [PR.PR_KEYWORD, - /^\b(align|cli|sti|mov|equ|dd|dw|times|or|lgdt|xor|invlpg|add|pusha|push|call|jmp|popa|pop|int|ret)\b/], - [PR.PR_TYPE, - /^\b(eax|ax|ah|al|ebx|bx|bh|bl|ecx|cx|ch|cl|edx|dx|dh|dl|esi|edi|ebp|eip|esp|eflags|cs|ds|es|fs|gs|ss|cr0|cr1|cr2|cr3|cr4)\b/], - [PR.PR_DECLARATION, /^#.*/, null, '#'], - [PR.PR_LITERAL, /^0x[0-9A-F]*/], - [PR.PR_LITERAL, /^\d+/] - - ]), - ['nasm', 'asm', 'as', 's']); diff --git a/src/lang-proto.js b/src/lang-proto.js deleted file mode 100644 index d6531fd..0000000 --- a/src/lang-proto.js +++ /dev/null @@ -1,35 +0,0 @@ -// 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: ( - 'bool bytes default double enum extend extensions false fixed32 ' - + 'fixed64 float group import int32 int64 max message option ' - + 'optional package repeated required returns rpc service ' - + 'sfixed32 sfixed64 sint32 sint64 string syntax to true uint32 ' - + 'uint64'), - cStyleComments: true - }), ['proto']); diff --git a/src/lang-scala.js b/src/lang-scala.js deleted file mode 100644 index e0d675a..0000000 --- a/src/lang-scala.js +++ /dev/null @@ -1,54 +0,0 @@ -// 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/src/lang-sql.js b/src/lang-sql.js deleted file mode 100644 index 7a58097..0000000 --- a/src/lang-sql.js +++ /dev/null @@ -1,57 +0,0 @@ -// 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|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|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/src/lang-tex.js b/src/lang-tex.js deleted file mode 100644 index 57d0ac4..0000000 --- a/src/lang-tex.js +++ /dev/null @@ -1,46 +0,0 @@ -// 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/src/lang-vb.js b/src/lang-vb.js deleted file mode 100644 index a38db45..0000000 --- a/src/lang-vb.js +++ /dev/null @@ -1,61 +0,0 @@ -// 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/src/lang-vhdl.js b/src/lang-vhdl.js deleted file mode 100644 index 9c4921c..0000000 --- a/src/lang-vhdl.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @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/src/lang-wiki.js b/src/lang-wiki.js deleted file mode 100644 index d4aa350..0000000 --- a/src/lang-wiki.js +++ /dev/null @@ -1,53 +0,0 @@ -// 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/src/lang-yaml.js b/src/lang-yaml.js deleted file mode 100644 index 271139f..0000000 --- a/src/lang-yaml.js +++ /dev/null @@ -1,27 +0,0 @@ -// 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/src/openid.php b/src/openid.php deleted file mode 100644 index 19e5e7d..0000000 --- a/src/openid.php +++ /dev/null @@ -1,765 +0,0 @@ - - * $openid = new LightOpenID; - * $openid->identity = 'ID supplied by user'; - * header('Location: ' . $openid->authUrl()); - * - * The provider then sends various parameters via GET, one of them is openid_mode. - * Step two is verification: - *
- * if ($this->data['openid_mode']) {
- * $openid = new LightOpenID;
- * echo $openid->validate() ? 'Logged in.' : 'Failed';
- * }
- *
- *
- * Optionally, you can set $returnUrl and $realm (or $trustRoot, which is an alias).
- * The default values for those are:
- * $openid->realm = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
- * $openid->returnUrl = $openid->realm . $_SERVER['REQUEST_URI'];
- * If you don't know their meaning, refer to any openid tutorial, or specification. Or just guess.
- *
- * AX and SREG extensions are supported.
- * To use them, specify $openid->required and/or $openid->optional before calling $openid->authUrl().
- * These are arrays, with values being AX schema paths (the 'path' part of the URL).
- * For example:
- * $openid->required = array('namePerson/friendly', 'contact/email');
- * $openid->optional = array('namePerson/first');
- * If the server supports only SREG or OpenID 1.1, these are automaticaly
- * mapped to SREG names, so that user doesn't have to know anything about the server.
- *
- * To get the values, use $openid->getAttributes().
- *
- *
- * The library requires PHP >= 5.1.2 with curl or http/https stream wrappers enabled.
- * @author Mewp
- * @copyright Copyright (c) 2010, Mewp
- * @license http://www.opensource.org/licenses/mit-license.php MIT
- */
-class LightOpenID
-{
- public $returnUrl
- , $required = array()
- , $optional = array()
- , $verify_peer = null
- , $capath = null
- , $cainfo = null;
- private $identity, $claimed_id;
- protected $server, $version, $trustRoot, $aliases, $identifier_select = false
- , $ax = false, $sreg = false, $data, $setup_url = null;
- static protected $ax_to_sreg = array(
- 'namePerson/friendly' => 'nickname',
- 'contact/email' => 'email',
- 'namePerson' => 'fullname',
- 'birthDate' => 'dob',
- 'person/gender' => 'gender',
- 'contact/postalCode/home' => 'postcode',
- 'contact/country/home' => 'country',
- 'pref/language' => 'language',
- 'pref/timezone' => 'timezone',
- 'namePerson/first' => 'firstname',
- 'namePerson/last' => 'lastname',
- );
-
- function __construct()
- {
- $this->trustRoot = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
- $uri = rtrim(preg_replace('#((?<=\?)|&)openid\.[^&]+#', '', $_SERVER['REQUEST_URI']), '?');
- $this->returnUrl = $this->trustRoot . $uri;
-
- $this->data = $_POST + $_GET; # OPs may send data as POST or GET.
-
- if(!function_exists('curl_init') && !in_array('https', stream_get_wrappers())) {
- throw new ErrorException('You must have either https wrappers or curl enabled.');
- }
- }
-
- function __set($name, $value)
- {
- switch ($name) {
- case 'identity':
- if (strlen($value = trim((String) $value))) {
- if (preg_match('#^xri:/*#i', $value, $m)) {
- $value = substr($value, strlen($m[0]));
- } elseif (!preg_match('/^(?:[=@+\$!\(]|https?:)/i', $value)) {
- $value = "http://$value";
- }
- if (preg_match('#^https?://[^/]+$#i', $value, $m)) {
- $value .= '/';
- }
- }
- $this->$name = $this->claimed_id = $value;
- break;
- case 'trustRoot':
- case 'realm':
- $this->trustRoot = trim($value);
- }
- }
-
- function __get($name)
- {
- switch ($name) {
- case 'identity':
- # We return claimed_id instead of identity,
- # because the developer should see the claimed identifier,
- # i.e. what he set as identity, not the op-local identifier (which is what we verify)
- return $this->claimed_id;
- case 'trustRoot':
- case 'realm':
- return $this->trustRoot;
- case 'mode':
- return empty($this->data['openid_mode']) ? null : $this->data['openid_mode'];
- }
- }
-
- /**
- * Checks if the server specified in the url exists.
- *
- * @param $url url to check
- * @return true, if the server exists; false otherwise
- */
- function hostExists($url)
- {
- if (strpos($url, '/') === false) {
- $server = $url;
- } else {
- $server = @parse_url($url, PHP_URL_HOST);
- }
-
- if (!$server) {
- return false;
- }
-
- return !!gethostbynamel($server);
- }
-
- protected function request_curl($url, $method='GET', $params=array())
- {
- $params = http_build_query($params, '', '&');
- $curl = curl_init($url . ($method == 'GET' && $params ? '?' . $params : ''));
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($curl, CURLOPT_HEADER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/xrds+xml, */*'));
-
- if($this->verify_peer !== null) {
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $this->verify_peer);
- if($this->capath) {
- curl_setopt($curl, CURLOPT_CAPATH, $this->capath);
- }
-
- if($this->cainfo) {
- curl_setopt($curl, CURLOPT_CAINFO, $this->cainfo);
- }
- }
-
- if ($method == 'POST') {
- curl_setopt($curl, CURLOPT_POST, true);
- curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
- } elseif ($method == 'HEAD') {
- curl_setopt($curl, CURLOPT_HEADER, true);
- curl_setopt($curl, CURLOPT_NOBODY, true);
- } else {
- curl_setopt($curl, CURLOPT_HTTPGET, true);
- }
- $response = curl_exec($curl);
-
- if($method == 'HEAD') {
- $headers = array();
- foreach(explode("\n", $response) as $header) {
- $pos = strpos($header,':');
- $name = strtolower(trim(substr($header, 0, $pos)));
- $headers[$name] = trim(substr($header, $pos+1));
- }
-
- # Updating claimed_id in case of redirections.
- $effective_url = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
- if($effective_url != $url) {
- $this->identity = $this->claimed_id = $effective_url;
- }
-
- return $headers;
- }
-
- if (curl_errno($curl)) {
- throw new ErrorException(curl_error($curl), curl_errno($curl));
- }
-
- return $response;
- }
-
- protected function request_streams($url, $method='GET', $params=array())
- {
- if(!$this->hostExists($url)) {
- throw new ErrorException('Invalid request.');
- }
-
- $params = http_build_query($params, '', '&');
- switch($method) {
- case 'GET':
- $opts = array(
- 'http' => array(
- 'method' => 'GET',
- 'header' => 'Accept: application/xrds+xml, */*',
- 'ignore_errors' => true,
- )
- );
- $url = $url . ($params ? '?' . $params : '');
- break;
- case 'POST':
- $opts = array(
- 'http' => array(
- 'method' => 'POST',
- 'header' => 'Content-type: application/x-www-form-urlencoded',
- 'content' => $params,
- 'ignore_errors' => true,
- )
- );
- break;
- case 'HEAD':
- # We want to send a HEAD request,
- # but since get_headers doesn't accept $context parameter,
- # we have to change the defaults.
- $default = stream_context_get_options(stream_context_get_default());
- stream_context_get_default(
- array('http' => array(
- 'method' => 'HEAD',
- 'header' => 'Accept: application/xrds+xml, */*',
- 'ignore_errors' => true,
- ))
- );
-
- $url = $url . ($params ? '?' . $params : '');
- $headers_tmp = get_headers ($url);
- if(!$headers_tmp) {
- return array();
- }
-
- # Parsing headers.
- $headers = array();
- foreach($headers_tmp as $header) {
- $pos = strpos($header,':');
- $name = strtolower(trim(substr($header, 0, $pos)));
- $headers[$name] = trim(substr($header, $pos+1));
-
- # Following possible redirections. The point is just to have
- # claimed_id change with them, because get_headers() will
- # follow redirections automatically.
- # We ignore redirections with relative paths.
- # If any known provider uses them, file a bug report.
- if($name == 'location') {
- if(strpos($headers[$name], 'http') === 0) {
- $this->identity = $this->claimed_id = $headers[$name];
- } elseif($headers[$name][0] == '/') {
- $parsed_url = parse_url($this->claimed_id);
- $this->identity =
- $this->claimed_id = $parsed_url['scheme'] . '://'
- . $parsed_url['host']
- . $headers[$name];
- }
- }
- }
-
- # And restore them.
- stream_context_get_default($default);
- return $headers;
- }
-
- if($this->verify_peer) {
- $opts += array('ssl' => array(
- 'verify_peer' => true,
- 'capath' => $this->capath,
- 'cafile' => $this->cainfo,
- ));
- }
-
- $context = stream_context_create ($opts);
-
- return file_get_contents($url, false, $context);
- }
-
- protected function request($url, $method='GET', $params=array())
- {
- if(function_exists('curl_init') && !ini_get('safe_mode') && !ini_get('open_basedir')) {
- return $this->request_curl($url, $method, $params);
- }
- return $this->request_streams($url, $method, $params);
- }
-
- protected function build_url($url, $parts)
- {
- if (isset($url['query'], $parts['query'])) {
- $parts['query'] = $url['query'] . '&' . $parts['query'];
- }
-
- $url = $parts + $url;
- $url = $url['scheme'] . '://'
- . (empty($url['username'])?''
- :(empty($url['password'])? "{$url['username']}@"
- :"{$url['username']}:{$url['password']}@"))
- . $url['host']
- . (empty($url['port'])?'':":{$url['port']}")
- . (empty($url['path'])?'':$url['path'])
- . (empty($url['query'])?'':"?{$url['query']}")
- . (empty($url['fragment'])?'':"#{$url['fragment']}");
- return $url;
- }
-
- /**
- * Helper function used to scan for / tags and extract information
- * from them
- */
- protected function htmlTag($content, $tag, $attrName, $attrValue, $valueName)
- {
- preg_match_all("#<{$tag}[^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*$valueName=['\"](.+?)['\"][^>]*/?>#i", $content, $matches1);
- preg_match_all("#<{$tag}[^>]*$valueName=['\"](.+?)['\"][^>]*$attrName=['\"].*?$attrValue.*?['\"][^>]*/?>#i", $content, $matches2);
-
- $result = array_merge($matches1[1], $matches2[1]);
- return empty($result)?false:$result[0];
- }
-
- /**
- * Performs Yadis and HTML discovery. Normally not used.
- * @param $url Identity URL.
- * @return String OP Endpoint (i.e. OpenID provider address).
- * @throws ErrorException
- */
- function discover($url)
- {
- if (!$url) throw new ErrorException('No identity supplied.');
- # Use xri.net proxy to resolve i-name identities
- if (!preg_match('#^https?:#', $url)) {
- $url = "https://xri.net/$url";
- }
-
- # We save the original url in case of Yadis discovery failure.
- # It can happen when we'll be lead to an XRDS document
- # which does not have any OpenID2 services.
- $originalUrl = $url;
-
- # A flag to disable yadis discovery in case of failure in headers.
- $yadis = true;
-
- # We'll jump a maximum of 5 times, to avoid endless redirections.
- for ($i = 0; $i < 5; $i ++) {
- if ($yadis) {
- $headers = $this->request($url, 'HEAD');
-
- $next = false;
- if (isset($headers['x-xrds-location'])) {
- $url = $this->build_url(parse_url($url), parse_url(trim($headers['x-xrds-location'])));
- $next = true;
- }
-
- if (isset($headers['content-type'])
- && (strpos($headers['content-type'], 'application/xrds+xml') !== false
- || strpos($headers['content-type'], 'text/xml') !== false)
- ) {
- # Apparently, some providers return XRDS documents as text/html.
- # While it is against the spec, allowing this here shouldn't break
- # compatibility with anything.
- # ---
- # Found an XRDS document, now let's find the server, and optionally delegate.
- $content = $this->request($url, 'GET');
-
- preg_match_all('#- * 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:
} 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.
- *
} or {@code } element to specify the
- * language, as in {@code }. 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.
- *
- * Change log:
- * cbeust, 2006/08/22
- *
- * Java annotations (start with "@") are now captured as literals ("lit")
- *
- * @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;
-
-/** the number of characters between tab columns */
-window['PR_TAB_WIDTH'] = 2;
-
-/** Contains functions for creating and registering new language handlers.
- * @type {Object}
- */
-window['PR']
-
-/** Pretty print a chunk of code.
- *
- * @param {string} sourceCodeHtml code as html
- * @return {string} code as html, but prettier
- */
- = window['prettyPrintOne']
-/** Find all the {@code } and {@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['prettyPrint'] = void 0;
-
-
-(function () {
- // Keyword lists for various languages.
- 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 uint8_t uint16_t uint32_t ";
- 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 wchar_t 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 ALL_TYPES = "signed unsigned char int short long float double extern const volatile uint8_t int8_t uint16_t int16_t uint32_t int32_t union struct typedef void";
-
- // token style names. correspond to css classes
- /** token style for a string literal */
- var PR_STRING = 'str';
- /** token style for a keyword */
- var PR_KEYWORD = 'kwd';
- /** token style for a comment */
- var PR_COMMENT = 'com';
- /** token style for a type */
- var PR_TYPE = 'typ';
- /** token style for a literal value. e.g. 1, null, true. */
- var PR_LITERAL = 'lit';
- /** token style for a punctuation string. */
- var PR_PUNCTUATION = 'pun';
- /** token style for a punctuation string. */
- var PR_PLAIN = 'pln';
-
- /** token style for an sgml tag. */
- var PR_TAG = 'tag';
- /** token style for a markup declaration such as a DOCTYPE. */
- var PR_DECLARATION = 'dec';
- /** token style for embedded source. */
- var PR_SOURCE = 'src';
- /** token style for an sgml attribute name. */
- var PR_ATTRIB_NAME = 'atn';
- /** token style for an sgml attribute value. */
- 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.
- */
- var PR_NOCODE = 'nocode';
-
- /** A set of tokens that can precede a regular expression literal in
- * javascript.
- * 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.
- *
- * 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.
- *
- *
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
- */
- var REGEXP_PRECEDER_PATTERN = function () {
- var preceders = [
- "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
- "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
- "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
- "<", "<<", "<<=", "<=", "=", "==", "===", ">",
- ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
- "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
- "||=", "~" /* handles =~ and !~ */,
- "break", "case", "continue", "delete",
- "do", "else", "finally", "instanceof",
- "return", "throw", "try", "typeof"
- ];
- var pattern = '(?:^^|[+-]';
- for (var i = 0; i < preceders.length; ++i) {
- pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
- }
- pattern += ')\\s*'; // matches at end, and matches empty string
- return pattern;
- // 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.} 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;
- }
- }
-
- function decodeEscape(charsetPart) {
- if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
- switch (charsetPart.charAt(1)) {
- case 'b': return 8;
- case 't': return 9;
- case 'n': return 0xa;
- case 'v': return 0xb;
- case 'f': return 0xc;
- case 'r': return 0xd;
- case 'u': case 'x':
- return parseInt(charsetPart.substring(2), 16)
- || charsetPart.charCodeAt(1);
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7':
- return parseInt(charsetPart.substring(1), 8);
- default: 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];
- switch (p) {
- case '\\B': case '\\b':
- case '\\D': case '\\d':
- case '\\S': case '\\s':
- case '\\W': case '\\w':
- groups.push(p);
- continue;
- }
- 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.
- 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.
- *
- *
- * The HTML DOM structure:
- *
- * (Element "p"
- * (Element "b"
- * (Text "print ")) ; #1
- * (Text "'Hello '") ; #2
- * (Element "br") ; #3
- * (Text " + 'World';")) ; #4
- *
- *
- * corresponds to the HTML
- * {@code
print 'Hello '
+ 'World';
}.
- *
- *
- * It will produce the output:
- *
- * {
- * source: "print 'Hello '\n + 'World';",
- * // 1 2
- * // 012345678901234 5678901234567
- * spans: [0, #1, 6, #2, 14, #3, 15, #4]
- * }
- *
- *
- * where #1 is a reference to the {@code "print "} text node above, and so
- * on for the other text nodes.
- *
- *
- *
- * 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.
- *
- *
- * @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 {
- source: 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 = {
- source: sourceCode,
- basePos: basePos
- };
- langHandler(job);
- out.push.apply(out, job.decorations);
- }
-
- /** 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
- * ' -->
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {% block page %}
+ {% endblock page %}
-
+
-
+
-
-
-
-
-
-
-
-
-
- {% block page %}
- {% endblock page %}
-
-
-
-
-
-
- © 2012
- Thomas Lovén
+
+
-
-
+
+
+
+ {% block morescripts %}
+ {% endblock morescripts %}
+