├── doc ├── .nojekyll ├── _build │ ├── .nojekyll │ ├── CNAME │ ├── img │ │ ├── urubu.jpg │ │ └── urubu_cover.png │ ├── tipuesearch │ │ └── img │ │ │ └── search.png │ └── css │ │ └── site.css ├── CNAME ├── faq │ ├── index.md │ ├── formulas.md │ ├── link2section.md │ ├── media-files.md │ ├── baseurl-preview.md │ ├── licensing-requirements.md │ ├── sitemap.md │ └── tags.md ├── img │ ├── urubu.jpg │ └── urubu_cover.png ├── _python │ ├── __init__.py │ ├── filters.py │ └── hooks.py ├── news │ ├── index.md │ ├── 2024-12-30.md │ ├── 2014-02-15.md │ ├── 2014-03-18.md │ ├── 2014-01-22.md │ ├── 2016-02-12.md │ ├── 2018-08-15.md │ ├── 2014-02-27.md │ ├── 2015-12-15.md │ ├── 2014-09-08.md │ ├── 2014-01-12.md │ ├── 2015-01-28.md │ ├── 2016-01-10.md │ ├── 2014-05-25.md │ ├── 2016-11-14.md │ ├── 2015-03-07.md │ ├── 2016-01-01.md │ └── 2015-11-22.md ├── tipuesearch │ └── img │ │ ├── .DS_Store │ │ └── search.png ├── search.md ├── _layouts │ ├── simple_page.html │ ├── footer.html │ ├── analytics.html │ ├── util.html │ ├── search.html │ ├── newsfeed.html │ ├── index.html │ ├── home.html │ ├── sharing.html │ └── page.html ├── more │ ├── index.md │ ├── about.md │ └── sites.md ├── Makefile ├── manual │ ├── index.md │ ├── install.md │ ├── building.md │ ├── alt_layouts.md │ ├── pagination.md │ ├── extensions.md │ └── authoring.md ├── css │ └── site.css └── index.md ├── urubu ├── tests │ ├── no_yamlfm │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ └── index.html │ │ └── _site.yml │ ├── undef_layout │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _build │ │ │ ├── index.html │ │ │ └── page.html │ ├── ambig_ref │ │ ├── page.md │ │ ├── github.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ ├── github.html │ │ │ └── page.html │ │ └── _site.yml │ ├── ambig_refid │ │ ├── page.md │ │ ├── index.md │ │ ├── page │ │ │ └── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── ignore_patterns │ │ ├── page.md │ │ ├── README.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _build │ │ │ ├── page.html │ │ │ └── index.html │ ├── no_index │ │ ├── page.md │ │ ├── folder │ │ │ └── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_content │ │ ├── index.md │ │ ├── page.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_key │ │ ├── page.md │ │ ├── folder │ │ │ ├── item.md │ │ │ └── index.md │ │ ├── _build │ │ │ ├── folder │ │ │ │ ├── item.d │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── page.html │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_ref │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_ref_md │ │ ├── page.md │ │ ├── index.md │ │ ├── page2.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _build │ │ │ ├── index.html │ │ │ ├── page.html │ │ │ └── page2.html │ ├── ambig_ref_md │ │ ├── github.md │ │ ├── index.md │ │ ├── page.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_reflink_url │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_reflink_title │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── undef_anchor │ │ ├── index.md │ │ ├── page.md │ │ ├── page2.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ ├── page.html │ │ │ └── page2.html │ │ └── _site.yml │ ├── undef_tag_layout │ │ ├── page.md │ │ ├── index.md │ │ ├── _layouts │ │ │ └── page.html │ │ └── _build │ │ │ ├── index.html │ │ │ └── page.html │ ├── date_format │ │ ├── index.md │ │ ├── page.md │ │ ├── _layouts │ │ │ └── page.html │ │ ├── _build │ │ │ ├── index.html │ │ │ └── page.html │ │ └── _site.yml │ ├── test_doc.py │ ├── __init__.py │ ├── test_warnings.py │ └── test_errors.py ├── __main__.py ├── config.py ├── _compat.py ├── readers.py ├── httphandler.py ├── __init__.py └── main.py ├── MANIFEST.in ├── README.md ├── tox.ini ├── .gitignore └── setup.py /doc/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /doc/_build/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /doc/CNAME: -------------------------------------------------------------------------------- 1 | urubu.jandecaluwe.com 2 | -------------------------------------------------------------------------------- /urubu/tests/no_yamlfm/page.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /doc/_build/CNAME: -------------------------------------------------------------------------------- 1 | urubu.jandecaluwe.com 2 | -------------------------------------------------------------------------------- /doc/faq/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FAQ 3 | order: date 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_layout/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /doc/img/urubu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/img/urubu.jpg -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | -------------------------------------------------------------------------------- /urubu/tests/no_index/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | --- 5 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /doc/_python/__init__.py: -------------------------------------------------------------------------------- 1 | from .filters import filters 2 | from .hooks import process_info 3 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/github.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: github 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref_md/github.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: github 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: README 3 | layout: page 4 | --- 5 | -------------------------------------------------------------------------------- /urubu/tests/no_index/folder/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/folder/item.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/no_yamlfm/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_build/folder/item.d: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /doc/_build/img/urubu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/_build/img/urubu.jpg -------------------------------------------------------------------------------- /doc/img/urubu_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/img/urubu_cover.png -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/folder/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | order: nr 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt 2 | include *.md 3 | graft doc 4 | prune doc/_build 5 | global-exclude *.pyc 6 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/page/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: pagedir 3 | layout: page 4 | content: [] 5 | --- 6 | -------------------------------------------------------------------------------- /urubu/tests/no_index/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_tag_layout/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | tags: tag 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /doc/_build/img/urubu_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/_build/img/urubu_cover.png -------------------------------------------------------------------------------- /doc/news/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Newsfeed 3 | layout: newsfeed 4 | order: date 5 | reverse: true 6 | --- 7 | -------------------------------------------------------------------------------- /doc/tipuesearch/img/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/tipuesearch/img/.DS_Store -------------------------------------------------------------------------------- /doc/tipuesearch/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/tipuesearch/img/search.png -------------------------------------------------------------------------------- /urubu/tests/ambig_ref_md/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/date_format/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/date_format/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | date: Sept 12, 1999 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - folder 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_layout/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_tag_layout/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /doc/search.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Search results 3 | layout: search 4 | --- 5 | 6 |
7 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - page 6 | --- 7 | -------------------------------------------------------------------------------- /doc/_build/tipuesearch/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jandecaluwe/urubu/HEAD/doc/_build/tipuesearch/img/search.png -------------------------------------------------------------------------------- /doc/_layouts/simple_page.html: -------------------------------------------------------------------------------- 1 | {% extends "page.html" %} 2 | 3 | {% block sidebar %} 4 | {% endblock %} 5 | 6 | 7 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - github 6 | - page 7 | --- 8 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref_md/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | Ambiguous reference: [github]. 7 | 8 | -------------------------------------------------------------------------------- /doc/news/2024-12-30.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 1.4.0 released" 3 | layout: page 4 | date: 2024-12-30 5 | --- 6 | 7 | Python3 only. 8 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | Define an anchor. 7 | {: #an-anchor} 8 | 9 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: test 3 | layout: page 4 | content: 5 | - undefined_page 6 | - page 7 | --- 8 | -------------------------------------------------------------------------------- /doc/news/2014-02-15.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.2.1 released 3 | layout: page 4 | date: 2014-02-15 5 | --- 6 | This is a bug fix release. 7 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/page2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | 7 | Reference an undefined page: [undefined_page]. 8 | -------------------------------------------------------------------------------- /doc/news/2014-03-18.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.3.1 released 3 | layout: page 4 | date: 2014-03-18 5 | --- 6 | 7 | This is a bug-fix release. 8 | 9 | -------------------------------------------------------------------------------- /doc/_python/filters.py: -------------------------------------------------------------------------------- 1 | def dateformat(value, format="%d-%b-%Y"): 2 | return value.strftime(format) 3 | 4 | filters = {} 5 | filters['dateformat'] = dateformat 6 | -------------------------------------------------------------------------------- /doc/news/2014-01-22.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.2 released 3 | layout: page 4 | date: 2014-01-22 5 | --- 6 | This release adds support for github-style task lists. 7 | -------------------------------------------------------------------------------- /doc/more/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: More 3 | layout: index 4 | dropdown: true 5 | content: 6 | - ref: urubu-repo 7 | title: GitHub repository 8 | - sites 9 | - about 10 | --- 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Urubu 1.4.0 2 | =========== 3 | 4 | Urubu is a micro CMS for static websites, with a focus on good navigation 5 | practices. 6 | 7 | All info can be found on the website: https://urubu.jandecaluwe.com 8 | -------------------------------------------------------------------------------- /doc/news/2016-02-12.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 1.2.0 released" 3 | layout: page 4 | date: 2016-02-12 5 | --- 6 | 7 | The highlight of this release is support for [/manual/templating-in-pages]. 8 | 9 | 10 | -------------------------------------------------------------------------------- /doc/news/2018-08-15.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 1.3.1 released" 3 | layout: page 4 | date: 2018-08-15 5 | --- 6 | 7 | Maintenance release: bug fixes and small enhancements to existing features. 8 | See the git log and the manual. 9 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/page2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: page 3 | layout: page 4 | --- 5 | 6 | Reference to an anchor in a [page]: [page#an anchor]. 7 | 8 | 9 | Reference an undefined anchor: [page#an undefined anchor]. 10 | -------------------------------------------------------------------------------- /doc/_python/hooks.py: -------------------------------------------------------------------------------- 1 | def process_info(info, site): 2 | if 'layout' not in info: 3 | if info['components'][-1] == 'index': 4 | info['layout'] = 'index' 5 | else: 6 | info['layout'] = 'page' 7 | -------------------------------------------------------------------------------- /doc/faq/formulas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Is there a way to render formulas? 3 | date: 2015-08-08 4 | --- 5 | 6 | Yes: you can easily use MathJax with Urubu. Read more about it 7 | [here](http://www.jandecaluwe.com/blog/urubu-formulas.html). 8 | 9 | -------------------------------------------------------------------------------- /doc/news/2014-02-27.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.3 released 3 | layout: page 4 | date: 2014-02-27 5 | --- 6 | 7 | This release adds markdown support for front-matter attributes. 8 | [Read more »](/manual/structure.html#markdown-in-attributes) 9 | -------------------------------------------------------------------------------- /doc/Makefile: -------------------------------------------------------------------------------- 1 | GH-PAGES = ${HOME}/dev/urubu-gh-pages/ 2 | 3 | all: build 4 | 5 | build: 6 | python3 -m urubu build 7 | 8 | serve: 9 | python3 -m urubu serve 10 | 11 | publish: 12 | cd ..; git subtree push --prefix doc/_build origin gh-pages 13 | -------------------------------------------------------------------------------- /doc/faq/link2section.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Can I specify a link to a section in a page? 3 | layout: page 4 | date: 2015-08-07 5 | --- 6 | 7 | Yes, Urubu support links to page sections. 8 | Read [this blog post](http://www.jandecaluwe.com/blog/urubu-0-6.html) 9 | to learn how. 10 | -------------------------------------------------------------------------------- /doc/news/2015-12-15.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 0.9.0 released" 3 | layout: page 4 | date: 2015-12-15 5 | --- 6 | 7 | This release adds support for Tipue Search, an open source search solution 8 | based on Javascript in the browser. 9 | 10 | Read more in the chapter [/manual/search] in the manual. 11 | -------------------------------------------------------------------------------- /doc/news/2014-09-08.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.5 released 3 | layout: page 4 | date: 2014-09-08 5 | --- 6 | 7 | Urubu 0.5 introduces tag support. 8 | 9 | Read [my blog post][post] for an introduction. 10 | 11 | [post]: http://www.jandecaluwe.com/blog/tag_support_urubu.html 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/news/2014-01-12.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.1 released 3 | layout: page 4 | date: 2014-01-12 5 | --- 6 | 7 | Introducing Urubu, a Python-based micro CMS for static websites. 8 | Read about [the rationale behind it][rationale]. 9 | 10 | [rationale]: http://www.jandecaluwe.com/blog/i-dont-like-blogs.html 11 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py310 3 | [testenv] 4 | changedir=urubu/tests 5 | deps= 6 | markdown < 3.0 7 | pytest 8 | sh 9 | beautifulsoup4 10 | pygments 11 | commands= 12 | py.test --basetemp={envtmpdir} {posargs} --ignore=test_doc.py 13 | py.test --basetemp={envtmpdir} {posargs} test_doc.py 14 | -------------------------------------------------------------------------------- /doc/news/2015-01-28.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.6 released 3 | layout: page 4 | date: 2015-01-28 5 | --- 6 | 7 | Urubu 0.6 improves on wiki links: now you can link to a location within a page. 8 | 9 | Read [my blog post][post] for more info. 10 | 11 | [post]: http://www.jandecaluwe.com/blog/urubu-0-6.html 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /doc/manual/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Manual 3 | layout: index 4 | content: 5 | - intro 6 | - install 7 | - structure 8 | - authoring 9 | - building 10 | - templates 11 | - templating-in-pages 12 | - hooks 13 | - extensions 14 | - search 15 | - pagination 16 | - alt_layouts 17 | --- 18 | 19 | -------------------------------------------------------------------------------- /doc/news/2016-01-10.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 1.1.0 released" 3 | layout: page 4 | date: 2016-01-10 5 | --- 6 | 7 | This release adds experimental support for the ` tag. 8 | 9 | Read more in the manual: [/manual/extensions#Support for the mark tag] 10 | and in [this blog post][post]. 11 | 12 | [post]: http://www.jandecaluwe.com/blog/mark-tag-support.html 13 | 14 | -------------------------------------------------------------------------------- /doc/news/2014-05-25.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 0.4 and Urubu Quickstart released 3 | layout: page 4 | date: 2014-05-25 5 | --- 6 | 7 | Release features: 8 | 9 | - Run `urubu serve` from the top-level project directory. 10 | - [Programmable file extensions][/manual/structure] for site pages 11 | - Introducing [urubu-quickstart]: a quick way to set up a new Urubu project. 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /doc/_layouts/footer.html: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /doc/faq/media-files.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to add media files? 3 | layout: page 4 | date: 2014-09-11 5 | --- 6 | 7 | The source structure of a project is preserved in the built website, and all 8 | non-markdown content files are copied verbatim. See [/manual/structure]. 9 | 10 | Therefore, you can put media files at any convenient place in the source, and 11 | refer to them using Markdown image syntax, with a relative or root-relative 12 | path to the source file. 13 | -------------------------------------------------------------------------------- /doc/_layouts/analytics.html: -------------------------------------------------------------------------------- 1 | 11 | 12 | -------------------------------------------------------------------------------- /urubu/tests/test_doc.py: -------------------------------------------------------------------------------- 1 | import os, sys 2 | 3 | from sh import git, touch 4 | from urubu import project, UrubuError 5 | 6 | from urubu.tests import cd 7 | 8 | def test_doc(): 9 | with cd('../../doc'): 10 | sys.path.insert(0, os.getcwd()) 11 | project.build() 12 | touch('_build/.nojekyll') 13 | d = git('--no-pager', 'diff', '-w', '--', '_build') 14 | if d: 15 | print(d) 16 | raise ValueError('Diffs in website') 17 | _python = None 18 | 19 | test_doc() 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /doc/news/2016-11-14.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 1.3.0 released" 3 | layout: page 4 | date: 2016-11-14 5 | --- 6 | 7 | Highlights: 8 | 9 | * Add posibility to override output filename. (#51). See the `saveas` attribute 10 | in the [manual][/manual/structure#Content Files]. 11 | An example usage, see [/faq/sitemap]. 12 | 13 | * The `urubu serve` command is more secure. This is transparent to the user 14 | (#49). 15 | 16 | * Added option for jinja2 to fail on undefined vars (#47). 17 | See the `strict_undefined` attribute in the [manual][/manual/structure#_siteyml]. 18 | 19 | -------------------------------------------------------------------------------- /doc/news/2015-03-07.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 0.7: Python 3 support, baseurl option" 3 | layout: page 4 | date: 2015-03-07 5 | --- 6 | 7 | Urubu 0.7 adds features that make it more flexible to use. 8 | 9 | First, the release adds Python 3 support, from a single codebase. 10 | You can use Python 2.7 or Python 3.4. 11 | 12 | Second, there is now a `baseurl` option to add a prefix to generated local 13 | URLs. [More info »][/manual/structure#_siteyml]. 14 | 15 | On the other hand, the checklist extension has been removed as it caused issues 16 | with reference id resolution. 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/_layouts/util.html: -------------------------------------------------------------------------------- 1 | {# task list icons #} 2 | {% set open = '' %} 3 | {% set done = '' %} 4 | 5 | {# general font awesome icon interface #} 6 | {% macro fa(name, class='') %} 7 | 8 | {% endmacro %} 9 | 10 | {# figure support #} 11 | {% macro figure(fn, caption='') %} 12 |
13 | {{caption}} 14 | {% if caption %} 15 |
{{caption}}
16 | {% endif %} 17 |
18 | {% endmacro %} 19 | 20 | -------------------------------------------------------------------------------- /doc/_layouts/search.html: -------------------------------------------------------------------------------- 1 | {% extends "page.html" %} 2 | 3 | {% block head_addon %} 4 | 5 | {% endblock %} 6 | 7 | {% block body_addon %} 8 | 9 | 10 | 11 | 19 | {% endblock %} 20 | 21 | -------------------------------------------------------------------------------- /doc/_layouts/newsfeed.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 |
8 | 9 |
10 | {% for item in this.content %} 11 |
12 |

