summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliris <liris.pp@gmail.com>2014-05-02 15:08:26 +0900
committerliris <liris.pp@gmail.com>2014-05-02 15:08:26 +0900
commit394f7fc7785b7be86e431d1109dc50c09b4365eb (patch)
tree37a72ba730c4d7745d26d795c2947a71d6ea99e9
parente15e85ebf8757dbc79e5a1ced897054fe54f771d (diff)
downloadwebsocket-client-394f7fc7785b7be86e431d1109dc50c09b4365eb.tar.gz
Create gh-pages branch via GitHub
-rw-r--r--images/body-bg.pngbin0 -> 8859 bytes
-rw-r--r--images/highlight-bg.jpgbin0 -> 34222 bytes
-rw-r--r--images/hr.pngbin0 -> 1037 bytes
-rw-r--r--images/octocat-icon.pngbin0 -> 1651 bytes
-rw-r--r--images/tar-gz-icon.pngbin0 -> 1671 bytes
-rw-r--r--images/zip-icon.pngbin0 -> 1661 bytes
-rw-r--r--index.html144
-rw-r--r--javascripts/main.js1
-rw-r--r--params.json2
-rw-r--r--stylesheets/print.css226
-rw-r--r--stylesheets/pygment_trac.css125
-rw-r--r--stylesheets/stylesheet.css371
12 files changed, 771 insertions, 98 deletions
diff --git a/images/body-bg.png b/images/body-bg.png
new file mode 100644
index 0000000..d0618fe
--- /dev/null
+++ b/images/body-bg.png
Binary files differ
diff --git a/images/highlight-bg.jpg b/images/highlight-bg.jpg
new file mode 100644
index 0000000..4c4a78e
--- /dev/null
+++ b/images/highlight-bg.jpg
Binary files differ
diff --git a/images/hr.png b/images/hr.png
new file mode 100644
index 0000000..6c723a5
--- /dev/null
+++ b/images/hr.png
Binary files differ
diff --git a/images/octocat-icon.png b/images/octocat-icon.png
new file mode 100644
index 0000000..f0ba137
--- /dev/null
+++ b/images/octocat-icon.png
Binary files differ
diff --git a/images/tar-gz-icon.png b/images/tar-gz-icon.png
new file mode 100644
index 0000000..d50f34f
--- /dev/null
+++ b/images/tar-gz-icon.png
Binary files differ
diff --git a/images/zip-icon.png b/images/zip-icon.png
new file mode 100644
index 0000000..162c425
--- /dev/null
+++ b/images/zip-icon.png
Binary files differ
diff --git a/index.html b/index.html
index 9c1600e..d31235b 100644
--- a/index.html
+++ b/index.html
@@ -1,33 +1,37 @@
-<!doctype html>
+<!DOCTYPE html>
<html>
<head>
- <meta charset="utf-8">
+ <meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
- <title>Websocket-client by liris</title>
-
- <link rel="stylesheet" href="stylesheets/styles.css">
- <link rel="stylesheet" href="stylesheets/pygment_trac.css">
- <script src="javascripts/scale.fix.js"></script>
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
-
+ <link href='https://fonts.googleapis.com/css?family=Chivo:900' rel='stylesheet' type='text/css'>
+ <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
+ <link rel="stylesheet" type="text/css" href="stylesheets/pygment_trac.css" media="screen" />
+ <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
+ <title>Websocket-client by liris</title>
</head>
+
<body>
- <div class="wrapper">
- <header>
- <h1>Websocket-client</h1>
- <p>websocket client for python</p>
- <p class="view"><a href="https://github.com/liris/websocket-client">View the Project on GitHub <small>liris/websocket-client</small></a></p>
- <ul>
- <li><a href="https://github.com/liris/websocket-client/zipball/master">Download <strong>ZIP File</strong></a></li>
- <li><a href="https://github.com/liris/websocket-client/tarball/master">Download <strong>TAR Ball</strong></a></li>
- <li><a href="https://github.com/liris/websocket-client">View On <strong>GitHub</strong></a></li>
- </ul>
- </header>
- <section>
- <h1></h1>
+ <div id="container">
+ <div class="inner">
+
+ <header>
+ <h1>Websocket-client</h1>
+ <h2>websocket client for python</h2>
+ </header>
+
+ <section id="downloads" class="clearfix">
+ <a href="https://github.com/liris/websocket-client/zipball/master" id="download-zip" class="button"><span>Download .zip</span></a>
+ <a href="https://github.com/liris/websocket-client/tarball/master" id="download-tar-gz" class="button"><span>Download .tar.gz</span></a>
+ <a href="https://github.com/liris/websocket-client" id="view-on-github" class="button"><span>View on GitHub</span></a>
+ </section>
+
+ <hr>
+
+ <section id="main_content">
+ <h1></h1>
<h1>
<a name="websocket-client" class="anchor" href="#websocket-client"><span class="octicon octicon-link"></span></a>websocket-client</h1>
@@ -37,6 +41,18 @@
<p>websocket-client supports only hybi-13.</p>
<h1>
+<a name="caution" class="anchor" href="#caution"><span class="octicon octicon-link"></span></a>CAUTION</h1>
+
+<p>We have a big change on version 0.14.0.
+So, please test on trunk repository.</p>
+
+<h1>
+<a name="v014-release-schedule" class="anchor" href="#v014-release-schedule"><span class="octicon octicon-link"></span></a>v0.14 release schedule</h1>
+
+<p>Now, under testing.
+v0.14 will be released on May 15.</p>
+
+<h1>
<a name="license" class="anchor" href="#license"><span class="octicon octicon-link"></span></a>License</h1>
<ul>
@@ -44,17 +60,28 @@
</ul><h1>
<a name="installation" class="anchor" href="#installation"><span class="octicon octicon-link"></span></a>Installation</h1>
-<p>This module is tested on only Python 2.7.</p>
+<p>This module is tested on Python 2.7 and Python 3.x.</p>
<p>Type "python setup.py install" or "pip install websocket-client" to install.</p>
-<p>This module does not depend on any other module.</p>
+<p>This module depend on</p>
-<h1>
+<ul>
+<li>six</li>
+<li>backports.ssl_match_hostname for Python 2.x</li>
+</ul><h1>
<a name="how-about-python-3" class="anchor" href="#how-about-python-3"><span class="octicon octicon-link"></span></a>How about Python 3</h1>
-<p>py3( <a href="https://github.com/liris/websocket-client/tree/py3">https://github.com/liris/websocket-client/tree/py3</a> ) branch is for python 3.3. Every test case is passed.
-If you are using python3, please check it.</p>
+<p>Now, we support python 3 on single source code from version 0.14.0. Thanks, <a href="https://github.com/battlemidget" class="user-mention">@battlemidget</a> and <a href="https://github.com/ralphbean" class="user-mention">@ralphbean</a>.</p>
+
+<h1>
+<a name="http-proxy" class="anchor" href="#http-proxy"><span class="octicon octicon-link"></span></a>HTTP Proxy</h1>
+
+<p>Support websocket access via http proxy.
+The proxy server must allow "CONNECT" method to websocket port.
+Default squid setting is "ALLOWED TO CONNECT ONLY HTTPS PORT".</p>
+
+<p>Current implementation of websocket-client is using "CONNECT" method via proxy.</p>
<h1>
<a name="example" class="anchor" href="#example"><span class="octicon octicon-link"></span></a>Example</h1>
@@ -106,7 +133,7 @@ ws = create_connection("ws://echo.websocket.org/".
print "thread terminating..."
thread.start_new_thread(run, ())</p>
-<p>if <strong>name</strong> == "__main__":
+<p>if <strong>name</strong> == "<strong>main</strong>":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = on_message,
@@ -146,9 +173,9 @@ How are you?
ws_url websocket url. ex. ws://echo.websocket.org/</p>
<p>optional arguments:
- -h, --help show this help message and exit</p>
-
-<p>-v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module</p>
+ -h, --help show this help message and exit
+WebSocketApp
+ -v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module</p>
<p>example::</p>
@@ -161,6 +188,43 @@ How are you?
<ul>
<li>
+<p>v0.14.0</p>
+
+<ul>
+<li>Support python 3(#73)</li>
+<li>Support IPv6(#77)</li>
+<li>Support explicit web proxy(#57)</li>
+</ul>
+</li>
+<li>
+<p>v0.13.0</p>
+
+<ul>
+<li>MemoryError when receiving large amount of data (~60 MB) at once(ISSUE#59)</li>
+<li>Controlling fragmentation(ISSUE#55)</li>
+<li>server certificate validation(ISSUE#56)</li>
+<li>PyPI tarball is missing test_websocket.py(ISSUE#65)</li>
+<li>Payload length encoding bug(ISSUE#58)</li>
+<li>disable Nagle algorithm by default(ISSUE#41)</li>
+<li>Better event loop in WebSocketApp(ISSUE#63)</li>
+<li>Skip tests that require Internet access by default(ISSUE#66)</li>
+</ul>
+</li>
+<li>
+<p>v0.12.0</p>
+
+<ul>
+<li>support keep alive for WebSocketApp(ISSUE#34)</li>
+<li>fix some SSL bugs(ISSUE#35, #36)</li>
+<li>fix "Timing out leaves websocket library in bad state"(ISSUE#37)</li>
+<li>fix "WebSocketApp.run_with_no_err() silently eats all exceptions"(ISSUE#38)</li>
+<li>WebSocketTimeoutException will be raised for ws/wss timeout(ISSUE#40)</li>
+<li>improve wsdump message(ISSUE#42)</li>
+<li>support fragmentation message(ISSUE#43)</li>
+<li>fix some bugs</li>
+</ul>
+</li>
+<li>
<p>v0.11.0</p>
<ul>
@@ -208,7 +272,7 @@ How are you?
<ul>
<li>Patches: UUID4, self.keep_running, mask_key (ISSUE#11)</li>
-<li>add wsdump.py tool </li>
+<li>add wsdump.py tool</li>
</ul>
</li>
<li>
@@ -240,13 +304,15 @@ How are you?
</ul>
</li>
</ul>
- </section>
+ </section>
+
+ <footer>
+ Websocket-client is maintained by <a href="https://github.com/liris">liris</a><br>
+ This page was generated by <a href="http://pages.github.com">GitHub Pages</a>. Tactile theme by <a href="https://twitter.com/jasonlong">Jason Long</a>.
+ </footer>
+
+
+ </div>
</div>
- <footer>
- <p>Project maintained by <a href="https://github.com/liris">liris</a></p>
- <p>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></p>
- </footer>
- <!--[if !IE]><script>fixScale(document);</script><![endif]-->
-
</body>
</html> \ No newline at end of file
diff --git a/javascripts/main.js b/javascripts/main.js
new file mode 100644
index 0000000..d8135d3
--- /dev/null
+++ b/javascripts/main.js
@@ -0,0 +1 @@
+console.log('This would be the main JS file.');
diff --git a/params.json b/params.json
index 6d1d1a6..7db9c70 100644
--- a/params.json
+++ b/params.json
@@ -1 +1 @@
-{"name":"Websocket-client","tagline":"websocket client for python","body":"=================\r\nwebsocket-client\r\n=================\r\n\r\nwebsocket-client module is WebSocket client for python. This provide the low level APIs for WebSocket. All APIs are the synchronous functions.\r\n\r\nwebsocket-client supports only hybi-13.\r\n\r\nLicense\r\n============\r\n\r\n - LGPL\r\n\r\nInstallation\r\n=============\r\n\r\nThis module is tested on only Python 2.7.\r\n\r\nType \"python setup.py install\" or \"pip install websocket-client\" to install.\r\n\r\nThis module does not depend on any other module.\r\n\r\nHow about Python 3\r\n===========================\r\n\r\npy3( https://github.com/liris/websocket-client/tree/py3 ) branch is for python 3.3. Every test case is passed.\r\nIf you are using python3, please check it.\r\n\r\nExample\r\n============\r\n\r\nLow Level API example::\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\")\r\n print \"Sending 'Hello, World'...\"\r\n ws.send(\"Hello, World\")\r\n print \"Sent\"\r\n print \"Reeiving...\"\r\n result = ws.recv()\r\n print \"Received '%s'\" % result\r\n ws.close()\r\n\r\nIf you want to customize socket options, set sockopt.\r\n\r\nsockopt example:\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\".\r\n sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),) )\r\n\r\n\r\nJavaScript websocket-like API example::\r\n\r\n import websocket\r\n import thread\r\n import time\r\n \r\n def on_message(ws, message):\r\n print message\r\n \r\n def on_error(ws, error):\r\n print error\r\n \r\n def on_close(ws):\r\n print \"### closed ###\"\r\n \r\n def on_open(ws):\r\n def run(*args):\r\n for i in range(3):\r\n time.sleep(1)\r\n ws.send(\"Hello %d\" % i)\r\n time.sleep(1)\r\n ws.close()\r\n print \"thread terminating...\"\r\n thread.start_new_thread(run, ())\r\n \r\n \r\n if __name__ == \"__main__\":\r\n websocket.enableTrace(True)\r\n ws = websocket.WebSocketApp(\"ws://echo.websocket.org/\",\r\n on_message = on_message,\r\n on_error = on_error,\r\n on_close = on_close)\r\n ws.on_open = on_open\r\n \r\n ws.run_forever()\r\n\r\n\r\nwsdump.py\r\n============\r\n\r\nwsdump.py is simple WebSocket test(debug) tool.\r\n\r\nsample for echo.websocket.org::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n Press Ctrl+C to quit\r\n > Hello, WebSocket\r\n < Hello, WebSocket\r\n > How are you?\r\n < How are you?\r\n\r\nUsage\r\n---------\r\n\r\nusage::\r\n wsdump.py [-h] [-v [VERBOSE]] ws_url\r\n\r\nWebSocket Simple Dump Tool\r\n\r\npositional arguments:\r\n ws_url websocket url. ex. ws://echo.websocket.org/\r\n\r\noptional arguments:\r\n -h, --help show this help message and exit\r\n\r\n -v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module\r\n\r\nexample::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n $ wsdump.py ws://echo.websocket.org/ -v\r\n $ wsdump.py ws://echo.websocket.org/ -vv\r\n\r\nChangeLog\r\n============\r\n\r\n- v0.11.0\r\n\r\n - Only log non-normal close status(ISSUE#31)\r\n - Fix default Origin isn't URI(ISSUE#32)\r\n - fileno support(ISSUE#33)\r\n\r\n- v0.10.0\r\n\r\n - allow to set HTTP Header to WebSocketApp(ISSUE#27)\r\n - fix typo in pydoc(ISSUE#28)\r\n - Passing a socketopt flag to the websocket constructor(ISSUE#29)\r\n - websocket.send fails with long data(ISSUE#30)\r\n\r\n\r\n- v0.9.0\r\n\r\n - allow to set opcode in WebSocketApp.send(ISSUE#25)\r\n - allow to modify Origin(ISSUE#26)\r\n\r\n- v0.8.0\r\n\r\n - many bug fix\r\n - some performance improvement\r\n\r\n- v0.7.0\r\n\r\n - fixed problem to read long data.(ISSUE#12)\r\n - fix buffer size boundary violation\r\n\r\n- v0.6.0\r\n\r\n - Patches: UUID4, self.keep_running, mask_key (ISSUE#11)\r\n - add wsdump.py tool \r\n\r\n- v0.5.2\r\n\r\n - fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10)\r\n\r\n- v0.5.1\r\n\r\n - delete invalid print statement.\r\n\r\n- v0.5.0\r\n\r\n - support hybi-13 protocol.\r\n\r\n- v0.4.1\r\n\r\n - fix incorrect custom header order(ISSUE#1)\r\n \r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file
+{"name":"Websocket-client","tagline":"websocket client for python","body":"=================\r\nwebsocket-client\r\n=================\r\n\r\nwebsocket-client module is WebSocket client for python. This provide the low level APIs for WebSocket. All APIs are the synchronous functions.\r\n\r\nwebsocket-client supports only hybi-13.\r\n\r\nCAUTION\r\n============\r\n\r\nWe have a big change on version 0.14.0.\r\nSo, please test on trunk repository.\r\n\r\nv0.14 release schedule\r\n=======================\r\n\r\nNow, under testing.\r\nv0.14 will be released on May 15.\r\n\r\n\r\nLicense\r\n============\r\n\r\n - LGPL\r\n\r\nInstallation\r\n=============\r\n\r\nThis module is tested on Python 2.7 and Python 3.x.\r\n\r\nType \"python setup.py install\" or \"pip install websocket-client\" to install.\r\n\r\nThis module depend on\r\n\r\n - six\r\n - backports.ssl_match_hostname for Python 2.x\r\n\r\nHow about Python 3\r\n===========================\r\n\r\nNow, we support python 3 on single source code from version 0.14.0. Thanks, @battlemidget and @ralphbean.\r\n\r\nHTTP Proxy\r\n=============\r\n\r\nSupport websocket access via http proxy.\r\nThe proxy server must allow \"CONNECT\" method to websocket port.\r\nDefault squid setting is \"ALLOWED TO CONNECT ONLY HTTPS PORT\".\r\n\r\nCurrent implementation of websocket-client is using \"CONNECT\" method via proxy.\r\n\r\nExample\r\n=============\r\n\r\nLow Level API example::\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\")\r\n print \"Sending 'Hello, World'...\"\r\n ws.send(\"Hello, World\")\r\n print \"Sent\"\r\n print \"Reeiving...\"\r\n result = ws.recv()\r\n print \"Received '%s'\" % result\r\n ws.close()\r\n\r\nIf you want to customize socket options, set sockopt.\r\n\r\nsockopt example:\r\n\r\n from websocket import create_connection\r\n ws = create_connection(\"ws://echo.websocket.org/\".\r\n sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),) )\r\n\r\n\r\nJavaScript websocket-like API example::\r\n\r\n import websocket\r\n import thread\r\n import time\r\n\r\n def on_message(ws, message):\r\n print message\r\n\r\n def on_error(ws, error):\r\n print error\r\n\r\n def on_close(ws):\r\n print \"### closed ###\"\r\n\r\n def on_open(ws):\r\n def run(*args):\r\n for i in range(3):\r\n time.sleep(1)\r\n ws.send(\"Hello %d\" % i)\r\n time.sleep(1)\r\n ws.close()\r\n print \"thread terminating...\"\r\n thread.start_new_thread(run, ())\r\n\r\n\r\n if __name__ == \"__main__\":\r\n websocket.enableTrace(True)\r\n ws = websocket.WebSocketApp(\"ws://echo.websocket.org/\",\r\n on_message = on_message,\r\n on_error = on_error,\r\n on_close = on_close)\r\n ws.on_open = on_open\r\n\r\n ws.run_forever()\r\n\r\n\r\nwsdump.py\r\n============\r\n\r\nwsdump.py is simple WebSocket test(debug) tool.\r\n\r\nsample for echo.websocket.org::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n Press Ctrl+C to quit\r\n > Hello, WebSocket\r\n < Hello, WebSocket\r\n > How are you?\r\n < How are you?\r\n\r\nUsage\r\n---------\r\n\r\nusage::\r\n wsdump.py [-h] [-v [VERBOSE]] ws_url\r\n\r\nWebSocket Simple Dump Tool\r\n\r\npositional arguments:\r\n ws_url websocket url. ex. ws://echo.websocket.org/\r\n\r\noptional arguments:\r\n -h, --help show this help message and exit\r\nWebSocketApp\r\n -v VERBOSE, --verbose VERBOSE set verbose mode. If set to 1, show opcode. If set to 2, enable to trace websocket module\r\n\r\nexample::\r\n\r\n $ wsdump.py ws://echo.websocket.org/\r\n $ wsdump.py ws://echo.websocket.org/ -v\r\n $ wsdump.py ws://echo.websocket.org/ -vv\r\n\r\nChangeLog\r\n============\r\n\r\n- v0.14.0\r\n\r\n - Support python 3(#73)\r\n - Support IPv6(#77)\r\n - Support explicit web proxy(#57)\r\n\r\n- v0.13.0\r\n\r\n - MemoryError when receiving large amount of data (~60 MB) at once(ISSUE#59)\r\n - Controlling fragmentation(ISSUE#55)\r\n - server certificate validation(ISSUE#56)\r\n - PyPI tarball is missing test_websocket.py(ISSUE#65)\r\n - Payload length encoding bug(ISSUE#58)\r\n - disable Nagle algorithm by default(ISSUE#41)\r\n - Better event loop in WebSocketApp(ISSUE#63)\r\n - Skip tests that require Internet access by default(ISSUE#66)\r\n\r\n- v0.12.0\r\n\r\n - support keep alive for WebSocketApp(ISSUE#34)\r\n - fix some SSL bugs(ISSUE#35, #36)\r\n - fix \"Timing out leaves websocket library in bad state\"(ISSUE#37)\r\n - fix \"WebSocketApp.run_with_no_err() silently eats all exceptions\"(ISSUE#38)\r\n - WebSocketTimeoutException will be raised for ws/wss timeout(ISSUE#40)\r\n - improve wsdump message(ISSUE#42)\r\n - support fragmentation message(ISSUE#43)\r\n - fix some bugs\r\n\r\n- v0.11.0\r\n\r\n - Only log non-normal close status(ISSUE#31)\r\n - Fix default Origin isn't URI(ISSUE#32)\r\n - fileno support(ISSUE#33)\r\n\r\n- v0.10.0\r\n\r\n - allow to set HTTP Header to WebSocketApp(ISSUE#27)\r\n - fix typo in pydoc(ISSUE#28)\r\n - Passing a socketopt flag to the websocket constructor(ISSUE#29)\r\n - websocket.send fails with long data(ISSUE#30)\r\n\r\n\r\n- v0.9.0\r\n\r\n - allow to set opcode in WebSocketApp.send(ISSUE#25)\r\n - allow to modify Origin(ISSUE#26)\r\n\r\n- v0.8.0\r\n\r\n - many bug fix\r\n - some performance improvement\r\n\r\n- v0.7.0\r\n\r\n - fixed problem to read long data.(ISSUE#12)\r\n - fix buffer size boundary violation\r\n\r\n- v0.6.0\r\n\r\n - Patches: UUID4, self.keep_running, mask_key (ISSUE#11)\r\n - add wsdump.py tool\r\n\r\n- v0.5.2\r\n\r\n - fix Echo App Demo Throw Error: 'NoneType' object has no attribute 'opcode (ISSUE#10)\r\n\r\n- v0.5.1\r\n\r\n - delete invalid print statement.\r\n\r\n- v0.5.0\r\n\r\n - support hybi-13 protocol.\r\n\r\n- v0.4.1\r\n\r\n - fix incorrect custom header order(ISSUE#1)\r\n\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file
diff --git a/stylesheets/print.css b/stylesheets/print.css
new file mode 100644
index 0000000..541695b
--- /dev/null
+++ b/stylesheets/print.css
@@ -0,0 +1,226 @@
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+body {
+ font-size: 13px;
+ line-height: 1.5;
+ font-family: 'Helvetica Neue', Helvetica, Arial, serif;
+ color: #000;
+}
+
+a {
+ color: #d5000d;
+ font-weight: bold;
+}
+
+header {
+ padding-top: 35px;
+ padding-bottom: 10px;
+}
+
+header h1 {
+ font-weight: bold;
+ letter-spacing: -1px;
+ font-size: 48px;
+ color: #303030;
+ line-height: 1.2;
+}
+
+header h2 {
+ letter-spacing: -1px;
+ font-size: 24px;
+ color: #aaa;
+ font-weight: normal;
+ line-height: 1.3;
+}
+#downloads {
+ display: none;
+}
+#main_content {
+ padding-top: 20px;
+}
+
+code, pre {
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
+ color: #222;
+ margin-bottom: 30px;
+ font-size: 12px;
+}
+
+code {
+ padding: 0 3px;
+}
+
+pre {
+ border: solid 1px #ddd;
+ padding: 20px;
+ overflow: auto;
+}
+pre code {
+ padding: 0;
+}
+
+ul, ol, dl {
+ margin-bottom: 20px;
+}
+
+
+/* COMMON STYLES */
+
+table {
+ width: 100%;
+ border: 1px solid #ebebeb;
+}
+
+th {
+ font-weight: 500;
+}
+
+td {
+ border: 1px solid #ebebeb;
+ text-align: center;
+ font-weight: 300;
+}
+
+form {
+ background: #f2f2f2;
+ padding: 20px;
+
+}
+
+
+/* GENERAL ELEMENT TYPE STYLES */
+
+h1 {
+ font-size: 2.8em;
+}
+
+h2 {
+ font-size: 22px;
+ font-weight: bold;
+ color: #303030;
+ margin-bottom: 8px;
+}
+
+h3 {
+ color: #d5000d;
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 8px;
+}
+
+h4 {
+ font-size: 16px;
+ color: #303030;
+ font-weight: bold;
+}
+
+h5 {
+ font-size: 1em;
+ color: #303030;
+}
+
+h6 {
+ font-size: .8em;
+ color: #303030;
+}
+
+p {
+ font-weight: 300;
+ margin-bottom: 20px;
+}
+
+a {
+ text-decoration: none;
+}
+
+p a {
+ font-weight: 400;
+}
+
+blockquote {
+ font-size: 1.6em;
+ border-left: 10px solid #e9e9e9;
+ margin-bottom: 20px;
+ padding: 0 0 0 30px;
+}
+
+ul li {
+ list-style: disc inside;
+ padding-left: 20px;
+}
+
+ol li {
+ list-style: decimal inside;
+ padding-left: 3px;
+}
+
+dl dd {
+ font-style: italic;
+ font-weight: 100;
+}
+
+footer {
+ margin-top: 40px;
+ padding-top: 20px;
+ padding-bottom: 30px;
+ font-size: 13px;
+ color: #aaa;
+}
+
+footer a {
+ color: #666;
+}
+
+/* MISC */
+.clearfix:after {
+ clear: both;
+ content: '.';
+ display: block;
+ visibility: hidden;
+ height: 0;
+}
+
+.clearfix {display: inline-block;}
+* html .clearfix {height: 1%;}
+.clearfix {display: block;} \ No newline at end of file
diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css
index 1926cfd..c6a6452 100644
--- a/stylesheets/pygment_trac.css
+++ b/stylesheets/pygment_trac.css
@@ -1,60 +1,69 @@
-.highlight .hll { background-color: #49483e }
-.highlight { background: #3A3C42; color: #f8f8f2 }
-.highlight .c { color: #75715e } /* Comment */
-.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
-.highlight .k { color: #66d9ef } /* Keyword */
-.highlight .l { color: #ae81ff } /* Literal */
-.highlight .n { color: #f8f8f2 } /* Name */
-.highlight .o { color: #f92672 } /* Operator */
-.highlight .p { color: #f8f8f2 } /* Punctuation */
-.highlight .cm { color: #75715e } /* Comment.Multiline */
-.highlight .cp { color: #75715e } /* Comment.Preproc */
-.highlight .c1 { color: #75715e } /* Comment.Single */
-.highlight .cs { color: #75715e } /* Comment.Special */
+.highlight { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .kc { color: #66d9ef } /* Keyword.Constant */
-.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
-.highlight .kn { color: #f92672 } /* Keyword.Namespace */
-.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
-.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
-.highlight .kt { color: #66d9ef } /* Keyword.Type */
-.highlight .ld { color: #e6db74 } /* Literal.Date */
-.highlight .m { color: #ae81ff } /* Literal.Number */
-.highlight .s { color: #e6db74 } /* Literal.String */
-.highlight .na { color: #a6e22e } /* Name.Attribute */
-.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
-.highlight .nc { color: #a6e22e } /* Name.Class */
-.highlight .no { color: #66d9ef } /* Name.Constant */
-.highlight .nd { color: #a6e22e } /* Name.Decorator */
-.highlight .ni { color: #f8f8f2 } /* Name.Entity */
-.highlight .ne { color: #a6e22e } /* Name.Exception */
-.highlight .nf { color: #a6e22e } /* Name.Function */
-.highlight .nl { color: #f8f8f2 } /* Name.Label */
-.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
-.highlight .nx { color: #a6e22e } /* Name.Other */
-.highlight .py { color: #f8f8f2 } /* Name.Property */
-.highlight .nt { color: #f92672 } /* Name.Tag */
-.highlight .nv { color: #f8f8f2 } /* Name.Variable */
-.highlight .ow { color: #f92672 } /* Operator.Word */
-.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
-.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
-.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
-.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
-.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
-.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
-.highlight .sc { color: #e6db74 } /* Literal.String.Char */
-.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
-.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
-.highlight .se { color: #ae81ff } /* Literal.String.Escape */
-.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
-.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
-.highlight .sx { color: #e6db74 } /* Literal.String.Other */
-.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
-.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
-.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
-.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
-.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
-.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
-.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
new file mode 100644
index 0000000..020ad6d
--- /dev/null
+++ b/stylesheets/stylesheet.css
@@ -0,0 +1,371 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/* LAYOUT STYLES */
+body {
+ font-size: 1em;
+ line-height: 1.5;
+ background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat;
+ font-family: 'Helvetica Neue', Helvetica, Arial, serif;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
+ color: #6d6d6d;
+}
+
+a {
+ color: #d5000d;
+}
+a:hover {
+ color: #c5000c;
+}
+
+header {
+ padding-top: 35px;
+ padding-bottom: 25px;
+}
+
+header h1 {
+ font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-weight: 900;
+ letter-spacing: -1px;
+ font-size: 48px;
+ color: #303030;
+ line-height: 1.2;
+}
+
+header h2 {
+ letter-spacing: -1px;
+ font-size: 24px;
+ color: #aaa;
+ font-weight: normal;
+ line-height: 1.3;
+}
+
+#container {
+ background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat;
+ min-height: 595px;
+}
+
+.inner {
+ width: 620px;
+ margin: 0 auto;
+}
+
+#container .inner img {
+ max-width: 100%;
+}
+
+#downloads {
+ margin-bottom: 40px;
+}
+
+a.button {
+ -moz-border-radius: 30px;
+ -webkit-border-radius: 30px;
+ border-radius: 30px;
+ border-top: solid 1px #cbcbcb;
+ border-left: solid 1px #b7b7b7;
+ border-right: solid 1px #b7b7b7;
+ border-bottom: solid 1px #b3b3b3;
+ color: #303030;
+ line-height: 25px;
+ font-weight: bold;
+ font-size: 15px;
+ padding: 12px 8px 12px 8px;
+ display: block;
+ float: left;
+ width: 179px;
+ margin-right: 14px;
+ background: #fdfdfd; /* Old browsers */
+ background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */
+ background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */
+ -webkit-box-shadow: 10px 10px 5px #888;
+ -moz-box-shadow: 10px 10px 5px #888;
+ box-shadow: 0px 1px 5px #e8e8e8;
+}
+a.button:hover {
+ border-top: solid 1px #b7b7b7;
+ border-left: solid 1px #b3b3b3;
+ border-right: solid 1px #b3b3b3;
+ border-bottom: solid 1px #b3b3b3;
+ background: #fafafa; /* Old browsers */
+ background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */
+ background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */
+}
+
+a.button span {
+ padding-left: 50px;
+ display: block;
+ height: 23px;
+}
+
+#download-zip span {
+ background: transparent url(../images/zip-icon.png) 12px 50% no-repeat;
+}
+#download-tar-gz span {
+ background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat;
+}
+#view-on-github span {
+ background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat;
+}
+#view-on-github {
+ margin-right: 0;
+}
+
+code, pre {
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
+ color: #222;
+ margin-bottom: 30px;
+ font-size: 14px;
+}
+
+code {
+ background-color: #f2f2f2;
+ border: solid 1px #ddd;
+ padding: 0 3px;
+}
+
+pre {
+ padding: 20px;
+ background: #303030;
+ color: #f2f2f2;
+ text-shadow: none;
+ overflow: auto;
+}
+pre code {
+ color: #f2f2f2;
+ background-color: #303030;
+ border: none;
+ padding: 0;
+}
+
+ul, ol, dl {
+ margin-bottom: 20px;
+}
+
+
+/* COMMON STYLES */
+
+hr {
+ height: 1px;
+ line-height: 1px;
+ margin-top: 1em;
+ padding-bottom: 1em;
+ border: none;
+ background: transparent url('../images/hr.png') 50% 0 no-repeat;
+}
+
+strong {
+ font-weight: bold;
+}
+
+em {
+ font-style: italic;
+}
+
+table {
+ width: 100%;
+ border: 1px solid #ebebeb;
+}
+
+th {
+ font-weight: 500;
+}
+
+td {
+ border: 1px solid #ebebeb;
+ text-align: center;
+ font-weight: 300;
+}
+
+form {
+ background: #f2f2f2;
+ padding: 20px;
+
+}
+
+
+/* GENERAL ELEMENT TYPE STYLES */
+
+h1 {
+ font-size: 32px;
+}
+
+h2 {
+ font-size: 22px;
+ font-weight: bold;
+ color: #303030;
+ margin-bottom: 8px;
+}
+
+h3 {
+ color: #d5000d;
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 8px;
+}
+
+h4 {
+ font-size: 16px;
+ color: #303030;
+ font-weight: bold;
+}
+
+h5 {
+ font-size: 1em;
+ color: #303030;
+}
+
+h6 {
+ font-size: .8em;
+ color: #303030;
+}
+
+p {
+ font-weight: 300;
+ margin-bottom: 20px;
+}
+
+a {
+ text-decoration: none;
+}
+
+p a {
+ font-weight: 400;
+}
+
+blockquote {
+ font-size: 1.6em;
+ border-left: 10px solid #e9e9e9;
+ margin-bottom: 20px;
+ padding: 0 0 0 30px;
+}
+
+ul li {
+ list-style: disc inside;
+ padding-left: 20px;
+}
+
+ol li {
+ list-style: decimal inside;
+ padding-left: 3px;
+}
+
+dl dt {
+ color: #303030;
+}
+
+footer {
+ background: transparent url('../images/hr.png') 0 0 no-repeat;
+ margin-top: 40px;
+ padding-top: 20px;
+ padding-bottom: 30px;
+ font-size: 13px;
+ color: #aaa;
+}
+
+footer a {
+ color: #666;
+}
+footer a:hover {
+ color: #444;
+}
+
+/* MISC */
+.clearfix:after {
+ clear: both;
+ content: '.';
+ display: block;
+ visibility: hidden;
+ height: 0;
+}
+
+.clearfix {display: inline-block;}
+* html .clearfix {height: 1%;}
+.clearfix {display: block;}
+
+/* #Media Queries
+================================================== */
+
+/* Smaller than standard 960 (devices and browsers) */
+@media only screen and (max-width: 959px) {}
+
+/* Tablet Portrait size to standard 960 (devices and browsers) */
+@media only screen and (min-width: 768px) and (max-width: 959px) {}
+
+/* All Mobile Sizes (devices and browser) */
+@media only screen and (max-width: 767px) {
+ header {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ }
+ #downloads {
+ margin-bottom: 25px;
+ }
+ #download-zip, #download-tar-gz {
+ display: none;
+ }
+ .inner {
+ width: 94%;
+ margin: 0 auto;
+ }
+}
+
+/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
+@media only screen and (min-width: 480px) and (max-width: 767px) {}
+
+/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
+@media only screen and (max-width: 479px) {}