]> git.quilime.com - quilime.com.git/commitdiff
Renaming
authorGabriel Dunne <gdunne@quilime.com>
Thu, 6 Jul 2023 22:59:08 +0000 (15:59 -0700)
committerGabriel Dunne <gdunne@quilime.com>
Thu, 6 Jul 2023 22:59:08 +0000 (15:59 -0700)
53 files changed:
_config.yml
_includes/nav.html
_layouts/default.html
_layouts/index.html
_posts/cli/2009-04-23-bash-imageslice.md [moved from _posts/snippets/2009-04-23-bash-imageslice.md with 97% similarity]
_posts/cli/2010-01-11-bash-rename_multiple_files.md [moved from _posts/snippets/2010-01-11-bash-rename_multiple_files.md with 76% similarity]
_posts/cli/2010-02-07-bash-date_for_filename.md [moved from _posts/snippets/2010-02-07-bash-date_for_filename.md with 65% similarity]
_posts/cli/2010-07-11-bash-resize_multiple_images.md [new file with mode: 0644]
_posts/cli/2011-04-16-ssh_keys.md.md [moved from _posts/cmd/2011-04-16-ssh_keys.md.md with 100% similarity]
_posts/cli/2011-04-27-windows_copy.md [moved from _posts/cmd/2011-04-27-windows_copy.md with 71% similarity]
_posts/cli/2011-05-10-osx_hidden_files.md [moved from _posts/cmd/2011-05-10-osx_hidden_files.md with 82% similarity]
_posts/cli/2011-08-11-terminal_emulator_on_win.md [moved from _posts/cmd/2011-08-11-terminal_emulator_on_win.md with 54% similarity]
_posts/cli/2011-09-19-mostused.md [moved from _posts/cmd/2011-09-19-mostused.md with 71% similarity]
_posts/cli/2011-11-09-osx_command_line_audio.md [moved from _posts/cmd/2011-11-09-osx_command_line_audio.md with 100% similarity]
_posts/cli/2011-11-14-mac_os_print_json.md [moved from _posts/cmd/2011-11-14-osx_print_json.md with 59% similarity]
_posts/cli/2012-01-02-archlinux_install.md [moved from _posts/cmd/2012-01-02-archlinux_install.md with 98% similarity]
_posts/cli/2013-09-16-gen_semitones.md [moved from _posts/snippets/2013-09-16-gen_semitones.md with 91% similarity]
_posts/cli/2014-06-20-gifs_w_ffmpeg_gifsicle.md [moved from _posts/snippets/2014-06-20-gifs_w_ffmpeg_gifsicle.md with 73% similarity]
_posts/cli/2020-12-06-dotfiles.md [new file with mode: 0644]
_posts/cmd/2011-02-02-bash_profile_osx.md [deleted file]
_posts/cmd/2011-03-11-bash_profile_linux.md [deleted file]
_posts/cmd/2020-12-06-dotfiles.md [deleted file]
_posts/projects/2011-05-24-clmpr.md [moved from _posts/code/2011-05-24-clmpr.md with 91% similarity]
_posts/projects/2011-06-28-filebrowser.md [moved from _posts/code/2011-06-28-filebrowser.md with 93% similarity]
_posts/projects/2013-09-18-cinder-td-top.md [moved from _posts/code/2013-09-18-cinder-td-top.md with 96% similarity]
_posts/projects/2013-10-12-processing-anim-wkshp.md [moved from _posts/code/2013-10-12-processing-anim-wkshp.md with 90% similarity]
_posts/projects/2014-04-27-gh-td.md [moved from _posts/code/2014-04-27-gh-td.md with 99% similarity]
_posts/projects/2014-08-03-mesh-mapping.md [moved from _posts/code/2014-08-03-mesh-mapping.md with 100% similarity]
_posts/projects/2016-12-21-organelle-monome.md [moved from _posts/code/2016-12-21-organelle-monome.md with 99% similarity]
_posts/projects/2020-07-21-node-one-time-pw.md [moved from _posts/code/2020-07-21-node-one-time-pw.md with 99% similarity]
_posts/projects/2023-07-06-grayarea-video-archive.md [new file with mode: 0644]
_posts/snippets/2009-06-12-mel-sphere_intersect.md
_posts/snippets/2010-05-15-htaccess-rewrite_multiple_slashes.md [moved from _posts/snippets/2010-05-15-bash-rewrite_multiple_slashes.md with 93% similarity]
_posts/snippets/2010-07-07-maya_render_bat.md
_posts/snippets/2010-07-11-bash-resize_multiple_images.md [deleted file]
_posts/snippets/2013-04-19-htmlwordcount.md
about.md
css/highlight.css [new file with mode: 0644]
css/style.css
js/prettify/lang-apollo.js [deleted file]
js/prettify/lang-css.js [deleted file]
js/prettify/lang-hs.js [deleted file]
js/prettify/lang-lisp.js [deleted file]
js/prettify/lang-lua.js [deleted file]
js/prettify/lang-ml.js [deleted file]
js/prettify/lang-proto.js [deleted file]
js/prettify/lang-sql.js [deleted file]
js/prettify/lang-vb.js [deleted file]
js/prettify/lang-wiki.js [deleted file]
js/prettify/prettify.css [deleted file]
js/prettify/prettify.js [deleted file]
projects/index.html [moved from code/index.html with 81% similarity]
snippets/index.html

index 46808a83c5897cc0486e0b31173b64320bf9abcf..d552ef362062b1eaabd7961efc913e990f5ba750 100644 (file)
@@ -4,6 +4,13 @@ baseurl: ""
 url: "https://quilime.com"
 excerpt_separator: "<!--more-->"
 permalink: /:categories/:title:output_ext
+markdown: kramdown
+kramdown:
+  syntax_highlighter: rouge
+  input: GFM
+highlighter: rouge
+
+
 plugins:
   - jekyll-feed
   - jekyll-paginate
index 93c221863071804844aec9ddc11aa5429f1b9d70..76c2f2f798596f0d243062c460599132d897d6b5 100644 (file)
@@ -2,9 +2,9 @@
 <ul>
   <li><a href="{{site.url}}/">home</a></li>
   <li><br /></li>
-  <li><a href="{{ site.url }}/code">open source</a></li>
+  <li><a href="{{ site.url }}/projects">projects</a></li>
   <li><a href="{{ site.url }}/snippets">snippets</a></li>
-  <li><a href="{{ site.url }}/cli">cli</a></li>
+      <li><a href="{{ site.url }}/cli">cli</a></li>
   <li><br /></li>
   <li><a href="{{ site.url }}/about">about</a></li>    
   <li><a href="{{ site.url }}/feed.xml">rss</a></li>      
index 6f6bf54ebc1fbefd6244e0330f1a6d631a5d384b..2e4dda251d261b435c0a9d2e8fc0728aa0de04ba 100644 (file)
@@ -10,18 +10,23 @@ layout: index
   {{content}}
   </div>
 
-  {% if page.tags.size > 0 %}
-  <h6 style="display:inline";>tags: 
-  {% for tag in page.tags %}
-    {{ tag }}{% if forloop.last == false %}, {% endif %}
-  {% endfor %}
-  </h6>
-  {% endif %}
-
-  <br />
-
-  {% if page.date %}
-  <h6 style="display:inline">posted {{ page.date }} in {{ page.category }}</h6>
-  {% endif %}
+
+  <div class="metadata">
+
+    {% if page.tags.size > 0 %}
+    <h6>tags: 
+    {% for tag in page.tags %}
+      {{ tag }}{% if forloop.last == false %}, {% endif %}
+    {% endfor %}
+    </h6>
+    {% endif %}
+
+    <br />
+
+    {% if page.date %}
+    <h6 style="display:inline">posted {{ page.date }} in {{ page.category }}</h6>
+    {% endif %}
+
+  </div>
 
 </div>
\ No newline at end of file
index 63c986dc77eb8ce8e0b57e31016e200d1d2fa76a..928376b47804205d6e07f38339f1799e5b950b35 100644 (file)
@@ -1,19 +1,14 @@
 <!doctype html>
-<html>
+<html lang="en">
   <head>
     <meta charset="utf-8">
 
-    <!-- <title>{{ page.title }}</title> -->
     <title>{{ site.name }}{% if page.title != 'index' %} &gt; {{ page.title | downcase }}{% endif %}</title>
 
     <link rel="stylesheet" href="/css/style.css" type="text/css">
+    <link rel="stylesheet" href="/css/highlight.css" type="text/css">
     <meta name="viewport" content="width=device-width, initial-scale=1" />
 
-    <!-- prettify -->
-    <script type="text/javascript" src="/js/prettify/prettify.js"></script>
-    <link href="/js/prettify/prettify.css" type="text/css" rel="stylesheet" />
-    <script>window.onload = () => { prettyPrint() }</script>
-
   </head>
   <body>
 
similarity index 97%
rename from _posts/snippets/2009-04-23-bash-imageslice.md
rename to _posts/cli/2009-04-23-bash-imageslice.md
index 49fe7bf385358076a888e77ac3ca65703bd49309..8fe7067e94dc7ee1b1613894cd35c6bdef761b9f 100644 (file)
@@ -3,7 +3,7 @@ title: Image Slice
 date: 2009-04-23
 tags: bash script slice image imagemagick
 lang: bash
-category: snippets
+category: cli
 layout: post
 ---
 
@@ -11,7 +11,7 @@ Shell script that slices a single image into any number of vertical and horizont
 
 
 
-```prettyprint
+```bash
 
 #!/bin/bash
 # @author  gabriel dunne <quilime.com>
similarity index 76%
rename from _posts/snippets/2010-01-11-bash-rename_multiple_files.md
rename to _posts/cli/2010-01-11-bash-rename_multiple_files.md
index dcd6135e4e345114a1dcb3e39a8b42ea6faba5d8..33c4a2bf9e5638d5f284e330d2aab6519de9c518 100644 (file)
@@ -3,8 +3,8 @@ title: Rename Multiple Files via Shell
 tags: bash terminal rename
 date: 2010-01-11
 layout: post
-category: snippets
+category: cli
 ---
-<pre class="prettyprint">
+```shell
 ls | nl -nrz -w2 | while read a b; do mv "$b" filename.$a.png; done;
-</pre>
+```
similarity index 65%
rename from _posts/snippets/2010-02-07-bash-date_for_filename.md
rename to _posts/cli/2010-02-07-bash-date_for_filename.md
index edbfe5af9212903dca0cd3149abde2cc69cb5402..4dc8306948c772aa6fb9007d6d8814922f908dbf 100644 (file)
@@ -3,11 +3,13 @@ title: date for new filename
 lang: bash
 date: 2010-02-07
 layout: post
-category: snippets
+category: cli
 ---