{{item.date|dateformat}}  {{item.title}}

13 |
14 |
15 | {{item.body}} 16 |
17 |
18 | {% endfor %} 19 |
20 | 21 |
22 | 23 | {% include 'footer.html' %} 24 | 25 |
7 |
8 |
9 |
10 |

{{this.title}}

11 |

{{this.abstract}}

12 |
13 |
14 |
15 | 16 | {% endblock %} 17 | 18 |
19 |
20 | 21 |
22 |
23 | {% for item in this.content %} 24 |

{{item.title}}

25 |

{{item.abstract}}

26 | {% endfor %} 27 |
28 |
29 | 30 |
31 |
32 | 33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /doc/_layouts/home.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block home %} 4 | {% endblock %} 5 | 6 | {% block body %} 7 | 8 |
9 |
10 |
11 |
12 |

{{this.title}}

13 |

{{this.tagline}}

14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 | {% set news = site.reflinks['/news'].content[0] %} 22 |

{{news.date|dateformat}}: {{news.title}}

23 | {{this.body}} 24 |
25 |
26 | 27 | {% include 'footer.html' %} 28 | 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /doc/news/2015-11-22.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Urubu 0.8 released" 3 | layout: page 4 | date: 2015-11-22 5 | --- 6 | 7 | Release highlights: 8 | 9 | * the `urubu` serve command automatically takes 10 | the `baseurl` option into account (Pull request #27). 11 | 12 | * when an undefined anchor is referred to in a page, a 13 | warning is generated, just like for references to undefined pages (Issue #30). 14 | 15 | * the `layout` attribute can be assigned `null`. In this 16 | way the page content can be used by other pages, but no html is generated for 17 | the page itself. 18 | 19 | In addition, a significant effort was put into development robustness. In 20 | particular, a regression test suite has been added. This is based on `py.test` 21 | and `tox`, so that both Python 2.7 and 3.4 are verified. 22 | 23 | 24 | -------------------------------------------------------------------------------- /urubu/__main__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Jan Decaluwe 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | from urubu import main 19 | 20 | main.main() 21 | -------------------------------------------------------------------------------- /urubu/tests/__init__.py: -------------------------------------------------------------------------------- 1 | import contextlib, os 2 | 3 | @contextlib.contextmanager 4 | def cd(path): 5 | """context manager to change directory temporarily. 6 | From activestate recipes. 7 | 8 | """ 9 | 10 | prev_cwd = os.getcwd() 11 | os.chdir(path) 12 | try: 13 | yield 14 | finally: 15 | os.chdir(prev_cwd) 16 | 17 | 18 | 19 | # reused from MyHDL 20 | import pytest 21 | 22 | class raises_kind(object): 23 | def __init__(self, exc, kind): 24 | self.exc = exc 25 | self.kind = kind 26 | 27 | def __enter__(self): 28 | return None 29 | 30 | def __exit__(self, *tp): 31 | __tracebackhide__ = True 32 | if tp[0] is None: 33 | pytest.fail("DID NOT RAISE") 34 | assert tp[1].kind == self.kind 35 | return issubclass(tp[0], self.exc) 36 | -------------------------------------------------------------------------------- /doc/faq/baseurl-preview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to preview sites that use the baseurl option? 3 | layout: page 4 | date: 2015-04-30 5 | --- 6 | 7 | Urubu version 0.8 and higher 8 | ---------------------------- 9 | 10 | The `urubu serve` command takes the `baseurl` setting automatically into 11 | account. 12 | 13 | Urubu version 0.7 14 | ------------------ 15 | 16 | The `urubu serve` server does not include the `baseurl` prefix when serving 17 | pages so sites that use `baseurl` can't be previewed locally using `urubu 18 | serve`. An alternative option is to use 19 | [tservice](https://github.com/jiffyclub/tservice), which includes an option to 20 | serve a local static site with a URL prefix. To use tservice with an Urubu 21 | site instead of using `urubu serve` call `tserve` with the prefix option, e.g. 22 | 23 | ``` 24 | tserve --prefix _build 25 | ``` 26 | 27 | Where `` is your site's particular prefix. 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | 45 | # Translations 46 | *.mo 47 | *.pot 48 | 49 | # Django stuff: 50 | *.log 51 | 52 | # Sphinx documentation 53 | docs/_build/ 54 | 55 | # PyBuilder 56 | target/ 57 | 58 | *~ 59 | *.bak 60 | -------------------------------------------------------------------------------- /doc/manual/install.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | layout: page 4 | pager: true 5 | date: 2014-01-10 6 | --- 7 | 8 | Urubu works with modern versions of Python 2 and Python 3 using the same 9 | codebase. More specifically, it requires Python 2.7 or Python 3.4. 10 | 11 | You can install Urubu using pip: 12 | 13 | ``` 14 | pip install urubu 15 | ``` 16 | 17 | To upgrade an existing installation to the 18 | latest version, use: 19 | 20 | ``` 21 | pip install --upgrade urubu 22 | ``` 23 | 24 | If pip is not yet available on your system, follow the [pip installation 25 | instructions][pip_install]. 26 | 27 | [pip_install]: http://www.pip-installer.org/en/latest/installing.html 28 | 29 | You may want to install Urubu in an isolated environment using [virtualenv]. 30 | 31 | Urubu depends on a number of libraries that will automatically be installed if 32 | not yet available: [python_markdown], [pyyaml], [pygments] and [jinja2]. 33 | 34 | For a quick way to set up a new Urubu project, visit [urubu-quickstart]. 35 | -------------------------------------------------------------------------------- /doc/_layouts/sharing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | requires = ['jinja2 >= 2.10', 'pygments', 4 | 'markdown < 3.0', 'pyyaml', 'beautifulsoup4'] 5 | 6 | entry_points = { 7 | 'console_scripts': [ 8 | 'urubu = urubu.main:main', 9 | ] 10 | } 11 | 12 | setup( 13 | name="urubu", 14 | version="1.4.0", 15 | url='http://urubu.jandecaluwe.com', 16 | author='Jan Decaluwe', 17 | author_email='jan@jandecaluwe.com', 18 | description="A micro CMS for static websites with a focus " 19 | "on good navigation practices.", 20 | packages=['urubu'], 21 | include_package_data=True, 22 | install_requires=requires, 23 | entry_points=entry_points, 24 | classifiers=[ 25 | 'Development Status :: 3 - Alpha', 26 | 'License :: OSI Approved :: GNU Affero General Public License v3', 27 | 'Operating System :: OS Independent', 28 | 'Programming Language :: Python :: 2.7', 29 | 'Topic :: Internet :: WWW/HTTP', 30 | 'Topic :: Software Development :: Libraries :: Python Modules', 31 | ], 32 | ) 33 | -------------------------------------------------------------------------------- /urubu/config.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Jan Decaluwe 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | # Python 3 idioms 19 | from __future__ import unicode_literals 20 | 21 | import os 22 | 23 | siteinfofn = '_site.yml' 24 | sitedir = '_build' 25 | tagdir = 'tag' 26 | tagid = '/' + tagdir 27 | tagindexid = tagid + '/' + 'index' 28 | tag_layout = 'tag' 29 | layoutdir = '_layouts' 30 | tipuesearchdir = 'tipuesearch' 31 | tipuesearch_content = 'tipuesearch_content.json' 32 | -------------------------------------------------------------------------------- /doc/manual/building.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Project building 3 | layout: page 4 | pager: true 5 | author: Jan Decaluwe 6 | --- 7 | 8 | The `urubu` command 9 | =================== 10 | 11 | After installation, an `urubu` command will be available. 12 | 13 | If you prefer, you can call the installed package as a script using `python -m 14 | urubu`, with the same effect. 15 | 16 | Subcommands 17 | =========== 18 | 19 | The `urubu` command supports two subcommands. Run these commands from the top 20 | level project directory. 21 | 22 | `urubu build` 23 | : Build the website. The website will be in the `_build` subdirectory. 24 | 25 | `urubu serve` 26 | : Start a local webserver to serve the website as you develop it. The website 27 | will be available at `localhost:8000`. Run this command in a separate terminal 28 | window, and kill the server when you are done. 29 | 30 | Development flow 31 | ================ 32 | 33 | I prefer to put the commands in a Makefile, so that I can 34 | run `make` to build and `make serve` to start a server. 35 | 36 | Currently, you have to build the site explicitly to see 37 | the development changes in the browser. 38 | 39 | -------------------------------------------------------------------------------- /doc/more/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About this site 3 | layout: page 4 | date: 2014-01-10 5 | --- 6 | 7 | Author 8 | ====== 9 | 10 | The Urubu software is written by [jandecaluwe]. 11 | 12 | License 13 | ======= 14 | 15 | The Urubu software is licensed under the [software_license]. 16 | 17 | The content on this documentation website is licensed 18 | under the [content_license]. 19 | 20 | Development 21 | =========== 22 | 23 | The Urubu software is developed on [github] in the [urubu-repo]. 24 | 25 | The documentation is developed as a website in a `gh-pages` branch in the same 26 | repo. It can be accessed from the custom domain [urubu.jandecaluwe.com] but it 27 | is hosted on [GitHub Pages]. 28 | 29 | [urubu.jandecaluwe.com]: http://urubu.jandecaluwe.com 30 | [Github Pages]: http://pages.github.com 31 | 32 | Theme 33 | ===== 34 | 35 | The theme on this website uses the [bootstrap] framework, 36 | and is based on stock [bootstrap]. 37 | 38 | Trivia 39 | ====== 40 | 41 | An urubu is a brazilian vulture. [Urubu][Urubu_album] is also the 10th album of 42 | Antonio Carlos Jobim, one of my favorite song composers. 43 | 44 | [Urubu_album]: http://en.wikipedia.org/wiki/Urubu_(album) 45 | -------------------------------------------------------------------------------- /doc/faq/licensing-requirements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: What are the licensing requirements? 3 | layout: page 4 | date: 2014-01-12 5 | --- 6 | 7 | Urubu is licensed under the [software_license]. 8 | 9 | The first thing to understand is that this license applies only to the Urubu 10 | software. It has no implications on website projects managed with Urubu. You 11 | are free to license your projects in any way you choose. 12 | 13 | The license only becomes relevant when you release a modified version of the 14 | Urubu software to the public in some way. In that case, you have to release the 15 | modified source code also, under the same license. 16 | 17 | With the original GPL, a release meant shipping software to user that would 18 | install and run it locally. However, these days software is often made 19 | available by running it on a server. Under the original GPL, there would be no 20 | requirement to release the modified source code in such as case. This clearly 21 | violates the spirit of the GNU Licenses. 22 | 23 | The [software_license] fixes that problem. If you make the modified software 24 | available by running it on a server, you have to make the modified source code 25 | available to the users under the same license. 26 | 27 | -------------------------------------------------------------------------------- /urubu/tests/test_warnings.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pytest 3 | from urubu import UrubuWarning, _warning, project 4 | 5 | from urubu.tests import cd 6 | 7 | def test_no_yamlfm(): 8 | with cd('no_yamlfm'): 9 | with pytest.warns(UrubuWarning) as record: 10 | project.build() 11 | print (record) 12 | assert len(record) == 1 13 | assert _warning.no_yamlfm in str(record[0].message) 14 | 15 | def test_undef_tag_layout(): 16 | with cd('undef_tag_layout'): 17 | with pytest.warns(UrubuWarning) as record: 18 | project.build() 19 | print (record) 20 | assert len(record) == 1 21 | assert _warning.undef_tag_layout in str(record[0].message) 22 | 23 | def test_undef_ref_md(): 24 | with cd('undef_ref_md'): 25 | with pytest.warns(UrubuWarning) as record: 26 | project.build() 27 | print (record) 28 | assert len(record) == 1 29 | assert _warning.undef_ref_md in str(record[0].message) 30 | 31 | def test_undef_anchor(): 32 | with cd('undef_anchor'): 33 | with pytest.warns(UrubuWarning) as record: 34 | project.build() 35 | assert len(record) == 1 36 | assert _warning.undef_anchor in str(record[0].message) 37 | 38 | -------------------------------------------------------------------------------- /doc/faq/sitemap.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How do I make a sitemap? 3 | layout: page 4 | date: 2016-07-04 5 | --- 6 | 7 | To generate a sitemap you need to do the following: 8 | 9 | * Create a markdown file called `sitemap.md` like this: 10 | ``` 11 | --- 12 | title: sitemap 13 | layout: sitemap 14 | changefreq: monthly 15 | priority: 1.0 16 | xmlns: http://www.google.com/schemas/sitemap/0.84 17 | saveas: sitemap.xml 18 | --- 19 | 20 | ``` 21 | 22 | * Provide a `sitemap.html` in the `_layouts` directory, with looking something like the following: 23 | ``` 24 | {% raw %} 25 | 26 | 27 | {% for t in site.reflinks %} 28 | {% if site.reflinks[t].fn and not site.reflinks[t].hidden %} 29 | 30 | {{ site.hostname }}{{ site.reflinks[t].url }} 31 | {{ this.changefreq }} 32 | {{ this.priority }} 33 | 34 | {% endif %} 35 | {% endfor %} 36 | 37 | {% endraw %} 38 | ``` 39 | 40 | What makes this work is for the main part the `saveas` parameter in the `sitemap.md` file, which overrides the default output filename with `sitemap.xml` instead of `sitemap.html`. If you add other sitemaps don't forget to specify distinct `id` and `saveas` for each one, to prevent `Ambiguous reference id` errors. 41 | -------------------------------------------------------------------------------- /doc/manual/alt_layouts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Alt Layouts 3 | layout: page 4 | author: Jay Shafstall 5 | --- 6 | 7 | Alt Layouts are for when you want to create more than one physical .html file per .md file. This is most useful when the additional .html files do not depend on the content of the original page, but on the front matter attributes. 8 | 9 | # Usage 10 | 11 | To enable alt layouts for a .md file, add an `alt_layouts` attribute to the front matter of a page. This is a list of objects containing two attributes, `layout` and `location`. 12 | 13 | The `layout` attribute gives the name of an alternate layout to use. The `location` attribute gives the directory where the .html file should be put. That directory must already exist in your directory structure. 14 | 15 | Also add either `items_index` or `items_filter` to say where the list of it 16 | 17 | # Example 18 | 19 | The following is a sample of generating two additional .html files for a product page: 20 | 21 | ``` 22 | layout: product 23 | 24 | alt_layouts: 25 | - layout: confirmation 26 | location: confirmations 27 | - layout: product_details 28 | location: details 29 | ``` 30 | 31 | If the original foo.md file was in the products directory, three .html files would be generated: 32 | 33 | ``` 34 | products/foo.html 35 | confirmations/foo.html 36 | details/foo.html 37 | ``` 38 | -------------------------------------------------------------------------------- /urubu/tests/no_index/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref_md/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/date_format/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/no_yamlfm/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_layout/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_tag_layout/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | 12 | 13 |
14 | 15 |
16 | {% block content %} 17 |
18 | {{this.body}} 19 |
20 | {% endblock %} 21 |
22 | 23 | {% block sidebar %} 24 | {% if this.toc %} 25 | 35 | {% endif %} 36 | {% endblock %} 37 | 38 |
39 | 40 | {% if this.pager %} 41 | 49 | {% endif %} 50 | 51 | 52 |
53 | 54 | {% endblock %} 55 | 56 | -------------------------------------------------------------------------------- /urubu/_compat.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | jinja2._compat 4 | ~~~~~~~~~~~~~~ 5 | 6 | Some py2/py3 compatibility support based on a stripped down 7 | version of six so we don't have to depend on a specific version 8 | of it. 9 | 10 | :copyright: Copyright 2013 by the Jinja team, see AUTHORS. 11 | :license: BSD, see LICENSE for details. 12 | """ 13 | import sys 14 | 15 | PY2 = sys.version_info[0] == 2 16 | PYPY = hasattr(sys, 'pypy_translation_info') 17 | _identity = lambda x: x 18 | 19 | 20 | if not PY2: 21 | unichr = chr 22 | range_type = range 23 | text_type = str 24 | string_types = (str,) 25 | integer_types = (int,) 26 | 27 | iterkeys = lambda d: iter(d.keys()) 28 | itervalues = lambda d: iter(d.values()) 29 | iteritems = lambda d: iter(d.items()) 30 | 31 | ifilter = filter 32 | imap = map 33 | izip = zip 34 | intern = sys.intern 35 | 36 | import socketserver 37 | import http.server as httpserver 38 | 39 | else: 40 | unichr = unichr 41 | text_type = unicode 42 | range_type = xrange 43 | string_types = (str, unicode) 44 | integer_types = (int, long) 45 | 46 | iterkeys = lambda d: d.iterkeys() 47 | itervalues = lambda d: d.itervalues() 48 | iteritems = lambda d: d.iteritems() 49 | 50 | from itertools import imap, izip, ifilter 51 | intern = intern 52 | 53 | import SocketServer as socketserver 54 | import SimpleHTTPServer as httpserver 55 | 56 | -------------------------------------------------------------------------------- /doc/more/sites.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Websites powered by Urubu 3 | layout: simple_page 4 | --- 5 | 6 | I created Urubu to solve a personal problem: how to create and maintain 7 | websites for my projects. I open-sourced it "in the hope it can be useful". On 8 | this page I list a number of websites that are powered by Urubu. 9 | 10 | By others 11 | ========= 12 | 13 | [Sigasi Insights][sigasi] - Documentation for Sigasi's tools. 14 | 15 | [Leonardo Uieda][leouieda] - Website about Leonardo's professional activities. 16 | 17 | [PINGA lab][pinga] - Site for the PINGA lab, a research group studying inverse 18 | problems in geophysics. 19 | 20 | For others, by me 21 | ================= 22 | 23 | [Vlaamse sofrologen][sofro] - Site of the flemish sophrologists (in Dutch) 24 | 25 | [Troca Vins Naturels][troca] - Natural wines 26 | 27 | MyHDL 28 | ===== 29 | 30 | [myhdl_site] - all about MyHDL, for users 31 | 32 | [dev_myhdl_site] - info for MyHDL developers 33 | 34 | Urubu 35 | ===== 36 | 37 | [urubu-quickstart] - the Quickstart companion site for Urubu 38 | 39 | [urubu] - this site 40 | 41 | Personal 42 | ======== 43 | 44 | [Jan Decaluwe][jan] My site about professional activities 45 | 46 | [Jan Decaluwe / Music][janmusic] My music projects 47 | 48 | [Jan Decaluwe / Opinions][janopinion] My opinions, in Dutch 49 | 50 | 51 | [sigasi]: http://insights.sigasi.com 52 | [leouieda]: http://www.leouieda.com/ 53 | [pinga]: http://www.pinga-lab.org/ 54 | [sofro]: http://www.vlaamsesofrologen.be 55 | [jan]: http://www.jandecaluwe.com 56 | [janmusic]: http://music.jandecaluwe.com 57 | [janopinion]: http://nl.jandecaluwe.com 58 | [troca]: http://www.troca-vn.be 59 | -------------------------------------------------------------------------------- /urubu/readers.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Jan Decaluwe 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | # Python 3 idioms 19 | from __future__ import unicode_literals 20 | from io import open 21 | 22 | import yaml 23 | import re 24 | 25 | def get_yamlfm(fn): 26 | """Return the yaml frontmatter.""" 27 | info = _get_yamlfm_helper(fn) 28 | return info 29 | 30 | 31 | def _get_yamlfm_helper(fn): 32 | with open(fn, 'r', encoding='utf-8-sig') as f: 33 | line = f.readline() 34 | if line.strip() != '---': 35 | return None 36 | lines = [] 37 | while True: 38 | line = f.readline() 39 | if not line: 40 | return None 41 | elif line.strip() == '---': 42 | s = ''.join(lines) 43 | meta = yaml.safe_load(s) 44 | if isinstance(meta, dict): 45 | return meta 46 | else: 47 | return None 48 | else: 49 | lines.append(line) 50 | 51 | 52 | -------------------------------------------------------------------------------- /doc/faq/tags.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to use tags? 3 | layout: page 4 | date: 2015-12-05 5 | --- 6 | 7 | Urubu supports tags. To use them, you need 2 things: 8 | 9 | * Assign the desired tags to content pages, by assigning a tag or 10 | a list of tags to the `tags` attribute. See also: 11 | [/manual/structure#Content files]. 12 | 13 | * Provide a `tag.html` layout in the `_layouts` directory. 14 | 15 | It is the existence of the `tag.html` layout that triggers the generation of 16 | tag-related content. For example, if you have used tags `bar` and `foo` in the 17 | project, you will see that the `_build` folder contains `tag/bar/index.html` 18 | and `tag/foo/index.html`. Those index files use the `tag.html` layout to show 19 | the content related to a tag. 20 | 21 | Presumably, there is already a general `index.html` layout to show content in a 22 | folder. An initial `tag.html` layout can then be a one-liner by using template 23 | inheritance, like so: 24 | 25 | ``` 26 | {% raw %} 27 | {% extends "index.html" %} 28 | {% endraw %} 29 | ``` 30 | 31 | Of course, you may want to specialize the `tag.html` layout 32 | further to better reflect the purpose. 33 | 34 | Urubu also generates the corresponding tag objects so that you can use them in 35 | your layouts. This is described in [/manual/templates#Tag objects]. 36 | 37 | Note that the `_build` will contain a top-level `tag` folder, even when the 38 | source directory does not. Optionally, you can define the `tag` folder in the 39 | source also. You can then define an index file and set attributes such as the 40 | `layout` to display the tags themselves. However, the content will be 41 | generated by Urubu automatically and needs not be set. See also: 42 | [/manual/templates#Tag folder object]. 43 | 44 | -------------------------------------------------------------------------------- /doc/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% extends "_base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 | 7 | {% block breadcrumbs %} 8 | 15 | {% endblock %} 16 | 17 | 22 | 23 |
24 | 25 | {% block content %} 26 |
27 |
28 | {{this.body}} 29 |
30 | {% if this.pager %} 31 | 39 | {% endif %} 40 |
41 | {% endblock %} 42 | 43 | {% block sidebar %} 44 | {% if this.toc %} 45 | 55 | {% endif %} 56 | {% endblock %} 57 | 58 |
59 | 60 | {% include 'footer.html' %} 61 | 62 |
63 | 64 | {% endblock %} 65 | -------------------------------------------------------------------------------- /doc/manual/pagination.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pagination 3 | layout: page 4 | author: Jay Shafstall 5 | --- 6 | 7 | There are times when an index file will contain more entries than you want to include in a single page. Pagination allows Urubu to automatically split that page into separate pages in your site. 8 | 9 | # Usage 10 | 11 | To enable pagination, add an `items_per_page` attribute to the front matter of an index page. Also add either `items_index` or `items_filter` to say where the list of items should pull from. 12 | 13 | To pull from files in the current directory, with 5 items per page: 14 | 15 | ``` 16 | items_per_page: 5 17 | items_index: this 18 | ``` 19 | 20 | To pull from a different index contents: 21 | 22 | ``` 23 | items_per_page: 5 24 | items_index: news\index.md 25 | ``` 26 | 27 | To filter the contents: 28 | 29 | ``` 30 | items_per_page: 5 31 | items_filter: mysteries time-loop 32 | ``` 33 | 34 | # New Page Variables 35 | 36 | Each of the pages generated by pagination will have three new variables available to layouts. 37 | 38 | `numpages` - the number of total pages generated 39 | `prevpage` - the previous page in the chain 40 | `nextpage` - the next page in the chain 41 | 42 | ## Example pagination controls 43 | 44 | The following is a sample of generating pagination controls in a layout: 45 | 46 | ``` 47 | {% if this.numpages %} 48 |
49 |
    50 | {% if this.prevpage %} 51 |
  • <
  • 52 | {% endif %} 53 | {% for page in this.pages %} 54 | {% if page.pagenum == this.thispage %} 55 |
  • {{page.pagenum}}
  • 56 | {% else %} 57 |
  • {{page.pagenum}}
  • 58 | {% endif %} 59 | {% endfor %} 60 | {% if this.nextpage %} 61 |
  • >
  • 62 | {% endif %} 63 |
