mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-08-12 12:19:01 +08:00
Merge pull request #133 from louquillio/port-spec-to-markdown
Port spec to Markdown/Jekyll
This commit is contained in:
commit
ee618da82e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
docs/_site
|
1
.ruby-version
Normal file
1
.ruby-version
Normal file
@ -0,0 +1 @@
|
||||
2.3.0
|
199
docs/Gemfile.lock
Normal file
199
docs/Gemfile.lock
Normal file
@ -0,0 +1,199 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.8)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.1)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
colorator (1.1.0)
|
||||
ethon (0.10.1)
|
||||
ffi (>= 1.3.0)
|
||||
execjs (2.7.0)
|
||||
faraday (0.12.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.9.18)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
github-pages (141)
|
||||
activesupport (= 4.2.8)
|
||||
github-pages-health-check (= 1.3.4)
|
||||
jekyll (= 3.4.3)
|
||||
jekyll-avatar (= 0.4.2)
|
||||
jekyll-coffeescript (= 1.0.1)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.9.2)
|
||||
jekyll-gist (= 1.4.0)
|
||||
jekyll-github-metadata (= 2.4.0)
|
||||
jekyll-mentions (= 1.2.0)
|
||||
jekyll-optional-front-matter (= 0.1.2)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.1.0)
|
||||
jekyll-redirect-from (= 0.12.1)
|
||||
jekyll-relative-links (= 0.4.1)
|
||||
jekyll-sass-converter (= 1.5.0)
|
||||
jekyll-seo-tag (= 2.2.3)
|
||||
jekyll-sitemap (= 1.0.0)
|
||||
jekyll-swiss (= 0.4.0)
|
||||
jekyll-theme-architect (= 0.0.4)
|
||||
jekyll-theme-cayman (= 0.0.4)
|
||||
jekyll-theme-dinky (= 0.0.4)
|
||||
jekyll-theme-hacker (= 0.0.4)
|
||||
jekyll-theme-leap-day (= 0.0.4)
|
||||
jekyll-theme-merlot (= 0.0.4)
|
||||
jekyll-theme-midnight (= 0.0.4)
|
||||
jekyll-theme-minimal (= 0.0.4)
|
||||
jekyll-theme-modernist (= 0.0.4)
|
||||
jekyll-theme-primer (= 0.2.1)
|
||||
jekyll-theme-slate (= 0.0.4)
|
||||
jekyll-theme-tactile (= 0.0.4)
|
||||
jekyll-theme-time-machine (= 0.0.4)
|
||||
jekyll-titles-from-headings (= 0.2.0)
|
||||
jemoji (= 0.8.0)
|
||||
kramdown (= 1.13.2)
|
||||
liquid (= 3.0.6)
|
||||
listen (= 3.0.6)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.1.1)
|
||||
rouge (= 1.11.1)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.3.4)
|
||||
addressable (~> 2.3)
|
||||
net-dns (~> 0.8)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 2.0)
|
||||
typhoeus (~> 0.7)
|
||||
html-pipeline (2.6.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
i18n (0.8.5)
|
||||
jekyll (3.4.3)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.4.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.0.1)
|
||||
coffee-script (~> 2.2)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.9.2)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-gist (1.4.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.4.0)
|
||||
jekyll (~> 3.1)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-optional-front-matter (0.1.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.1.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-redirect-from (0.12.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-relative-links (0.4.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.5.0)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.2.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.0.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-swiss (0.4.0)
|
||||
jekyll-theme-architect (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-cayman (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-dinky (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-hacker (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-leap-day (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-merlot (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-midnight (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-minimal (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-modernist (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-primer (0.2.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-slate (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-tactile (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-time-machine (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-titles-from-headings (0.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
jemoji (0.8.0)
|
||||
activesupport (~> 4.0)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0)
|
||||
kramdown (1.13.2)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.6)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.2.0)
|
||||
minima (2.1.1)
|
||||
jekyll (~> 3.3)
|
||||
minitest (5.10.2)
|
||||
multipart-post (2.0.0)
|
||||
net-dns (0.8.0)
|
||||
nokogiri (1.8.0)
|
||||
mini_portile2 (~> 2.2.0)
|
||||
octokit (4.7.0)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.5)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.25)
|
||||
sawyer (0.8.1)
|
||||
addressable (>= 2.3.5, < 2.6)
|
||||
faraday (~> 0.8, < 1.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
typhoeus (0.8.0)
|
||||
ethon (>= 0.8.0)
|
||||
tzinfo (1.2.3)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.3.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.6
|
35
docs/_config.yml
Normal file
35
docs/_config.yml
Normal file
@ -0,0 +1,35 @@
|
||||
# Welcome to Jekyll!
|
||||
#
|
||||
# This config file is meant for settings that affect your whole blog, values
|
||||
# which you are expected to set up once and rarely edit after that. If you find
|
||||
# yourself editing this file very often, consider using Jekyll's data files
|
||||
# feature for the data you need to update frequently.
|
||||
#
|
||||
# For technical reasons, this file is *NOT* reloaded automatically when you use
|
||||
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
|
||||
|
||||
# Site settings
|
||||
# These are used to personalize your new site. If you look in the HTML files,
|
||||
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
|
||||
# You can create any custom variable you would like, and they will be accessible
|
||||
# in the templates via {{ site.myvariable }}.
|
||||
title: Draco 3D Data Compression
|
||||
|
||||
email: webmaster@webmproject.org
|
||||
description: >
|
||||
Description here
|
||||
baseurl: "/docs" # the subpath of your site, e.g. /blog
|
||||
url: "" # the base hostname & protocol for your site, e.g. http://example.com
|
||||
twitter_username: webm
|
||||
github_username: webmproject
|
||||
timezone: America/Los_Angeles
|
||||
|
||||
# Build settings
|
||||
markdown: kramdown
|
||||
gems:
|
||||
exclude:
|
||||
- Gemfile
|
||||
- Gemfile.lock
|
||||
- docs/_site
|
||||
sass:
|
||||
style: compressed
|
29
docs/_layouts/spec.html
Normal file
29
docs/_layouts/spec.html
Normal file
@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{{ page.title }}</title>
|
||||
<link rel="stylesheet" href="{{ 'assets/css/spec-style.css' | relative_url }}">
|
||||
<style>
|
||||
body {counter-reset: h2}
|
||||
h2 {counter-reset: h3}
|
||||
h3 {counter-reset: h4}
|
||||
h4 {counter-reset: h5}
|
||||
h5 {counter-reset: h6}
|
||||
|
||||
h2:before {counter-increment: h2; content: counter(h2) ". "}
|
||||
h3:before {counter-increment: h3; content: counter(h2) "." counter(h3) ". "}
|
||||
h4:before {counter-increment: h4; content: counter(h2) "." counter(h3) "." counter(h4) ". "}
|
||||
h5:before {counter-increment: h5; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "}
|
||||
h6:before {counter-increment: h6; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "}
|
||||
|
||||
h2.nocount:before, h3.nocount:before, h4.nocount:before, h5.nocount:before, h6.nocount:before { content: ""; counter-increment: none }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{{ content }}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
23
docs/assets/css/pygments/README.md
Normal file
23
docs/assets/css/pygments/README.md
Normal file
@ -0,0 +1,23 @@
|
||||
# jekyll-pygments-themes
|
||||
|
||||
A set of CSS theme files for Pygments (Python-based code highlighting tool)
|
||||
created from the original built-in Pygments styles, ready for use with Jekyll.
|
||||
|
||||
## Theme Previews and Custom Theme Builder
|
||||
- <https://jwarby.github.io/jekyll-pygments-themes>
|
||||
|
||||
## Using Themes Without Jekyll
|
||||
If you want to use the themes with something other than Jekyll, you may need to
|
||||
remove or change the CSS style prefix of `.highlight`.
|
||||
|
||||
## Links
|
||||
|
||||
- [Jekyll](http://jekyllrb.com/) ([direct link to code highlighting documentation](http://jekyllrb.com/docs/templates/#code-snippet-highlighting))
|
||||
- [Pygments](http://pygments.org)
|
||||
|
||||
## Hacking
|
||||
|
||||
If you want to hack on the site, check out the [gh-pages](https://github.com/jwarby/jekyll-pygments-themes/tree/gh-pages) branch.
|
||||
|
||||
## Acknowledgements
|
||||
Forked from [richleland/pygments-css](https://github.com/richleland/pygments-css).
|
24
docs/assets/css/pygments/UNLICENSE.txt
Normal file
24
docs/assets/css/pygments/UNLICENSE.txt
Normal file
@ -0,0 +1,24 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org>
|
58
docs/assets/css/pygments/autumn.css
Normal file
58
docs/assets/css/pygments/autumn.css
Normal file
@ -0,0 +1,58 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #aaaaaa; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
||||
.highlight .k { color: #0000aa } /* Keyword */
|
||||
.highlight .cm { color: #aaaaaa; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #4c8317 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #aaaaaa; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #0000aa; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #aa0000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00aa00 } /* Generic.Inserted */
|
||||
.highlight .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #0000aa } /* Keyword.Constant */
|
||||
.highlight .kd { color: #0000aa } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #0000aa } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #0000aa } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #0000aa } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #00aaaa } /* Keyword.Type */
|
||||
.highlight .m { color: #009999 } /* Literal.Number */
|
||||
.highlight .s { color: #aa5500 } /* Literal.String */
|
||||
.highlight .na { color: #1e90ff } /* Name.Attribute */
|
||||
.highlight .nb { color: #00aaaa } /* Name.Builtin */
|
||||
.highlight .nc { color: #00aa00; text-decoration: underline } /* Name.Class */
|
||||
.highlight .no { color: #aa0000 } /* Name.Constant */
|
||||
.highlight .nd { color: #888888 } /* Name.Decorator */
|
||||
.highlight .ni { color: #800000; font-weight: bold } /* Name.Entity */
|
||||
.highlight .nf { color: #00aa00 } /* Name.Function */
|
||||
.highlight .nn { color: #00aaaa; text-decoration: underline } /* Name.Namespace */
|
||||
.highlight .nt { color: #1e90ff; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #aa0000 } /* Name.Variable */
|
||||
.highlight .ow { color: #0000aa } /* 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: #aa5500 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #aa5500 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #aa5500 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #aa5500 } /* Literal.String.Double */
|
||||
.highlight .se { color: #aa5500 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #aa5500 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #aa5500 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #aa5500 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #009999 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #aa5500 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #0000aa } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #00aaaa } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #aa0000 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #aa0000 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #aa0000 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
46
docs/assets/css/pygments/borland.css
Normal file
46
docs/assets/css/pygments/borland.css
Normal file
@ -0,0 +1,46 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #008800; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { color: #000080; font-weight: bold } /* Keyword */
|
||||
.highlight .cm { color: #008800; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #008080 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #008800; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #008800; font-weight: bold } /* Comment.Special */
|
||||
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||
.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 .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #000080; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #000080; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #000080; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #000080; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #000080; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #000080; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #0000FF } /* Literal.Number */
|
||||
.highlight .s { color: #0000FF } /* Literal.String */
|
||||
.highlight .na { color: #FF0000 } /* Name.Attribute */
|
||||
.highlight .nt { color: #000080; font-weight: bold } /* Name.Tag */
|
||||
.highlight .ow { font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #0000FF } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #0000FF } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0000FF } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #0000FF } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #0000FF } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #800080 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #0000FF } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #0000FF } /* Literal.String.Double */
|
||||
.highlight .se { color: #0000FF } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #0000FF } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #0000FF } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #0000FF } /* Literal.String.Other */
|
||||
.highlight .sr { color: #0000FF } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #0000FF } /* Literal.String.Single */
|
||||
.highlight .ss { color: #0000FF } /* Literal.String.Symbol */
|
||||
.highlight .il { color: #0000FF } /* Literal.Number.Integer.Long */
|
34
docs/assets/css/pygments/bw.css
Normal file
34
docs/assets/css/pygments/bw.css
Normal file
@ -0,0 +1,34 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { font-weight: bold } /* Keyword */
|
||||
.highlight .cm { font-style: italic } /* Comment.Multiline */
|
||||
.highlight .c1 { font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { font-style: italic } /* Comment.Special */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gh { font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gp { font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .s { font-style: italic } /* Literal.String */
|
||||
.highlight .nc { font-weight: bold } /* Name.Class */
|
||||
.highlight .ni { font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { font-weight: bold } /* Name.Exception */
|
||||
.highlight .nn { font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { font-weight: bold } /* Name.Tag */
|
||||
.highlight .ow { font-weight: bold } /* Operator.Word */
|
||||
.highlight .sb { font-style: italic } /* Literal.String.Backtick */
|
||||
.highlight .sc { font-style: italic } /* Literal.String.Char */
|
||||
.highlight .sd { font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { font-style: italic } /* Literal.String.Double */
|
||||
.highlight .se { font-weight: bold; font-style: italic } /* Literal.String.Escape */
|
||||
.highlight .sh { font-style: italic } /* Literal.String.Heredoc */
|
||||
.highlight .si { font-weight: bold; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { font-style: italic } /* Literal.String.Other */
|
||||
.highlight .sr { font-style: italic } /* Literal.String.Regex */
|
||||
.highlight .s1 { font-style: italic } /* Literal.String.Single */
|
||||
.highlight .ss { font-style: italic } /* Literal.String.Symbol */
|
61
docs/assets/css/pygments/colorful.css
Normal file
61
docs/assets/css/pygments/colorful.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #808080 } /* Comment */
|
||||
.highlight .err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
||||
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #303030 } /* Operator */
|
||||
.highlight .cm { color: #808080 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #507090 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #808080 } /* Comment.Single */
|
||||
.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #003080; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #303090; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #6000E0; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { background-color: #fff0f0 } /* Literal.String */
|
||||
.highlight .na { color: #0000C0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #B00060; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #003060; font-weight: bold } /* Name.Constant */
|
||||
.highlight .nd { color: #505050; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #800000; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #F00000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #0060B0; font-weight: bold } /* Name.Function */
|
||||
.highlight .nl { color: #907000; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #007000 } /* Name.Tag */
|
||||
.highlight .nv { color: #906030 } /* Name.Variable */
|
||||
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0000D0; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #0040D0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #D04020 } /* Literal.String.Doc */
|
||||
.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #606060; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */
|
||||
.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { background-color: #e0e0e0 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #D02000; background-color: #fff0f0 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */
|
||||
.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #A06000 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #306090 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #d07000; font-weight: bold } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #3030B0 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #0000D0; font-weight: bold } /* Literal.Number.Integer.Long */
|
61
docs/assets/css/pygments/default.css
Normal file
61
docs/assets/css/pygments/default.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #408080; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #B00040 } /* Keyword.Type */
|
||||
.highlight .m { color: #666666 } /* Literal.Number */
|
||||
.highlight .s { color: #BA2121 } /* Literal.String */
|
||||
.highlight .na { color: #7D9029 } /* Name.Attribute */
|
||||
.highlight .nb { color: #008000 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #880000 } /* Name.Constant */
|
||||
.highlight .nd { color: #AA22FF } /* Name.Decorator */
|
||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #0000FF } /* Name.Function */
|
||||
.highlight .nl { color: #A0A000 } /* Name.Label */
|
||||
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #19177C } /* Name.Variable */
|
||||
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #666666 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
|
||||
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #008000 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #19177C } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #19177C } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
|
61
docs/assets/css/pygments/emacs.css
Normal file
61
docs/assets/css/pygments/emacs.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #008800; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #AA22FF; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .cm { color: #008800; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #008800 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #008800; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #008800; font-weight: bold } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #AA22FF; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #AA22FF } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #00BB00; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #666666 } /* Literal.Number */
|
||||
.highlight .s { color: #BB4444 } /* Literal.String */
|
||||
.highlight .na { color: #BB4444 } /* Name.Attribute */
|
||||
.highlight .nb { color: #AA22FF } /* Name.Builtin */
|
||||
.highlight .nc { color: #0000FF } /* Name.Class */
|
||||
.highlight .no { color: #880000 } /* Name.Constant */
|
||||
.highlight .nd { color: #AA22FF } /* Name.Decorator */
|
||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #00A000 } /* Name.Function */
|
||||
.highlight .nl { color: #A0A000 } /* Name.Label */
|
||||
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #B8860B } /* Name.Variable */
|
||||
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #666666 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #BB4444 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #BB4444 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #BB4444 } /* Literal.String.Double */
|
||||
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #BB4444 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #008000 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #BB4444 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #B8860B } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #AA22FF } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #B8860B } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #B8860B } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #B8860B } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
|
61
docs/assets/css/pygments/friendly.css
Normal file
61
docs/assets/css/pygments/friendly.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #60a0b0; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||
.highlight .m { color: #40a070 } /* Literal.Number */
|
||||
.highlight .s { color: #4070a0 } /* Literal.String */
|
||||
.highlight .na { color: #4070a0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #60add5 } /* Name.Constant */
|
||||
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||
.highlight .nf { color: #06287e } /* Name.Function */
|
||||
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #bb60d5 } /* Name.Variable */
|
||||
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #40a070 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #40a070 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #40a070 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #40a070 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */
|
70
docs/assets/css/pygments/fruity.css
Normal file
70
docs/assets/css/pygments/fruity.css
Normal file
@ -0,0 +1,70 @@
|
||||
.highlight pre { background-color: #333; }
|
||||
.highlight .hll { background-color: #333333 }
|
||||
.highlight .c { color: #008800; font-style: italic; background-color: #0f140f } /* Comment */
|
||||
.highlight .err { color: #ffffff } /* Error */
|
||||
.highlight .g { color: #ffffff } /* Generic */
|
||||
.highlight .k { color: #fb660a; font-weight: bold } /* Keyword */
|
||||
.highlight .l { color: #ffffff } /* Literal */
|
||||
.highlight .n { color: #ffffff } /* Name */
|
||||
.highlight .o { color: #ffffff } /* Operator */
|
||||
.highlight .x { color: #ffffff } /* Other */
|
||||
.highlight .p { color: #ffffff } /* Punctuation */
|
||||
.highlight .cm { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Multiline */
|
||||
.highlight .cp { color: #ff0007; font-weight: bold; font-style: italic; background-color: #0f140f } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Single */
|
||||
.highlight .cs { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Special */
|
||||
.highlight .gd { color: #ffffff } /* Generic.Deleted */
|
||||
.highlight .ge { color: #ffffff } /* Generic.Emph */
|
||||
.highlight .gr { color: #ffffff } /* Generic.Error */
|
||||
.highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #ffffff } /* Generic.Inserted */
|
||||
.highlight .go { color: #444444; background-color: #222222 } /* Generic.Output */
|
||||
.highlight .gp { color: #ffffff } /* Generic.Prompt */
|
||||
.highlight .gs { color: #ffffff } /* Generic.Strong */
|
||||
.highlight .gu { color: #ffffff; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #ffffff } /* Generic.Traceback */
|
||||
.highlight .kc { color: #fb660a; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #fb660a; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #fb660a; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #fb660a } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #fb660a; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #cdcaa9; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .ld { color: #ffffff } /* Literal.Date */
|
||||
.highlight .m { color: #0086f7; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { color: #0086d2 } /* Literal.String */
|
||||
.highlight .na { color: #ff0086; font-weight: bold } /* Name.Attribute */
|
||||
.highlight .nb { color: #ffffff } /* Name.Builtin */
|
||||
.highlight .nc { color: #ffffff } /* Name.Class */
|
||||
.highlight .no { color: #0086d2 } /* Name.Constant */
|
||||
.highlight .nd { color: #ffffff } /* Name.Decorator */
|
||||
.highlight .ni { color: #ffffff } /* Name.Entity */
|
||||
.highlight .ne { color: #ffffff } /* Name.Exception */
|
||||
.highlight .nf { color: #ff0086; font-weight: bold } /* Name.Function */
|
||||
.highlight .nl { color: #ffffff } /* Name.Label */
|
||||
.highlight .nn { color: #ffffff } /* Name.Namespace */
|
||||
.highlight .nx { color: #ffffff } /* Name.Other */
|
||||
.highlight .py { color: #ffffff } /* Name.Property */
|
||||
.highlight .nt { color: #fb660a; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #fb660a } /* Name.Variable */
|
||||
.highlight .ow { color: #ffffff } /* Operator.Word */
|
||||
.highlight .w { color: #888888 } /* Text.Whitespace */
|
||||
.highlight .mf { color: #0086f7; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #0086f7; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0086f7; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #0086f7; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #0086d2 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #0086d2 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #0086d2 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #0086d2 } /* Literal.String.Double */
|
||||
.highlight .se { color: #0086d2 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #0086d2 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #0086d2 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #0086d2 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #0086d2 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #0086d2 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #0086d2 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #ffffff } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #fb660a } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #fb660a } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #fb660a } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #0086f7; font-weight: bold } /* Literal.Number.Integer.Long */
|
61
docs/assets/css/pygments/github.css
Normal file
61
docs/assets/css/pygments/github.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { color: #000000; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #000000; font-weight: bold } /* Operator */
|
||||
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #999999; font-weight: bold; font-style: italic } /* 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 .ge { color: #000000; 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 .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #000000; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #009999 } /* Literal.Number */
|
||||
.highlight .s { color: #d01040 } /* 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 .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */
|
||||
.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 .nl { color: #990000; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #555555 } /* Name.Namespace */
|
||||
.highlight .nt { color: #000080 } /* Name.Tag */
|
||||
.highlight .nv { color: #008080 } /* Name.Variable */
|
||||
.highlight .ow { color: #000000; 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: #d01040 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #d01040 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #d01040 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #d01040 } /* Literal.String.Double */
|
||||
.highlight .se { color: #d01040 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #d01040 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #d01040 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #d01040 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #d01040 } /* 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 */
|
61
docs/assets/css/pygments/manni.css
Normal file
61
docs/assets/css/pygments/manni.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #0099FF; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */
|
||||
.highlight .k { color: #006699; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #555555 } /* Operator */
|
||||
.highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #009999 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */
|
||||
.highlight .go { color: #AAAAAA } /* Generic.Output */
|
||||
.highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #99CC66 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #006699 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #FF6600 } /* Literal.Number */
|
||||
.highlight .s { color: #CC3300 } /* Literal.String */
|
||||
.highlight .na { color: #330099 } /* Name.Attribute */
|
||||
.highlight .nb { color: #336666 } /* Name.Builtin */
|
||||
.highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #336600 } /* Name.Constant */
|
||||
.highlight .nd { color: #9999FF } /* Name.Decorator */
|
||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #CC00FF } /* Name.Function */
|
||||
.highlight .nl { color: #9999FF } /* Name.Label */
|
||||
.highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #003333 } /* Name.Variable */
|
||||
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #FF6600 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #FF6600 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #FF6600 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #FF6600 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #CC3300 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #CC3300 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #CC3300 } /* Literal.String.Double */
|
||||
.highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #AA0000 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #CC3300 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #33AAAA } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #CC3300 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #003333 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #003333 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #003333 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */
|
66
docs/assets/css/pygments/monokai.css
Normal file
66
docs/assets/css/pygments/monokai.css
Normal file
@ -0,0 +1,66 @@
|
||||
.highlight pre, pre.highlight { background-color: #272822; }
|
||||
.highlight code { color: #fff; }
|
||||
.highlight .hll { background-color: #272822; }
|
||||
.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 .ge { font-style: italic } /* Generic.Emph */
|
||||
.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 */
|
||||
|
||||
.highlight .gh { } /* Generic Heading & Diff Header */
|
||||
.highlight .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
|
||||
.highlight .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */
|
||||
.highlight .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */
|
61
docs/assets/css/pygments/murphy.css
Normal file
61
docs/assets/css/pygments/murphy.css
Normal file
@ -0,0 +1,61 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #606060; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
||||
.highlight .k { color: #208090; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #303030 } /* Operator */
|
||||
.highlight .cm { color: #606060; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #507090 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #606060; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #c00000; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #208090; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #208090; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #208090; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #0080f0; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #208090; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #6060f0; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #6000E0; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { background-color: #e0e0ff } /* Literal.String */
|
||||
.highlight .na { color: #000070 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #e090e0; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #50e0d0; font-weight: bold } /* Name.Constant */
|
||||
.highlight .nd { color: #505050; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #800000 } /* Name.Entity */
|
||||
.highlight .ne { color: #F00000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #50e0d0; font-weight: bold } /* Name.Function */
|
||||
.highlight .nl { color: #907000; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #007000 } /* Name.Tag */
|
||||
.highlight .nv { color: #003060 } /* Name.Variable */
|
||||
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #6060f0; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sb { background-color: #e0e0ff } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #8080F0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #D04020 } /* Literal.String.Doc */
|
||||
.highlight .s2 { background-color: #e0e0ff } /* Literal.String.Double */
|
||||
.highlight .se { color: #606060; font-weight: bold; background-color: #e0e0ff } /* Literal.String.Escape */
|
||||
.highlight .sh { background-color: #e0e0ff } /* Literal.String.Heredoc */
|
||||
.highlight .si { background-color: #e0e0e0 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #f08080; background-color: #e0e0ff } /* Literal.String.Other */
|
||||
.highlight .sr { color: #000000; background-color: #e0e0ff } /* Literal.String.Regex */
|
||||
.highlight .s1 { background-color: #e0e0ff } /* Literal.String.Single */
|
||||
.highlight .ss { color: #f0c080 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #c0c0f0 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #f08040 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #a0a0f0 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #6060f0; font-weight: bold } /* Literal.Number.Integer.Long */
|
70
docs/assets/css/pygments/native.css
Normal file
70
docs/assets/css/pygments/native.css
Normal file
@ -0,0 +1,70 @@
|
||||
.highlight pre { background-color: #404040 }
|
||||
.highlight .hll { background-color: #404040 }
|
||||
.highlight .c { color: #999999; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .g { color: #d0d0d0 } /* Generic */
|
||||
.highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
|
||||
.highlight .l { color: #d0d0d0 } /* Literal */
|
||||
.highlight .n { color: #d0d0d0 } /* Name */
|
||||
.highlight .o { color: #d0d0d0 } /* Operator */
|
||||
.highlight .x { color: #d0d0d0 } /* Other */
|
||||
.highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||
.highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||
.highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||
.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #d22323 } /* Generic.Error */
|
||||
.highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||
.highlight .go { color: #cccccc } /* Generic.Output */
|
||||
.highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||
.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||
.highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||
.highlight .m { color: #3677a9 } /* Literal.Number */
|
||||
.highlight .s { color: #ed9d13 } /* Literal.String */
|
||||
.highlight .na { color: #bbbbbb } /* Name.Attribute */
|
||||
.highlight .nb { color: #24909d } /* Name.Builtin */
|
||||
.highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
|
||||
.highlight .no { color: #40ffff } /* Name.Constant */
|
||||
.highlight .nd { color: #ffa500 } /* Name.Decorator */
|
||||
.highlight .ni { color: #d0d0d0 } /* Name.Entity */
|
||||
.highlight .ne { color: #bbbbbb } /* Name.Exception */
|
||||
.highlight .nf { color: #447fcf } /* Name.Function */
|
||||
.highlight .nl { color: #d0d0d0 } /* Name.Label */
|
||||
.highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
|
||||
.highlight .nx { color: #d0d0d0 } /* Name.Other */
|
||||
.highlight .py { color: #d0d0d0 } /* Name.Property */
|
||||
.highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #40ffff } /* Name.Variable */
|
||||
.highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #666666 } /* Text.Whitespace */
|
||||
.highlight .mf { color: #3677a9 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #3677a9 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #3677a9 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #3677a9 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||
.highlight .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #ffa500 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #40ffff } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #40ffff } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */
|
60
docs/assets/css/pygments/pastie.css
Normal file
60
docs/assets/css/pygments/pastie.css
Normal file
@ -0,0 +1,60 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #888888 } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
|
||||
.highlight .cm { color: #888888 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #888888 } /* Comment.Single */
|
||||
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
|
||||
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #303030 } /* Generic.Heading */
|
||||
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
||||
.highlight .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #606060 } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
|
||||
.highlight .na { color: #336699 } /* Name.Attribute */
|
||||
.highlight .nb { color: #003388 } /* Name.Builtin */
|
||||
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
|
||||
.highlight .nd { color: #555555 } /* Name.Decorator */
|
||||
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
|
||||
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
|
||||
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
|
||||
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #336699 } /* Name.Variable */
|
||||
.highlight .ow { color: #008800 } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #336699 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
|
58
docs/assets/css/pygments/perldoc.css
Normal file
58
docs/assets/css/pygments/perldoc.css
Normal file
@ -0,0 +1,58 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #228B22 } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { color: #8B008B; font-weight: bold } /* Keyword */
|
||||
.highlight .cm { color: #228B22 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #1e889b } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #228B22 } /* Comment.Single */
|
||||
.highlight .cs { color: #8B008B; font-weight: bold } /* Comment.Special */
|
||||
.highlight .gd { color: #aa0000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00aa00 } /* Generic.Inserted */
|
||||
.highlight .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #8B008B; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #8B008B; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #8B008B; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #8B008B; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #8B008B; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #a7a7a7; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #B452CD } /* Literal.Number */
|
||||
.highlight .s { color: #CD5555 } /* Literal.String */
|
||||
.highlight .na { color: #658b00 } /* Name.Attribute */
|
||||
.highlight .nb { color: #658b00 } /* Name.Builtin */
|
||||
.highlight .nc { color: #008b45; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #00688B } /* Name.Constant */
|
||||
.highlight .nd { color: #707a7c } /* Name.Decorator */
|
||||
.highlight .ne { color: #008b45; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #008b45 } /* Name.Function */
|
||||
.highlight .nn { color: #008b45; text-decoration: underline } /* Name.Namespace */
|
||||
.highlight .nt { color: #8B008B; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #00688B } /* Name.Variable */
|
||||
.highlight .ow { color: #8B008B } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #B452CD } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #B452CD } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #B452CD } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #B452CD } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #CD5555 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #CD5555 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #CD5555 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #CD5555 } /* Literal.String.Double */
|
||||
.highlight .se { color: #CD5555 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #1c7e71; font-style: italic } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #CD5555 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #cb6c20 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #1c7e71 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #CD5555 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #CD5555 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #658b00 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #00688B } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #00688B } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #00688B } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #B452CD } /* Literal.Number.Integer.Long */
|
69
docs/assets/css/pygments/tango.css
Normal file
69
docs/assets/css/pygments/tango.css
Normal file
@ -0,0 +1,69 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
|
||||
.highlight .g { color: #000000 } /* Generic */
|
||||
.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
|
||||
.highlight .l { color: #000000 } /* Literal */
|
||||
.highlight .n { color: #000000 } /* Name */
|
||||
.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
|
||||
.highlight .x { color: #000000 } /* Other */
|
||||
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
|
||||
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #a40000 } /* Generic.Deleted */
|
||||
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #ef2929 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
|
||||
.highlight .gp { color: #8f5902 } /* Generic.Prompt */
|
||||
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
|
||||
.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .ld { color: #000000 } /* Literal.Date */
|
||||
.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
|
||||
.highlight .s { color: #4e9a06 } /* Literal.String */
|
||||
.highlight .na { color: #c4a000 } /* Name.Attribute */
|
||||
.highlight .nb { color: #204a87 } /* Name.Builtin */
|
||||
.highlight .nc { color: #000000 } /* Name.Class */
|
||||
.highlight .no { color: #000000 } /* Name.Constant */
|
||||
.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #ce5c00 } /* Name.Entity */
|
||||
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #000000 } /* Name.Function */
|
||||
.highlight .nl { color: #f57900 } /* Name.Label */
|
||||
.highlight .nn { color: #000000 } /* Name.Namespace */
|
||||
.highlight .nx { color: #000000 } /* Name.Other */
|
||||
.highlight .py { color: #000000 } /* Name.Property */
|
||||
.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #000000 } /* Name.Variable */
|
||||
.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
|
||||
.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #000000 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #000000 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */
|
59
docs/assets/css/pygments/trac.css
Normal file
59
docs/assets/css/pygments/trac.css
Normal file
@ -0,0 +1,59 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.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 .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 .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #aaaaaa } /* 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: #bb8844 } /* Literal.String */
|
||||
.highlight .na { color: #008080 } /* Name.Attribute */
|
||||
.highlight .nb { color: #999999 } /* 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: #bb8844 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #bb8844 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #bb8844 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #bb8844 } /* Literal.String.Double */
|
||||
.highlight .se { color: #bb8844 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #bb8844 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #bb8844 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #bb8844 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #808000 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #bb8844 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #bb8844 } /* 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 */
|
70
docs/assets/css/pygments/vim.css
Normal file
70
docs/assets/css/pygments/vim.css
Normal file
@ -0,0 +1,70 @@
|
||||
.highlight pre { background-color: #222222 }
|
||||
.highlight .hll { background-color: #222222 }
|
||||
.highlight .c { color: #000080 } /* Comment */
|
||||
.highlight .err { color: #cccccc; border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .g { color: #cccccc } /* Generic */
|
||||
.highlight .k { color: #cdcd00 } /* Keyword */
|
||||
.highlight .l { color: #cccccc } /* Literal */
|
||||
.highlight .n { color: #cccccc } /* Name */
|
||||
.highlight .o { color: #3399cc } /* Operator */
|
||||
.highlight .x { color: #cccccc } /* Other */
|
||||
.highlight .p { color: #cccccc } /* Punctuation */
|
||||
.highlight .cm { color: #000080 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #000080 } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #000080 } /* Comment.Single */
|
||||
.highlight .cs { color: #cd0000; font-weight: bold } /* Comment.Special */
|
||||
.highlight .gd { color: #cd0000 } /* Generic.Deleted */
|
||||
.highlight .ge { color: #cccccc; font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00cd00 } /* Generic.Inserted */
|
||||
.highlight .go { color: #808080 } /* Generic.Output */
|
||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { color: #cccccc; font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
|
||||
.highlight .kc { color: #cdcd00 } /* Keyword.Constant */
|
||||
.highlight .kd { color: #00cd00 } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #cd00cd } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #cdcd00 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #cdcd00 } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #00cd00 } /* Keyword.Type */
|
||||
.highlight .ld { color: #cccccc } /* Literal.Date */
|
||||
.highlight .m { color: #cd00cd } /* Literal.Number */
|
||||
.highlight .s { color: #cd0000 } /* Literal.String */
|
||||
.highlight .na { color: #cccccc } /* Name.Attribute */
|
||||
.highlight .nb { color: #cd00cd } /* Name.Builtin */
|
||||
.highlight .nc { color: #00cdcd } /* Name.Class */
|
||||
.highlight .no { color: #cccccc } /* Name.Constant */
|
||||
.highlight .nd { color: #cccccc } /* Name.Decorator */
|
||||
.highlight .ni { color: #cccccc } /* Name.Entity */
|
||||
.highlight .ne { color: #666699; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #cccccc } /* Name.Function */
|
||||
.highlight .nl { color: #cccccc } /* Name.Label */
|
||||
.highlight .nn { color: #cccccc } /* Name.Namespace */
|
||||
.highlight .nx { color: #cccccc } /* Name.Other */
|
||||
.highlight .py { color: #cccccc } /* Name.Property */
|
||||
.highlight .nt { color: #cccccc } /* Name.Tag */
|
||||
.highlight .nv { color: #00cdcd } /* Name.Variable */
|
||||
.highlight .ow { color: #cdcd00 } /* Operator.Word */
|
||||
.highlight .w { color: #cccccc } /* Text.Whitespace */
|
||||
.highlight .mf { color: #cd00cd } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #cd00cd } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #cd00cd } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #cd00cd } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #cd0000 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #cd0000 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #cd0000 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #cd0000 } /* Literal.String.Double */
|
||||
.highlight .se { color: #cd0000 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #cd0000 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #cd0000 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #cd0000 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #cd0000 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #cd0000 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #cd0000 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #cd00cd } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #00cdcd } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #00cdcd } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #00cdcd } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #cd00cd } /* Literal.Number.Integer.Long */
|
33
docs/assets/css/pygments/vs.css
Normal file
33
docs/assets/css/pygments/vs.css
Normal file
@ -0,0 +1,33 @@
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight .c { color: #008000 } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #0000ff } /* Keyword */
|
||||
.highlight .cm { color: #008000 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #0000ff } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #008000 } /* Comment.Single */
|
||||
.highlight .cs { color: #008000 } /* Comment.Special */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gh { font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gp { font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .kc { color: #0000ff } /* Keyword.Constant */
|
||||
.highlight .kd { color: #0000ff } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #0000ff } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #0000ff } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #0000ff } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #2b91af } /* Keyword.Type */
|
||||
.highlight .s { color: #a31515 } /* Literal.String */
|
||||
.highlight .nc { color: #2b91af } /* Name.Class */
|
||||
.highlight .ow { color: #0000ff } /* Operator.Word */
|
||||
.highlight .sb { color: #a31515 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #a31515 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #a31515 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #a31515 } /* Literal.String.Double */
|
||||
.highlight .se { color: #a31515 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #a31515 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #a31515 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #a31515 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #a31515 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #a31515 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #a31515 } /* Literal.String.Symbol */
|
136
docs/assets/css/pygments/zenburn.css
Normal file
136
docs/assets/css/pygments/zenburn.css
Normal file
@ -0,0 +1,136 @@
|
||||
.highlight code, .highlight pre {
|
||||
color:#fdce93;
|
||||
background-color:#3f3f3f;
|
||||
}
|
||||
|
||||
.highlight .hll {
|
||||
background-color:#222;
|
||||
}
|
||||
|
||||
.highlight .err {
|
||||
color:#e37170;
|
||||
background-color:#3d3535;
|
||||
}
|
||||
|
||||
.highlight .k {
|
||||
color:#f0dfaf;
|
||||
}
|
||||
|
||||
.highlight .p {
|
||||
color:#41706f;
|
||||
}
|
||||
|
||||
.highlight .cs {
|
||||
color:#cd0000;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .gd {
|
||||
color:#cd0000;
|
||||
}
|
||||
|
||||
.highlight .ge {
|
||||
color:#ccc;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
.highlight .gr {
|
||||
color:red;
|
||||
}
|
||||
|
||||
.highlight .go {
|
||||
color:gray;
|
||||
}
|
||||
|
||||
.highlight .gs {
|
||||
color:#ccc;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .gu {
|
||||
color:purple;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .gt {
|
||||
color:#0040D0;
|
||||
}
|
||||
|
||||
.highlight .kc {
|
||||
color:#dca3a3;
|
||||
}
|
||||
|
||||
.highlight .kd {
|
||||
color:#ffff86;
|
||||
}
|
||||
|
||||
.highlight .kn {
|
||||
color:#dfaf8f;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .kp {
|
||||
color:#cdcf99;
|
||||
}
|
||||
|
||||
.highlight .kr {
|
||||
color:#cdcd00;
|
||||
}
|
||||
|
||||
.highlight .ni {
|
||||
color:#c28182;
|
||||
}
|
||||
|
||||
.highlight .ne {
|
||||
color:#c3bf9f;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .nn {
|
||||
color:#8fbede;
|
||||
}
|
||||
|
||||
.highlight .vi {
|
||||
color:#ffffc7;
|
||||
}
|
||||
|
||||
.highlight .c,.preview-zenburn .highlight .g,.preview-zenburn .highlight .cm,.preview-zenburn .highlight .cp,.preview-zenburn .highlight .c1 {
|
||||
color:#7f9f7f;
|
||||
}
|
||||
|
||||
.highlight .l,.preview-zenburn .highlight .x,.preview-zenburn .highlight .no,.preview-zenburn .highlight .nd,.preview-zenburn .highlight .nl,.preview-zenburn .highlight .nx,.preview-zenburn .highlight .py,.preview-zenburn .highlight .w {
|
||||
color:#ccc;
|
||||
}
|
||||
|
||||
.highlight .n,.preview-zenburn .highlight .nv,.preview-zenburn .highlight .vg {
|
||||
color:#dcdccc;
|
||||
}
|
||||
|
||||
.highlight .o,.preview-zenburn .highlight .ow {
|
||||
color:#f0efd0;
|
||||
}
|
||||
|
||||
.highlight .gh,.preview-zenburn .highlight .gp {
|
||||
color:#dcdccc;
|
||||
font-weight:700;
|
||||
}
|
||||
|
||||
.highlight .gi,.preview-zenburn .highlight .kt {
|
||||
color:#00cd00;
|
||||
}
|
||||
|
||||
.highlight .ld,.preview-zenburn .highlight .s,.preview-zenburn .highlight .sb,.preview-zenburn .highlight .sc,.preview-zenburn .highlight .sd,.preview-zenburn .highlight .s2,.preview-zenburn .highlight .se,.preview-zenburn .highlight .sh,.preview-zenburn .highlight .si,.preview-zenburn .highlight .sx,.preview-zenburn .highlight .sr,.preview-zenburn .highlight .s1,.preview-zenburn .highlight .ss {
|
||||
color:#cc9393;
|
||||
}
|
||||
|
||||
.highlight .m,.preview-zenburn .highlight .mf,.preview-zenburn .highlight .mh,.preview-zenburn .highlight .mi,.preview-zenburn .highlight .mo,.preview-zenburn .highlight .il {
|
||||
color:#8cd0d3;
|
||||
}
|
||||
|
||||
.highlight .na,.preview-zenburn .highlight .nt {
|
||||
color:#9ac39f;
|
||||
}
|
||||
|
||||
.highlight .nb,.preview-zenburn .highlight .nc,.preview-zenburn .highlight .nf,.preview-zenburn .highlight .bp,.preview-zenburn .highlight .vc {
|
||||
color:#efef8f;
|
||||
}
|
96
docs/assets/css/spec-style.sass
Normal file
96
docs/assets/css/spec-style.sass
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
---
|
||||
/*
|
||||
* style.sass
|
||||
*/
|
||||
@import url('https://fonts.googleapis.com/css?family=Inconsolata')
|
||||
|
||||
$monofont: 'Inconsolata', monospace
|
||||
$gridcolor: #ddd
|
||||
$gridweight: 2px
|
||||
|
||||
body
|
||||
font-family: Arial, sans-serif
|
||||
margin: 10% 25% 10% 10%
|
||||
line-height: 1.3
|
||||
|
||||
a
|
||||
color: navy
|
||||
text-decoration: none
|
||||
&:visited
|
||||
color: navy
|
||||
text-decoration: none
|
||||
&:hover
|
||||
text-decoration: underline
|
||||
|
||||
pre
|
||||
//font-family: $monofont
|
||||
//border: $gridweight solid $gridcolor
|
||||
//background-color: #f7f7f7
|
||||
//padding: 1em
|
||||
//margin-left: 1em
|
||||
//overflow-x: auto
|
||||
|
||||
code
|
||||
//color: #060
|
||||
//background-color: #f2f2f2
|
||||
font-family: $monofont
|
||||
|
||||
table
|
||||
border-collapse: collapse
|
||||
min-width: 50%
|
||||
margin-left: 1em
|
||||
|
||||
th, td
|
||||
border: $gridweight solid #ccc
|
||||
padding: .5em
|
||||
|
||||
th
|
||||
background-color: #333
|
||||
color: #fff
|
||||
|
||||
table.terms
|
||||
th
|
||||
display: none
|
||||
td
|
||||
vertical-align: top
|
||||
|
||||
table.conventions
|
||||
th
|
||||
display: none
|
||||
td
|
||||
vertical-align: top
|
||||
td:first-child
|
||||
white-space: nowrap
|
||||
|
||||
table.nohead
|
||||
th
|
||||
display: none
|
||||
|
||||
table.xyhead
|
||||
th, td:first-child
|
||||
background-color: #9bbb59
|
||||
th
|
||||
color: #000
|
||||
font-weight: normal
|
||||
|
||||
figure.highlight
|
||||
background-color: #f2f2f2
|
||||
padding-left: 1em
|
||||
padding-right: 1em
|
||||
border: $gridweight solid #ccc
|
||||
|
||||
div.draco-syntax pre
|
||||
background-color: #fff
|
||||
background-image: linear-gradient(90deg, transparent 580px, #abced4 580px, #abced4 582px, transparent 582px), linear-gradient($gridcolor .1em, transparent .1em)
|
||||
background-size: 100% 1.3em
|
||||
border-left: $gridweight solid $gridcolor
|
||||
border-right: $gridweight solid $gridcolor
|
||||
border-bottom: $gridweight solid $gridcolor
|
||||
white-space: pre
|
||||
font-family: $monofont
|
||||
font-size: 1em
|
||||
padding-left: 1em
|
||||
margin-left: 1em
|
||||
width: 720px
|
||||
//overflow: auto
|
BIN
docs/assets/favicon.ico
Normal file
BIN
docs/assets/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
1127
docs/assets/js/ASCIIMathML.js
Normal file
1127
docs/assets/js/ASCIIMathML.js
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
58
docs/assets/js/jquery.autotoc.js
Normal file
58
docs/assets/js/jquery.autotoc.js
Normal file
@ -0,0 +1,58 @@
|
||||
// jQuery AutoTOC
|
||||
// Dynamically create a table of contents for a page with semantically correct HTML headings.
|
||||
// Version 1.0, December 30, 2016
|
||||
// By Craig D. Cocca
|
||||
|
||||
jQuery.fn.extend({
|
||||
autoTOC: function(options) {
|
||||
|
||||
var monitoredDOMElements = new Array();
|
||||
var windowHeight = $(window).height();
|
||||
|
||||
// Make sure we keep tabs on the window height as the user changes the browser window dimensions
|
||||
$(window).on("resize", function() {
|
||||
windowHeight = $(window).height();
|
||||
});
|
||||
|
||||
// Bind monitor to scroll event to keep an eye which heading element is in the top quarter of the page
|
||||
$(window).on("scroll",function() {
|
||||
topOfWindow = $(window).scrollTop();
|
||||
bottomOfWindow = $(window).scrollTop() + (windowHeight * .25);
|
||||
for(element in monitoredDOMElements) {
|
||||
if( monitoredDOMElements[element].offset > topOfWindow &&
|
||||
monitoredDOMElements[element].offset < bottomOfWindow) {
|
||||
$(monitoredDOMElements[element].anchor).addClass("selected");
|
||||
$(".autotoc li").not(monitoredDOMElements[element].anchor).removeClass("selected");
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Default settings
|
||||
var settings = $.extend({
|
||||
toc: "#toc"
|
||||
},options);
|
||||
|
||||
var toc = $('<ul class="autotoc"></ul>');
|
||||
|
||||
$(settings.toc).append(toc);
|
||||
|
||||
return this.each(function() {
|
||||
tocEntry = $('<li class="' + $(this).prop("tagName") + '">' + $(this).html() + '</li>');
|
||||
tocEntry.data("parentHeading",this);
|
||||
tocEntry.on("click", function() {
|
||||
$('html, body').animate({
|
||||
scrollTop: $($(this).data("parentHeading")).offset().top - (windowHeight * .2)
|
||||
}, 750 );
|
||||
});
|
||||
|
||||
$(".autotoc").append(tocEntry);
|
||||
|
||||
monitoredDOMElements.push({
|
||||
offset: $(this).offset().top,
|
||||
anchor: tocEntry
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
10
docs/index.md
Normal file
10
docs/index.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
layout: spec
|
||||
title: Draco 3D Graphics Compression
|
||||
---
|
||||
|
||||
* [Draft Draco Bitstream Specification][spec]
|
||||
* [README file for specification authors][readme]
|
||||
|
||||
[spec]: /docs/spec/
|
||||
[readme]: /docs/spec/README
|
3
docs/spec/00.00.00.title.md
Normal file
3
docs/spec/00.00.00.title.md
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
# {{ page.title }}
|
||||
{:.no_toc}
|
3
docs/spec/00.00.01.version.md
Normal file
3
docs/spec/00.00.01.version.md
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
_{{ page.version }}_
|
||||
_{{ page.version_date }}_
|
4
docs/spec/00.00.02.authors.md
Normal file
4
docs/spec/00.00.02.authors.md
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
_Frank Galligan, Google
|
||||
\[author]
|
||||
\[author]_
|
2
docs/spec/00.00.03.last.modified.md
Normal file
2
docs/spec/00.00.03.last.modified.md
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
_Last modified: {{ site.time }}_
|
6
docs/spec/00.00.04.abstract.md
Normal file
6
docs/spec/00.00.04.abstract.md
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
## Abstract
|
||||
{:.no_toc .nocount}
|
||||
|
||||
This document defines the bitstream format and decoding process for the
|
||||
Draco 3D Data Compression scheme.
|
5
docs/spec/00.00.05.toc.md
Normal file
5
docs/spec/00.00.05.toc.md
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
**Contents**
|
||||
|
||||
* TOC
|
||||
{:toc}
|
5
docs/spec/01.00.00.scope.md
Normal file
5
docs/spec/01.00.00.scope.md
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
## Scope
|
||||
|
||||
This document specifies the open-source Draco #D Data Compression bitstream
|
||||
format and decoding process.
|
8
docs/spec/02.00.00.terms.md
Normal file
8
docs/spec/02.00.00.terms.md
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
## Terms and Definitions
|
||||
|
||||
For the purposes of this document, the following terms and definitions apply:
|
||||
|
||||
| Term | Definition |
|
||||
| ------- | ---------------- |
|
||||
| | |
|
18
docs/spec/03.00.00.symbols.md
Normal file
18
docs/spec/03.00.00.symbols.md
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
## Symbols (and abbreviated terms)
|
||||
|
||||
**DCT:** Discrete Cosine Transform
|
||||
|
||||
FIXME
|
||||
|
||||
The specification makes use of a number of constant integers. Constants that
|
||||
relate to the semantics of a particular syntax element are defined in section
|
||||
7.
|
||||
|
||||
Additional constants are defined below:
|
||||
|
||||
|
||||
| Symbol name | Value | Description |
|
||||
| ------------------------ |:-----:| ----------- |
|
||||
| `SYMBOL` | |
|
||||
|
77
docs/spec/04.00.00.conventions.md
Normal file
77
docs/spec/04.00.00.conventions.md
Normal file
@ -0,0 +1,77 @@
|
||||
## Conventions
|
||||
|
||||
### General Conventions
|
||||
|
||||
* When bit reading is finished it will always pad the read to the current
|
||||
byte.
|
||||
|
||||
* Draco encoded mesh files are comprised of three main sections. This first
|
||||
section is the header. The second section contains the connectivity data.
|
||||
The third section contains the attribute data. The header must be decoded
|
||||
first, then the connectivity section, and then the attribute section.
|
||||
|
||||
* The Connectivity section is composed of the following sections in order:
|
||||
|
||||
* Connectivity header
|
||||
|
||||
* EdgeBreaker symbol buffer
|
||||
|
||||
* Start face buffer
|
||||
|
||||
* EdgeBreaker valence header
|
||||
|
||||
* Context data for the valence prediction
|
||||
|
||||
* Hole and Split data
|
||||
|
||||
* The hole and split data must be decoded before the EdgeBreaker symbols are
|
||||
decoded.
|
||||
|
||||
|
||||
### Method of describing bitstream syntax
|
||||
|
||||
**FIXME: This section is borrowed from AV1, and should be modified for the Draco
|
||||
spec.**
|
||||
|
||||
The description style of the syntax is similar to the C++ programming language.
|
||||
Syntax elements in the bitstream are represented in bold type. Each syntax
|
||||
element is described by its name (using only lower case letters with
|
||||
underscore characters) and a descriptor for its method of coded
|
||||
representation. The decoding process behaves according to the value of the
|
||||
syntax element and to the values of previously decoded syntax elements. When a
|
||||
value of a syntax element is used in the syntax tables or the text, it appears
|
||||
in regular (i.e. not bold) type. If the value of a syntax element is being
|
||||
computed (e.g. being written with a default value instead of being coded in
|
||||
the bitstream), it also appears in regular type.
|
||||
|
||||
In some cases the syntax tables may use the values of other variables derived
|
||||
from syntax elements values. Such variables appear in the syntax tables, or
|
||||
text, named by a mixture of lower case and upper case letter and without any
|
||||
underscore characters. Variables starting with an upper case letter are
|
||||
derived for the decoding of the current syntax structure and all depending
|
||||
syntax structures. These variables may be used in the decoding process for
|
||||
later syntax structures. Variables starting with a lower case letter are only
|
||||
used within the process from which they are derived.
|
||||
|
||||
Constant values appear in all upper case letters with underscore characters.
|
||||
|
||||
Constant lookup tables appear in all lower case letters with underscore
|
||||
characters.
|
||||
|
||||
Hexadecimal notation, indicated by prefixing the hexadecimal number by `0x`,
|
||||
may be used when the number of bits is an integer multiple of 4. For example,
|
||||
`0x1a` represents a bit string `0001 1010`.
|
||||
|
||||
Binary notation is indicated by prefixing the binary number by `0b`. For
|
||||
example, `0b00011010` represents a bit string `0001 1010`. Binary numbers may
|
||||
include underscore characters to enhance readability. If present, the
|
||||
underscore characters appear every 4 binary digits starting from the LSB. For
|
||||
example, `0b11010` may also be written as `0b1_1010`.
|
||||
|
||||
A value equal to 0 represents a FALSE condition in a test statement. The
|
||||
value TRUE is represented by any value not equal to 0.
|
||||
|
||||
The following table lists examples of the syntax specification format. When
|
||||
`syntax_element` appears (with bold face font), it specifies that this syntax
|
||||
element is parsed from the bitstream.
|
||||
|
266
docs/spec/README.md
Normal file
266
docs/spec/README.md
Normal file
@ -0,0 +1,266 @@
|
||||
---
|
||||
layout: spec
|
||||
title: "README: Draco Spec Authoring Information"
|
||||
---
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
# Authoring Info, Draco 3D Bitstream Specification
|
||||
{:.no_toc}
|
||||
|
||||
This document, once published, will define the Draco 3D Geometry Compression
|
||||
bitstream format and decoding process.
|
||||
|
||||
**Contents**
|
||||
|
||||
* TOC
|
||||
{:toc}
|
||||
|
||||
The document is built from plaintext section and subsection [Markdown] files
|
||||
(more specifically, [kramdown] files) using the [Jekyll] static site building
|
||||
tool. GitHub supports Jekyll natively.
|
||||
|
||||
The `docs/` directory of this project is meant to contain only documentation
|
||||
and web content. The commands below should be issued from `docs/`. We do not
|
||||
want to pollute the code tree with Ruby and Jekyll config information and
|
||||
content.
|
||||
|
||||
The `docs/spec/` directory contains the files needed to work on this
|
||||
specification document.
|
||||
|
||||
|
||||
## Building Locally
|
||||
|
||||
Contributors will want to preview their edits locally before submitting pull
|
||||
requests. Doing so requires a sane Ruby and rubygems environment. We use [rbenv]
|
||||
and [bundler] to "groom" the project environment and avoid conflicts.
|
||||
|
||||
_**Important:** All commands are to be run as an ordinary, unprivileged user._
|
||||
|
||||
|
||||
### Ruby and rbenv
|
||||
|
||||
This project currently depends on Ruby v2.3.0. Because your distro may lack this
|
||||
version -- or installing it may conflict with your system's installed version --
|
||||
first [install rbenv], then install Ruby v2.3.0 within it (again, in userland).
|
||||
|
||||
~~~~~
|
||||
# list all available versions:
|
||||
$ rbenv install -l
|
||||
2.2.6
|
||||
2.3.0-dev
|
||||
2.3.0-preview1
|
||||
2.3.0-preview2
|
||||
2.3.0
|
||||
|
||||
# install a Ruby version:
|
||||
$ rbenv install 2.3.0
|
||||
~~~~~
|
||||
|
||||
|
||||
### Bundler
|
||||
|
||||
Gem dependencies are managed by [bundler].
|
||||
|
||||
~~~~~
|
||||
$ gem install bundler
|
||||
|
||||
# Filesystem location where gems are installed
|
||||
$ gem env home
|
||||
# => ~/.rbenv/versions/<ruby-version>/lib/ruby/gems/...
|
||||
~~~~~
|
||||
|
||||
|
||||
## Fork and Clone the Repo
|
||||
|
||||
First, use the **Fork** button on the repo's [homepage] to fork a copy to your
|
||||
GitHub account.
|
||||
|
||||
Second, clone your fork locally:
|
||||
|
||||
~~~~~
|
||||
git clone git@github.com:<username>/draco.git
|
||||
cd draco
|
||||
~~~~~
|
||||
|
||||
_**Note** that we **strongly** recommend [using SSH] with GitHub, not HTTPS._
|
||||
|
||||
Third, add a Git remote `upstream` that points to google/draco:
|
||||
|
||||
~~~~~
|
||||
git remote add upstream git@github.com:google/draco.git
|
||||
~~~~~
|
||||
|
||||
Your local repo with then have two remotes, `upstream` pointing at the
|
||||
authoritative GitHub repo and `origin` pointing at your GitHub fork.
|
||||
|
||||
~~~~~
|
||||
$ git remote
|
||||
origin
|
||||
upstream
|
||||
|
||||
$ git remote show origin
|
||||
* remote origin
|
||||
Fetch URL: git@github.com:<username>/draco.git
|
||||
Push URL: git@github.com:<username>/draco.git
|
||||
HEAD branch: master
|
||||
Remote branch:
|
||||
master tracked
|
||||
Local branch configured for 'git pull':
|
||||
master merges with remote master
|
||||
Local ref configured for 'git push':
|
||||
master pushes to master (up to date)
|
||||
|
||||
$ git remote show upstream
|
||||
* remote upstream
|
||||
Fetch URL: git@github.com:google/draco.git
|
||||
Push URL: git@github.com:google/draco.git
|
||||
HEAD branch: master
|
||||
Remote branch:
|
||||
master tracked
|
||||
Local ref configured for 'git push':
|
||||
master pushes to master (up to date)
|
||||
~~~~~
|
||||
|
||||
[**See this page**][1] for a longer discussion of managing remotes and general
|
||||
GitHub workflow.
|
||||
|
||||
**Important: The following commands should be issued from the `docs/`
|
||||
directory.**
|
||||
|
||||
|
||||
### Set Local Ruby Version (rbenv)
|
||||
|
||||
In the `docs/` directory of your local clone, do:
|
||||
|
||||
~~~~~
|
||||
rbenv local 2.3.0
|
||||
~~~~~
|
||||
|
||||
Regardless of any other Rubies installed on your system, the project environment
|
||||
will now use v2.3.0 and gems appropriate for it.
|
||||
|
||||
|
||||
### Install Gem Dependencies with Bundler
|
||||
|
||||
In the `docs/` directory of your local clone, run
|
||||
|
||||
~~~~~
|
||||
bundle install
|
||||
~~~~~
|
||||
|
||||
Bundler will set dependencies and install needed gems as listed in
|
||||
`Gemfile.lock`.
|
||||
|
||||
_**Note** that you may need Ruby development headers installed on your system
|
||||
for some gems to compile successfully._
|
||||
|
||||
|
||||
### Build and Preview Locally with Jekyll
|
||||
|
||||
~~~~~
|
||||
bundle exec jekyll serve
|
||||
~~~~~
|
||||
|
||||
This will build the documentation tree and launch a local webserver at
|
||||
`http://127.0.0.1:4000/docs/` (by default). Jekyll will also watch the
|
||||
the filesystem for changes and rebuild the document as needed.
|
||||
|
||||
|
||||
## **Markdown & Formatting Conventions**
|
||||
|
||||
The spec document is composed mostly of syntax tables, styled with CSS. Mark
|
||||
them up as follows:
|
||||
|
||||
* Use the [fenced code block][fenced] kramdown syntax: A line beginning with
|
||||
three or more tildes (`~`) starts the code block, another such line ends it.
|
||||
|
||||
* Use kramdown's [inline attribute syntax][inline] to apply the CSS class
|
||||
`draco-syntax` to your code block by placing `{:.draco-syntax }` on the line
|
||||
immediately after the code-block closing delimiter.
|
||||
|
||||
* Some syntax elements as annotated with their type and size in a right-hand
|
||||
column. In your text editor, position these annotations at column 73.
|
||||
|
||||
**Example:**
|
||||
|
||||
<pre><code>~~~~~
|
||||
DecodeHeader() {
|
||||
draco_string UI8[5]
|
||||
major_version UI8
|
||||
minor_version UI8
|
||||
encoder_type UI8
|
||||
encoder_method UI8
|
||||
flags
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax}</code></pre>
|
||||
|
||||
... **will render as:**
|
||||
|
||||
|
||||
~~~~~
|
||||
DecodeHeader() {
|
||||
draco_string UI8[5]
|
||||
major_version UI8
|
||||
minor_version UI8
|
||||
encoder_type UI8
|
||||
encoder_method UI8
|
||||
flags
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax}
|
||||
|
||||
|
||||
## General GitHub Workflow
|
||||
|
||||
Always do your work in a local branch.
|
||||
|
||||
~~~~~
|
||||
git co -b my-branch-name
|
||||
## work ##
|
||||
git add <filenames or -A for all>
|
||||
git ci -m "Reasonably clear commit message"
|
||||
~~~~~
|
||||
|
||||
Push your branch to `origin` (your GitHub fork):
|
||||
|
||||
~~~~~
|
||||
git push origin my-branch-name
|
||||
~~~~~
|
||||
|
||||
Next, visit the `upstream` [homepage]. If you are logged-in, GitHub will be
|
||||
aware of your recently pushed branch, and offer an in-page widget for submitting
|
||||
a pull request for the project maintainers to consider.
|
||||
|
||||
Once your pull request is merged into upstream's master branch, you may
|
||||
synchronize your clone (and remote `origin`) as follows:
|
||||
|
||||
~~~~~
|
||||
git co master
|
||||
git fetch upstream
|
||||
git merge upstream/master
|
||||
git push origin
|
||||
~~~~~
|
||||
|
||||
Your old working branch is no longer needed, so do some housekeeping:
|
||||
|
||||
~~~~~
|
||||
git br -d my-branch-name
|
||||
~~~~~
|
||||
|
||||
|
||||
[Markdown]: https://daringfireball.net/projects/markdown/
|
||||
[kramdown]: https://kramdown.gettalong.org/
|
||||
[Jekyll]: https://jekyllrb.com/
|
||||
[rbenv]: https://github.com/rbenv/rbenv
|
||||
[bundler]: http://bundler.io/
|
||||
[install rbenv]: https://github.com/rbenv/rbenv#installation
|
||||
[homepage]: https://github.com/google/draco
|
||||
[using SSH]: https://help.github.com/articles/connecting-to-github-with-ssh/
|
||||
[1]: https://2buntu.com/articles/1459/keeping-your-forked-repo-synced-with-the-upstream-source/
|
||||
[fenced]: https://kramdown.gettalong.org/syntax.html#fenced-code-blocks
|
||||
[inline]: https://kramdown.gettalong.org/syntax.html#block-ials
|
||||
|
21
docs/spec/attributes.decoder.md
Normal file
21
docs/spec/attributes.decoder.md
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
## Attributes Decoder
|
||||
|
||||
### DecodeAttributesDecoderData()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributesDecoderData(buffer) {
|
||||
num_attributes I32
|
||||
point_attribute_ids_.resize(num_attributes);
|
||||
for (i = 0; i < num_attributes; ++i) {
|
||||
att_type UI8
|
||||
data_type UI8
|
||||
components_count UI8
|
||||
normalized UI8
|
||||
custom_id UI16
|
||||
Initialize GeometryAttribute ga
|
||||
att_id = pc->AddAttribute(new PointAttribute(ga));
|
||||
point_attribute_ids_[i] = att_id;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
66
docs/spec/core.functions.md
Normal file
66
docs/spec/core.functions.md
Normal file
@ -0,0 +1,66 @@
|
||||
|
||||
## Core Functions
|
||||
|
||||
### DecodeVarint<IT>
|
||||
|
||||
~~~~~
|
||||
DecodeVarint<IT>() {
|
||||
If (std::is_unsigned<IT>::value) {
|
||||
in UI8
|
||||
If (in & (1 << 7)) {
|
||||
out = DecodeVarint<IT>()
|
||||
out = (out << 7) | (in & ((1 << 7) - 1))
|
||||
} else {
|
||||
typename std::make_unsigned<IT>::type UIT;
|
||||
out = DecodeVarint<UIT>()
|
||||
out = ConvertSymbolToSignedInt(out)
|
||||
}
|
||||
return out;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### ConvertSymbolToSignedInt()
|
||||
|
||||
~~~~~
|
||||
ConvertSymbolToSignedInt() {
|
||||
abs_val = val >> 1
|
||||
If (val & 1 == 0) {
|
||||
return abs_val
|
||||
} else {
|
||||
signed_val = -abs_val - 1
|
||||
}
|
||||
return signed_val
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
Sequential Decoder
|
||||
|
||||
FIXME: ^^^ Heading level?
|
||||
|
||||
### decode_connectivity()
|
||||
|
||||
~~~~~
|
||||
decode_connectivity() {
|
||||
num_faces I32
|
||||
num_points I32
|
||||
connectivity _method UI8
|
||||
If (connectivity _method == 0) {
|
||||
// TODO
|
||||
} else {
|
||||
loop num_faces {
|
||||
If (num_points < 256) {
|
||||
face[] UI8
|
||||
} else if (num_points < (1 << 16)) {
|
||||
face[] UI16
|
||||
} else {
|
||||
face[] UI32
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
213
docs/spec/corner.table.md
Normal file
213
docs/spec/corner.table.md
Normal file
@ -0,0 +1,213 @@
|
||||
|
||||
## Corner Table
|
||||
|
||||
### Opposite()
|
||||
|
||||
~~~~~
|
||||
Opposite(corner) {
|
||||
return opposite_corners_[corner];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### Next()
|
||||
|
||||
~~~~~
|
||||
Next(corner) {
|
||||
return LocalIndex(++corner) ? corner : corner - 3;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### Previous()
|
||||
|
||||
~~~~~
|
||||
Previous(corner) {
|
||||
return LocalIndex(corner) ? corner - 1 : corner + 2;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### Vertex()
|
||||
|
||||
~~~~~
|
||||
Vertex(corner) {
|
||||
faces_[Face(corner)][LocalIndex(corner)];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### Face()
|
||||
|
||||
~~~~~
|
||||
Face(corner) {
|
||||
return corner / 3;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### LocalIndex()
|
||||
|
||||
~~~~~
|
||||
LocalIndex(corner) {
|
||||
return corner % 3;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### num_vertices()
|
||||
|
||||
~~~~~
|
||||
num_vertices() {
|
||||
return vertex_corners_.size();
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### num_corners()
|
||||
|
||||
~~~~~
|
||||
num_corners() {
|
||||
return faces_.size() * 3;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### num_faces()
|
||||
|
||||
~~~~~
|
||||
num_faces() {
|
||||
return faces_.size();
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### bool IsOnBoundary()
|
||||
|
||||
~~~~~
|
||||
bool IsOnBoundary(vert) {
|
||||
corner = LeftMostCorner(vert);
|
||||
if (SwingLeft(corner) < 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### SwingRight()
|
||||
|
||||
~~~~~
|
||||
SwingRight(corner) {
|
||||
return Previous(Opposite(Previous(corner)));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### SwingLeft()
|
||||
|
||||
~~~~~
|
||||
SwingLeft(corner) {
|
||||
return Next(Opposite(Next(corner)));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### GetLeftCorner()
|
||||
|
||||
~~~~~
|
||||
GetLeftCorner(corner_id) {
|
||||
if (corner_id < 0)
|
||||
return kInvalidCornerIndex;
|
||||
return Opposite(Previous(corner_id));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### GetRightCorner()
|
||||
|
||||
~~~~~
|
||||
GetRightCorner(corner_id) {
|
||||
if (corner_id < 0)
|
||||
return kInvalidCornerIndex;
|
||||
return Opposite(Next(corner_id));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### SetOppositeCorner()
|
||||
|
||||
~~~~~
|
||||
SetOppositeCorner(corner_id, pp_corner_id) {
|
||||
opposite_corners_[corner_id] = opp_corner_id;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### MapCornerToVertex()
|
||||
|
||||
~~~~~
|
||||
MapCornerToVertex(corner_id, vert_id) {
|
||||
face = Face(corner_id);
|
||||
faces_[face][LocalIndex(corner_id)] = vert_id;
|
||||
if (vert_id >= 0) {
|
||||
vertex_corners_[vert_id] = corner_id;
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### UpdateVertexToCornerMap()
|
||||
|
||||
~~~~~
|
||||
UpdateVertexToCornerMap(vert) {
|
||||
first_c = vertex_corners_[vert];
|
||||
if (first_c < 0)
|
||||
return;
|
||||
act_c = SwingLeft(first_c);
|
||||
c = first_c;
|
||||
while (act_c >= 0 && act_c != first_c) {
|
||||
c = act_c;
|
||||
act_c = SwingLeft(act_c);
|
||||
}
|
||||
if (act_c != first_c) {
|
||||
vertex_corners_[vert] = c;
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### LeftMostCorner()
|
||||
|
||||
~~~~~
|
||||
LeftMostCorner(v) {
|
||||
return vertex_corners_[v];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### MakeVertexIsolated()
|
||||
|
||||
~~~~~
|
||||
MakeVertexIsolated(vert) {
|
||||
vertex_corners_[vert] = kInvalidCornerIndex;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
44
docs/spec/cornertable.traversal.processor.md
Normal file
44
docs/spec/cornertable.traversal.processor.md
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
## CornerTable Traversal Processor
|
||||
|
||||
|
||||
### IsFaceVisited()
|
||||
|
||||
~~~~~
|
||||
IsFaceVisited(corner_id) {
|
||||
if (corner_id < 0)
|
||||
return true
|
||||
return is_face_visited_[corner_id / 3];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### MarkFaceVisited()
|
||||
|
||||
~~~~~
|
||||
MarkFaceVisited(face_id) {
|
||||
is_face_visited_[face_id] = true;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### IsVertexVisited()
|
||||
|
||||
~~~~~
|
||||
IsVertexVisited(vert_id) {
|
||||
return is_vertex_visited_[vert_id];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### MarkVertexVisited()
|
||||
|
||||
~~~~~
|
||||
MarkVertexVisited(vert_id) {
|
||||
is_vertex_visited_[vert_id] = true;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
46
docs/spec/draco.decoder.md
Normal file
46
docs/spec/draco.decoder.md
Normal file
@ -0,0 +1,46 @@
|
||||
## Draco Decoder
|
||||
|
||||
### Decode()
|
||||
|
||||
~~~~~
|
||||
Decode() {
|
||||
DecodeHeader()
|
||||
DecodeConnectivityData()
|
||||
DecodeAttributeData()}
|
||||
~~~~~
|
||||
{:.draco-syntax}
|
||||
|
||||
|
||||
### DecodeHeader()
|
||||
|
||||
~~~~~
|
||||
DecodeHeader() {
|
||||
draco_string UI8[5]
|
||||
major_version UI8
|
||||
minor_version UI8
|
||||
encoder_type UI8
|
||||
encoder_method UI8
|
||||
flags
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax}
|
||||
|
||||
|
||||
### DecodeAttributeData()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributeData() {
|
||||
num_attributes_decoders UI8
|
||||
for (i = 0; i < num_attributes_decoders; ++i) {
|
||||
CreateAttributesDecoder(i);
|
||||
}
|
||||
for (auto &att_dec : attributes_decoders_) {
|
||||
att_dec->Initialize(this, point_cloud_)
|
||||
}
|
||||
for (i = 0; i < num_attributes_decoders; ++i) {
|
||||
attributes_decoders_[i]->DecodeAttributesDecoderData(buffer_)
|
||||
}
|
||||
DecodeAllAttributes()
|
||||
OnAttributesDecoded()
|
||||
~~~~~
|
||||
{:.draco-syntax}
|
362
docs/spec/edgebreaker.decoder.md
Normal file
362
docs/spec/edgebreaker.decoder.md
Normal file
@ -0,0 +1,362 @@
|
||||
## EdgeBreaker Decoder
|
||||
|
||||
### InitializeDecoder()
|
||||
|
||||
~~~~~
|
||||
InitializeDecoder() {
|
||||
edgebreaker_decoder_type UI8
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeConnectivity()
|
||||
|
||||
~~~~~
|
||||
DecodeConnectivity() {
|
||||
num_new_verts UI32
|
||||
num_encoded_vertices UI32
|
||||
num_faces UI32
|
||||
num_attribute_data I8
|
||||
num_encoded_symbols UI32
|
||||
num_encoded_split_symbols UI32
|
||||
encoded_connectivity_size UI32
|
||||
// file pointer must be set to current position
|
||||
// + encoded_connectivity_size
|
||||
hole_and_split_bytes = DecodeHoleAndTopologySplitEvents()
|
||||
// file pointer must be set to old current position
|
||||
EdgeBreakerTraversalValence_Start()
|
||||
DecodeConnectivity(num_symbols)
|
||||
if (attribute_data_.size() > 0) {
|
||||
for (ci = 0; ci < corner_table_->num_corners(); ci += 3) {
|
||||
DecodeAttributeConnectivitiesOnFace(ci)
|
||||
}
|
||||
}
|
||||
for (i = 0; i < corner_table_->num_vertices(); ++i) {
|
||||
if (is_vert_hole_[i]) {
|
||||
corner_table_->UpdateVertexToCornerMap(i);
|
||||
}
|
||||
}
|
||||
// Decode attribute connectivity.
|
||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||
attribute_data_[i].connectivity_data.InitEmpty(corner_table_.get());
|
||||
for (int32_t c : attribute_data_[i].attribute_seam_corners) {
|
||||
attribute_data_[i].connectivity_data.AddSeamEdge(c);
|
||||
}
|
||||
attribute_data_[i].connectivity_data.RecomputeVertices(nullptr, nullptr);
|
||||
}
|
||||
// Preallocate vertex to value mapping
|
||||
AssignPointsToCorners()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### AssignPointsToCorners()
|
||||
|
||||
~~~~~
|
||||
AssignPointsToCorners() {
|
||||
decoder_->mesh()->SetNumFaces(corner_table_->num_faces());
|
||||
if (attribute_data_.size() == 0) {
|
||||
for (f = 0; f < decoder_->mesh()->num_faces(); ++f) {
|
||||
for (c = 0; c < 3; ++c) {
|
||||
vert_id = corner_table_->Vertex(3 * f + c);
|
||||
if (point_id == -1)
|
||||
point_id = num_points++;
|
||||
face[c] = point_id;
|
||||
}
|
||||
decoder_->mesh()->SetFace(f, face);
|
||||
}
|
||||
decoder_->point_cloud()->set_num_points(num_points);
|
||||
Return true;
|
||||
}
|
||||
for (v = 0; v < corner_table_->num_vertices(); ++v) {
|
||||
c = corner_table_->LeftMostCorner(v);
|
||||
if (c < 0)
|
||||
continue;
|
||||
deduplication_first_corner = c;
|
||||
if (!is_vert_hole_[v]) {
|
||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||
if (!attribute_data_[i].connectivity_data.IsCornerOnSeam(c))
|
||||
continue;
|
||||
vert_id = attribute_data_[i].connectivity_data.Vertex(c);
|
||||
act_c = corner_table_->SwingRight(c);
|
||||
seam_found = false;
|
||||
while (act_c != c) {
|
||||
if (attribute_data_[i].connectivity_data.Vertex(act_c) != vert_id) {
|
||||
deduplication_first_corner = act_c;
|
||||
seam_found = true;
|
||||
break;
|
||||
}
|
||||
act_c = corner_table_->SwingRight(act_c);
|
||||
}
|
||||
if (seam_found)
|
||||
break;
|
||||
}
|
||||
}
|
||||
c = deduplication_first_corner;
|
||||
corner_to_point_map[c] = point_to_corner_map.size();
|
||||
point_to_corner_map.push_back(c);
|
||||
prev_c = c;
|
||||
c = corner_table_->SwingRight(c);
|
||||
while (c >= 0 && c != deduplication_first_corner) {
|
||||
attribute_seam = false;
|
||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||
if (attribute_data_[i].connectivity_data.Vertex(c) !=
|
||||
attribute_data_[i].connectivity_data.Vertex(prev_c)) {
|
||||
attribute_seam = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (attribute_seam) {
|
||||
corner_to_point_map[c] = point_to_corner_map.size();
|
||||
point_to_corner_map.push_back(c);
|
||||
} else {
|
||||
corner_to_point_map[c] = corner_to_point_map[prev_c];
|
||||
}
|
||||
prev_c = c;
|
||||
c = corner_table_->SwingRight(c);
|
||||
}
|
||||
}
|
||||
for (f = 0; f < decoder_->mesh()->num_faces(); ++f) {
|
||||
for (c = 0; c < 3; ++c) {
|
||||
face[c] = corner_to_point_map[3 * f + c];
|
||||
}
|
||||
decoder_->mesh()->SetFace(f, face);
|
||||
}
|
||||
decoder_->point_cloud()->set_num_points(point_to_corner_map.size());
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeConnectivity()
|
||||
|
||||
~~~~~
|
||||
DecodeConnectivity(num_symbols) {
|
||||
for (i = 0; i < num_symbols; ++i) {
|
||||
symbol = TraversalValence_DecodeSymbol()
|
||||
corner = 3 * num_faces++
|
||||
if (symbol == TOPOLOGY_C) {
|
||||
vertex_x = UpdateCornerTableForSymbolC()
|
||||
is_vert_hole_[vertex_x] = false;
|
||||
} else if (symbol == TOPOLOGY_R || symbol == TOPOLOGY_L) {
|
||||
UpdateCornerTableForSymbolLR()
|
||||
check_topology_split = true;
|
||||
} else if (symbol == TOPOLOGY_S) {
|
||||
HandleSymbolS()
|
||||
} else if (symbol == TOPOLOGY_E) {
|
||||
UpdateCornerTableForSymbolE()
|
||||
check_topology_split = true;
|
||||
}
|
||||
active_corner_stack.back() = corner;
|
||||
traversal_decoder_.NewActiveCornerReached(corner);
|
||||
if (check_topology_split) {
|
||||
encoder_symbol_id = num_symbols - symbol_id - 1;
|
||||
while (true) {
|
||||
split = IsTopologySplit(encoder_symbol_id, &split_edge,
|
||||
&encoder_split_symbol_id);
|
||||
if (!split) {
|
||||
break;
|
||||
}
|
||||
act_top_corner = corner;
|
||||
if (split_edge == RIGHT_FACE_EDGE) {
|
||||
new_active_corner = corner_table_->Next(act_top_corner);
|
||||
} else {
|
||||
new_active_corner = corner_table_->Previous(act_top_corner);
|
||||
}
|
||||
decoder_split_symbol_id = num_symbols - encoder_split_symbol_id - 1;
|
||||
topology_split_active_corners[decoder_split_symbol_id] =
|
||||
new_active_corner;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (active_corner_stack.size() > 0) {
|
||||
corner = active_corner_stack.pop_back();
|
||||
interior_face = traversal_decoder_.DecodeStartFaceConfiguration();
|
||||
if (interior_face == true) {
|
||||
UpdateCornerTableForInteriorFace()
|
||||
for (ci = 0; ci < 3; ++ci) {
|
||||
is_vert_hole_[corner_table_->Vertex(new_corner + ci)] = false;
|
||||
}
|
||||
init_face_configurations_.push_back(true);
|
||||
init_corners_.push_back(new_corner);
|
||||
} else {
|
||||
init_face_configurations_.push_back(false);
|
||||
init_corners_.push_back(corner);
|
||||
}
|
||||
}
|
||||
Return num_vertices;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### UpdateCornerTableForSymbolC()
|
||||
|
||||
~~~~~
|
||||
UpdateCornerTableForSymbolC(corner) {
|
||||
corner_a = active_corner_stack.back();
|
||||
corner_b = corner_table_->Previous(corner_a);
|
||||
while (corner_table_->Opposite(corner_b) >= 0) {
|
||||
corner_b = corner_table_->Previous(corner_table_->Opposite(corner_b));
|
||||
}
|
||||
SetOppositeCorners(corner_a, corner + 1);
|
||||
SetOppositeCorners(corner_b, corner + 2);
|
||||
vertex_x = corner_table_->Vertex(corner_table_->Next(corner_a));
|
||||
corner_table_->MapCornerToVertex(corner, vertex_x);
|
||||
corner_table_->MapCornerToVertex(
|
||||
corner + 1, corner_table_->Vertex(corner_table_->Next(corner_b)));
|
||||
corner_table_->MapCornerToVertex(
|
||||
corner + 2, corner_table_->Vertex(corner_table_->Previous(corner_a)));
|
||||
return vertex_x;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
|
||||
### UpdateCornerTableForSymbolLR()
|
||||
|
||||
~~~~~
|
||||
UpdateCornerTableForSymbolLR(corner, symbol) {
|
||||
if (symbol == TOPOLOGY_R) {
|
||||
opp_corner = corner + 2;
|
||||
} else {
|
||||
opp_corner = corner + 1;
|
||||
}
|
||||
SetOppositeCorners(opp_corner, corner_a);
|
||||
corner_table_->MapCornerToVertex(opp_corner,num_vertices++);
|
||||
corner_table_->MapCornerToVertex(
|
||||
corner_table_->Next(opp_corner),
|
||||
corner_table_->Vertex(corner_table_->Previous(corner_a)));
|
||||
corner_table_->MapCornerToVertex(
|
||||
corner_table_->Previous(opp_corner),
|
||||
corner_table_->Vertex(corner_table_->Next(corner_a)));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### HandleSymbolS()
|
||||
|
||||
~~~~~
|
||||
HandleSymbolS(corner) {
|
||||
corner_b = active_corner_stack.pop_back();
|
||||
it = topology_split_active_corners.find(symbol_id);
|
||||
if (it != topology_split_active_corners.end()) {
|
||||
active_corner_stack.push_back(it->second);
|
||||
}
|
||||
corner_a = active_corner_stack.back();
|
||||
SetOppositeCorners(corner_a, corner + 2);
|
||||
SetOppositeCorners(corner_b, corner + 1);
|
||||
vertex_p = corner_table_->Vertex(corner_table_->Previous(corner_a));
|
||||
corner_table_->MapCornerToVertex(corner, vertex_p);
|
||||
corner_table_->MapCornerToVertex(
|
||||
corner + 1, corner_table_->Vertex(corner_table_->Next(corner_a)));
|
||||
corner_table_->MapCornerToVertex(corner + 2,
|
||||
corner_table_->Vertex(corner_table_->Previous(corner_b)));
|
||||
corner_n = corner_table_->Next(corner_b);
|
||||
vertex_n = corner_table_->Vertex(corner_n);
|
||||
traversal_decoder_.MergeVertices(vertex_p, vertex_n);
|
||||
// TraversalValence_MergeVertices
|
||||
while (corner_n >= 0) {
|
||||
corner_table_->MapCornerToVertex(corner_n, vertex_p);
|
||||
corner_n = corner_table_->SwingLeft(corner_n);
|
||||
}
|
||||
corner_table_->MakeVertexIsolated(vertex_n);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### UpdateCornerTableForSymbolE()
|
||||
|
||||
~~~~~
|
||||
UpdateCornerTableForSymbolE() {
|
||||
corner_table_->MapCornerToVertex(corner, num_vertices++);
|
||||
corner_table_->MapCornerToVertex(corner + 1, num_vertices++);
|
||||
corner_table_->MapCornerToVertex(corner + 2, num_vertices++);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### UpdateCornerTableForInteriorFace()
|
||||
|
||||
~~~~~
|
||||
UpdateCornerTableForInteriorFace() {
|
||||
corner_b = corner_table_->Previous(corner);
|
||||
while (corner_table_->Opposite(corner_b) >= 0) {
|
||||
corner_b = corner_table_->Previous(corner_table_->Opposite(corner_b));
|
||||
}
|
||||
corner_c = corner_table_->Next(corner);
|
||||
while (corner_table_->Opposite(corner_c) >= 0) {
|
||||
corner_c = corner_table_->Next(corner_table_->Opposite(corner_c));
|
||||
}
|
||||
face(num_faces++);
|
||||
corner_table_->MapCornerToVertex(
|
||||
new_corner, corner_table_->Vertex(corner_table_->Next(corner_b)));
|
||||
corner_table_->MapCornerToVertex(
|
||||
new_corner + 1, corner_table_->Vertex(corner_table_->Next(corner_c)));
|
||||
corner_table_->MapCornerToVertex(
|
||||
new_corner + 2, corner_table_->Vertex(corner_table_->Next(corner)));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### IsTopologySplit()
|
||||
|
||||
~~~~~
|
||||
IsTopologySplit(encoder_symbol_id, *out_face_edge,
|
||||
*out_encoder_split_symbol_id) {
|
||||
if (topology_split_data_.size() == 0)
|
||||
return false;
|
||||
if (topology_split_data_.back().source_symbol_id != encoder_symbol_id)
|
||||
return false;
|
||||
*out_face_edge = topology_split_data_.back().source_edge;
|
||||
*out_encoder_split_symbol_id =
|
||||
topology_split_data_.back().split_symbol_id;
|
||||
topology_split_data_.pop_back();
|
||||
return true;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeAttributeConnectivitiesOnFace()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributeConnectivitiesOnFace(corner) {
|
||||
corners[3] = {corner, corner_table_->Next(corner),
|
||||
corner_table_->Previous(corner)}
|
||||
for (c = 0; c < 3; ++c) {
|
||||
opp_corner = corner_table_->Opposite(corners[c]);
|
||||
if (opp_corner < 0) {
|
||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||
attribute_data_[i].attribute_seam_corners.push_back(corners[c]);
|
||||
}
|
||||
continue
|
||||
}
|
||||
for (uint32_t i = 0; i < attribute_data_.size(); ++i) {
|
||||
bool is_seam = traversal_decoder_.DecodeAttributeSeam(i);
|
||||
if (is_seam) {
|
||||
attribute_data_[i].attribute_seam_corners.push_back(corners[c]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### SetOppositeCorners()
|
||||
|
||||
~~~~~
|
||||
SetOppositeCorners(corner_0, corner_1) {
|
||||
corner_table_->SetOppositeCorner(corner_0, corner_1);
|
||||
corner_table_->SetOppositeCorner(corner_1, corner_0);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
65
docs/spec/edgebreaker.hole.and.topology.md
Normal file
65
docs/spec/edgebreaker.hole.and.topology.md
Normal file
@ -0,0 +1,65 @@
|
||||
|
||||
## EdgeBreaker Hole and Topology Split Events
|
||||
|
||||
|
||||
### DecodeHoleAndTopologySplitEvents()
|
||||
|
||||
~~~~~
|
||||
DecodeHoleAndTopologySplitEvents() {
|
||||
num_topologoy_splits UI32
|
||||
source_symbol_id = 0
|
||||
for (i = 0; i < num_topologoy_splits; ++i) {
|
||||
DecodeVarint<UI32>(&delta)
|
||||
split_data[i].source_symbol_id = delta + source_symbol_id
|
||||
DecodeVarint<UI32>(&delta)
|
||||
split_data[i].split_symbol_id = source_symbol_id - delta
|
||||
}
|
||||
for (i = 0; i < num_topologoy_splits; ++i) {
|
||||
split_data[i].split_edge bits1
|
||||
split_data[i].source_edge bits1
|
||||
}
|
||||
num_hole_events UI32
|
||||
symbol_id = 0
|
||||
for (i = 0; i < num_hole_events; ++i) {
|
||||
DecodeVarint<UI32>(&delta)
|
||||
hole_data[i].symbol_id = delta + symbol_id
|
||||
}
|
||||
return bytes_decoded;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### CreateAttributesDecoder
|
||||
|
||||
~~~~~
|
||||
CreateAttributesDecoder() {
|
||||
att_data_id I8
|
||||
decoder_type UI8
|
||||
if (att_data_id >= 0) {
|
||||
attribute_data_[att_data_id].decoder_id = att_decoder_id;
|
||||
}
|
||||
traversal_method_encoded UI8
|
||||
if (decoder_type == MESH_VERTEX_ATTRIBUTE) {
|
||||
if (att_data_id < 0) {
|
||||
encoding_data = &pos_encoding_data_;
|
||||
} else {
|
||||
encoding_data = &attribute_data_[att_data_id].encoding_data;
|
||||
attribute_data_[att_data_id].is_connectivity_used = false;
|
||||
}
|
||||
if (traversal_method == MESH_TRAVERSAL_DEPTH_FIRST) {
|
||||
typedef EdgeBreakerTraverser<AttProcessor, AttObserver> AttTraverser;
|
||||
sequencer = CreateVertexTraversalSequencer<AttTraverser>(encoding_data);
|
||||
} else if (traversal_method == MESH_TRAVERSAL_PREDICTION_DEGREE) {
|
||||
typedef PredictionDegreeTraverser<AttProcessor, AttObserver> AttTraverser;
|
||||
sequencer = CreateVertexTraversalSequencer<AttTraverser>(encoding_data);
|
||||
}
|
||||
} else {
|
||||
// TODO
|
||||
}
|
||||
att_controller(new SequentialAttributeDecodersController(std::move(sequencer)))
|
||||
decoder_->SetAttributesDecoder(att_decoder_id, std::move(att_controller));
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
46
docs/spec/edgebreaker.traversal.decoder.md
Normal file
46
docs/spec/edgebreaker.traversal.decoder.md
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
## Edgebreaker Traversal Decoder
|
||||
|
||||
### EdgebreakerTraversal_Start()
|
||||
|
||||
~~~~~
|
||||
EdgebreakerTraversal_Start() {
|
||||
size UI64
|
||||
symbol_buffer_ size * UI8
|
||||
size UI64
|
||||
start_face_buffer_ size * UI8
|
||||
if (num_attribute_data_ > 0) {
|
||||
attribute_connectivity_decoders_ = std::unique_ptr<BinaryDecoder[]>(
|
||||
new BinaryDecoder[num_attribute_data_]);
|
||||
for (i = 0; i < num_attribute_data_; ++i) {
|
||||
attribute_connectivity_decoders_[i].StartDecoding()
|
||||
// RansBitDecoder_StartDecoding
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### Traversal_DecodeSymbol()
|
||||
|
||||
~~~~~
|
||||
Traversal_DecodeSymbol() {
|
||||
symbol_buffer_.DecodeLeastSignificantBits32(1, &symbol); bits1
|
||||
if (symbol != TOPOLOGY_C) {
|
||||
symbol_buffer_.DecodeLeastSignificantBits32(2, &symbol_suffix); bits2
|
||||
symbol |= (symbol_suffix << 1);
|
||||
}
|
||||
return symbol
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeAttributeSeam()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributeSeam(int attribute) {
|
||||
return attribute_connectivity_decoders_[attribute].DecodeNextBit();
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
91
docs/spec/edgebreaker.traversal.valence.decoder.md
Normal file
91
docs/spec/edgebreaker.traversal.valence.decoder.md
Normal file
@ -0,0 +1,91 @@
|
||||
|
||||
## EdgeBreaker Traversal Valence Decoder
|
||||
|
||||
### EdgeBreakerTraversalValence_Start()
|
||||
|
||||
~~~~~
|
||||
EdgeBreakerTraversalValence_Start(num_vertices, num_attribute_data) {
|
||||
out_buffer = EdgebreakerTraversal_Start()
|
||||
num_split_symbols I32
|
||||
mode == 0 I8
|
||||
num_vertices_ += num_split_symbols
|
||||
vertex_valences_ init to 0
|
||||
vertex_valences_.resize(num_vertices_, 0);
|
||||
min_valence_ = 2;
|
||||
max_valence_ = 7;
|
||||
num_unique_valences = 6 (max_valence_ - min_valence_ + 1)
|
||||
for (i = 0; i < num_unique_valences; ++i) {
|
||||
DecodeVarint<UI32>(&num_symbols, out_buffer)
|
||||
If (num_symbols > 0) {
|
||||
DecodeSymbols(num_symbols, out_buffer, &context_symbols_[i])
|
||||
}
|
||||
context_counters_[i] = num_symbols
|
||||
}
|
||||
return out_buffer;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
|
||||
### TraversalValence_DecodeSymbol()
|
||||
|
||||
~~~~~
|
||||
TraversalValence_DecodeSymbol() {
|
||||
if (active_context_ != -1) {
|
||||
symbol_id = context_symbols_[active_context_]
|
||||
[--context_counters_[active_context_]]
|
||||
last_symbol_ = edge_breaker_symbol_to_topology_id[symbol_id]
|
||||
} else {
|
||||
last_symbol_ = Traversal_DecodeSymbol()
|
||||
}
|
||||
return last_symbol_
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
|
||||
### TraversalValence_NewActiveCornerReached()
|
||||
|
||||
~~~~~
|
||||
TraversalValence_NewActiveCornerReached(corner) {
|
||||
switch (last_symbol_) {
|
||||
case TOPOLOGY_C:
|
||||
case TOPOLOGY_S:
|
||||
vertex_valences_[ct(next)] += 1;
|
||||
vertex_valences_[ct(prev)] += 1;
|
||||
break;
|
||||
case TOPOLOGY_R:
|
||||
vertex_valences_[corner] += 1;
|
||||
vertex_valences_[ct(next)] += 1;
|
||||
vertex_valences_[ct(prev)] += 2;
|
||||
break;
|
||||
case TOPOLOGY_L:
|
||||
vertex_valences_[corner] += 1;
|
||||
vertex_valences_[ct(next)] += 2;
|
||||
vertex_valences_[ct(prev)] += 1;
|
||||
break;
|
||||
case TOPOLOGY_E:
|
||||
vertex_valences_[corner] += 2;
|
||||
vertex_valences_[ct(next)] += 2;
|
||||
vertex_valences_[ct(prev)] += 2;
|
||||
break;
|
||||
}
|
||||
valence = vertex_valences_[ct(next)]
|
||||
valence = max(valence, min_valence_)
|
||||
valence = min(valence, max_valence_)
|
||||
active_context_ = (valence - min_valence_);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### TraversalValence_MergeVertices()
|
||||
|
||||
~~~~~
|
||||
TraversalValence_MergeVertices(dest, source) {
|
||||
vertex_valences_[dest] += vertex_valences_[source];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
71
docs/spec/edgebreaker.traverser.md
Normal file
71
docs/spec/edgebreaker.traverser.md
Normal file
@ -0,0 +1,71 @@
|
||||
|
||||
## EdgeBreaker Traverser
|
||||
|
||||
### TraverseFromCorner()
|
||||
|
||||
~~~~~
|
||||
TraverseFromCorner(corner_id) {
|
||||
if (processor_.IsFaceVisited(corner_id))
|
||||
return
|
||||
corner_traversal_stack_.clear();
|
||||
corner_traversal_stack_.push_back(corner_id);
|
||||
next_vert = corner_table_->Vertex(corner_table_->Next(corner_id));
|
||||
prev_vert = corner_table_->Vertex(corner_table_->Previous(corner_id));
|
||||
if (!processor_.IsVertexVisited(next_vert)) {
|
||||
processor_.MarkVertexVisited(next_vert);
|
||||
traversal_observer_.OnNewVertexVisited(next_vert,
|
||||
corner_table_->Next(corner_id));
|
||||
}
|
||||
if (!processor_.IsVertexVisited(prev_vert)) {
|
||||
processor_.MarkVertexVisited(prev_vert);
|
||||
traversal_observer_.OnNewVertexVisited(prev_vert,
|
||||
corner_table_->Previous(corner_id));
|
||||
}
|
||||
while (!corner_traversal_stack_.empty()) {
|
||||
corner_id = corner_traversal_stack_.back();
|
||||
face_id =corner_id / 3;
|
||||
if (processor_.IsFaceVisited(face_id)) {
|
||||
corner_traversal_stack_.pop_back();
|
||||
continue
|
||||
}
|
||||
while(true) {
|
||||
face_id = corner_id / 3;
|
||||
processor_.MarkFaceVisited(face_id);
|
||||
traversal_observer_.OnNewFaceVisited(face_id);
|
||||
vert_id = corner_table_->Vertex(corner_id);
|
||||
on_boundary = corner_table_->IsOnBoundary(vert_id);
|
||||
if (!processor_.IsVertexVisited(vert_id)) {
|
||||
processor_.MarkVertexVisited(vert_id);
|
||||
traversal_observer_.OnNewVertexVisited(vert_id, corner_id);
|
||||
if (!on_boundary) {
|
||||
corner_id = corner_table_->GetRightCorner(corner_id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// The current vertex has been already visited or it was on a boundary.
|
||||
right_corner_id = corner_table_->GetRightCorner(corner_id);
|
||||
left_corner_id = corner_table_->GetLeftCorner(corner_id);
|
||||
right_face_id((right_corner_id < 0 ? -1 : right_corner_id / 3));
|
||||
left_face_id((left_corner_id < 0 ? -1 : left_corner_id / 3));
|
||||
if (processor_.IsFaceVisited(right_face_id)) {
|
||||
if (processor_.IsFaceVisited(left_face_id)) {
|
||||
corner_traversal_stack_.pop_back();
|
||||
break; // Break from while(true) loop
|
||||
} else {
|
||||
corner_id = left_corner_id;
|
||||
}
|
||||
} else {
|
||||
if (processor_.IsFaceVisited(left_face_id)) {
|
||||
corner_id = right_corner_id;
|
||||
} else {
|
||||
// Split the traversal.
|
||||
corner_traversal_stack_.back() = left_corner_id;
|
||||
corner_traversal_stack_.push_back(right_corner_id);
|
||||
break; // Break from while(true) loop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
47
docs/spec/index.md
Normal file
47
docs/spec/index.md
Normal file
@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: spec
|
||||
title: Draco Bitstream Specification (Draft)
|
||||
version: Version 1,2
|
||||
version_date: Released 2017-xx-xx
|
||||
---
|
||||
|
||||
{% include_relative 00.00.00.title.md %}
|
||||
{% include_relative 00.00.01.version.md %}
|
||||
{% include_relative 00.00.02.authors.md %}
|
||||
{% include_relative 00.00.03.last.modified.md %}
|
||||
{% include_relative 00.00.04.abstract.md %}
|
||||
{% include_relative 00.00.05.toc.md %}
|
||||
|
||||
{% include_relative 01.00.00.scope.md %}
|
||||
{% include_relative 02.00.00.terms.md %}
|
||||
{% include_relative 03.00.00.symbols.md %}
|
||||
{% include_relative 04.00.00.conventions.md %}
|
||||
{% include_relative draco.decoder.md %}
|
||||
{% include_relative mesh.decoder.md %}
|
||||
{% include_relative edgebreaker.decoder.md %}
|
||||
{% include_relative edgebreaker.hole.and.topology.md %}
|
||||
{% include_relative edgebreaker.traversal.decoder.md %}
|
||||
{% include_relative edgebreaker.traversal.valence.decoder.md %}
|
||||
{% include_relative attributes.decoder.md %}
|
||||
{% include_relative sequential.attributes.decoders.controller.md %}
|
||||
{% include_relative sequential.attribute.decoder.md %}
|
||||
{% include_relative sequential.integer.attribute.decoder.md %}
|
||||
{% include_relative sequential.quantization.attribute.decoder.md %}
|
||||
{% include_relative prediction.scheme.transform.md %}
|
||||
{% include_relative prediction.scheme.wrap.transform.md %}
|
||||
{% include_relative mesh.prediction.scheme.parallelogram.md %}
|
||||
{% include_relative cornertable.traversal.processor.md %}
|
||||
{% include_relative mesh.attribute.indices.encoding.observer.md %}
|
||||
{% include_relative edgebreaker.traverser.md %}
|
||||
{% include_relative mesh.traversal.sequencer.md %}
|
||||
{% include_relative corner.table.md %}
|
||||
{% include_relative mesh.attribute.corner.table.md %}
|
||||
{% include_relative symbol.decoding.md %}
|
||||
{% include_relative rans.decoding.md %}
|
||||
{% include_relative rans.bit.decoder.md %}
|
||||
{% include_relative core.functions.md %}
|
||||
|
||||
|
||||
{% comment %}
|
||||
{% include_relative 99.00.01.testing.md %}
|
||||
{% endcomment %}
|
78
docs/spec/mesh.attribute.corner.table.md
Normal file
78
docs/spec/mesh.attribute.corner.table.md
Normal file
@ -0,0 +1,78 @@
|
||||
|
||||
## Mesh Attribute Corner Table
|
||||
|
||||
### bool IsCornerOnSeam()
|
||||
|
||||
~~~~~
|
||||
bool IsCornerOnSeam(corner) {
|
||||
return is_vertex_on_seam_[corner_table_->Vertex(corner)];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### AddSeamEdge()
|
||||
|
||||
~~~~~
|
||||
AddSeamEdge(c) {
|
||||
MarkSeam(c)
|
||||
opp_corner = corner_table_->Opposite(c);
|
||||
if (opp_corner >= 0) {
|
||||
no_interior_seams_ = false;
|
||||
MarkSeam(opp_corner)
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### MarkSeam()
|
||||
|
||||
~~~~~
|
||||
MarkSeam(c) {
|
||||
is_edge_on_seam_[c] = true;
|
||||
is_vertex_on_seam_[corner_table_->Vertex(corner_table_->Next(c))] = true;
|
||||
is_vertex_on_seam_[corner_table_->Vertex(corner_table_->Previous(c))
|
||||
] = true;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### RecomputeVertices()
|
||||
|
||||
~~~~~
|
||||
RecomputeVertices() {
|
||||
// in code RecomputeVerticesInternal<false>(nullptr, nullptr)
|
||||
num_new_vertices = 0;
|
||||
for (v = 0; v < corner_table_->num_vertices(); ++v) {
|
||||
c = corner_table_->LeftMostCorner(v);
|
||||
if (c < 0)
|
||||
continue;
|
||||
first_vert_id(num_new_vertices++);
|
||||
vertex_to_attribute_entry_id_map_.push_back(first_vert_id);
|
||||
first_c = c;
|
||||
if (is_vertex_on_seam_[v]) {
|
||||
act_c = SwingLeft(first_c);
|
||||
while (act_c >= 0) {
|
||||
first_c = act_c;
|
||||
act_c = SwingLeft(act_c);
|
||||
}
|
||||
}
|
||||
corner_to_vertex_map_[first_c] =first_vert_id;
|
||||
vertex_to_left_most_corner_map_.push_back(first_c);
|
||||
act_c = corner_table_->SwingRight(first_c);
|
||||
while (act_c >= 0 && act_c != first_c) {
|
||||
if (is_edge_on_seam_[corner_table_->Next(act_c)]) {
|
||||
// in code IsCornerOppositeToSeamEdge()
|
||||
first_vert_id = AttributeValueIndex(num_new_vertices++);
|
||||
vertex_to_attribute_entry_id_map_.push_back(first_vert_id);
|
||||
vertex_to_left_most_corner_map_.push_back(act_c);
|
||||
}
|
||||
corner_to_vertex_map_[act_c] = first_vert_id;
|
||||
act_c = corner_table_->SwingRight(act_c);
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
18
docs/spec/mesh.attribute.indices.encoding.observer.md
Normal file
18
docs/spec/mesh.attribute.indices.encoding.observer.md
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
## Mesh Attribute Indices Encoding Observer
|
||||
|
||||
### OnNewVertexVisited()
|
||||
|
||||
~~~~~
|
||||
OnNewVertexVisited(vertex, corner) {
|
||||
point_id = mesh_->face(corner / 3)[corner % 3];
|
||||
sequencer_->AddPointId(point_id);
|
||||
// Keep track of visited corners.
|
||||
encoding_data_->encoded_attribute_value_index_to_corner_map.push_back(corner);
|
||||
encoding_data_
|
||||
->vertex_to_encoded_attribute_value_index_map[vertex] =
|
||||
encoding_data_->num_values;
|
||||
encoding_data_->num_values++;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
11
docs/spec/mesh.decoder.md
Normal file
11
docs/spec/mesh.decoder.md
Normal file
@ -0,0 +1,11 @@
|
||||
## Mesh Decoder
|
||||
|
||||
### DecodeConnectivityData()
|
||||
|
||||
~~~~~
|
||||
DecodeConnectivityData()
|
||||
InitializeDecoder()
|
||||
DecodeConnectivity()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
63
docs/spec/mesh.prediction.scheme.parallelogram.md
Normal file
63
docs/spec/mesh.prediction.scheme.parallelogram.md
Normal file
@ -0,0 +1,63 @@
|
||||
|
||||
## Mesh Prediction Scheme Parallelogram
|
||||
|
||||
### Decode()
|
||||
|
||||
~~~~~
|
||||
Decode(...) {
|
||||
this->transform().InitializeDecoding(num_components);
|
||||
// restore the first value
|
||||
this->transform().ComputeOriginalValue(pred_vals.get(),
|
||||
in_corr, out_data, 0);
|
||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||
corner_map_size = this->mesh_data().data_to_corner_map()->size();
|
||||
for (p = 1; p < corner_map_size; ++p) {
|
||||
corner_id = this->mesh_data().data_to_corner_map()->at(p);
|
||||
dst_offset = p * num_components;
|
||||
b= ComputeParallelogramPrediction(p, corner_id, table,
|
||||
*vertex_to_data_map, out_data,
|
||||
num_components, pred_vals.get())
|
||||
if (!b) {
|
||||
src_offset = (p - 1) * num_components;
|
||||
this->transform().ComputeOriginalValue(out_data + src_offset, in_corr,
|
||||
out_data + dst_offset, dst_offset);
|
||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||
} else {
|
||||
this->transform().ComputeOriginalValue(pred_vals.get(), in_corr,
|
||||
out_data + dst_offset, dst_offset);
|
||||
// PredictionSchemeWrapTransform_ComputeOriginalValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
MeshPredictionSchemeParallelogramShared
|
||||
|
||||
FIXME: ^^^ Heading level?
|
||||
|
||||
|
||||
### ComputeParallelogramPrediction()
|
||||
|
||||
~~~~~
|
||||
ComputeParallelogramPrediction(...) {
|
||||
oci = table->Opposite(ci);
|
||||
vert_opp = vertex_to_data_map[table->Vertex(ci)];
|
||||
vert_next = vertex_to_data_map[table->Vertex(table->Next(ci))];
|
||||
vert_prev = vertex_to_data_map[table->Vertex(table->Previous(ci))];
|
||||
if (vert_opp < data_entry_id && vert_next < data_entry_id &&
|
||||
vert_prev < data_entry_id) {
|
||||
v_opp_off = vert_opp * num_components;
|
||||
v_next_off = vert_next * num_components;
|
||||
v_prev_off = vert_prev * num_components;
|
||||
for (c = 0; c < num_components; ++c) {
|
||||
out_prediction[c] = (in_data[v_next_off + c] + in_data[v_prev_off + c]) -
|
||||
in_data[v_opp_off + c];
|
||||
}
|
||||
Return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
68
docs/spec/mesh.traversal.sequencer.md
Normal file
68
docs/spec/mesh.traversal.sequencer.md
Normal file
@ -0,0 +1,68 @@
|
||||
|
||||
## Mesh Traversal Sequencer
|
||||
|
||||
### GenerateSequenceInternal()
|
||||
|
||||
~~~~~
|
||||
GenerateSequenceInternal() {
|
||||
traverser_.OnTraversalStart();
|
||||
If (corner_order_) {
|
||||
// TODO
|
||||
} else {
|
||||
int32_t num_faces = traverser_.corner_table()->num_faces();
|
||||
for (i = 0; i < num_faces; ++i) {
|
||||
ProcessCorner(3 * i)
|
||||
}
|
||||
}
|
||||
traverser_.OnTraversalEnd();
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### ProcessCorner()
|
||||
|
||||
~~~~~
|
||||
ProcessCorner(corner_id) {
|
||||
traverser_.TraverseFromCorner(corner_id);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### UpdatePointToAttributeIndexMapping()
|
||||
|
||||
~~~~~
|
||||
UpdatePointToAttributeIndexMapping(PointAttribute *attribute) {
|
||||
corner_table = traverser_.corner_table();
|
||||
attribute->SetExplicitMapping(mesh_->num_points());
|
||||
num_faces = mesh_->num_faces();
|
||||
num_points = mesh_->num_points();
|
||||
for (f = 0; f < num_faces; ++f) {
|
||||
face = mesh_->face(f);
|
||||
for (p = 0; p < 3; ++p) {
|
||||
point_id = face[p];
|
||||
vert_id = corner_table->Vertex(3 * f + p);
|
||||
att_entry_id(
|
||||
encoding_data_
|
||||
->vertex_to_encoded_attribute_value_index_map[vert_id]);
|
||||
attribute->SetPointMapEntry(point_id, att_entry_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
PointsSequencer
|
||||
|
||||
FIXME: ^^^ Heading level?
|
||||
|
||||
### AddPointId()
|
||||
|
||||
~~~~~
|
||||
AddPointId(point_id) {
|
||||
out_point_ids_->push_back(point_id);
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
15
docs/spec/prediction.scheme.transform.md
Normal file
15
docs/spec/prediction.scheme.transform.md
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
## Prediction Scheme Transform
|
||||
|
||||
### ComputeOriginalValue()
|
||||
|
||||
~~~~~
|
||||
ComputeOriginalValue(const DataTypeT *predicted_vals,
|
||||
const CorrTypeT *corr_vals,
|
||||
DataTypeT *out_original_vals, int val_id) {
|
||||
for (i = 0; i < num_components_; ++i) {
|
||||
out_original_vals[i] = predicted_vals[i] + corr_vals[val_id + i];
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
46
docs/spec/prediction.scheme.wrap.transform.md
Normal file
46
docs/spec/prediction.scheme.wrap.transform.md
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
## Prediction Scheme Wrap Transform
|
||||
|
||||
### DecodeTransformData()
|
||||
|
||||
~~~~~
|
||||
DecodeTransformData(buffer) {
|
||||
min_value_ DT
|
||||
max_value_ DT
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### ComputeOriginalValue()
|
||||
|
||||
~~~~~
|
||||
ComputeOriginalValue(const DataTypeT *predicted_vals,
|
||||
const CorrTypeT *corr_vals,
|
||||
DataTypeT *out_original_vals, int val_id) {
|
||||
clamped_vals = ClampPredictedValue(predicted_vals);
|
||||
ComputeOriginalValue(clamped_vals, corr_vals, out_original_vals, val_id)
|
||||
// PredictionSchemeTransform_ComputeOriginalValue()
|
||||
for (i = 0; i < this->num_components(); ++i) {
|
||||
if (out_original_vals[i] > max_value_) {
|
||||
out_original_vals[i] -= max_dif_;
|
||||
} else if (out_original_vals[i] < min_value_) {
|
||||
out_original_vals[i] += max_dif_;
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### ClampPredictedValue()
|
||||
|
||||
~~~~~
|
||||
ClampPredictedValue(const DataTypeT *predicted_val) {
|
||||
for (i = 0; i < this->num_components(); ++i) {
|
||||
clamped_value_[i] = min(predicted_val[i], max_value_)
|
||||
clamped_value_[i] = max(predicted_val[i], min_value_)
|
||||
}
|
||||
return &clamped_value_[0];
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
25
docs/spec/rans.bit.decoder.md
Normal file
25
docs/spec/rans.bit.decoder.md
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
## Rans Bit Decoder
|
||||
|
||||
### RansBitDecoder_StartDecoding()
|
||||
|
||||
~~~~~
|
||||
RansBitDecoder_StartDecoding(DecoderBuffer *source_buffer) {
|
||||
prob_zero_ UI8
|
||||
size UI32
|
||||
buffer_ size * UI8
|
||||
ans_read_init(&ans_decoder_, buffer_, size)
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeNextBit()
|
||||
|
||||
~~~~~
|
||||
DecodeNextBit() {
|
||||
uint8_t bit = rabs_desc_read(&ans_decoder_, prob_zero_);
|
||||
return bit > 0;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
124
docs/spec/rans.decoding.md
Normal file
124
docs/spec/rans.decoding.md
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
## Rans Decoding
|
||||
|
||||
### ans_read_init()
|
||||
|
||||
~~~~~
|
||||
ans_read_init(struct AnsDecoder *const ans, const uint8_t *const buf,
|
||||
int offset) {
|
||||
x = buf[offset - 1] >> 6
|
||||
If (x == 0) {
|
||||
ans->buf_offset = offset - 1;
|
||||
ans->state = buf[offset - 1] & 0x3F;
|
||||
} else if (x == 1) {
|
||||
ans->buf_offset = offset - 2;
|
||||
ans->state = mem_get_le16(buf + offset - 2) & 0x3FFF;
|
||||
} else if (x == 2) {
|
||||
ans->buf_offset = offset - 3;
|
||||
ans->state = mem_get_le24(buf + offset - 3) & 0x3FFFFF;
|
||||
} else if (x == 3) {
|
||||
// x == 3 implies this byte is a superframe marker
|
||||
return 1;
|
||||
}
|
||||
ans->state += l_base;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### int rabs_desc_read()
|
||||
|
||||
~~~~~
|
||||
int rabs_desc_read(struct AnsDecoder *ans, AnsP8 p0) {
|
||||
AnsP8 p = ans_p8_precision - p0;
|
||||
if (ans->state < l_base) {
|
||||
ans->state = ans->state * io_base + ans->buf[--ans->buf_offset];
|
||||
}
|
||||
x = ans->state;
|
||||
quot = x / ans_p8_precision;
|
||||
rem = x % ans_p8_precision;
|
||||
xn = quot * p;
|
||||
val = rem < p;
|
||||
if (val) {
|
||||
ans->state = xn + rem;
|
||||
} else {
|
||||
ans->state = x - xn - p;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### rans_read_init()
|
||||
|
||||
~~~~~
|
||||
rans_read_init(UI8 *buf, int offset) {
|
||||
ans_.buf = buf;
|
||||
x = buf[offset - 1] >> 6
|
||||
If (x == 0) {
|
||||
ans_.buf_offset = offset - 1;
|
||||
ans_.state = buf[offset - 1] & 0x3F;
|
||||
} else if (x == 1) {
|
||||
ans_.buf_offset = offset - 2;
|
||||
ans_.state = mem_get_le16(buf + offset - 2) & 0x3FFF;
|
||||
} else if (x == 2) {
|
||||
ans_.buf_offset = offset - 3;
|
||||
ans_.state = mem_get_le24(buf + offset - 3) & 0x3FFFFF;
|
||||
} else if (x == 3) {
|
||||
ans_.buf_offset = offset - 4;
|
||||
ans_.state = mem_get_le32(buf + offset - 4) & 0x3FFFFFFF;
|
||||
}
|
||||
ans_.state += l_rans_base;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### rans_build_look_up_table()
|
||||
|
||||
~~~~~
|
||||
rans_build_look_up_table() {
|
||||
cum_prob = 0
|
||||
act_prob = 0
|
||||
for (i = 0; i < num_symbols; ++i) {
|
||||
probability_table_[i].prob = token_probs[i];
|
||||
probability_table_[i].cum_prob = cum_prob;
|
||||
cum_prob += token_probs[i];
|
||||
for (j = act_prob; j < cum_prob; ++j) {
|
||||
Lut_table_[j] = i
|
||||
}
|
||||
act_prob = cum_prob
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### rans_read()
|
||||
|
||||
~~~~~
|
||||
rans_read() {
|
||||
while (ans_.state < l_rans_base) {
|
||||
ans_.state = ans_.state * io_base + ans_.buf[--ans_.buf_offset];
|
||||
}
|
||||
quo = ans_.state / rans_precision;
|
||||
rem = ans_.state % rans_precision;
|
||||
sym = fetch_sym()
|
||||
ans_.state = quo * sym.prob + rem - sym.cum_prob;
|
||||
return sym.val;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### fetch_sym()
|
||||
|
||||
~~~~~
|
||||
fetch_sym() {
|
||||
symbol = lut_table[rem]
|
||||
out->val = symbol
|
||||
out->prob = probability_table_[symbol].prob;
|
||||
out->cum_prob = probability_table_[symbol].cum_prob;
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
28
docs/spec/sequential.attribute.decoder.md
Normal file
28
docs/spec/sequential.attribute.decoder.md
Normal file
@ -0,0 +1,28 @@
|
||||
|
||||
## Sequential Attribute Decoder
|
||||
|
||||
~~~~~
|
||||
Initialize(...) {
|
||||
// Init some members
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeValues()
|
||||
|
||||
~~~~~
|
||||
DecodeValues(const std::vector<PointIndex> &point_ids) {
|
||||
num_values = point_ids.size();
|
||||
entry_size = attribute_->byte_stride();
|
||||
std::unique_ptr<uint8_t[]> value_data_ptr(new uint8_t[entry_size]);
|
||||
out_byte_pos = 0;
|
||||
for (i = 0; i < num_values; ++i) {
|
||||
value_data UI8 * entry_size
|
||||
attribute_->buffer()->Write(out_byte_pos, value_data, entry_size);
|
||||
out_byte_pos += entry_size;
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
54
docs/spec/sequential.attributes.decoders.controller.md
Normal file
54
docs/spec/sequential.attributes.decoders.controller.md
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
## Sequential Attributes Decoders Controller
|
||||
|
||||
### DecodeAttributesDecoderData()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributesDecoderData(buffer) {
|
||||
AttributesDecoder_DecodeAttributesDecoderData(buffer)
|
||||
sequential_decoders_.resize(num_attributes());
|
||||
for (i = 0; i < num_attributes(); ++i) {
|
||||
decoder_type UI8
|
||||
sequential_decoders_[i] = CreateSequentialDecoder(decoder_type);
|
||||
sequential_decoders_[i]->Initialize(decoder(), GetAttributeId(i))
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeAttributes()
|
||||
|
||||
~~~~~
|
||||
DecodeAttributes(buffer) {
|
||||
sequencer_->GenerateSequence(&point_ids_)
|
||||
for (i = 0; i < num_attributes(); ++i) {
|
||||
pa = decoder()->point_cloud()->attribute(GetAttributeId(i));
|
||||
sequencer_->UpdatePointToAttributeIndexMapping(pa)
|
||||
}
|
||||
for (i = 0; i < num_attributes(); ++i) {
|
||||
sequential_decoders_[i]->Decode(point_ids_, buffer)
|
||||
//SequentialAttributeDecoder_Decode()
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### CreateSequentialDecoder()
|
||||
|
||||
~~~~~
|
||||
CreateSequentialDecoder(type) {
|
||||
switch (type) {
|
||||
case SEQUENTIAL_ATTRIBUTE_ENCODER_GENERIC:
|
||||
return new SequentialAttributeDecoder()
|
||||
case SEQUENTIAL_ATTRIBUTE_ENCODER_INTEGER:
|
||||
return new SequentialIntegerAttributeDecoder()
|
||||
case SEQUENTIAL_ATTRIBUTE_ENCODER_QUANTIZATION:
|
||||
return new SequentialQuantizationAttributeDecoder()
|
||||
case SEQUENTIAL_ATTRIBUTE_ENCODER_NORMALS:
|
||||
return new SequentialNormalAttributeDecoder()
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
55
docs/spec/sequential.integer.attribute.decoder.md
Normal file
55
docs/spec/sequential.integer.attribute.decoder.md
Normal file
@ -0,0 +1,55 @@
|
||||
|
||||
## Sequential Integer Attribute Decoder
|
||||
|
||||
~~~~~
|
||||
Initialize(...) {
|
||||
SequentialAttributeDecoder_Initialize()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeValues()
|
||||
|
||||
~~~~~
|
||||
DecodeValues(point_ids) {
|
||||
prediction_scheme_method I8
|
||||
if (prediction_scheme_method != PREDICTION_NONE) {
|
||||
prediction_transform_type I8
|
||||
prediction_scheme_ = CreateIntPredictionScheme(...)
|
||||
}
|
||||
if (prediction_scheme_) {
|
||||
}
|
||||
DecodeIntegerValues(point_ids)
|
||||
//SequentialQuantizationAttributeDecoder_DecodeIntegerValues()
|
||||
//StoreValues()
|
||||
DequantizeValues(num_values)
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeIntegerValues()
|
||||
|
||||
~~~~~
|
||||
DecodeIntegerValues(point_ids) {
|
||||
compressed UI8
|
||||
if (compressed) {
|
||||
DecodeSymbols(..., values_.data())
|
||||
} else {
|
||||
// TODO
|
||||
}
|
||||
if (!prediction_scheme_->AreCorrectionsPositive()) {
|
||||
ConvertSymbolsToSignedInts(...)
|
||||
}
|
||||
if (prediction_scheme_) {
|
||||
prediction_scheme_->DecodePredictionData(buffer)
|
||||
// DecodeTransformData(buffer)
|
||||
if (!values_.empty()) {
|
||||
prediction_scheme_->Decode(values_.data(), &values_[0],
|
||||
values_.size(), num_components, point_ids.data())
|
||||
// MeshPredictionSchemeParallelogram_Decode()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
49
docs/spec/sequential.quantization.attribute.decoder.md
Normal file
49
docs/spec/sequential.quantization.attribute.decoder.md
Normal file
@ -0,0 +1,49 @@
|
||||
|
||||
## Sequential Quantization Attribute Decoder
|
||||
|
||||
~~~~~
|
||||
Initialize(...) {
|
||||
SequentialIntegerAttributeDecoder_Initialize()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeIntegerValues()
|
||||
|
||||
~~~~~
|
||||
DecodeIntegerValues(point_ids) {
|
||||
// DecodeQuantizedDataInfo()
|
||||
num_components = attribute()->components_count();
|
||||
for (i = 0; i < num_components; ++i) {
|
||||
min_value_[i] F32
|
||||
}
|
||||
max_value_dif_ F32
|
||||
quantization_bits_ UI8
|
||||
SequentialIntegerAttributeDecoder::DecodeIntegerValues()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DequantizeValues()
|
||||
|
||||
~~~~~
|
||||
DequantizeValues(num_values) {
|
||||
max_quantized_value = (1 << (quantization_bits_)) - 1;
|
||||
num_components = attribute()->components_count();
|
||||
entry_size = sizeof(float) * num_components;
|
||||
quant_val_id = 0;
|
||||
out_byte_pos = 0;
|
||||
for (i = 0; i < num_values; ++i) {
|
||||
for (c = 0; c < num_components; ++c) {
|
||||
value = dequantizer.DequantizeFloat(values()->at(quant_val_id++));
|
||||
value = value + min_value_[c];
|
||||
att_val[c] = value;
|
||||
}
|
||||
attribute()->buffer()->Write(out_byte_pos, att_val.get(), entry_size);
|
||||
out_byte_pos += entry_size;
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
109
docs/spec/symbol.decoding.md
Normal file
109
docs/spec/symbol.decoding.md
Normal file
@ -0,0 +1,109 @@
|
||||
|
||||
## Symbol Decoding
|
||||
|
||||
### DecodeSymbols()
|
||||
|
||||
~~~~~
|
||||
DecodeSymbols(num_symbols, out_buffer, out_values) {
|
||||
scheme UI8
|
||||
If (scheme == 0) {
|
||||
DecodeTaggedSymbols<>(num_symbols, src_buffer, out_values)
|
||||
} else if (scheme == 1) {
|
||||
DecodeRawSymbols<>(num_symbols, src_buffer, out_values)
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeTaggedSymbols()
|
||||
|
||||
~~~~~
|
||||
DecodeTaggedSymbols() {
|
||||
FIXME
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeRawSymbols()
|
||||
|
||||
~~~~~
|
||||
DecodeRawSymbols() {
|
||||
max_bit_length UI8
|
||||
DecodeRawSymbolsInternal(max_bit_length, out_values)
|
||||
return symbols
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### DecodeRawSymbolsInternal()
|
||||
|
||||
~~~~~
|
||||
DecodeRawSymbolsInternal(max_bit_length, out_values) {
|
||||
decoder = CreateRansSymbolDecoder(max_bit_length)
|
||||
decoder.StartDecoding()
|
||||
// RansSymbolDecoder_StartDecoding
|
||||
for (i = 0; i < num_values; ++i) {
|
||||
out_values[i] = decoder.DecodeSymbol()
|
||||
// RansSymbolDecoder_DecodeSymbol
|
||||
}
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### CreateRansSymbolDecoder()
|
||||
|
||||
~~~~~
|
||||
CreateRansSymbolDecoder(max_bit_length) {
|
||||
rans_precision_bits = (3 * max_bit_length) / 2;
|
||||
rans_precision_bits = min(rans_precision_bits, 20)
|
||||
rans_precision_bits = max(rans_precision_bits, 12)
|
||||
rans_precision = 1 << rans_precision_bits_;
|
||||
l_rans_base = rans_precision * 4;
|
||||
num_symbols_ UI32
|
||||
for (i = 0; i < num_symbols_; ++i) {
|
||||
prob_data UI8
|
||||
if ((prob_data & 3) == 3) {
|
||||
offset = prob_data >> 2
|
||||
for (j = 0; j < offset + 1; ++j) {
|
||||
probability_table_[i + j] = 0;
|
||||
}
|
||||
i += offset;
|
||||
} else {
|
||||
prob = prob_data >> 2
|
||||
for (j = 0; j < token; ++j) {
|
||||
eb UI8
|
||||
prob = prob | (eb << (8 * (j + 1) - 2)
|
||||
}
|
||||
probability_table_[i] = prob;
|
||||
}
|
||||
}
|
||||
rans_build_look_up_table()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### RansSymbolDecoder_StartDecoding()
|
||||
|
||||
~~~~~
|
||||
RansSymbolDecoder_StartDecoding() {
|
||||
bytes_encoded UI64
|
||||
buffer bytes_encoded * UI8
|
||||
rans_read_init(buffer, bytes_encoded)
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
||||
|
||||
|
||||
### RansSymbolDecoder_DecodeSymbol()
|
||||
|
||||
~~~~~
|
||||
RansSymbolDecoder_DecodeSymbol() {
|
||||
ans_.rans_read()
|
||||
}
|
||||
~~~~~
|
||||
{:.draco-syntax }
|
Loading…
x
Reference in New Issue
Block a user