-<pre class="prettyprint lang-bash">#!/bin/bash
+```bash
+#!/bin/bash
 # Shell script to create file named after the current date
 # YYYY-MM-DD format
 
 DATE=$(date +%Y"-"%m"-"%d)
-echo -e "new file" > $DATE</pre>
\ No newline at end of file
+echo -e "new file" > $DATE
+```
\ No newline at end of file
diff --git a/_posts/cli/2010-07-11-bash-resize_multiple_images.md b/_posts/cli/2010-07-11-bash-resize_multiple_images.md
new file mode 100644 (file)
index 0000000..f87d39c
--- /dev/null
@@ -0,0 +1,10 @@
+---
+title: resize multiple images
+date: 2010-07-11
+layout: post
+category: cli
+---
+```bash
+for k in $(ls *.JPG); do convert $k -resize 50% -quality 80 r_$k; done
+```
+
similarity index 71%
rename from _posts/cmd/2011-04-27-windows_copy.md
rename to _posts/cli/2011-04-27-windows_copy.md
index d4627c63a5ef4252d514ddb02c8ca3a7eff499e9..3f3fb5f42fdf7b6be8084a1ad66f72b5779f74d1 100644 (file)
@@ -5,13 +5,11 @@ tags: windows cmd console
 layout: post
 category: cli
 ---
-<pre class="prettyprint">
-copy /b file1+ file2 output
-</pre>
+`copy /b file1+ file2 output`
+
 eg
-<pre class="prettyprint">
-copy /b picture.jpg + archive.rar file.jpg
-</pre>
+
+`copy /b picture.jpg + archive.rar file.jpg`
 
 Open file.jpg with the default application, it will show the picture "picture.jpg".
 Change the extension to "file.rar" or if you try to open "file.jpg" with an archiver you will get the contents of "archive.rar".
similarity index 82%
rename from _posts/cmd/2011-05-10-osx_hidden_files.md
rename to _posts/cli/2011-05-10-osx_hidden_files.md
index 7e19c6b57649849ed39cff754b2a9fd14d957381..fc06ddcecc995d8602a5def1e585e19e1278acfd 100644 (file)
@@ -9,13 +9,15 @@ category: cli
 via Terminal
 
 show hidden files:
-<pre class="prettyprint">
+
+```
 defaults write com.apple.finder AppleShowAllFiles TRUE
 killall Finder
-</pre>
+```
 
 hide hidden files:
-<pre class="prettyprint">
+
+```
 defaults write com.apple.finder AppleShowAllFiles FALSE
 killall Finder
-</pre>
+```
similarity index 54%
rename from _posts/cmd/2011-08-11-terminal_emulator_on_win.md
rename to _posts/cli/2011-08-11-terminal_emulator_on_win.md
index 28683f78825b64d7003b66500cf6e6739de11c94..0dc295b0ebb8c2a8345363fe452987956ecac408 100644 (file)
@@ -3,33 +3,36 @@ title: "Terminal Emulator on Windows via Cygwin"
 date: august 11 2011
 category: cli
 ---
-How to install cygwin on windows:
 
-1. **Install <a href="http://cygwin.com">Cygwin</a> from <a href="http://cygwin.com/setup.exe">setup.exe</a>**
+How to install cygwin on windows circa 2011.
 
-2. **Install the following packages:**
+Install <a href="http://cygwin.com">Cygwin</a> from <a href="http://cygwin.com/setup.exe">setup.exe</a>
 
-    - xorg-server (required, the Cygwin X Server)
-    - xinit (required, scripts for starting the X server: xinit, startx, startwin (and a shortcut on the Start Menu to run it), startxdmcp.bat )
-    - xorg-docs (optional, man pages)
-    - X-start-menu-icons (optional, adds shortcuts to X Clients and Server to the Start menu)
-    - mintty (windows-feel terminal)
+### Install the following packages
 
-3. **Optional Packages**
-    - openssh
-    - git, svn
-    - wget, curl
-    - rsync
-    - vim, emacs
-    - any additional fonts
+- xorg-server (required, the Cygwin X Server)
+- xinit (required, scripts for starting the X server: xinit, startx, startwin (and a shortcut on the Start Menu to run it), startxdmcp.bat )
+- xorg-docs (optional, man pages)
+- X-start-menu-icons (optional, adds shortcuts to X Clients and Server to the Start menu)
+- mintty (windows-feel terminal)
+
+### Optional Packages
+
+- openssh
+- git, svn
+- wget, curl
+- rsync
+- vim, emacs
+- any additional fonts
 
 
 <!--more-->
 
 
-3. **~/.XDefaults**
+### ~/.XDefaults
+
 dark theme:
-<pre class="prettyprint">
+```
 ! terminal colors ---------
 ! tangoesque scheme
 *background: #111111
@@ -58,13 +61,13 @@ dark theme:
 ! LightGrey + White
 *color7:  #cccccc
 *color15: #ffffff
-</pre>
+```
 Some more themes on the <a href="https://bbs.archlinux.org/viewtopic.php?pid=653473">Arch forums</a>.
 <br />
 
 
+### ~/.bashrc
 
-4. **~/.bashrc**
 To enable color `ls` and human readable size format, add:
 <pre class="prettyprint">
 alias ls='ls -h --color=tty'
@@ -72,7 +75,8 @@ alias ls='ls -h --color=tty'
 By default, the .bashrc in CygwinX has many options you can uncomment.
 <br />
 
-5. **~/.emacs**
+### ~/.emacs
+
 Disable emacs temp (~) file pooping
 <pre class="prettyprint">
 (setq make-backup-files nil)
@@ -81,10 +85,12 @@ Disable emacs temp (~) file pooping
 
 
 
-Result:
-<img src="http://media.quilime.com/files/img/cygwin.PNG" />
+Result
+
+<img src="http://media.quilime.com/files-bak/img/cygwin.PNG" />
+
 
+Other emulators for Windows
 
-Other emulators for Windows:
-- <a href="http://software.jessies.org/terminator/">Terminator/</a>
+- <a href="http://software.jessies.org/terminator/">Terminator</a>
 
similarity index 71%
rename from _posts/cmd/2011-09-19-mostused.md
rename to _posts/cli/2011-09-19-mostused.md
index 910298f11859fd087240e09c31944e7731895e0f..7b5db940c5e129536376948c3f44b06c54c0c16e 100644 (file)
@@ -4,13 +4,15 @@ date: "Mon Sep 19 19:39:51 PDT 2011"
 layout: post
 category: cli
 ---
-`history | awk {'print $2'} | sort | uniq -c | sort -k1 -rn | head`
+```bash
+history | awk {'print $2'} | sort | uniq -c | sort -k1 -rn | head
+```
 
 <!--more-->
 
 example
-```prettyprint
-// brand new netbook
+```bash
+# brand new netbook
   24 ls
   14 cd
   12 defaults
@@ -23,8 +25,8 @@ example
    2 unrar
 ```
 
-```prettyprint
-// quilime.com
+```bash
+# quilime.com
  173 git
  140 ls
   84 cd
similarity index 59%
rename from _posts/cmd/2011-11-14-osx_print_json.md
rename to _posts/cli/2011-11-14-mac_os_print_json.md
index 8901c9839a9becfee13f2120eb6f0c9118ee65e8..a9f2b614e9c3a493d562165831bbe000174a8896 100644 (file)
@@ -1,12 +1,12 @@
 ---
-title: print formatted JSON, XML from osx command line
+title: print formatted JSON, XML from MacOS command line
 date: "mon, nov 14 2011"
 tags: bash shell python json xml osx
 layout: post
 category: cli
 ---
 
-Working with various interfaces that output json or xml results in lots of situations where you have a single-line, unformatted output. Here's a quick way to format json, xml from the CLI.
+Working with various interfaces that output json or xml results in lots of situations where you have a single-line, unformatted output. Here's a quick way to format json, xml from the CLI using Python or [jq](https://github.com/jqlang/jq).
 
 <!--more-->
 
@@ -14,15 +14,19 @@ via the command line:
 
 format json
 
-`cat unformatted.json | python -m json.tool`
+Python: `cat unformatted.json | python -m json.tool`
 
-format json from clipboard
+jq: `cat unformatted.json | jq .`
 
-`pbpaste | python -m json.tool`
+format json from clipboard (MacOS)
 
-format xml from clipboard
+Python: `pbpaste | python -m json.tool`
 
-`pbpaste | xmllint --format -`
+jq: `pbpaste | jq.`
+
+format xml
+
+from clipboard: `pbpaste | xmllint --format -`
 
 `xmllint` is part of libxml2 and installed by default on OSX. Be aware that xmllint cleans up XML as well as formatting it, ocassionally modifying the output.
 
similarity index 98%
rename from _posts/cmd/2012-01-02-archlinux_install.md
rename to _posts/cli/2012-01-02-archlinux_install.md
index f0d98ee3405561e30c1807a23ff94ff52abf21ac..9d1d33a2ebabdb3766b698aeba71f0bb3d2860da 100644 (file)
@@ -6,7 +6,7 @@ layout: post
 category: cli
 ---
 
-Documentation of the process of installing [archlinux](http://www.archlinux.org/) and Windows 7 in a dual-boot configuration.
+Documentation of the process of installing [archlinux](http://www.archlinux.org/) and Windows 7 in a dual-boot configuration circa 2012.
 
 <!--more-->
 
similarity index 91%
rename from _posts/snippets/2013-09-16-gen_semitones.md
rename to _posts/cli/2013-09-16-gen_semitones.md
index 43b1687116b1bb3f9e692979a627bf048e491957..7b0ffcf042e1500c160fa8ddd3cca5b7224f2153 100644 (file)
@@ -1,10 +1,11 @@
 ---
 title: Generate Semitones
 date: 2013-09-16
-category: snippets
+category: cli
+tags: perl
 ---
 
-```prettyprint
+```perl
 #!/bin/perl
 my $m = 2 ** (1/12);
 foreach my $s (0..12) {
similarity index 73%
rename from _posts/snippets/2014-06-20-gifs_w_ffmpeg_gifsicle.md
rename to _posts/cli/2014-06-20-gifs_w_ffmpeg_gifsicle.md
index e2217c00932c3a42a557d820d7a993ee4a5ee3e9..6191fea37f7d3947374496d39433aebeb7c29773 100644 (file)
@@ -1,8 +1,8 @@
 ---
 date: 2014-06-20
 title: gif from mov
-category: snippets
+category: cli
 ---
-<pre class="prettyprint" >
+```bash
 ffmpeg -i in.mov -s 640x360 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=6 > out.gif