64 |
65 | {% endif %} 66 | ``` 67 | -------------------------------------------------------------------------------- /doc/css/site.css: -------------------------------------------------------------------------------- 1 | .urubu { 2 | background-image: url("../img/urubu_cover.png"); 3 | background-size: cover; 4 | color: white; 5 | } 6 | 7 | body { 8 | position: relative; 9 | padding-top: 50px; 10 | padding-bottom: 20px; 11 | } 12 | 13 | .page-header { 14 | margin-top: 30px; 15 | } 16 | 17 | .breadcrumb { 18 | margin-top: 20px; 19 | } 20 | 21 | .content h2:first-of-type { 22 | margin-top: 0px; 23 | } 24 | 25 | .half-rule { 26 | width: 100px; 27 | margin: 25px auto; 28 | } 29 | 30 | 31 | .fa { 32 | margin-right: 0.5em; 33 | } 34 | 35 | .checklist { 36 | padding: 0; 37 | list-style: none; 38 | } 39 | 40 | /* footer */ 41 | 42 | .footer { 43 | margin-top: 30px; 44 | padding-top: 16px; 45 | color: #777; 46 | border-top: 1px solid #eee; 47 | font-size: 90%; 48 | text-align: center; 49 | } 50 | 51 | .footer p { 52 | margin: 0px; 53 | } 54 | 55 | /* toc */ 56 | 57 | .sidebar { 58 | font-size: 90%; 59 | line-height: normal 60 | } 61 | 62 | .toc ul { 63 | padding-left: 0; 64 | list-style: none; 65 | } 66 | 67 | .toc ul li { 68 | padding-top: 3px; 69 | } 70 | 71 | .toc ul ul { 72 | padding-left: 10px; 73 | font-size: 95%; 74 | } 75 | 76 | /* heading scrolling */ 77 | 78 | h2[id]:before, 79 | h3[id]:before{ 80 | content: ""; 81 | display: block; 82 | height: 70px; 83 | margin-top:-70px; 84 | } 85 | 86 | /* affix hacks from boostrap 3.0 docs */ 87 | .sidebar.affix { 88 | position: static; 89 | } 90 | 91 | @media (min-width: 992px) { 92 | /* Widen the fixed sidebar */ 93 | .sidebar.affix, 94 | .sidebar.affix-bottom { 95 | width: 213px; 96 | } 97 | .sidebar.affix { 98 | position: fixed; /* Undo the static from mobile first approach */ 99 | top: 80px; 100 | } 101 | .sidebar.affix-bottom { 102 | position: absolute; /* Undo the static from mobile first approach */ 103 | } 104 | } 105 | 106 | @media (min-width: 1200px) { 107 | /* Widen the fixed sidebar again */ 108 | .sidebar.affix, 109 | .sidebar.affix-bottom { 110 | width: 263px; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /doc/_build/css/site.css: -------------------------------------------------------------------------------- 1 | .urubu { 2 | background-image: url("../img/urubu_cover.png"); 3 | background-size: cover; 4 | color: white; 5 | } 6 | 7 | body { 8 | position: relative; 9 | padding-top: 50px; 10 | padding-bottom: 20px; 11 | } 12 | 13 | .page-header { 14 | margin-top: 30px; 15 | } 16 | 17 | .breadcrumb { 18 | margin-top: 20px; 19 | } 20 | 21 | .content h2:first-of-type { 22 | margin-top: 0px; 23 | } 24 | 25 | .half-rule { 26 | width: 100px; 27 | margin: 25px auto; 28 | } 29 | 30 | 31 | .fa { 32 | margin-right: 0.5em; 33 | } 34 | 35 | .checklist { 36 | padding: 0; 37 | list-style: none; 38 | } 39 | 40 | /* footer */ 41 | 42 | .footer { 43 | margin-top: 30px; 44 | padding-top: 16px; 45 | color: #777; 46 | border-top: 1px solid #eee; 47 | font-size: 90%; 48 | text-align: center; 49 | } 50 | 51 | .footer p { 52 | margin: 0px; 53 | } 54 | 55 | /* toc */ 56 | 57 | .sidebar { 58 | font-size: 90%; 59 | line-height: normal 60 | } 61 | 62 | .toc ul { 63 | padding-left: 0; 64 | list-style: none; 65 | } 66 | 67 | .toc ul li { 68 | padding-top: 3px; 69 | } 70 | 71 | .toc ul ul { 72 | padding-left: 10px; 73 | font-size: 95%; 74 | } 75 | 76 | /* heading scrolling */ 77 | 78 | h2[id]:before, 79 | h3[id]:before{ 80 | content: ""; 81 | display: block; 82 | height: 70px; 83 | margin-top:-70px; 84 | } 85 | 86 | /* affix hacks from boostrap 3.0 docs */ 87 | .sidebar.affix { 88 | position: static; 89 | } 90 | 91 | @media (min-width: 992px) { 92 | /* Widen the fixed sidebar */ 93 | .sidebar.affix, 94 | .sidebar.affix-bottom { 95 | width: 213px; 96 | } 97 | .sidebar.affix { 98 | position: fixed; /* Undo the static from mobile first approach */ 99 | top: 80px; 100 | } 101 | .sidebar.affix-bottom { 102 | position: absolute; /* Undo the static from mobile first approach */ 103 | } 104 | } 105 | 106 | @media (min-width: 1200px) { 107 | /* Widen the fixed sidebar again */ 108 | .sidebar.affix, 109 | .sidebar.affix-bottom { 110 | width: 263px; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /urubu/httphandler.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015 Sreepathi Pai 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | from urubu._compat import httpserver 19 | 20 | class AliasingHTTPRequestHandler(httpserver.SimpleHTTPRequestHandler): 21 | def do_GET(self): 22 | baseurl = self.server.baseurl 23 | 24 | if not baseurl: 25 | httpserver.SimpleHTTPRequestHandler.do_GET(self) 26 | return 27 | 28 | wk_baseurl = "/%s/" % (baseurl) 29 | 30 | if self.path == wk_baseurl[:-1]: 31 | # handle /$baseurl -> /$baseurl/ 32 | 33 | self.send_response(301, 'Moved Permanently') 34 | self.send_header('Location', wk_baseurl) 35 | self.end_headers() 36 | return 37 | 38 | if self.path[:len(wk_baseurl)] == wk_baseurl: 39 | # translate /$baseurl/path internally to /path and serve 40 | 41 | self.path = self.path[len(wk_baseurl)-1:] 42 | httpserver.SimpleHTTPRequestHandler.do_GET(self) 43 | return 44 | else: 45 | # handle /xyz/path -> /$baseurl/xyz/path 46 | # 47 | # usually caused by underlying server sending a redirect 48 | # to non-baseurl-prefixed path 49 | 50 | self.send_response(302, 'Moved Temporarily') 51 | sep = "/" if self.path[0] != "/" else "" 52 | 53 | # note this replicates underlying bugs in that Location is 54 | # not absolute as required by the spec and we throw away 55 | # '?' and '#' 56 | 57 | self.send_header('Location', "/%s%s%s" % (baseurl, sep, self.path)) 58 | self.end_headers() 59 | return 60 | -------------------------------------------------------------------------------- /urubu/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014-2018 Jan Decaluwe 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | __version__ = "1.3.1" 19 | 20 | from warnings import warn 21 | 22 | class UrubuWarning(UserWarning): 23 | pass 24 | 25 | def urubu_warn(kind, msg='', fn=''): 26 | if fn: 27 | fn = 'in ' + fn + ': ' 28 | if msg: 29 | msg = ': ' + "'{}'".format(msg) 30 | warn(fn + kind + msg, UrubuWarning, stacklevel=2) 31 | 32 | 33 | class UrubuError(Exception): 34 | def __init__(self, kind, msg='', fn=''): 35 | self.kind = kind 36 | self.msg = msg 37 | self.fn = fn 38 | def __str__(self): 39 | fn = self.fn 40 | if fn: 41 | fn = 'in ' + fn + ': ' 42 | msg = self.msg 43 | if msg: 44 | msg = ': ' + "'{}'".format(msg) 45 | return fn + self.kind + msg 46 | 47 | class _error(): 48 | pass 49 | 50 | class _warning(): 51 | pass 52 | 53 | _warning.no_yamlfm = "No yaml front matter - ignored" 54 | _warning.undef_tag_layout = "Tags defined, but no tag layout found" 55 | _warning.undef_ref_md = 'Undefined reference' 56 | _warning.undef_anchor = "Undefined anchor" 57 | 58 | _error.ambig_refid = "Ambiguous reference id" 59 | _error.undef_ref = "Undefined reference" 60 | _error.ambig_ref = "Ambiguous reference, cannot resolve" 61 | _error.undef_info = "Missing attribute" 62 | _error.date_format = "Date format error - should be YYYY-MM-DD" 63 | _error.undef_key = "Undefined key" 64 | _error.undef_content = "No 'content' or 'order' specified" 65 | _error.undef_reflink_key = "Undefined key in site reflink" 66 | _error.ambig_ref_md = 'Ambiguous reference' 67 | _error.no_index = 'Missing index file' 68 | -------------------------------------------------------------------------------- /urubu/tests/no_index/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/no_index/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/no_yamlfm/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/date_format/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/date_format/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/ignore_patterns/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 | 58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 |

Define an anchor.

58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_layout/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref_md/_build/page2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 |

Reference an undefined page: [undefined_page].

58 |
59 |
60 | 61 | 62 |
63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_tag_layout/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /doc/manual/extensions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown extensions 3 | layout: page 4 | pager: true 5 | author: Jan Decaluwe 6 | --- 7 | 8 | Introduction 9 | ============ 10 | 11 | Urubu implements a number of Markdown extensions. These extensions do not 12 | change or extend the Markdown syntax. Rather, they add interesting features by 13 | processing and rendering the Markdown source in more sophisticated ways. 14 | 15 | The extensions are described in more detail below. 16 | 17 | Project-wide reference ids 18 | ========================== 19 | 20 | Urubu implements a Markdown extension to resolve project-wide reference ids. 21 | This means that all pages in the project are automatically available as 22 | reference ids, and can be referred to using Markdown's syntax for reference 23 | links. 24 | 25 | This feature is described in more detail in the sections 26 | [/manual/structure#Project-wide reference ids] and [/manual/authoring#Reference 27 | links]. It is Urubu's most important extension and a fundamental feature of the 28 | tool. 29 | 30 | Bootstrap-specific extensions 31 | ============================= 32 | 33 | Urubu is designed to play well with [bootstrap]. To use certain Bootstrap 34 | features, it has extensions that add Bootstrap classes to certain tags. 35 | More specifically, the following classes are added: 36 | 37 | table 38 | : Added to the `` tag. This defines basic styling for tables. 39 | 40 | dl-horizontal 41 | : Added to the `
` tag that defines definition lists. This creates 42 | a horizontal layout for definition lists in wide viewports. 43 | 44 | Support for the `mark` tag 45 | ========================== 46 | 47 | The html5 specification added _a new tag to highlight text_: the `` 48 | tag. For a good explanation of its purpose and the differences with the 49 | `` and `` tags, see [this answer on Stack Overflow][mark]. 50 | 51 | [mark]: http://stackoverflow.com/a/14741437 52 | 53 | Urubu supports lightweight markup for this tag by taking advantage of a 54 | redundancy in Markdown. In standard Markdown, you can either use asterisks 55 | (`*`) or underscores (`_`) to indicate emphasis. With the Urubu extension, the 56 | underscore (`_`) version is rendered using `` instead. 57 | 58 | This is an experimental feature that may be taken out if there are 59 | serious objections, although at this point there do not seem to be 60 | disadvantages. To disable the feature, the `mark_tag_support` variable 61 | can be set to `false` in the `_site.yml` file. 62 | 63 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_layout/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_build/folder/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/tests/undef_tag_layout/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /doc/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Urubu 3 | layout: home 4 | content: 5 | - start 6 | - manual 7 | - ref: urubu-quickstart 8 | title: Quickstart 9 | - faq 10 | - more 11 | tagline: 12 | A micro CMS for static websites 13 | --- 14 |
15 | 16 |
17 |

For websites, not just blogs

18 |

19 | Set up a website as logically related content. Content 20 | ordering is flexible, not just by date. 21 |

22 |
23 | 24 |
25 |

Focus on navigation

26 |

27 | Easily set up a navbar, a table of contents sidebar, 28 | breadcrumbs and pagers. 29 |

30 |
31 | 32 |
33 |

Ready for Bootstrap

34 |

35 | Urubu plays well with Bootstrap, the popular framework 36 | for great looking websites. 37 |

38 |
39 | 40 |
41 | 42 |
43 |

Markdown content

44 |

45 | Enter content in light-weight Markdown syntax, with 46 | popular extensions. 47 |

48 |
49 | 50 |
51 |

Wiki links

52 |

53 | Easily refer to other pages like 54 | in wikis, using Markdown syntax. 55 |

56 |
57 | 58 |
59 |

Powerful templating

60 |

61 | Use the powerful Jinja2 templating library to 62 | define page layouts. 63 |

64 |
65 | 66 |
67 | 68 |
69 |

Sophisticated control

70 |

71 | Per-page control of page layout 72 | and other stuff. Plus 73 | user-defined variables. 74 |

75 |
76 | 77 |
78 |

Python power

79 |

80 | Urubu is built with Python. It provides Python hooks 81 | to assist in templating. 82 |

83 |
84 | 85 |
86 |

Ideal with git

87 |

88 | Use a git workflow to develop 89 | your website. Deploy by pushing. 90 |

91 |
92 | 93 |
94 | 95 |
96 | 97 | 98 |
99 |
100 |

And of course, it's open source!

101 |
102 |
103 | -------------------------------------------------------------------------------- /urubu/tests/test_errors.py: -------------------------------------------------------------------------------- 1 | import os 2 | from urubu import UrubuError, project 3 | from urubu.project import _error 4 | 5 | from urubu.tests import cd, raises_kind 6 | 7 | def test_undef_reflink_title(): 8 | with cd('undef_reflink_title'): 9 | with raises_kind(UrubuError, _error.undef_reflink_key): 10 | project.build() 11 | 12 | def test_undef_reflink_url(): 13 | with cd('undef_reflink_url'): 14 | with raises_kind(UrubuError, _error.undef_reflink_key): 15 | project.build() 16 | 17 | def test_ambig_ref_md(): 18 | with cd('ambig_ref_md'): 19 | with raises_kind(UrubuError, _error.ambig_ref_md): 20 | project.build() 21 | 22 | def test_ambig_refid(): 23 | with cd('ambig_refid'): 24 | with raises_kind(UrubuError, _error.ambig_refid): 25 | project.build() 26 | 27 | def test_ambig_ref(): 28 | with cd('ambig_ref'): 29 | with raises_kind(UrubuError, _error.ambig_ref): 30 | project.build() 31 | 32 | def test_date_format(): 33 | with cd('date_format'): 34 | with raises_kind(UrubuError, _error.date_format): 35 | project.build() 36 | 37 | def test_undef_reflink_title(): 38 | with cd('undef_reflink_title'): 39 | with raises_kind(UrubuError, _error.undef_reflink_key): 40 | project.build() 41 | 42 | def test_undef_reflink_url(): 43 | with cd('undef_reflink_url'): 44 | with raises_kind(UrubuError, _error.undef_reflink_key): 45 | project.build() 46 | 47 | def test_ignore_patterns(): 48 | with cd('ignore_patterns'): 49 | project.build() 50 | assert not os.path.exists(os.path.join('_build', 'README.html')) 51 | assert os.path.exists(os.path.join('_build', 'page.html')) 52 | 53 | def test_undef_content(): 54 | with cd('undef_content'): 55 | with raises_kind(UrubuError, _error.undef_content): 56 | project.build() 57 | 58 | def test_undef_key(): 59 | with cd('undef_key'): 60 | with raises_kind(UrubuError, _error.undef_key): 61 | project.build() 62 | 63 | def test_undef_layout(): 64 | with cd('undef_layout'): 65 | with raises_kind(UrubuError, _error.undef_info): 66 | project.build() 67 | 68 | def test_undef_ref(): 69 | with cd('undef_ref'): 70 | with raises_kind(UrubuError, _error.undef_ref): 71 | project.build() 72 | 73 | def test_no_index(): 74 | with cd('no_index'): 75 | with raises_kind(UrubuError, _error.no_index): 76 | project.build() 77 | 78 | 79 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/_build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 47 | 48 | 49 |
50 | 51 | 54 | 55 |
56 | 57 |
58 |
59 | 60 |
61 |
62 | 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/_build/github.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | github 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 47 | 48 | 49 |
50 | 51 | 54 | 55 |
56 | 57 |
58 |
59 | 60 |
61 |
62 | 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/_build/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 47 | 48 | 49 |
50 | 51 | 54 | 55 |
56 | 57 |
58 |
59 | 60 |
61 |
62 | 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/_build/page2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | page 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 45 | 46 | 47 |
48 | 49 | 52 | 53 |
54 | 55 |
56 |
57 |

Reference to an anchor in a page: an anchor.

58 |

Reference an undefined anchor: an undefined anchor.

59 |
60 |
61 | 62 | 63 |
64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /urubu/main.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Jan Decaluwe 2 | # 3 | # This file is part of Urubu. 4 | # 5 | # Urubu is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Urubu is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU Affero General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU Affero General Public License 16 | # along with Urubu. If not, see . 17 | 18 | from __future__ import print_function 19 | 20 | import argparse 21 | 22 | import os 23 | from sys import stderr 24 | 25 | from urubu import __version__ 26 | from urubu import project 27 | 28 | from urubu._compat import socketserver, httpserver 29 | from urubu.httphandler import AliasingHTTPRequestHandler 30 | 31 | __IDESC__ = """ 32 | Micro CMS tool to build and test static websites. 33 | """ 34 | 35 | __IEPILOG__ = """ 36 | Documentation: 37 | """ 38 | 39 | def serve(baseurl, host='localhost', port=8000): 40 | """HTTP server straight from the docs.""" 41 | # allow running this from the top level 42 | if os.path.isdir('_build'): 43 | os.chdir('_build') 44 | # local use, address reuse should be OK 45 | socketserver.TCPServer.allow_reuse_address = True 46 | handler = AliasingHTTPRequestHandler 47 | httpd = socketserver.TCPServer((host, port), handler) 48 | httpd.baseurl = baseurl 49 | 50 | if host == '': 51 | print("This web server is not safe for public/production use.", file=stderr) 52 | print("Serving all peers at port {port}...\n\ 53 | Browse (*:{port})".format(host=host, port=port)) 54 | else: 55 | print("Serving {host} at port {port}...\n\ 56 | Browse .".format(host=host, port=port)) 57 | if httpd.baseurl: print("Using baseurl {}".format(httpd.baseurl)) 58 | httpd.serve_forever() 59 | 60 | def main(): 61 | parser = argparse.ArgumentParser(prog='python -m urubu', add_help=False, 62 | epilog=__IEPILOG__, description=__IDESC__) 63 | parser.add_argument('-h', '--help', action='help', help="show program's help and exit") 64 | parser.add_argument('-v', '--version', action='version', version=__version__) 65 | parser.add_argument('command', choices=['build', 'serve', 'serveany']) 66 | args = parser.parse_args() 67 | if args.command == 'build': 68 | project.build() 69 | elif args.command == 'serve': 70 | proj = project.load() 71 | serve(proj.site['baseurl']) 72 | elif args.command == 'serveany': 73 | proj = project.load() 74 | serve(proj.site['baseurl'], host='') 75 | -------------------------------------------------------------------------------- /doc/manual/authoring.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Authoring 3 | layout: page 4 | pager: true 5 | author: Jan Decaluwe 6 | --- 7 | 8 | Content 9 | ======= 10 | 11 | In Urubu, content is entered in [markdown] format. This is a lightweight format 12 | that feels like a natural way to write content in plain text. 13 | 14 | Stock markdown has a small feature set. For example, it does not even 15 | support tables. For this reason, Urubu supports some extensions. In particular, 16 | it supports the [markdown_extra] extensions that have become an industry 17 | standard, as well as a few others. 18 | 19 | The most notable supported extensions are: 20 | 21 | * [tables] 22 | * [attr_list] 23 | * [abbrev] 24 | * [def_list] 25 | * [fenced_code] 26 | * [code_hilite] 27 | 28 | Code 29 | ==== 30 | 31 | Urubu intents to offer good support for software projects. Therefore, it 32 | supports nicely rendered code blocks. 33 | 34 | One part of the solution is [fenced_code], provided by the Markdown Extra 35 | extensions. This lets you enter language-specific code blocks without the need 36 | for indentation. 37 | 38 | The second part is the [code_hilite] extension of Python-Markdown. This 39 | extension enables language-specific syntax highlighting through the [pygments] 40 | library. 41 | 42 | To properly render the highlighted code, you will need to add a `syntax.css` 43 | stylesheet. A good solution is to use the [syntax stylesheet from 44 | GitHub][syntax_github]. 45 | 46 | [syntax_github]: https://github.com/mojombo/tpw/blob/master/css/syntax.css 47 | 48 | Reference links 49 | =============== 50 | 51 | Stock Markdown supports "reference links" that are resolved by defining them 52 | later in the file. For example, you can use `[urubu]` in your content and 53 | further on define it as follows: 54 | 55 | ``` 56 | [urubu]: http://urubu.jandecaluwe.com 57 | ``` 58 | 59 | This is nice for readability, but it all remains file based. 60 | 61 | Urubu extends this behavior by automatically resolving [structure#Project-wide 62 | reference ids]. This feature is implemented as a Markdown extension. Note that 63 | it doesn't require a syntax change. It enables page linking like in wikis. 64 | 65 | In addition, you can add a fragment, like `#some-anchor`, to the reference id. 66 | This represents a link to an anchor within a page. Since Urubu automatically 67 | adds slugified anchors to markdown headers, you can use those as targets. For 68 | instance, `[authoring#reference-links]` is a link to the current 69 | [authoring#Reference links] section. You can also define your own anchors 70 | using [attr_list]. 71 | 72 | Markdown supports reference links without a text. In that case, Urubu inserts 73 | an appropriate text in the html. For a reference link with no fragment, the 74 | title of the page is inserted. For a reference link with a fragment, the 75 | fragment text is inserted. To make the result more readable, you can use 76 | non-slugified fragment text. For example, `[authoring#Reference links]` also 77 | links to the present section, and is rendered as [authoring#Reference links]. 78 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_url/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | title: MyHDL website 15 | dev_myhdl_site: 16 | url: http://dev.myhdl.org 17 | title: MyHDL development website 18 | content_license: 19 | url: http://creativecommons.org/licenses/by-sa/3.0/ 20 | title: CC-BY-SA License 21 | software_license: 22 | url: http://www.gnu.org/licenses/agpl-3.0.txt 23 | title: GNU Affero General Public License 24 | bitbucket: 25 | url: http://www.bitbucket.com 26 | title: Bitbucket 27 | github: 28 | url: http://www.github.com 29 | title: GitHub 30 | markdown: 31 | url: http://daringfireball.net/projects/markdown/ 32 | title: Markdown 33 | markdown_extra: 34 | url: http://pythonhosted.org/Markdown/extensions/extra.html 35 | title: Markdown Extra 36 | python_markdown: 37 | url: http://pythonhosted.org/Markdown/ 38 | title: Python-Markdown 39 | pygments: 40 | url: http://pygments.org 41 | title: Pygments 42 | jinja2: 43 | url: http://jinja.pocoo.org 44 | title: Jinja2 45 | bootstrap: 46 | url: http://getbootstrap.com 47 | title: Bootstrap 48 | bootswatch: 49 | url: http://bootswatch.com 50 | title: Bootswatch 51 | pyyaml: 52 | url: http://pyyaml.org 53 | title: PyYAML 54 | jekyll: 55 | url: http://jekyllrb.com 56 | title: Jekyll 57 | pelican: 58 | url: http://getpelican.com 59 | title: Pelican 60 | virtualenv: 61 | url: http://www.virtualenv.org/en/latest/virtualenv.html 62 | title: virtualenv 63 | urubu_repo: 64 | url: https://github.com/jandecaluwe/urubu 65 | title: Urubu repo 66 | tables: 67 | url: http://pythonhosted.org/Markdown/extensions/tables.html 68 | title: Tables 69 | abbrev: 70 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 71 | title: Abbrevations 72 | attr_list: 73 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 74 | title: Attribute lists 75 | def_list: 76 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 77 | title: Definition Lists 78 | fenced_code: 79 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 80 | title: Fenced Code Blocks 81 | markdown_checklist: 82 | url: https://github.com/FND/markdown-checklist 83 | title: GitHub style Task Lists 84 | code_hilite: 85 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 86 | title: CodeHilite 87 | urubu-quickstart: 88 | url: http://urubu-quickstart.jandecaluwe.com 89 | title: Urubu Quickstart 90 | -------------------------------------------------------------------------------- /urubu/tests/undef_reflink_title/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | dev_myhdl_site: 16 | url: http://dev.myhdl.org 17 | title: MyHDL development website 18 | content_license: 19 | url: http://creativecommons.org/licenses/by-sa/3.0/ 20 | title: CC-BY-SA License 21 | software_license: 22 | url: http://www.gnu.org/licenses/agpl-3.0.txt 23 | title: GNU Affero General Public License 24 | bitbucket: 25 | url: http://www.bitbucket.com 26 | title: Bitbucket 27 | github: 28 | url: http://www.github.com 29 | title: GitHub 30 | markdown: 31 | url: http://daringfireball.net/projects/markdown/ 32 | title: Markdown 33 | markdown_extra: 34 | url: http://pythonhosted.org/Markdown/extensions/extra.html 35 | title: Markdown Extra 36 | python_markdown: 37 | url: http://pythonhosted.org/Markdown/ 38 | title: Python-Markdown 39 | pygments: 40 | url: http://pygments.org 41 | title: Pygments 42 | jinja2: 43 | url: http://jinja.pocoo.org 44 | title: Jinja2 45 | bootstrap: 46 | url: http://getbootstrap.com 47 | title: Bootstrap 48 | bootswatch: 49 | url: http://bootswatch.com 50 | title: Bootswatch 51 | pyyaml: 52 | url: http://pyyaml.org 53 | title: PyYAML 54 | jekyll: 55 | url: http://jekyllrb.com 56 | title: Jekyll 57 | pelican: 58 | url: http://getpelican.com 59 | title: Pelican 60 | virtualenv: 61 | url: http://www.virtualenv.org/en/latest/virtualenv.html 62 | title: virtualenv 63 | urubu_repo: 64 | url: https://github.com/jandecaluwe/urubu 65 | title: Urubu repo 66 | tables: 67 | url: http://pythonhosted.org/Markdown/extensions/tables.html 68 | title: Tables 69 | abbrev: 70 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 71 | title: Abbrevations 72 | attr_list: 73 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 74 | title: Attribute lists 75 | def_list: 76 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 77 | title: Definition Lists 78 | fenced_code: 79 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 80 | title: Fenced Code Blocks 81 | markdown_checklist: 82 | url: https://github.com/FND/markdown-checklist 83 | title: GitHub style Task Lists 84 | code_hilite: 85 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 86 | title: CodeHilite 87 | urubu-quickstart: 88 | url: http://urubu-quickstart.jandecaluwe.com 89 | title: Urubu Quickstart 90 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/no_index/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/no_yamlfm/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/undef_key/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/undef_ref/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/ambig_ref_md/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/ambig_refid/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/date_format/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/undef_anchor/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | -------------------------------------------------------------------------------- /urubu/tests/undef_content/_site.yml: -------------------------------------------------------------------------------- 1 | brand: Urubu 2 | 3 | bootswatch: null 4 | navbar_inverse: false 5 | bootstrap: 3.3.4 6 | 7 | ignore_patterns: ['*.py', 'README.md'] 8 | 9 | reflinks: 10 | jandecaluwe: 11 | url: ttp://www.jandecaluwe.com 12 | title: Jan Decaluwe 13 | myhdl_site: 14 | url: http://www.myhdl.org 15 | title: MyHDL website 16 | dev_myhdl_site: 17 | url: http://dev.myhdl.org 18 | title: MyHDL development website 19 | content_license: 20 | url: http://creativecommons.org/licenses/by-sa/3.0/ 21 | title: CC-BY-SA License 22 | software_license: 23 | url: http://www.gnu.org/licenses/agpl-3.0.txt 24 | title: GNU Affero General Public License 25 | bitbucket: 26 | url: http://www.bitbucket.com 27 | title: Bitbucket 28 | github: 29 | url: http://www.github.com 30 | title: GitHub 31 | markdown: 32 | url: http://daringfireball.net/projects/markdown/ 33 | title: Markdown 34 | markdown_extra: 35 | url: http://pythonhosted.org/Markdown/extensions/extra.html 36 | title: Markdown Extra 37 | python_markdown: 38 | url: http://pythonhosted.org/Markdown/ 39 | title: Python-Markdown 40 | pygments: 41 | url: http://pygments.org 42 | title: Pygments 43 | jinja2: 44 | url: http://jinja.pocoo.org 45 | title: Jinja2 46 | bootstrap: 47 | url: http://getbootstrap.com 48 | title: Bootstrap 49 | bootswatch: 50 | url: http://bootswatch.com 51 | title: Bootswatch 52 | pyyaml: 53 | url: http://pyyaml.org 54 | title: PyYAML 55 | jekyll: 56 | url: http://jekyllrb.com 57 | title: Jekyll 58 | pelican: 59 | url: http://getpelican.com 60 | title: Pelican 61 | virtualenv: 62 | url: http://www.virtualenv.org/en/latest/virtualenv.html 63 | title: virtualenv 64 | urubu_repo: 65 | url: https://github.com/jandecaluwe/urubu 66 | title: Urubu repo 67 | tables: 68 | url: http://pythonhosted.org/Markdown/extensions/tables.html 69 | title: Tables 70 | abbrev: 71 | url: http://pythonhosted.org/Markdown/extensions/abbreviations.html 72 | title: Abbrevations 73 | attr_list: 74 | url: http://pythonhosted.org/Markdown/extensions/attr_list.html 75 | title: Attribute lists 76 | def_list: 77 | url: http://pythonhosted.org/Markdown/extensions/definition_lists.html 78 | title: Definition Lists 79 | fenced_code: 80 | url: http://pythonhosted.org/Markdown/extensions/fenced_code_blocks.html 81 | title: Fenced Code Blocks 82 | markdown_checklist: 83 | url: https://github.com/FND/markdown-checklist 84 | title: GitHub style Task Lists 85 | code_hilite: 86 | url: http://pythonhosted.org/Markdown/extensions/code_hilite.html 87 | title: CodeHilite 88 | urubu-quickstart: 89 | url: http://urubu-quickstart.jandecaluwe.com 90 | title: Urubu Quickstart 91 | --------------------------------------------------------------------------------