gitlab-markup 1.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.gitlab-ci.yml +27 -0
- data/.kick +26 -0
- data/.travis.yml +21 -0
- data/CONTRIBUTING.md +49 -0
- data/Gemfile +13 -0
- data/HISTORY.md +128 -0
- data/LICENSE +20 -0
- data/README.md +58 -0
- data/Rakefile +17 -0
- data/bin/github-markup +10 -0
- data/gitlab-markup.gemspec +25 -0
- data/lib/github-markup.rb +6 -0
- data/lib/github/commands/rest2html +200 -0
- data/lib/github/markup.rb +55 -0
- data/lib/github/markup/command_implementation.rb +71 -0
- data/lib/github/markup/gem_implementation.rb +30 -0
- data/lib/github/markup/implementation.rb +28 -0
- data/lib/github/markup/markdown.rb +60 -0
- data/lib/github/markup/rdoc.rb +26 -0
- data/lib/github/markups.rb +50 -0
- data/script/bootstrap +8 -0
- data/script/cibuild +20 -0
- data/test/fixtures/fail.sh +3 -0
- data/test/markup_test.rb +116 -0
- data/test/markups/README.asciidoc +23 -0
- data/test/markups/README.asciidoc.html +59 -0
- data/test/markups/README.creole +34 -0
- data/test/markups/README.creole.html +20 -0
- data/test/markups/README.litcoffee +59 -0
- data/test/markups/README.litcoffee.html +66 -0
- data/test/markups/README.markdown +2 -0
- data/test/markups/README.markdown.html +4 -0
- data/test/markups/README.mediawiki +30 -0
- data/test/markups/README.mediawiki.html +60 -0
- data/test/markups/README.noformat +2 -0
- data/test/markups/README.noformat.html +2 -0
- data/test/markups/README.org +131 -0
- data/test/markups/README.org.html +139 -0
- data/test/markups/README.pod +88 -0
- data/test/markups/README.pod.html +85 -0
- data/test/markups/README.rdoc +6 -0
- data/test/markups/README.rdoc.html +12 -0
- data/test/markups/README.rmd +3 -0
- data/test/markups/README.rmd.html +6 -0
- data/test/markups/README.rst +79 -0
- data/test/markups/README.rst.html +91 -0
- data/test/markups/README.rst.txt +21 -0
- data/test/markups/README.rst.txt.html +37 -0
- data/test/markups/README.textile +2 -0
- data/test/markups/README.textile.html +4 -0
- data/test/markups/README.toc.rst +30 -0
- data/test/markups/README.toc.rst.html +32 -0
- data/test/markups/README.txt +2 -0
- data/test/markups/README.txt.html +2 -0
- metadata +216 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5d773b18a0aefc150bf87e380d9efa3ed0c63425
|
4
|
+
data.tar.gz: 9021cc4c1aef932a5227a03e6ce7245f914d41fa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 06675a6df4b9b39573c2b7b9f4178ed49fe5eec73c3185548c3a550aaed65f642c11466af9a9bdaea4d6f2f4463117b96d75140ad90f234d0009a339d6826d2f
|
7
|
+
data.tar.gz: af0a1dba6a7e9c4335f761af703f8a58d73bcc0d9d3a7f1f0d0bac2def20cbe68ee1e8b3a80e01baf7de90f28b7780dfabb7a0c733da199c79a18b9873bcea4b
|
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
variables:
|
2
|
+
LANG: "C.UTF-8"
|
3
|
+
|
4
|
+
.specs: &specs
|
5
|
+
cache:
|
6
|
+
paths:
|
7
|
+
- vendor/ruby
|
8
|
+
before_script:
|
9
|
+
- apt update
|
10
|
+
- apt install python-pip git build-essential -y
|
11
|
+
- pip install docutils
|
12
|
+
- bundle install --jobs $(nproc)
|
13
|
+
script:
|
14
|
+
- bundle exec rake test
|
15
|
+
|
16
|
+
ruby-20:
|
17
|
+
image: ruby:2.0
|
18
|
+
<<: *specs
|
19
|
+
ruby-21:
|
20
|
+
image: ruby:2.1
|
21
|
+
<<: *specs
|
22
|
+
ruby-22:
|
23
|
+
image: ruby:2.2
|
24
|
+
<<: *specs
|
25
|
+
ruby-23:
|
26
|
+
image: ruby:2.3
|
27
|
+
<<: *specs
|
data/.kick
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# take control of the growl notifications
|
2
|
+
module GrowlHacks
|
3
|
+
def growl(type, subject, body, *args, &block)
|
4
|
+
case type
|
5
|
+
when Kicker::GROWL_NOTIFICATIONS[:succeeded]
|
6
|
+
puts subject = "Success"
|
7
|
+
body = body.split("\n").last
|
8
|
+
when Kicker::GROWL_NOTIFICATIONS[:failed]
|
9
|
+
subject = "Failure"
|
10
|
+
puts body
|
11
|
+
body = body.split("\n").last
|
12
|
+
else
|
13
|
+
return nil
|
14
|
+
end
|
15
|
+
super(type, subject, body, *args, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Kicker.send :extend, GrowlHacks
|
20
|
+
|
21
|
+
# no logging
|
22
|
+
Kicker::Utils.module_eval do
|
23
|
+
def log(message)
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
data/.travis.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.0.0
|
4
|
+
- 2.1.1
|
5
|
+
- jruby-19mode
|
6
|
+
jdk:
|
7
|
+
- oraclejdk8
|
8
|
+
notifications:
|
9
|
+
email: false
|
10
|
+
git:
|
11
|
+
depth: 10
|
12
|
+
before_install: sudo pip install docutils
|
13
|
+
cache:
|
14
|
+
- bundler
|
15
|
+
- pip
|
16
|
+
env:
|
17
|
+
global:
|
18
|
+
- "JRUBY_OPTS=-Xcext.enabled=true"
|
19
|
+
matrix:
|
20
|
+
allow_failures:
|
21
|
+
- rvm: jruby-19mode
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to honor this code.
|
4
|
+
[code-of-conduct]: http://todogroup.org/opencodeofconduct/#GitHub%20Markup/opensource@github.com
|
5
|
+
|
6
|
+
This library's only job is to decide which markup format to use and call out to an external library to convert the markup to HTML (see the [README](README.md) for more information on how markup is rendered on GitHub.com).
|
7
|
+
|
8
|
+
If you are having an issue with:
|
9
|
+
|
10
|
+
* **Syntax highlighting** - see [github/linguist](https://github.com/github/linguist/blob/master/CONTRIBUTING.md#fixing-syntax-highlighting)
|
11
|
+
* **Markdown on GitHub** - contact support@github.com
|
12
|
+
* **Styling issues on GitHub** - see [primer/markdown](https://github.com/primer/markdown)
|
13
|
+
|
14
|
+
Anything else - [search open issues](https://github.com/github/markup/issues) or create an issue and and we'll help point you in the right direction.
|
15
|
+
|
16
|
+
## Submitting a Merge Request
|
17
|
+
|
18
|
+
1. Fork it.
|
19
|
+
2. Create a branch (`git checkout -b my_markup`)
|
20
|
+
3. Commit your changes (`git commit -am "Added Snarkdown"`)
|
21
|
+
4. Push to the branch (`git push origin my_markup`)
|
22
|
+
5. Open a [Merge Request][1]
|
23
|
+
6. Enjoy a refreshing Diet Coke and wait
|
24
|
+
|
25
|
+
## Testing
|
26
|
+
|
27
|
+
To run the tests:
|
28
|
+
|
29
|
+
$ rake
|
30
|
+
|
31
|
+
If nothing complains, congratulations!
|
32
|
+
|
33
|
+
## Releasing a new version
|
34
|
+
|
35
|
+
If you are the current maintainer of this gem:
|
36
|
+
|
37
|
+
0. Bump the version number in `lib/github-markup.rb`, adhering to [Semantic Versioning](http://semver.org/)
|
38
|
+
0. Update `HISTORY.md`
|
39
|
+
0. Test the latest version on GitHub
|
40
|
+
0. Build the new version with `rake build`
|
41
|
+
0. Copy `pkg/gitlab-markup*.gem` to `vendor/cache` in your local checkout of GitHub
|
42
|
+
0. Update the version for `gitlab-markup` in the `Gemfile`
|
43
|
+
0. Run `bundle update --local gitlab-markup`
|
44
|
+
0. Run any relevant tests and test it manually from the browser.
|
45
|
+
0. Push the new gem release with `rake release`. If you don't have permission to release to rubygems.org, contact one of the existing owners (`gem owners github-markup`) and ask them to add you.
|
46
|
+
|
47
|
+
[1]: https://gitlab.com/gitlab-org/gitlab-markup/merge_requests
|
48
|
+
[r2h]: lib/github/commands/rest2html
|
49
|
+
[r2hc]: lib/github/markups.rb#L51
|
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
gemspec
|
3
|
+
|
4
|
+
gem "posix-spawn", :platforms => :ruby
|
5
|
+
gem "redcarpet", :platforms => :ruby
|
6
|
+
gem "kramdown", :platforms => :jruby
|
7
|
+
gem "RedCloth"
|
8
|
+
gem "rdoc", "~>3.6"
|
9
|
+
gem "org-ruby", "~> 0.9"
|
10
|
+
gem "creole", "~>0.5.0"
|
11
|
+
gem "wikicloth", "=0.8.1", :platforms => :ruby
|
12
|
+
gem "asciidoctor", "= 1.5.2"
|
13
|
+
gem "rake"
|
data/HISTORY.md
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
## 1.5.0 (2016-10-13)
|
2
|
+
|
3
|
+
* GitLab CI support
|
4
|
+
* Fixed `.pod` test files to use newer syntax.
|
5
|
+
* Changes to support Python 3 (it's not out-of-the box yet, you still need to patch code)
|
6
|
+
* Gem published as 'gitlab-markup'
|
7
|
+
|
8
|
+
## 1.3.3 (2015-02-17)
|
9
|
+
|
10
|
+
* Address a slight typo with `POSIX` [#456](https://github.com/github/markup/pull/456)
|
11
|
+
|
12
|
+
[Full changelog](https://github.com/github/markup/compare/v1.3.2...v1.3.3)
|
13
|
+
|
14
|
+
## 1.3.2 (2015-02-17)
|
15
|
+
|
16
|
+
* RST: Output code instead of tt for inline literals [#370](https://github.com/github/markup/pull/370)
|
17
|
+
* RST: Add IDs to headers so that `.. contents` works with `.. sectnum` [#391](https://github.com/github/markup/pull/391)
|
18
|
+
|
19
|
+
[Full changelog](https://github.com/github/markup/compare/v1.3.1...v1.3.2)
|
20
|
+
|
21
|
+
## 1.3.1 (2014-11-13)
|
22
|
+
|
23
|
+
* Fix name error when trying to use newer versions of RedCarpet [#387](https://github.com/github/markup/pull/387)
|
24
|
+
|
25
|
+
[Full changelog](https://github.com/github/markup/compare/v1.3.0...v1.3.1)
|
26
|
+
|
27
|
+
## 1.3.0 (2014-09-11)
|
28
|
+
|
29
|
+
* Extend the field limit for tables to 50 characters for RST [#306](https://github.com/github/markup/pull/306)
|
30
|
+
* Add `.mkdn` as a supported markdown extension [#308](https://github.com/github/markup/pull/308)
|
31
|
+
* Upgrade wikicloth to 0.8.1 [#317](https://github.com/github/markup/pull/317)
|
32
|
+
* Force encoding of posix-spawn output [#338](https://github.com/github/markup/pull/338)
|
33
|
+
* Add `.rmd` as a supported markdown extension [#343](https://github.com/github/markup/pull/343)
|
34
|
+
|
35
|
+
[Full changelog](https://github.com/github/markup/compare/v1.2.1...v1.3.0)
|
36
|
+
|
37
|
+
## 1.2.1 (2014-04-23)
|
38
|
+
|
39
|
+
* Disable RST warnings [#290](https://github.com/github/markup/pull/290)
|
40
|
+
|
41
|
+
[Full changelog](https://github.com/github/markup/compare/v1.2.0...v1.2.1)
|
42
|
+
|
43
|
+
## 1.1.1 (2014-04-03)
|
44
|
+
|
45
|
+
* Upgrade to org-ruby 0.9.1
|
46
|
+
* Set default encoding to UTF-8 for Python 2
|
47
|
+
|
48
|
+
## 1.1.0 (2014-03-10)
|
49
|
+
|
50
|
+
* Raise GitHub::Markup::CommandError if external command exits with a non-zero status.
|
51
|
+
* Remove support for literate Haskell (see #266)
|
52
|
+
|
53
|
+
## 0.5.1 (2010-09-30)
|
54
|
+
|
55
|
+
* Support relative path links in rdoc
|
56
|
+
|
57
|
+
## 0.5.0 (2010-07-07)
|
58
|
+
|
59
|
+
* Added creole support
|
60
|
+
|
61
|
+
## 0.4.0 (2010-04-23)
|
62
|
+
|
63
|
+
* Removed man page support until it's ready.
|
64
|
+
|
65
|
+
## 0.3.3 (2010-03-29)
|
66
|
+
|
67
|
+
* UTF-8 works with ReST now.
|
68
|
+
|
69
|
+
## 0.3.2 (2010-03-25)
|
70
|
+
|
71
|
+
* Improved test runner
|
72
|
+
* Forgive ReST problems that aren't user errors.
|
73
|
+
|
74
|
+
## 0.3.1 (2010-03-22)
|
75
|
+
|
76
|
+
* Add .rst.txt extension
|
77
|
+
* Fix ASCII encoding error while using print u'\u010c' non-ASCII char and similar.
|
78
|
+
|
79
|
+
## 0.3.0 (2010-03-11)
|
80
|
+
|
81
|
+
* man rendering
|
82
|
+
* `github-markup` command line runner
|
83
|
+
|
84
|
+
## 0.2.2 (2010-02-09)
|
85
|
+
|
86
|
+
* pod fixes from Ricardo Signes
|
87
|
+
|
88
|
+
## 0.2.1 (2010-01-25)
|
89
|
+
|
90
|
+
* ReST fixes from Michael Jones
|
91
|
+
|
92
|
+
## 0.2.0 (2010-01-10)
|
93
|
+
|
94
|
+
* org-mode support
|
95
|
+
|
96
|
+
## 0.1.7 (2009-11-17)
|
97
|
+
|
98
|
+
* Ditch asciidoc2html, call asciidoc directly
|
99
|
+
|
100
|
+
## 0.1.6 (2009-11-17)
|
101
|
+
|
102
|
+
* mdown
|
103
|
+
|
104
|
+
## 0.1.5 (2009-11-17)
|
105
|
+
|
106
|
+
* Actually, if we can't render a thing then don't. Not once, not never.
|
107
|
+
|
108
|
+
## 0.1.4 (2009-11-17)
|
109
|
+
|
110
|
+
* Bugfix: Missing commands return the input (instead of nothing)
|
111
|
+
|
112
|
+
## 0.1.3 (2009-11-02)
|
113
|
+
|
114
|
+
* Strip the INDEX comments from POD
|
115
|
+
|
116
|
+
## 0.1.2 (2009-11-02)
|
117
|
+
|
118
|
+
* Renamed to `github-markup`
|
119
|
+
* Bugfix: POD rendering works now, not just index
|
120
|
+
|
121
|
+
## 0.1.1 (2009-11-02)
|
122
|
+
|
123
|
+
* Added `GitHub::Markup.can_render?` helper.
|
124
|
+
* Bugfix: Actually check file extensions
|
125
|
+
|
126
|
+
## 0.1.0 (2009-11-02)
|
127
|
+
|
128
|
+
* First release
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 GitHub
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
GitHub Markup
|
2
|
+
=============
|
3
|
+
|
4
|
+
[![build status](https://gitlab.com/gitlab-org/gitlab-markup/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-markup/commits/master)
|
5
|
+
|
6
|
+
This library is the first step of a journey that every markup file in a repository goes on before it is rendered on GitHub.com:
|
7
|
+
|
8
|
+
0. This library converts the raw markup to HTML. See the list of [supported markup formats](#markups) below.
|
9
|
+
0. The HTML is sanitized, aggressively removing things that could harm you and your kin—such as `script` tags, inline-styles, and `class` or `id` attributes. See the [sanitization filter](https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/sanitization_filter.rb) for the full whitelist.
|
10
|
+
0. Syntax highlighting is performed on code blocks. See [github/linguist](https://github.com/github/linguist#syntax-highlighting) for more information about syntax highlighting.
|
11
|
+
0. The HTML is passed through other filters in the [html-pipeline](https://github.com/jch/html-pipeline) that add special sauce, such as [emoji](https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/emoji_filter.rb), [task lists](https://github.com/github/task_list/blob/master/lib/task_list/filter.rb), [named anchors](https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb), [CDN caching for images](https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/camo_filter.rb), and [autolinking](https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/autolink_filter.rb).
|
12
|
+
0. The resulting HTML is rendered on GitHub.com.
|
13
|
+
|
14
|
+
Please see our [contributing guidelines](CONTRIBUTING.md) before reporting an issue.
|
15
|
+
|
16
|
+
Markups
|
17
|
+
-------
|
18
|
+
|
19
|
+
The following markups are supported. The dependencies listed are required if
|
20
|
+
you wish to run the library. You can also run `script/bootstrap` to fetch them all.
|
21
|
+
|
22
|
+
* [.markdown, .mdown, .mkdn, .md](http://daringfireball.net/projects/markdown/) -- `gem install redcarpet` (https://github.com/vmg/redcarpet)
|
23
|
+
* [.textile](http://www.textism.com/tools/textile/) -- `gem install RedCloth`
|
24
|
+
* [.rdoc](http://rdoc.sourceforge.net/) -- `gem install rdoc -v 3.6.1`
|
25
|
+
* [.org](http://orgmode.org/) -- `gem install org-ruby`
|
26
|
+
* [.creole](http://wikicreole.org/) -- `gem install creole`
|
27
|
+
* [.mediawiki, .wiki](http://www.mediawiki.org/wiki/Help:Formatting) -- `gem install wikicloth`
|
28
|
+
* [.rst](http://docutils.sourceforge.net/rst.html) -- `easy_install docutils`
|
29
|
+
* [.asciidoc, .adoc, .asc](http://asciidoc.org/) -- `gem install asciidoctor` (http://asciidoctor.org)
|
30
|
+
* [.pod](http://search.cpan.org/dist/perl/pod/perlpod.pod) -- `Pod::Simple::HTML`
|
31
|
+
comes with Perl >= 5.10. Lower versions should install [Pod::Simple](http://search.cpan.org/~dwheeler/Pod-Simple-3.28/lib/Pod/Simple.pod) from CPAN.
|
32
|
+
|
33
|
+
Installation
|
34
|
+
-----------
|
35
|
+
|
36
|
+
```
|
37
|
+
gem install github-markup
|
38
|
+
```
|
39
|
+
|
40
|
+
Usage
|
41
|
+
-----
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
require 'github/markup'
|
45
|
+
GitHub::Markup.render('README.markdown', "* One\n* Two")
|
46
|
+
```
|
47
|
+
|
48
|
+
Or, more realistically:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
require 'github/markup'
|
52
|
+
GitHub::Markup.render(file, File.read(file))
|
53
|
+
```
|
54
|
+
|
55
|
+
Contributing
|
56
|
+
------------
|
57
|
+
|
58
|
+
See [Contributing](CONTRIBUTING.md)
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
|
5
|
+
require 'rake/testtask'
|
6
|
+
Rake::TestTask.new(:test) do |test|
|
7
|
+
test.libs << 'lib' << 'test'
|
8
|
+
test.pattern = 'test/**/*_test.rb'
|
9
|
+
test.verbose = true
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Open an irb session preloaded with this library"
|
13
|
+
task :console do
|
14
|
+
sh "irb -I lib -r bundler/setup -r github/markup"
|
15
|
+
end
|
16
|
+
|
17
|
+
task :default => :test
|
data/bin/github-markup
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path("../lib/github-markup", __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "gitlab-markup"
|
5
|
+
s.version = GitHub::Markup::VERSION
|
6
|
+
s.summary = "The code GitHub uses to render README.markup"
|
7
|
+
s.description = "This gem is used by GitHub to render any fancy markup such " +
|
8
|
+
"as Markdown, Textile, Org-Mode, etc. Fork it and add your own!"
|
9
|
+
s.authors = ["Chris Wanstrath"]
|
10
|
+
s.email = "chris@ozmm.org"
|
11
|
+
s.homepage = "https://gitlab.com/gitlab-org/gitlab-markup"
|
12
|
+
s.license = "MIT"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split($\)
|
15
|
+
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
17
|
+
s.require_paths = %w[lib]
|
18
|
+
|
19
|
+
s.add_development_dependency 'activesupport', '~> 4.0'
|
20
|
+
s.add_development_dependency 'minitest', '~> 5.4.3'
|
21
|
+
s.add_development_dependency 'html-pipeline', '~> 1.0'
|
22
|
+
s.add_development_dependency 'sanitize', '~> 2.1.0'
|
23
|
+
s.add_development_dependency 'nokogiri', '~> 1.6.1'
|
24
|
+
s.add_development_dependency 'nokogiri-diff', '~> 0.2.0'
|
25
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
"""
|
3
|
+
rest2html - A small wrapper file for parsing ReST files at GitHub.
|
4
|
+
|
5
|
+
Written in 2008 by Jannis Leidel <jannis@leidel.info>
|
6
|
+
|
7
|
+
Brandon Keepers <bkeepers@github.com>
|
8
|
+
Bryan Veloso <bryan@revyver.com>
|
9
|
+
Chris Wanstrath <chris@ozmm.org>
|
10
|
+
Dave Abrahams <dave@boostpro.com>
|
11
|
+
Garen Torikian <garen@github.com>
|
12
|
+
Gasper Zejn <zejn@kiberpipa.org>
|
13
|
+
Michael Jones <m.pricejones@gmail.com>
|
14
|
+
Sam Whited <sam@samwhited.com>
|
15
|
+
Tyler Chung <zonyitoo@gmail.com>
|
16
|
+
Vicent Marti <tanoku@gmail.com>
|
17
|
+
|
18
|
+
To the extent possible under law, the author(s) have dedicated all copyright
|
19
|
+
and related and neighboring rights to this software to the public domain
|
20
|
+
worldwide. This software is distributed without any warranty.
|
21
|
+
|
22
|
+
You should have received a copy of the CC0 Public Domain Dedication along with
|
23
|
+
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
24
|
+
"""
|
25
|
+
|
26
|
+
__author__ = "Jannis Leidel"
|
27
|
+
__license__ = "CC0"
|
28
|
+
__version__ = "0.1"
|
29
|
+
|
30
|
+
import sys
|
31
|
+
import os
|
32
|
+
|
33
|
+
# This fixes docutils failing with unicode parameters to CSV-Table. The -S
|
34
|
+
# switch and the following 3 lines can be removed after upgrading to python 3.
|
35
|
+
if sys.version_info[0] < 3:
|
36
|
+
reload(sys)
|
37
|
+
sys.setdefaultencoding('utf-8')
|
38
|
+
|
39
|
+
import site
|
40
|
+
|
41
|
+
try:
|
42
|
+
import locale
|
43
|
+
locale.setlocale(locale.LC_ALL, '')
|
44
|
+
except:
|
45
|
+
pass
|
46
|
+
|
47
|
+
import codecs
|
48
|
+
import io
|
49
|
+
|
50
|
+
from docutils import nodes
|
51
|
+
from docutils.parsers.rst import directives, roles
|
52
|
+
from docutils.parsers.rst.directives.body import CodeBlock
|
53
|
+
from docutils.core import publish_parts
|
54
|
+
from docutils.writers.html4css1 import Writer, HTMLTranslator
|
55
|
+
|
56
|
+
SETTINGS = {
|
57
|
+
'cloak_email_addresses': False,
|
58
|
+
'file_insertion_enabled': False,
|
59
|
+
'raw_enabled': True,
|
60
|
+
'strip_comments': True,
|
61
|
+
'doctitle_xform': True,
|
62
|
+
'sectsubtitle_xform': True,
|
63
|
+
'initial_header_level': 2,
|
64
|
+
'report_level': 5,
|
65
|
+
'syntax_highlight': 'none',
|
66
|
+
'math_output': 'latex',
|
67
|
+
'field_name_limit': 50,
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
class DoctestDirective(CodeBlock):
|
72
|
+
"""Render Sphinx 'doctest:: [group]' blocks as 'code:: python'
|
73
|
+
"""
|
74
|
+
|
75
|
+
def run(self):
|
76
|
+
"""Discard any doctest group argument, render contents as python code
|
77
|
+
"""
|
78
|
+
self.arguments = ['python']
|
79
|
+
return super(DoctestDirective, self).run()
|
80
|
+
|
81
|
+
|
82
|
+
class GitHubHTMLTranslator(HTMLTranslator):
|
83
|
+
|
84
|
+
# removes the <div class="document"> tag wrapped around docs
|
85
|
+
# see also: http://bit.ly/1exfq2h (warning! sourceforge link.)
|
86
|
+
def depart_document(self, node):
|
87
|
+
HTMLTranslator.depart_document(self, node)
|
88
|
+
self.html_body.pop(0) # pop the starting <div> off
|
89
|
+
self.html_body.pop() # pop the ending </div> off
|
90
|
+
|
91
|
+
# technique for visiting sections, without generating additional divs
|
92
|
+
# see also: http://bit.ly/NHtyRx
|
93
|
+
# the a is to support ::contents with ::sectnums: http://git.io/N1yC
|
94
|
+
def visit_section(self, node):
|
95
|
+
id_attribute = node.attributes['ids'][0]
|
96
|
+
self.body.append('<a name="%s"></a>\n' % id_attribute)
|
97
|
+
self.section_level += 1
|
98
|
+
|
99
|
+
def depart_section(self, node):
|
100
|
+
self.section_level -= 1
|
101
|
+
|
102
|
+
def visit_literal_block(self, node):
|
103
|
+
classes = node.attributes['classes']
|
104
|
+
if len(classes) >= 2 and classes[0] == 'code':
|
105
|
+
language = classes[1]
|
106
|
+
del classes[:]
|
107
|
+
self.body.append(self.starttag(node, 'pre', lang=language))
|
108
|
+
else:
|
109
|
+
self.body.append(self.starttag(node, 'pre'))
|
110
|
+
|
111
|
+
# always wrap two-backtick rst inline literals in <code>, not <tt>
|
112
|
+
# this also avoids the generation of superfluous <span> tags
|
113
|
+
def visit_literal(self, node):
|
114
|
+
self.body.append(self.starttag(node, 'code', suffix=''))
|
115
|
+
|
116
|
+
def depart_literal(self, node):
|
117
|
+
self.body.append('</code>')
|
118
|
+
|
119
|
+
def visit_table(self, node):
|
120
|
+
classes = ' '.join(['docutils', self.settings.table_style]).strip()
|
121
|
+
self.body.append(
|
122
|
+
self.starttag(node, 'table', CLASS=classes))
|
123
|
+
|
124
|
+
def depart_table(self, node):
|
125
|
+
self.body.append('</table>\n')
|
126
|
+
|
127
|
+
def depart_image(self, node):
|
128
|
+
uri = node['uri']
|
129
|
+
ext = os.path.splitext(uri)[1].lower()
|
130
|
+
# we need to swap RST's use of `object` with `img` tags
|
131
|
+
# see http://git.io/5me3dA
|
132
|
+
if ext == ".svg":
|
133
|
+
# preserve essential attributes
|
134
|
+
atts = {}
|
135
|
+
for attribute, value in node.attributes.items():
|
136
|
+
# we have no time for empty values
|
137
|
+
if value:
|
138
|
+
if attribute == "uri":
|
139
|
+
atts['src'] = value
|
140
|
+
else:
|
141
|
+
atts[attribute] = value
|
142
|
+
|
143
|
+
# toss off `object` tag
|
144
|
+
self.body.pop()
|
145
|
+
# add on `img` with attributes
|
146
|
+
self.body.append(self.starttag(node, 'img', **atts))
|
147
|
+
self.body.append(self.context.pop())
|
148
|
+
|
149
|
+
|
150
|
+
def kbd(name, rawtext, text, lineno, inliner, options=None, content=None):
|
151
|
+
|
152
|
+
return [nodes.raw('', '<kbd>%s</kbd>' % text, format='html')], []
|
153
|
+
|
154
|
+
|
155
|
+
def main():
|
156
|
+
"""
|
157
|
+
Parses the given ReST file or the redirected string input and returns the
|
158
|
+
HTML body.
|
159
|
+
|
160
|
+
Usage: rest2html < README.rst
|
161
|
+
rest2html README.rst
|
162
|
+
"""
|
163
|
+
try:
|
164
|
+
text = codecs.open(sys.argv[1], 'r', 'utf-8').read()
|
165
|
+
except IOError: # given filename could not be found
|
166
|
+
return ''
|
167
|
+
except IndexError: # no filename given
|
168
|
+
if sys.version_info[0] < 3: # python 2.x
|
169
|
+
text = sys.stdin.read()
|
170
|
+
else: # python 3
|
171
|
+
input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
|
172
|
+
text = input_stream.read()
|
173
|
+
|
174
|
+
writer = Writer()
|
175
|
+
writer.translator_class = GitHubHTMLTranslator
|
176
|
+
|
177
|
+
roles.register_canonical_role('kbd', kbd)
|
178
|
+
|
179
|
+
# Render source code in Sphinx doctest blocks
|
180
|
+
directives.register_directive('doctest', DoctestDirective)
|
181
|
+
|
182
|
+
parts = publish_parts(text, writer=writer, settings_overrides=SETTINGS)
|
183
|
+
if 'html_body' in parts:
|
184
|
+
html = parts['html_body']
|
185
|
+
|
186
|
+
# publish_parts() in python 2.x return dict values as Unicode type
|
187
|
+
# in py3k Unicode is unavailable and values are of str type
|
188
|
+
if isinstance(html, str):
|
189
|
+
return html
|
190
|
+
else:
|
191
|
+
return html.encode('utf-8')
|
192
|
+
return ''
|
193
|
+
|
194
|
+
if __name__ == '__main__':
|
195
|
+
if sys.version_info[0] < 3: # python 2.x
|
196
|
+
sys.stdout.write("%s%s" % (main(), "\n"))
|
197
|
+
else: # python 3
|
198
|
+
output_stream = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
199
|
+
output_stream.write("%s%s" % (main(), "\n"))
|
200
|
+
sys.stdout.flush()
|