-</pre>
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/_posts/cli/2020-12-06-dotfiles.md b/_posts/cli/2020-12-06-dotfiles.md
new file mode 100644 (file)
index 0000000..3a8d812
--- /dev/null
@@ -0,0 +1,11 @@
+---
+title: dotfiles
+date: 2020-12-06
+categories: cli
+---
+
+Dotfiles setup for multi-os setups ('nix, Mac OS).
+
+Adapted for ZSH Shell from various distros (Ubuntu, Arch/Manjaro, etc)
+
+[Source on Github](https://github.com/quilime/cfg)
diff --git a/_posts/cmd/2011-02-02-bash_profile_osx.md b/_posts/cmd/2011-02-02-bash_profile_osx.md
deleted file mode 100644 (file)
index 32cbe04..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
----
-date: 2011-02-02
-title: osx bash profile
-layout: post
-category: cli
----
-
-<pre class="prettyprint" >
-# color ls
-export CLICOLOR=1
-export TERM=xterm-color
-export LSCOLORS=GxFxCxDxBxegedabagacad
-
-
-function parse_git_branch {
-  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
-  echo "("${ref#refs/heads/}")"
-}
-
-#Black       0;30     Dark Gray     1;30
-#Blue        0;34     Light Blue    1;34
-#Green       0;32     Light Green   1;32
-#Cyan        0;36     Light Cyan    1;36
-#Red         0;31     Light Red     1;31
-#Purple      0;35     Light Purple  1;35
-#Brown       0;33     Yellow        1;33
-#Light Gray  0;37     White         1;37
-
-# colors
-RED="\[\033[31m\]"
-GREEN="\[\033[32m\]"
-YELLOW="\[\033[33m\]"
-BLUE="\[\033[0;34m\]"
-BLUE_B="\[\033[1;34m\]"
-WHITE_B="\[\033[1;37m\]"
-NO_COLOR="\[\033[0m\]"
-
-# prompt with git repo
-export PS1="$WHITE_B\u@\h $BLUE_B\w $RED\$(parse_git_branch) $NO_COLOR \n$BLUE_B\$ $NO_COLOR"
-export PS2="$BLUE_B> $NO_COLOR";
-
-# aliases
-alias ff="find . -type f -name "
-</pre>
\ No newline at end of file
diff --git a/_posts/cmd/2011-03-11-bash_profile_linux.md b/_posts/cmd/2011-03-11-bash_profile_linux.md
deleted file mode 100644 (file)
index 3cd9a12..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: linux bash profile
-date: march 11 2011
-layout: post
-category: cli
----
-<pre class="prettyprint">
-alias ls='ls --color'
-export CLICOLOR=1
-export LSCOLORS=gxFxCxDxBxgggdabagacad
-
-export EDITOR='emacs'
-</pre>
diff --git a/_posts/cmd/2020-12-06-dotfiles.md b/_posts/cmd/2020-12-06-dotfiles.md
deleted file mode 100644 (file)
index 7fb432f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: dotfiles
-date: 2020-12-06
-categories: cli
----
-
-Dotfiles setup for multi-os setups ('nix, Mac OS)
-
-[Source on Github](https://github.com/quilime/cfg)
similarity index 91%
rename from _posts/code/2011-05-24-clmpr.md
rename to _posts/projects/2011-05-24-clmpr.md
index 6047da25060aacbc4770e89fb367b56bc1de83c1..6dc431fdc7e8a6f847cb3a60c31a3d6ab6013dcc 100644 (file)
@@ -2,7 +2,7 @@
 title: clmpr\r
 date: may 24 2011\r
 tags: code web\r
-category: code\r
+category: projects\r
 layout: post\r
 ---\r
 \r
similarity index 93%
rename from _posts/code/2011-06-28-filebrowser.md
rename to _posts/projects/2011-06-28-filebrowser.md
index c4df4690ee341ad6798c605d8fac858bc849ae45..a869aab598f5d7a9f74cc7e34f6587d495e22743 100644 (file)
@@ -2,7 +2,7 @@
 title: PHP File Browser Scripts
 date: 2011-06-28
 layout: post
-category: code
+category: projects
 ---
 
 These scripts offer some handy features for browsing files/folders on a webserver.
similarity index 96%
rename from _posts/code/2013-09-18-cinder-td-top.md
rename to _posts/projects/2013-09-18-cinder-td-top.md
index 9eee155ee6a60afbcbe16ae68c89970595aecbdd..119acaa07bd41ea12b16bc5b490e66a330e7ac29 100644 (file)
@@ -1,7 +1,7 @@
 ---
 title: C++/Cinder TouchDesigner TOP
 date: 2013-09-18
-category: code
+category: projects
 ---
 <iframe src="//player.vimeo.com/video/75031641?byline=0&amp;color=ffffff" width="600" height="337" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
 
similarity index 90%
rename from _posts/code/2013-10-12-processing-anim-wkshp.md
rename to _posts/projects/2013-10-12-processing-anim-wkshp.md
index 9785222ea98512e43dcd054615d94a7b44d9dbe4..f2f587f8a6de12b63bef09132225e722a204026e 100644 (file)
@@ -2,7 +2,7 @@
 title: Animation w/Processing Workshop
 date: 2013-10-12
 tags: processing code workshop
-category: code
+category: projects
 ---
 
 <a href="https://github.com/quilime/processing-animation-workshop">source on github</a>
similarity index 99%
rename from _posts/code/2014-04-27-gh-td.md
rename to _posts/projects/2014-04-27-gh-td.md
index c44132fcb4cf51f7b1b5d3ecfe7b95708616e888..23cc942c52dffcd673bc127d642ea1703e63086f 100644 (file)
@@ -1,7 +1,7 @@
 ---
 title: Grasshopper <-> TouchDesigner Geometry Bridge
 date: 2014-04-27
-category: code
+category: projects
 ---
 
 ![](https://raw.githubusercontent.com/quilime/gh-td/master/screenshots/td_sender.JPG)
similarity index 99%
rename from _posts/code/2016-12-21-organelle-monome.md
rename to _posts/projects/2016-12-21-organelle-monome.md
index f6b472da68272f6a365c64ae02f9533ec2202cce..4674ea731f4cae5e78e4ce5e51eaff291f937dea 100644 (file)
@@ -1,7 +1,7 @@
 ---
 title: Organelle + Monome
 date: 2014-04-27
-category: code
+category: projects
 ---
 
 Using Critter + Guitari Organelle as a host for a Monome 128. I built a patch that uses the Organelle's keys to program the arpeggiator tones, and the Monome defines the steps. Includes OSC Installer and all patches needed to build upon this foundation for other patches.
similarity index 99%
rename from _posts/code/2020-07-21-node-one-time-pw.md
rename to _posts/projects/2020-07-21-node-one-time-pw.md
index 846e6f301e55c6e6c67e91146aff333a1240c8a5..7cbb3cde8c091ed92e017d35813af8d37564fbb2 100644 (file)
@@ -1,7 +1,7 @@
 ---
 title: NodeJS One-Time Password Auth
 date: 2014-04-27
-category: code
+category: projects
 ---
 
 source on [github](https://github.com/quilime/node-one-time-password-auth)
diff --git a/_posts/projects/2023-07-06-grayarea-video-archive.md b/_posts/projects/2023-07-06-grayarea-video-archive.md
new file mode 100644 (file)
index 0000000..cac2e4a
--- /dev/null
@@ -0,0 +1,213 @@
+---
+title: Gray Area Festival Archive
+date: 2023-07-06
+category: projects
+tags: archive video javascript
+---
+
+Live at: [https://archive.grayareafestival.io](https://archive.grayareafestival.io)
+
+A filterable archive of videos from the [Gray Area Festival](https://grayareafestival.io), consisting of in-person and virtual conference talks, presentations, and group panels. The videos in the archive are currently hosted on the Gray Area [YouTube Channel](https://www.youtube.com/@grayareaorg), which is currently the source of video metadata.
+
+The archive is built entirely client-side with flat-file JSON files, and includes english captions for each video, which improves accessibility and encourages filtering, searching, NLP analysis, and/or experimentation with LLMs. Contributions are welcome. These `.vtt` formatted caption files are stored alongside the video metadata JSON in the [data/videos](data/videos/) folder.
+
+Preliminary work has been carried out to allow users to filter videos by various curated topics ordered by the [frequency of key-words](data/wordcount.txt), and [word-count per video](data/wordcount_video_stats.txt) generated from the video captions. View these files in the [data/topics](data/topics/).
+
+This project is open to submissions and suggestions around engaging with this growing collection of content. You are welcome to make a [pull request](https://github.com/GrayAreaorg/festival-video-archive/pulls) or contribute to the [issues](https://github.com/GrayAreaorg/festival-video-archive/issues) for discussion.
+
+
+<!--more-->
+
+
+## LICENSE
+
+This work and all content therin is licensed under a [CC Attribution-NonCommercial-NoDerivatives 4.0 International License](http://creativecommons.org/licenses/by-nc-nd/4.0/)
+
+
+## Dev Setup
+
+Built Using
+
+- [Node](https://nodejs.org/) v19.8.1
+- [AlpineJS](https://alpinejs.dev/) v3.12.0
+- [TailwindCSS](https://tailwindcss.com/) v3.3.2
+- [yt-dlp](https://github.com/yt-dlp/yt-dlp) v2023.02.17
+- [jq](https://stedolan.github.io/jq/) v1.6
+
+Installation
+
+```bash
+npm install -D tailwindcss
+npx tailwindcss init
+```
+
+CSS Build Scripts
+
+- `npm run css-watch` to watch for change and output css to `./dist/output.css`.
+- `npm run css-build` to output minified css to `./dist/output.css` for production.
+
+## Scripts
+
+## Sync all data
+
+Download all video data, vtt's, topic lists, and compile json database in one command.
+
+`./bin/_sync.sh`
+
+## Generate Topic Lists
+
+`./bin/search-caption-string.sh`
+
+This script searches for specified query patterns in .vtt files within a source directory, counts the occurrences of each file, and saves the sorted results to an output file.
+
+Example Use:
+
+Find and collate vtt's related to the topic of "software": `./bin/search-caption-string.sh data/videos "software" "programming" "code" "algorhythm" "open source"`
+
+Example Output:
+
+```
+  97 data/videos/2015/History of the Future, Art & Technology from 1965 - Yesterday | Casey Reas | The Gray Area Festival [mHox98NFU3o].en.vtt
+  72 data/videos/2020/Amelia Winger-Bearskin | Gray Area Festival 2020 [68gwy1W7Duo].en.vtt
+  48 data/videos/2016/Situated Systems Panel | Autodesk | The 2016 Gray Area Festival [jTDMOl7MvrU].en.vtt
+  47 data/videos/2015/The School of Poetic Computation | Zach Lieberman | The Gray Area Festival 2015 [0F8EZU6B-jE].en.vtt
+  43 data/videos/2017/Lauren McCarthy | the 2017 Gray Area Festival [l1qeNMXccvA].en.vtt
+  42 data/videos/2020/Ruha Benjamin | Gray Area Festival 2020 Keynote [GISl_8-fbuA].en.vtt
+  39 data/videos/2019/Jaron Lanier | Gray Area Festival 2019 Keynote [lsNF4KfmwkY].en.vtt
+  ...
+```
+
+Save output to file via `cat`:
+
+Find and collate vtt's related to the topic of "software": `./bin/search-caption-string.sh data/videos  "software" "programming" "code" "algorhythm" "open source" > data/topics/software.txt`
+
+### Generate All Topic Lists
+
+`./bin/gen-all-topics.sh`
+
+### Topic List Query Arrays
+
+Keywords used to generate the curated topics. Any video with captions containing these key words will be sorted by descending word frequency.
+
+- **AI**: artificial intelligence, ai
+- **Art**: art, fine art, gallery
+- **Biology**: biology, cell, genetics, evolution, physiology, biochemistry, adaptation, reproduction, biodiversity, microbio, molecular
+- **Decolonialism**: decolonialism, neocolonialism, colonial, indigenous, imperialism, sovereignty
+- **Design**: design, graphic design, web design, product design
+- **Ecology**: ecology, earth, climate change, ecosystem, biodiversity, conservation, environment
+- **History**: history, historical, past, era, ancient, civilization, culture, heritage
+- **Indigenous Wisdom**: indigenous, wisdom, elder, past, native, heritage, spiritual
+- **Machine Learning**: machine learning, ml, neural net
+- **Metaverse**: ar, vr, xr, augmented reality, mixed reality, virtual reality, immersive, virtual world
+- **Music**: music, song, concert, composition, melody
+- **Philosophy**: philosophy, metaphysics, ethics, aesthetic, phenomenology
+- **Software**: software, programming, code, algorhythm, open source
+- **Systems**: systems, chaos, complexity, modeling, simulation, pattern
+
+## TopicList.txt to JSON
+
+`./bin/topic_lists_to_json.js`
+
+Converts a topic list `.txt` file generated from [search-caption-string.sh](./bin/search-caption-string.sh) to JSON format, readable by the front-end.
+
+Usage: `node bin/topic_lists_to_json.js file.txt > file.json`
+
+Convert entire folder:
+```bash
+#!/bin/bash
+for file in $(find . -type f -name "*.txt"); do
+  json_file="${file%.txt}.json"
+  node bin/topic_lists_to_json.js "$file" > "$json_file"
+done
+```
+
+## Generate Wordcount from .vtt Captions
+
+`./bin/wordcount.js`
+
+Counts the number of words in all the video caption files (`*.vtt`) in a given directory.
+It sorts them by frequency and associates them to the corresponding video via video id.
+
+Usage: `node ./bin/wordcount.js srcDirectory outputFile.txt [--include-video-stats]`
+
+`--include-video-stats` (optional) includes the wordcount per video id.
+
+
+## Compile JSON Archive Database
+
+`./bin/compile-db.js`
+
+Usage `node ./bin/compile-db.js source dest`
+
+- `source` A JSON file or folder of JSON files of YouTube metadata scraped from YouTube via ytdlp
+- `dest` A destination folder to write the JSON single-file database. Will prompt to confirm overwrite.
+
+
+## Get YouTube Autogenerated Captions
+
+`./bin/get-youtube-subs.sh`
+
+Download auto-generated captions in English for given YouTube ID
+
+Usage `./bin/get-youtube-subs.sh youtube_id [dest]`
+
+- `youtube_id` A YouTubeID
+- `dest` (optional) .vtt output destination. Default output will be alongside the source.
+
+
+## Get YouTube Subs from JSON Data
+
+`./bin/get-all-subs.sh`
+
+Download YouTube auto-generated subtitles in English (en) .vtt subtitle format using information existing YouTube JSON metadata (prerequiste). Will create .vtt files alongside source JSON
+
+Usage `./bin/get-all-subs.sh sourceDir`
+
+- `sourceDir` A source folder of YouTube JSON metadata files
+
+
+## Get YouTube Metadata
+
+`./bin/get-youtube-metadata.sh`
+
+Download YouTube metadata in JSON format from single YouTube video, playlist, or playlists.
+
+Usage `./bin/get-youtube-metadata.sh destination`
+
+- `destination` A destination folder to save the JSON data
+
+Example
+
+```
+# get all 2021 videos
+./bin/get-youtube-metadata.sh https://www.youtube.com/playlist?list=PLm8zJ0HKEJIbQgPDRsUHiawVtahvShN8X ./data/videos/2021/
+```
+
+### Youtube Playlists
+
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIYq6FBpOBHfHchjI0zTYINO # 2022
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIbQgPDRsUHiawVtahvShN8X # 2021
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIaarwTpOzGg4DXXVLWy2GVU # 2020
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIZXGbpAdjpIP9cuuJYfOW-F # 2019
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIaNfzV_-f0aYvrpAZAzjhIl # 2018
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIYAk9rAz1CQmE9Pzn8G_hrq # 2017
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIZtQ0PqjW341QIWrqPPkQXi # 2016
+- https://www.youtube.com/playlist?list=PLm8zJ0HKEJIZz_vKS1amJguyAEIiTtxjw # 2015
+
+
+## Optional Metadata: Custom Keys via YouTube Description Field
+
+Used for more fidelity in Video Archive. Extra object keys can added to the YouTube description field with the following criteria:
+
+- Metadata delimiter (6 equals signs) "======"
+- `key: value` format
+- Append raw metadata to bottom of YouTube Description field
+- When parsed in the archive JSON, prepended with `meta_`, for example, `festival_year: 2015` becomes `{ "meta_festival_year" : "2015" }` in the archive json
+
+```
+======
+featured: <featured person(s), or group>
+featured_url: https://www.ruhabenjamin.com
+festival_year: 2015
+... additional metadata as needed ...
+```
index 9890ae751198b1b76b233e86609d1e648507c18d..5211b91f9460e867c4f67a6210432dee63ef09f6 100644 (file)
@@ -16,7 +16,8 @@ Function to return location of intersect with poly mesh and spherical object mov
 <h2>
 mel source
 </h2>
-```prettyprint
+
+```bash
 global proc intersectSphereY()
 {
        print(". . . . . go go go\n");
similarity index 93%
rename from _posts/snippets/2010-05-15-bash-rewrite_multiple_slashes.md
rename to _posts/snippets/2010-05-15-htaccess-rewrite_multiple_slashes.md
index a3ce4ca6dd31b3515e1e02d96dd46e8416377376..793e1906fde88ab25aaca1432dcac6c3f9a85bbe 100644 (file)
@@ -6,7 +6,7 @@ layout: post
 category: snippets
 ---
 
-<pre>
+```apache
 RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
 RewriteRule . %1/%2 [R=301,L]
-</pre>
\ No newline at end of file
+```
\ No newline at end of file
index 41348ea477c25ac32addbea3603edbd96fa03c87..bff32385dbe7a487b2e8ea4df28879ae9917b009 100644 (file)
@@ -8,203 +8,204 @@ category: snippets
 ---
 *.bat file structure
 
-<pre class="prettyprint">
+```powershell
 REM // .bat comment syntax
 C:\Progra~1\Autodesk\Maya2010\bin\render -s 1 -e 30 -im output_image myscene.ma
 C:\Progra~1\Autodesk\Maya2010\bin\render -s 1 -e 30 -im output_image2 anotherscene.ma
-</pre>
+```
 
 The path to render.exe must be the 8.3 character DOS version.
 To execute the file, save as a *.bat and double click it in Explorer.
 
 <!--more-->
 
-<pre class="prettyprint">
+```shell
 // Render Flags
-usage: Render &lt;options&gt; &lt;filename&gt;
-where &lt;filename&gt; is a Maya ASCII or a Maya Binary file.
+usage: Render <options> <filename>
+where <filename> is a Maya ASCII or a Maya Binary file.
 
 
-startFrame            -s   &lt;float&gt;     starting frame for an animation sequence
+startFrame            -s   <float>     starting frame for an animation sequence
 
-endFrame              -e   &lt;float&gt;     end frame for an animation sequence
+endFrame              -e   <float>     end frame for an animation sequence
 
-byFrame               -b   &lt;float&gt;     by frame (or step)
+byFrame               -b   <float>     by frame (or step)
                                        for an animation sequence
 
-startExtension        -se  &lt;int&gt;       starting number for the output image
+startExtension        -se  <int>       starting number for the output image
                                        frame file name extensions
 
-byExtension           -be  &lt;int&gt;       by extension (or step) for the output
+byExtension           -be  <int>       by extension (or step) for the output
                                        image frame file name extension
 
-extensionPadding      -pad &lt;int&gt;       number of digits in the output image
+extensionPadding      -pad <int>       number of digits in the output image
                                        frame file name extension
 
-project               -proj &lt;dir&gt;      project directory to use
+project               -proj <dir>      project directory to use
 
-renderDirectory       -rd  &lt;path&gt;      directory in which to store image file
+renderDirectory       -rd  <path>      directory in which to store image file
 
-image                 -im  &lt;filename&gt;  image file output name (identical to -p)
+image                 -im  <filename>  image file output name (identical to -p)
 
-pix                   -p   &lt;filename&gt;  image file output name (identical to -im)
+pix                   -p   <filename>  image file output name (identical to -im)
 
-mayaExtension         -me  &lt;boolean&gt;   append maya file name to image name
+mayaExtension         -me  <boolean>   append maya file name to image name
                                        if true
 
-mayaFormat            -mf  &lt;boolean&gt;   append image file format to image name
+mayaFormat            -mf  <boolean>   append image file format to image name
                                        if true
 
-cameraOverride        -cam &lt;name&gt;      all subsequent -im -p -ar -sa flags
-                                       apply only to &lt;camera_name&gt;
-                                       (specifying '-cam &lt;camera_name&gt;' enables
+cameraOverride        -cam <name>      all subsequent -im -p -ar -sa flags
+                                       apply only to <camera_name>
+                                       (specifying '-cam <camera_name>' enables
                                        rendering for that camera). If '-cam
-                                       &lt;camera_name&gt;' is on the command line,
+                                       <camera_name>' is on the command line,
                                        then only the camera(s) specified on the
                                        command line will be rendered.
 
-gamma                 -g   &lt;float&gt;     gamma value
+gamma                 -g   <float>     gamma value
 
-ignoreFilmGate        -ifg &lt;boolean&gt;   use the film gate for rendering if false
+ignoreFilmGate        -ifg <boolean>   use the film gate for rendering if false
 
-imageHeight           -ih  &lt;int&gt;       height of image in pixels
+imageHeight           -ih  <int>       height of image in pixels
 
-imageWidth            -iw  &lt;int&gt;       width of image in pixels
+imageWidth            -iw  <int>       width of image in pixels
 
-deviceAspectRatio     -ard &lt;float&gt;     device aspect ratio for the rendered image
+deviceAspectRatio     -ard <float>     device aspect ratio for the rendered image
 
-aspectRatio           -ar  &lt;float&gt;     aspect ratio for the film aperture
+aspectRatio           -ar  <float>     aspect ratio for the film aperture
 
-maximumMemory         -mm  &lt;int&gt;       renderer maximum memory use
+maximumMemory         -mm  <int>       renderer maximum memory use
                                        (in Megabytes)
 
-motionBlur            -mb  &lt;boolean&gt;   motion blur on/off
+motionBlur            -mb  <boolean>   motion blur on/off
 
-motionBlurByFrame     -mbf &lt;float&gt;     motion blur by frame
+motionBlurByFrame     -mbf <float>     motion blur by frame
 
-shutterAngle          -sa  &lt;float&gt;     shutter angle for motion blur (1-360)
+shutterAngle          -sa  <float>     shutter angle for motion blur (1-360)
 
-motionBlur2D          -mb2d &lt;boolean&gt;  motion blur 2D on/off
+motionBlur2D          -mb2d <boolean>  motion blur 2D on/off
 
-blurLength            -bll &lt;float&gt;     2D motion blur blur length
+blurLength            -bll <float>     2D motion blur blur length
 
-blurSharpness         -bls &lt;float&gt;     2D motion blur blur sharpness
+blurSharpness         -bls <float>     2D motion blur blur sharpness
 
-smoothValue           -smv &lt;int&gt;       2D motoin blur smooth value
+smoothValue           -smv <int>       2D motoin blur smooth value
 
-smoothColor           -smc &lt;boolean&gt;   2D motion blur smooth color on/off
+smoothColor           -smc <boolean>   2D motion blur smooth color on/off
 
-keepMotionVector      -kmv &lt;boolean&gt;   keep motion vector for 2D motion blur on/off
+keepMotionVector      -kmv <boolean>   keep motion vector for 2D motion blur on/off
 
-useFileCache          -uf  &lt;boolean&gt;   use the tessellation file cache
+useFileCache          -uf  <boolean>   use the tessellation file cache
 
-optimizeInstances     -oi  &lt;boolean&gt;   dynamically detects similarly
+optimizeInstances     -oi  <boolean>   dynamically detects similarly
                                        tessellated surfaces
 
-reuseTessellations    -rut &lt;boolean&gt;   reuse render geometry to
+reuseTessellations    -rut <boolean>   reuse render geometry to
                                        generate depth maps
 
-useDisplacementBbox   -udb &lt;boolean&gt;   use the displacement bounding box scale to
+useDisplacementBbox   -udb <boolean>   use the displacement bounding box scale to
                                        optimize displacement-map performance
 
-enableDepthMaps       -edm &lt;boolean&gt;   enable depth map usage
+enableDepthMaps       -edm <boolean>   enable depth map usage
 
-enableRayTrace        -ert &lt;boolean&gt;   enable ray tracing
+enableRayTrace        -ert <boolean>   enable ray tracing
 
-reflections           -rfl &lt;int&gt;       maximum ray-tracing reflection level
+reflections           -rfl <int>       maximum ray-tracing reflection level
 
-refractions           -rfr &lt;int&gt;       maximum ray-tracing refraction level
+refractions           -rfr <int>       maximum ray-tracing refraction level
 
-renderLayers          -rl &lt;boolean|name&gt;  render each layer separately
+renderLayers          -rl <boolean|name>  render each layer separately
 
-renderPasses          -rp &lt;boolean|name&gt;  render passes separately
+renderPasses          -rp <boolean|name>  render passes separately
 
-renderSubdirs         -rs &lt;boolean&gt;    render layer output placed in subdirectories
+renderSubdirs         -rs <boolean>    render layer output placed in subdirectories
 
-shadowLevel           -sl  &lt;int&gt;       maximum ray-tracing shadow ray depth
+shadowLevel           -sl  <int>       maximum ray-tracing shadow ray depth
 
-edgeAntiAliasing      -eaa &lt;quality&gt;   The anti-aliasing quality of EAS
+edgeAntiAliasing      -eaa <quality>   The anti-aliasing quality of EAS
                                        (Abuffer). One of highest high medium low
 
-useFilter             -ufil &lt;boolean&gt;  if true, use the multi-pixel filtering
+useFilter             -ufil <boolean>  if true, use the multi-pixel filtering
                                        otherwise use single pixel filtering.
 
-pixelFilterType       -pft  &lt;filter&gt;   when useFilter is true, identifies one of the
+pixelFilterType       -pft  <filter>   when useFilter is true, identifies one of the
                                        following filters: box, triangle
                                        gaussian, quadraticbspline, plugin
 
-shadingSamples        -ss  &lt;int&gt;       global number of shading samples
+shadingSamples        -ss  <int>       global number of shading samples
                                        per surface in a pixel
 
-maxShadingSamples     -mss &lt;int&gt;       maximum number of adaptive shading
+maxShadingSamples     -mss <int>       maximum number of adaptive shading
                                        samples per surface in a pixel
 
-visibilitySamples     -mvs &lt;int&gt;       number of motion blur visibility samples
+visibilitySamples     -mvs <int>       number of motion blur visibility samples
 
-maxVisibilitySamples  -mvm &lt;int&gt;       maximum number of motion blur
+maxVisibilitySamples  -mvm <int>       maximum number of motion blur
                                        visibility samples
 
-volumeSamples         -vs  &lt;int&gt;       global number of volume shading samples
+volumeSamples         -vs  <int>       global number of volume shading samples
 
-particleSamples       -pss &lt;int&gt;       number of particle visibility samples
+particleSamples       -pss <int>       number of particle visibility samples
 
-redThreshold          -rct &lt;float&gt;     red channel contrast threshold
+redThreshold          -rct <float>     red channel contrast threshold
 
-greenThreshold        -gct &lt;float&gt;     green channel contrast threshold
+greenThreshold        -gct <float>     green channel contrast threshold
 
-blueThreshold         -bct &lt;float&gt;     blue channel contrast threshold
+blueThreshold         -bct <float>     blue channel contrast threshold
 
-coverageThreshold     -cct &lt;float&gt;     pixel coverage contrast threshold
+coverageThreshold     -cct <float>     pixel coverage contrast threshold
                                        (default is 1.0/8.0)
 
-outputFormat          -of  &lt;format&gt;    output image file format. One of: si soft
+outputFormat          -of  <format>    output image file format. One of: si soft
                                        softimage, gif, rla wave wavefront, tiff
                                        tif, tiff16 tif16, sgi rgb, sgi16 rgb16
                                        alias als pix, iff tdi explore maya, jpeg
                                        jpg, eps, maya16 iff16, cineon cin fido,
                                        qtl quantel, tga targa, bmp
 
-shadowPass            -sp &lt;boolean&gt;    generate shadow depth maps only
+shadowPass            -sp <boolean>    generate shadow depth maps only
 
 abortOnMissingTexture -amt             abort renderer when encountered missing texture
 
 dontReplaceRendering  -rep             do not replace the rendered image if it already exists
 
-verbose               -verbose &lt;boolean&gt; perform the render verbosely if on
+verbose               -verbose <boolean> perform the render verbosely if on
 
 iprFile               -ipr             create an IPR file
 
-xResolution           -x   &lt;int&gt;       set X resolution of the final image
+xResolution           -x   <int>       set X resolution of the final image
 
-yResolution           -y   &lt;int&gt;       set Y resolution of the final image
+yResolution           -y   <int>       set Y resolution of the final image
 
-xLeft                 -xl  &lt;int&gt;       set X sub-region left pixel boundary
+xLeft                 -xl  <int>       set X sub-region left pixel boundary
                                        of the final image
 
-xRight                -xr  &lt;int&gt;       set X sub-region right pixel boundary
+xRight                -xr  <int>       set X sub-region right pixel boundary
                                        of the final image
 
-yLow                  -yl  &lt;int&gt;       set Y sub-region low pixel boundary
+yLow                  -yl  <int>       set Y sub-region low pixel boundary
                                        of the final image
 
-yHigh                 -yh  &lt;int&gt;       set Y sub-region high pixel boundary
+yHigh                 -yh  <int>       set Y sub-region high pixel boundary
                                        of the final image
 
-displayLayer          -l  &lt;name&gt;       one or more displayLayer names to render
+displayLayer          -l  <name>       one or more displayLayer names to render
 
-numberOfProcessors    -n  &lt;int&gt;        number of processors to use. 0 indicates
+numberOfProcessors    -n  <int>        number of processors to use. 0 indicates
                                        use all available.
 
-tileWidth             -tw &lt;int&gt;        force the width of the tiles.  Valid valu
+tileWidth             -tw <int>        force the width of the tiles.  Valid valu
                                        are between 16 and 256.
 
-tileHeight            -th &lt;int&gt;        force the height of the tiles.  Valid values
+tileHeight            -th <int>        force the height of the tiles.  Valid values
                                        are between 16 and 256.
 
                       -cont            allow renderer to continue when it hits errors
 
                       -keepPreImage    keep the renderings prior to post-process around
-</pre>
+```
+
 any boolean works: yes, true, or 1, as TRUE,and off, no, false, or 0 as FALSE.
 
 example: `Render -x 512 -y 512 -cam persp -im test -of sgi -mb on -sa 180 file.ma`
diff --git a/_posts/snippets/2010-07-11-bash-resize_multiple_images.md b/_posts/snippets/2010-07-11-bash-resize_multiple_images.md
deleted file mode 100644 (file)
index c1a482f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: resize multiple images
-date: 2010-07-11
-layout: post
-category: snippets
----
-<pre class="prettyprint lang-bash">for k in $(ls *.JPG); do convert $k -resize 50% -quality 80 r_$k; done</pre>
-
index 2e0bccb7e7f7ed2904f4ebe9ccc3d54997d822e8..3c55663bb045b0e374b1f70726db865abbf77eee 100644 (file)
@@ -6,7 +6,12 @@ layout: post
 category: snippets
 ---
 
-```prettyprint-python
+Count the words in a html file from a given URL using [NTLK](http://nltk.org).
+
+[Gist](https://gist.github.com/quilime/5423808) on Github.
+
+
+```python
 #!/usr/bin/python
 
 import nltk
@@ -28,6 +33,3 @@ for word in vocabulary:
     print str(vocabulary[word])
 ```
 
-Using [NTLK](http://nltk.org)
-
-[Gist](https://gist.github.com/quilime/5423808) on Github.
index c49c2e978a6959ede71c18137ace36cc3c7a5b81..63044012b4e03cb528ae92fe522621b4c818fb2a 100644 (file)
--- a/about.md
+++ b/about.md
@@ -2,7 +2,7 @@
 title: about
 ---
 
-`quilime.com` was started April 30, 2000. It's taken various forms of a project portfolio and blog. 
+`quilime.com` was started April 30, 2000. It's taken various forms as a project portfolio, code dump, and blog. These days it's mostly [open source projects](/projects), [code snippets](/snippets) and [command line tricks](/cli). Visit my [personal website](https://gabrieldunne.com) for more of my work.
 
 © 1999—{{ "now" | date: "%Y" }} [~gld](https://gabrieldunne.com)
 
@@ -11,7 +11,3 @@ older versions
 - [2007](http://portfolio.quilime.com/new/port.php)
 - [2005](http://portfolio.quilime.com/recent.html)
 - [2004](http://portfolio.quilime.com/archive/)
-
-personal website
-
-- [gabrieldunne.com](https://gabrieldunne.com)
\ No newline at end of file
diff --git a/css/highlight.css b/css/highlight.css
new file mode 100644 (file)
index 0000000..d46bd29
--- /dev/null
@@ -0,0 +1,201 @@
+.highlight table td { padding: 5px; }
+.highlight table pre { margin: 0; }
+.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
+  color: #5e5d83;
+  font-style: italic;
+}
+.highlight .cm {
+  color: #5e5d83;
+}
+.highlight .c1 {
+  color: #5e5d83;
+}
+.highlight .cp {
+  color: #465457;
+}
+.highlight .cs {
+  color: #465457;
+  font-weight: bold;
+}
+.highlight .err {
+  color: #f8f8f2;
+}
+.highlight .gi {
+  color: #a6e22e;
+}
+.highlight .gd {
+  color: #f92672;
+}
+.highlight .ge {
+  color: #1b1d1e;
+}
+.highlight .gr {
+  color: #f92672;
+}
+.highlight .gt {
+  color: #f92672;
+}
+.highlight .gh {
+  color: #403d3d;
+}
+.highlight .go {
+  color: #403d3d;
+}
+.highlight .gp {
+  color: #66d9ef;
+}
+.highlight .gs {
+  font-weight: bold;
+}
+.highlight .gu {
+  color: #465457;
+}
+.highlight .k, .highlight .kv {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kc {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kd {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kp {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kr {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kt {
+  color: #66d9ef;
+  font-weight: bold;
+}
+.highlight .kn {
+  color: #f92672;
+  font-weight: bold;
+}
+.highlight .ow {
+  color: #f92672;
+  font-weight: bold;
+}
+.highlight .o {
+  color: #f92672;
+  font-weight: bold;
+}
+.highlight .mf {
+  color: #af87ff;
+}
+.highlight .mh {
+  color: #af87ff;
+}
+.highlight .il {
+  color: #af87ff;
+}
+.highlight .mi {
+  color: #af87ff;
+}
+.highlight .mo {
+  color: #af87ff;
+}
+.highlight .m, .highlight .mb, .highlight .mx {
+  color: #af87ff;
+}
+.highlight .se {
+  color: #af87ff;
+}
+.highlight .sb {
+  color: #d7d787;
+}
+.highlight .sc {
+  color: #d7d787;
+}
+.highlight .sd {
+  color: #d7d787;
+}
+.highlight .s2 {
+  color: #d7d787;
+}
+.highlight .sh {
+  color: #d7d787;
+}
+.highlight .si {
+  color: #d7d787;
+}
+.highlight .sx {
+  color: #d7d787;
+}
+.highlight .sr {
+  color: #d7d787;
+}
+.highlight .s1 {
+  color: #d7d787;
+}
+.highlight .ss {
+  color: #d7d787;
+}
+.highlight .s, .highlight .sa, .highlight .dl {
+  color: #d7d787;
+}
+.highlight .na {
+  color: #a6e22e;
+}
+.highlight .nc {
+  color: #a6e22e;
+  font-weight: bold;
+}
+.highlight .nd {
+  color: #a6e22e;
+  font-weight: bold;
+}
+.highlight .ne {
+  color: #a6e22e;
+  font-weight: bold;
+}
+.highlight .nf, .highlight .fm {
+  color: #a6e22e;
+  font-weight: bold;
+}
+.highlight .no {
+  color: #66d9ef;
+}
+.highlight .bp {
+  color: #f8f8f2;
+}
+.highlight .nb {
+  color: #99f;
+}
+.highlight .ni {
+  color: #f8f8f2;
+}
+.highlight .nn {
+  color: #f8f8f2;
+}
+.highlight .vc {
+  color: #f8f8f2;
+}
+.highlight .vg {
+  color: #f8f8f2;
+}
+.highlight .vi {
+  color: #f8f8f2;
+}
+.highlight .nv, .highlight .vm {
+  color: #f8f8f2;
+}
+.highlight .w {
+  color: #f8f8f2;
+}
+.highlight .nl {
+  color: #f8f8f2;
+  font-weight: bold;
+}
+.highlight .nt {
+  color: #f92672;
+}
+.highlight {
+  color: #f8f8f2;
+}
index 94bd35b8e62c519c878a7f12d7c472de1ee35edf..a3df474944263f4294324a84c661f2ad651f4632 100644 (file)
@@ -181,7 +181,9 @@ span.nextprev span a:hover {
     margin-bottom: 4em;
 }
 .entry .metadata {
-  /*visibility:hidden;*/
+}
+.entry .metadata h6 {
+    display:inline;
 }
 .entry img {
     max-width:600px;
diff --git a/js/prettify/lang-apollo.js b/js/prettify/lang-apollo.js
deleted file mode 100644 (file)
index c218210..0000000
+++ /dev/null
@@ -1,51 +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
- * <p>
- * 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/js/prettify/lang-css.js b/js/prettify/lang-css.js
deleted file mode 100644 (file)
index 44013d2..0000000
+++ /dev/null
@@ -1,78 +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 CSS.
- *
- *
- * To use, include prettify.js and this file in your HTML page.
- * Then put your code in an HTML tag like
- *      <pre class="prettyprint lang-css"></pre>
- *
- *
- * 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 <s>
-         [PR.PR_PLAIN,       /^[ \t\r\n\f]+/, null, ' \t\r\n\f']
-        ],
-        [
-         // Quoted strings.  <string1> and <string2>
-         [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 <comment> 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/js/prettify/lang-hs.js b/js/prettify/lang-hs.js
deleted file mode 100644 (file)
index 91157b9..0000000
+++ /dev/null
@@ -1,101 +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 Haskell.
- *
- *
- * To use, include prettify.js and this file in your HTML page.
- * Then put your code in an HTML tag like
- *      <pre class="prettyprint lang-hs">(my lisp code)</pre>
- * 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<symbol> {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 | ' })<reservedid>
-         // 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/js/prettify/lang-lisp.js b/js/prettify/lang-lisp.js
deleted file mode 100644 (file)
index 4cffa53..0000000
+++ /dev/null
@@ -1,93 +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 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
- *      <pre class="prettyprint lang-lisp">(my lisp code)</pre>
- * 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 <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> 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|cons|defun|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/js/prettify/lang-lua.js b/js/prettify/lang-lua.js
deleted file mode 100644 (file)
index 68bb30b..0000000
+++ /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
- *      <pre class="prettyprint lang-lua">(my Lua code)</pre>
- *
- *
- * 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/js/prettify/lang-ml.js b/js/prettify/lang-ml.js
deleted file mode 100644 (file)
index c5a3db7..0000000
+++ /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/js/prettify/lang-proto.js b/js/prettify/lang-proto.js
deleted file mode 100644 (file)
index d6531fd..0000000
+++ /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/js/prettify/lang-sql.js b/js/prettify/lang-sql.js
deleted file mode 100644 (file)
index 7a58097..0000000
+++ /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
- *      <pre class="prettyprint lang-sql">(my SQL code)</pre>
- *
- *
- * 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/js/prettify/lang-vb.js b/js/prettify/lang-vb.js
deleted file mode 100644 (file)
index a38db45..0000000
+++ /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
- *      <pre class="prettyprint lang-vb"></pre>
- *
- *
- * 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/js/prettify/lang-wiki.js b/js/prettify/lang-wiki.js
deleted file mode 100644 (file)
index d4aa350..0000000
+++ /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/js/prettify/prettify.css b/js/prettify/prettify.css
deleted file mode 100644 (file)
index 7384ce1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Pretty printing styles. Used with prettify.js. */
-
-.str { color: #f26; }
-.kwd { color: #99f; font-weight:bold;  }
-.com { color: #888; font-style:italic; }
-.typ { color: #93d44f; }
-.lit { color: #099; }
-.pun { color: #66d; }
-.pln { color: #df0; }
-.tag { color: #008; }
-.atn { color: #606; }
-.atv { color: #080; }
-.dec { color: #606; }
-pre.prettyprint, code.prettyprint { }
-pre.prettyprint { padding:20px; }
-
-@media print {
-  .str { color: #060; }
-  .kwd { color: #008; font-weight: bold; }
-  .com { color: #600; font-style: italic; }
-  .typ { color: #404; font-weight: bold; }
-  .lit { color: #044; }
-  .pun { color: #440; }
-  .pln { color: #000; }
-  .tag { color: #006; font-weight: bold; }
-  .atn { color: #404; }
-  .atv { color: #060; }
-}
diff --git a/js/prettify/prettify.js b/js/prettify/prettify.js
deleted file mode 100644 (file)
index 09d6394..0000000
+++ /dev/null
@@ -1,1478 +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
- * some functions for browser-side pretty printing of code contained in html.
- * <p>
- *
- * For a fairly comprehensive set of languages see the
- * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
- * 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.
- * <p>
- * Usage: <ol>
- * <li> include this source file in an html page via
- *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
- * <li> define style rules.  See the example page for examples.
- * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
- *    {@code class=prettyprint.}
- *    You can also use the (html deprecated) {@code <xmp>} 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
- * @overrides window
- */
-
-// 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'] = 8;
-
-/** Walks the DOM returning a properly escaped version of innerHTML.
-  * @param {Node} node
-  * @param {Array.<string>} out output buffer that receives chunks of HTML.
-  */
-window['PR_normalizedHtml']
-
-/** 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 <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['prettyPrint'] = void 0;
-
-/** browser detection. @extern @returns false if not IE, otherwise the major version. */
-window['_pr_isIE6'] = function () {
-  var ieVersion = navigator && navigator.userAgent &&
-      navigator.userAgent.match(/\bMSIE ([678])\./);
-  ieVersion = ieVersion ? +ieVersion[1] : false;
-  window['_pr_isIE6'] = function () { return ieVersion; };
-  return ieVersion;
-};
-
-
-(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 ";
-  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 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 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);
-
-  // 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.
-    *
-    * <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
-    */
-  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.
-    }();
-
-  // Define regexps here so that the interpreter doesn't have to create an
-  // object each time the function containing them is called.
-  // The language spec requires a new object created even if you don't access
-  // the $1 members.
-  var pr_amp = /&/g;
-  var pr_lt = /</g;
-  var pr_gt = />/g;
-  var pr_quot = /\"/g;
-  /** like textToHtml but escapes double quotes to be attribute safe. */
-  function attribToHtml(str) {
-    return str.replace(pr_amp, '&amp;')
-        .replace(pr_lt, '&lt;')
-        .replace(pr_gt, '&gt;')
-        .replace(pr_quot, '&quot;');
-  }
-
-  /** escapest html special characters to html. */
-  function textToHtml(str) {
-    return str.replace(pr_amp, '&amp;')
-        .replace(pr_lt, '&lt;')
-        .replace(pr_gt, '&gt;');
-  }
-
-
-  var pr_ltEnt = /&lt;/g;
-  var pr_gtEnt = /&gt;/g;
-  var pr_aposEnt = /&apos;/g;
-  var pr_quotEnt = /&quot;/g;
-  var pr_ampEnt = /&amp;/g;
-  var pr_nbspEnt = /&nbsp;/g;
-  /** unescapes html to plain text. */
-  function htmlToText(html) {
-    var pos = html.indexOf('&');
-    if (pos < 0) { return html; }
-    // Handle numeric entities specially.  We can't use functional substitution
-    // since that doesn't work in older versions of Safari.
-    // These should be rare since most browsers convert them to normal chars.
-    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
-      var end = html.indexOf(';', pos);
-      if (end >= 0) {
-        var num = html.substring(pos + 3, end);
-        var radix = 10;
-        if (num && num.charAt(0) === 'x') {
-          num = num.substring(1);
-          radix = 16;
-        }
-        var codePoint = parseInt(num, radix);
-        if (!isNaN(codePoint)) {
-          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
-                  html.substring(end + 1));
-        }
-      }
-    }
-
-    return html.replace(pr_ltEnt, '<')
-        .replace(pr_gtEnt, '>')
-        .replace(pr_aposEnt, "'")
-        .replace(pr_quotEnt, '"')
-        .replace(pr_nbspEnt, ' ')
-        .replace(pr_ampEnt, '&');
-  }
-
-  /** is the given node's innerHTML normally unescaped? */
-  function isRawContent(node) {
-    return 'XMP' === node.tagName;
-  }
-
-  var newlineRe = /[\r\n]/g;
-  /**
-   * Are newlines and adjacent spaces significant in the given node's innerHTML?
-   */
-  function isPreformatted(node, content) {
-    // PRE means preformatted, and is a very common case, so don't create
-    // unnecessary computed style objects.
-    if ('PRE' === node.tagName) { return true; }
-    if (!newlineRe.test(content)) { return true; }  // Don't care
-    var whitespace = '';
-    // For disconnected nodes, IE has no currentStyle.
-    if (node.currentStyle) {
-      whitespace = node.currentStyle.whiteSpace;
-    } else if (window.getComputedStyle) {
-      // Firefox makes a best guess if node is disconnected whereas Safari
-      // returns the empty string.
-      whitespace = window.getComputedStyle(node, null).whiteSpace;
-    }
-    return !whitespace || whitespace === 'pre';
-  }
-
-  function normalizedHtml(node, out) {
-    switch (node.nodeType) {
-      case 1:  // an element
-        var name = node.tagName.toLowerCase();
-        out.push('<', name);
-        for (var i = 0; i < node.attributes.length; ++i) {
-          var attr = node.attributes[i];
-          if (!attr.specified) { continue; }
-          out.push(' ');
-          normalizedHtml(attr, out);
-        }
-        out.push('>');
-        for (var child = node.firstChild; child; child = child.nextSibling) {
-          normalizedHtml(child, out);
-        }
-        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
-          out.push('<\/', name, '>');
-        }
-        break;
-      case 2: // an attribute
-        out.push(node.name.toLowerCase(), '="', attribToHtml(node.value), '"');
-        break;
-      case 3: case 4: // text
-        out.push(textToHtml(node.nodeValue));
-        break;
-    }
-  }
-
-  /**
-   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
-   * matches the union o the sets o strings matched d 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;
-      }
-    }
-
-    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 groupts 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');
-  }
-
-  var PR_innerHtmlWorks = null;
-  function getInnerHtml(node) {
-    // inner html is hopelessly broken in Safari 2.0.4 when the content is
-    // an html description of well formed XML and the containing tag is a PRE
-    // tag, so we detect that case and emulate innerHTML.
-    if (null === PR_innerHtmlWorks) {
-      var testNode = document.createElement('PRE');
-      testNode.appendChild(
-          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
-      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
-    }
-
-    if (PR_innerHtmlWorks) {
-      var content = node.innerHTML;
-      // XMP tags contain unescaped entities so require special handling.
-      if (isRawContent(node)) {
-        content = textToHtml(content);
-      } else if (!isPreformatted(node, content)) {
-        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
-            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
-      }
-      return content;
-    }
-
-    var out = [];
-    for (var child = node.firstChild; child; child = child.nextSibling) {
-      normalizedHtml(child, out);
-    }
-    return out.join('');
-  }
-
-  /** returns a function that expand tabs to spaces.  This function can be fed
-    * successive chunks of text, and will maintain its own internal state to
-    * keep track of how tabs are expanded.
-    * @return {function (string) : string} a function that takes
-    *   plain text and return the text with tabs expanded.
-    * @private
-    */
-  function makeTabExpander(tabWidth) {
-    var SPACES = '                ';
-    var charInLine = 0;
-
-    return function (plainText) {
-      // walk over each character looking for tabs and newlines.
-      // On tabs, expand them.  On newlines, reset charInLine.
-      // Otherwise increment charInLine
-      var out = null;
-      var pos = 0;
-      for (var i = 0, n = plainText.length; i < n; ++i) {
-        var ch = plainText.charAt(i);
-
-        switch (ch) {
-          case '\t':
-            if (!out) { out = []; }
-            out.push(plainText.substring(pos, i));
-            // calculate how much space we need in front of this part
-            // nSpaces is the amount of padding -- the number of spaces needed
-            // to move us to the next column, where columns occur at factors of
-            // tabWidth.
-            var nSpaces = tabWidth - (charInLine % tabWidth);
-            charInLine += nSpaces;
-            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
-              out.push(SPACES.substring(0, nSpaces));
-            }
-            pos = i + 1;
-            break;
-          case '\n':
-            charInLine = 0;
-            break;
-          default:
-            ++charInLine;
-        }
-      }
-      if (!out) { return plainText; }
-      out.push(plainText.substring(pos));
-      return out.join('');
-    };
-  }
-
-  var pr_chunkPattern = new RegExp(
-      '[^<]+'  // A run of characters other than '<'
-      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
-      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
-      // a probable tag that should not be highlighted
-      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
-      + '|<',  // A '<' that does not begin a larger chunk
-      'g');
-  var pr_commentPrefix = /^<\!--/;
-  var pr_cdataPrefix = /^<!\[CDATA\[/;
-  var pr_brPrefix = /^<br\b/i;
-  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
-
-  /** split markup into chunks of html tags (style null) and
-    * plain text (style {@link #PR_PLAIN}), converting tags which are
-    * significant for tokenization (<br>) into their textual equivalent.
-    *
-    * @param {string} s html where whitespace is considered significant.
-    * @return {Object} source code and extracted tags.
-    * @private
-    */
-  function extractTags(s) {
-    // since the pattern has the 'g' modifier and defines no capturing groups,
-    // this will return a list of all chunks which we then classify and wrap as
-    // PR_Tokens
-    var matches = s.match(pr_chunkPattern);
-    var sourceBuf = [];
-    var sourceBufLen = 0;
-    var extractedTags = [];
-    if (matches) {
-      for (var i = 0, n = matches.length; i < n; ++i) {
-        var match = matches[i];
-        if (match.length > 1 && match.charAt(0) === '<') {
-          if (pr_commentPrefix.test(match)) { continue; }
-          if (pr_cdataPrefix.test(match)) {
-            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
-            sourceBuf.push(match.substring(9, match.length - 3));
-            sourceBufLen += match.length - 12;
-          } else if (pr_brPrefix.test(match)) {
-            // <br> tags are lexically significant so convert them to text.
-            // This is undone later.
-            sourceBuf.push('\n');
-            ++sourceBufLen;
-          } else {
-            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
-              // A <span class="nocode"> will start a section that should be
-              // ignored.  Continue walking the list until we see a matching end
-              // tag.
-              var name = match.match(pr_tagNameRe)[2];
-              var depth = 1;
-              var j;
-              end_tag_loop:
-              for (j = i + 1; j < n; ++j) {
-                var name2 = matches[j].match(pr_tagNameRe);
-                if (name2 && name2[2] === name) {
-                  if (name2[1] === '/') {
-                    if (--depth === 0) { break end_tag_loop; }
-                  } else {
-                    ++depth;
-                  }
-                }
-              }
-              if (j < n) {
-                extractedTags.push(
-                    sourceBufLen, matches.slice(i, j + 1).join(''));
-                i = j;
-              } else {  // Ignore unclosed sections.
-                extractedTags.push(sourceBufLen, match);
-              }
-            } else {
-              extractedTags.push(sourceBufLen, match);
-            }
-          }
-        } else {
-          var literalText = htmlToText(match);
-          sourceBuf.push(literalText);
-          sourceBufLen += literalText.length;
-        }
-      }
-    }
-    return { source: sourceBuf.join(''), tags: extractedTags };
-  }
-
-  /** True if the given tag contains a class attribute with the nocode class. */
-  function isNoCodeTag(tag) {
-    return !!tag
-        // First canonicalize the representation of attributes
-        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
-                 ' $1="$2$3$4"')
-        // Then look for the attribute we want.
-        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
-  }
-
-  /**
-   * 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
-    * '<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;
-    var notWs = /\S/;
-
-    /**
-     * Lexes job.source and produces an output array job.decorations of style
-     * classes preceded by the position at which they start in job.source in
-     * order.
-     *
-     * @param {Object} job an object like {@code
-     *    source: {string} sourceText plain text,
-     *    basePos: {int} position of job.source in the larger chunk of
-     *        sourceCode.
-     * }
-     */
-    var decorate = function (job) {
-      var sourceCode = job.source, 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]);
-    }
-    if (options['hashComments']) {
-      if (options['cStyleComments']) {
-        // 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']) {
-      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 keywords = options['keywords'].replace(/^\s+|\s+$/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]*/, 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'],
-        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
-
-    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
-  }
-
-  var decorateSource = sourceDecorator({
-        'keywords': ALL_KEYWORDS,
-        'hashComments': true,
-        'cStyleComments': true,
-        'multiLineStrings': true,
-        'regexLiterals': true
-      });
-
-  /** Breaks {@code job.source} around style boundaries in
-    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
-    * and leaves the result in {@code job.prettyPrintedHtml}.
-    * @param {Object} job like {
-    *    source: {string} source as plain text,
-    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
-    *                   html preceded by their position in {@code job.source}
-    *                   in order
-    *    decorations: {Array.<number|string} an array of style classes preceded
-    *                 by the position at which they start in job.source in order
-    * }
-    * @private
-    */
-  function recombineTagsAndDecorations(job) {
-    var sourceText = job.source;
-    var extractedTags = job.extractedTags;
-    var decorations = job.decorations;
-
-    var html = [];
-    // index past the last char in sourceText written to html
-    var outputIdx = 0;
-
-    var openDecoration = null;
-    var currentDecoration = null;
-    var tagPos = 0;  // index into extractedTags
-    var decPos = 0;  // index into decorations
-    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
-
-    var adjacentSpaceRe = /([\r\n ]) /g;
-    var startOrSpaceRe = /(^| ) /gm;
-    var newlineRe = /\r\n?|\n/g;
-    var trailingSpaceRe = /[ \r\n]$/;
-    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
-
-    // A helper function that is responsible for opening sections of decoration
-    // and outputing properly escaped chunks of source
-    function emitTextUpTo(sourceIdx) {
-      if (sourceIdx > outputIdx) {
-        if (openDecoration && openDecoration !== currentDecoration) {
-          // Close the current decoration
-          html.push('</span>');
-          openDecoration = null;
-        }
-        if (!openDecoration && currentDecoration) {
-          openDecoration = currentDecoration;
-          html.push('<span class="', openDecoration, '">');
-        }
-        // This interacts badly with some wikis which introduces paragraph tags
-        // into pre blocks for some strange reason.
-        // It's necessary for IE though which seems to lose the preformattedness
-        // of <pre> tags when their innerHTML is assigned.
-        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
-        // and it serves to undo the conversion of <br>s to newlines done in
-        // chunkify.
-        var htmlChunk = textToHtml(
-            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
-            .replace(lastWasSpace
-                     ? startOrSpaceRe
-                     : adjacentSpaceRe, '$1&nbsp;');
-        // Keep track of whether we need to escape space at the beginning of the
-        // next chunk.
-        lastWasSpace = trailingSpaceRe.test(htmlChunk);
-        // IE collapses multiple adjacient <br>s into 1 line break.
-        // Prefix every <br> with '&nbsp;' can prevent such IE's behavior.
-        var lineBreakHtml = window['_pr_isIE6']() ? '&nbsp;<br />' : '<br />';
-        html.push(htmlChunk.replace(newlineRe, lineBreakHtml));
-        outputIdx = sourceIdx;
-      }
-    }
-
-    while (true) {
-      // Determine if we're going to consume a tag this time around.  Otherwise
-      // we consume a decoration or exit.
-      var outputTag;
-      if (tagPos < extractedTags.length) {
-        if (decPos < decorations.length) {
-          // Pick one giving preference to extractedTags since we shouldn't open
-          // a new style that we're going to have to immediately close in order
-          // to output a tag.
-          outputTag = extractedTags[tagPos] <= decorations[decPos];
-        } else {
-          outputTag = true;
-        }
-      } else {
-        outputTag = false;
-      }
-      // Consume either a decoration or a tag or exit.
-      if (outputTag) {
-        emitTextUpTo(extractedTags[tagPos]);
-        if (openDecoration) {
-          // Close the current decoration
-          html.push('</span>');
-          openDecoration = null;
-        }
-        html.push(extractedTags[tagPos + 1]);
-        tagPos += 2;
-      } else if (decPos < decorations.length) {
-        emitTextUpTo(decorations[decPos]);
-        currentDecoration = decorations[decPos + 1];
-        decPos += 2;
-      } else {
-        break;
-      }
-    }
-    emitTextUpTo(sourceText.length);
-    if (openDecoration) {
-      html.push('</span>');
-    }
-    job.prettyPrintedHtml = html.join('');
-  }
-
-  /** 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 {
-    *        source: {string} as plain text.
-    *        decorations: {Array.<number|string>} an array of style classes
-    *                     preceded by the position at which they start in
-    *                     job.source 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 ('console' in window) {
-        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
-        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
-  registerLangHandler(sourceDecorator({
-          'keywords': 'null true false'
-        }), ['json']);
-  registerLangHandler(sourceDecorator({
-          'keywords': CSHARP_KEYWORDS,
-          'hashComments': true,
-          'cStyleComments': true,
-          'verbatimStrings': true
-        }), ['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(
-      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
-
-  function applyDecorator(job) {
-    var sourceCodeHtml = job.sourceCodeHtml;
-    var opt_langExtension = job.langExtension;
-
-    // Prepopulate output in case processing fails with an exception.
-    job.prettyPrintedHtml = sourceCodeHtml;
-
-    try {
-      // Extract tags, and convert the source code to plain text.
-      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
-      /** Plain text. @type {string} */
-      var source = sourceAndExtractedTags.source;
-      job.source = source;
-      job.basePos = 0;
-
-      /** Even entries are positions in source in ascending order.  Odd entries
-        * are tags that were extracted at that position.
-        * @type {Array.<number|string>}
-        */
-      job.extractedTags = sourceAndExtractedTags.tags;
-
-      // Apply the appropriate language handler
-      langHandlerForExtension(opt_langExtension, source)(job);
-      // Integrate the decorations and tags back into the source code to produce
-      // a decorated html string which is left in job.prettyPrintedHtml.
-      recombineTagsAndDecorations(job);
-    } catch (e) {
-      if ('console' in window) {
-        console.log(e);
-        console.trace();
-      }
-    }
-  }
-
-  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
-    var job = {
-      sourceCodeHtml: sourceCodeHtml,
-      langExtension: opt_langExtension
-    };
-    applyDecorator(job);
-    return job.prettyPrintedHtml;
-  }
-
-  function prettyPrint(opt_whenDone) {
-    var isIE678 = window['_pr_isIE6']();
-    var ieNewline = isIE678 === 6 ? '\r\n' : '\r';
-    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
-
-    // fetch a list of nodes to rewrite
-    var codeSegments = [
-        document.getElementsByTagName('pre'),
-        document.getElementsByTagName('code'),
-        document.getElementsByTagName('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).getTime(); } };
-    }
-
-    // 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;
-
-    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];
-        if (cs.className && cs.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.
-          var langExtension = cs.className.match(/\blang-(\w+)\b/);
-          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) {
-            // fetch the content as a snippet of properly escaped HTML.
-            // Firefox adds newlines at the end.
-            var content = getInnerHtml(cs);
-            content = content.replace(/(?:\r\n?|\n)$/, '');
-
-            // do the pretty printing
-            prettyPrintingJob = {
-              sourceCodeHtml: content,
-              langExtension: langExtension,
-              sourceNode: cs
-            };
-            applyDecorator(prettyPrintingJob);
-            replaceWithPrettyPrintedHtml();
-          }
-        }
-      }
-      if (k < elements.length) {
-        // finish up in a continuation
-        setTimeout(doWork, 250);
-      } else if (opt_whenDone) {
-        opt_whenDone();
-      }
-    }
-
-    function replaceWithPrettyPrintedHtml() {
-      var newContent = prettyPrintingJob.prettyPrintedHtml;
-      if (!newContent) { return; }
-      var cs = prettyPrintingJob.sourceNode;
-
-      // push the prettified html back into the tag.
-      if (!isRawContent(cs)) {
-        // just replace the old html with the new
-        cs.innerHTML = newContent;
-      } else {
-        // we need to change the tag to a <pre> since <xmp>s do not allow
-        // embedded tags such as the span tags used to attach styles to
-        // sections of source code.
-        var pre = document.createElement('PRE');
-        for (var i = 0; i < cs.attributes.length; ++i) {
-          var a = cs.attributes[i];
-          if (a.specified) {
-            var aname = a.name.toLowerCase();
-            if (aname === 'class') {
-              pre.className = a.value;  // For IE 6
-            } else {
-              pre.setAttribute(a.name, a.value);
-            }
-          }
-        }
-        pre.innerHTML = newContent;
-
-        // remove the old
-        cs.parentNode.replaceChild(pre, cs);
-        cs = pre;
-      }
-
-      // Replace <br>s with line-feeds so that copying and pasting works
-      // on IE 6.
-      // Doing this on other browsers breaks lots of stuff since \r\n is
-      // treated as two newlines on Firefox, and doing this also slows
-      // down rendering.
-      if (isIE678 && cs.tagName === 'PRE') {
-        var lineBreaks = cs.getElementsByTagName('br');
-        for (var j = lineBreaks.length; --j >= 0;) {
-          var lineBreak = lineBreaks[j];
-          lineBreak.parentNode.replaceChild(
-              document.createTextNode(ieNewline), lineBreak);
-        }
-      }
-    }
-
-    doWork();
-  }
-
-  window['PR_normalizedHtml'] = normalizedHtml;
-  window['prettyPrintOne'] = prettyPrintOne;
-  window['prettyPrint'] = prettyPrint;
-  window['PR'] = {
-        'combinePrefixPatterns': combinePrefixPatterns,
-        '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
-      };
-})();
similarity index 81%
rename from code/index.html
rename to projects/index.html
index 18c22d862923a30c7d3768962aa57431c9a05f03..a8eb1163380c92f196b3c55c1d131ccd940264a9 100644 (file)
@@ -1,12 +1,12 @@
 ---
 layout: cat
-title: open source
+title: projects
 ---
 
 
 <div class="allposts">
   <br />
-  {% for post in site.categories.code %}
+  {% for post in site.categories.projects %}
   <div class="entry">
     <h1><a href="{{ site.url }}{{ post.url }}">— {{ post.title }} <span style="font-weight:normal; color:#393939;">{{ post.date | date: "%Y-%m-%d" }}</span></a></h1>
   </div>
index 565512729933b876fef38698c5c4928b93050c9f..591c5c814f63ad208a1d4dc7b507f8c4d8f1b1f1 100644 (file)
@@ -1,6 +1,6 @@
 ---
 layout: cat
-title: snippets
+title: code snippets
 ---
 
 <div class="allposts">