docubot 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/docubot.rb +1 -1
- data/lib/docubot/converters/html.rb +22 -2
- data/lib/docubot/converters/markdown.rb +2 -1
- data/spec/samples/highlighting/HTML.html +45 -0
- data/spec/samples/highlighting/Markdown.md +47 -0
- data/spec/samples/highlighting/NOHTML.html +46 -0
- data/spec/samples/highlighting/NOMarkdown.md +48 -0
- data/spec/syntaxhighlighting.rb +51 -0
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGFiNGM1OGVhYmEwYTgzNzk0NTUxMzQwNTBiYTcxYWVmOGY3NjU0ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDU3ZWM0OWJlZWExMWIzOGE5YTJmYTQ2NDU3NGE1NjAzMjZkMDNkZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2JmOGYwY2E5YWQyNzI3MjM0NzI0ZDI1ODI2YmRhMTYyZjE3YWY0ODk1Y2Jj
|
10
|
+
YmNlYzlkOWMxMzgyODk3OWFiOGQ4YTZkYTAzY2Q5MWQyZmE1ZWNlM2NlNjVm
|
11
|
+
ZTkxZThhMzFjYTE4YjY4ZjYwZWIxYzQ2OThhNzg4MjMyNGY5YzY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjJhOTE5ZTcyMGY4ZDRhNzhhYTZiZjVhZmYzOWEzYTFiNjc2OWVlODMzMjc4
|
14
|
+
OWRlYjY3MTlmYzYxMDEzMTY0YzMyZDMxNTAwODc0OGM2ODY2YjhkOGQ5NDhl
|
15
|
+
ZTBiZmJhOWU2ZThmNzJjZGFjMDAxODI3YmFhZTcwNDExYTI4Y2U=
|
data/lib/docubot.rb
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
begin
|
3
|
+
require 'coderay'
|
4
|
+
rescue LoadError
|
5
|
+
warn "Unable to load coderay gem; code blocks will not support syntax highlighting."
|
6
|
+
warn "(Use gem install coderay to fix this, if you desire syntax highlighting.)"
|
7
|
+
end
|
8
|
+
|
2
9
|
DocuBot::Converter.to_convert :html, :htm do |page, source_html|
|
3
|
-
|
4
|
-
|
10
|
+
body = Nokogiri.HTML( source_html ).at('body')
|
11
|
+
if page.meta.highlight!='off' && defined? CodeRay
|
12
|
+
@coderay_languages ||= {}.tap do |h|
|
13
|
+
# Valid as of CodeRay 1.1
|
14
|
+
langs = h[:all] = %w[cpp cplusplus ecmascript java_script ecma_script rhtml erb eruby irb ruby javascript js pascal delphi patch diff plain text plaintext xhtml html yml yaml default c css clojure debug java groovy haml json php python raydebug sql xml]
|
15
|
+
h[:regex] = /(?<=\A|\s)language-(#{Regexp.union(langs)})(?=\s|\z)/
|
16
|
+
h[:css] = langs.map{ |l| ".language-#{l}" }.join(',')
|
17
|
+
end
|
18
|
+
body.css(@coderay_languages[:css]).each do |possible|
|
19
|
+
if lang=possible['class'][@coderay_languages[:regex],1]
|
20
|
+
possible.inner_html = CodeRay.scan( possible.text, lang.to_sym ).html
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
body.inner_html
|
5
25
|
end
|
@@ -2,7 +2,8 @@
|
|
2
2
|
begin
|
3
3
|
require 'kramdown'
|
4
4
|
DocuBot::Converter.to_convert :md, :markdown do |page, source|
|
5
|
-
|
5
|
+
options = page.meta.highlight=='off' ? {enable_coderay:false} : {coderay_line_numbers:nil, coderay_css: :class}
|
6
|
+
Kramdown::Document.new(source,options).to_html
|
6
7
|
end
|
7
8
|
rescue LoadError
|
8
9
|
warn "Unable to load kramdown gem; *.markdown/*.md markup will not be recognized as a page."
|
@@ -0,0 +1,45 @@
|
|
1
|
+
title: Highlighting HTML
|
2
|
+
+++
|
3
|
+
<p>Here's some HTML to highlight:</p>
|
4
|
+
<pre class="language-cpp">
|
5
|
+
#include <AtlasUtils/Plugin.h>
|
6
|
+
#include <AtlasUtils/PluginRegistry.h>
|
7
|
+
|
8
|
+
#include "Cube.h"
|
9
|
+
|
10
|
+
class CUBE_Plugin: public AtlasUtils::Plugin<AtlasSG::NodePtr>
|
11
|
+
{
|
12
|
+
public:
|
13
|
+
// The constructor calls the super-class constructor
|
14
|
+
// passing it the plug-in's name "cube"
|
15
|
+
CUBE_Plugin():
|
16
|
+
AtlasUtils::Plugin<AtlasSG::NodePtr>("cube")
|
17
|
+
{
|
18
|
+
}
|
19
|
+
|
20
|
+
// The read method will be called whenever a request is
|
21
|
+
// made to open a file with an extension ".cube"
|
22
|
+
virtual AtlasSG::NodePtr read( const std::string &filename )
|
23
|
+
{
|
24
|
+
// Since this is a pseudo-plug-in we can ignore the filename
|
25
|
+
|
26
|
+
return AtlasSG::NodePtr( new Cube );
|
27
|
+
}
|
28
|
+
|
29
|
+
virtual bool write( AtlasSG::NodePtr, const std::string &)
|
30
|
+
{
|
31
|
+
return false;
|
32
|
+
}
|
33
|
+
};
|
34
|
+
|
35
|
+
|
36
|
+
// The PLUGIN_PROXY macro instantiates an object of class CUBE_Plugin
|
37
|
+
// when the dynamic shared object is loaded.
|
38
|
+
|
39
|
+
PLUGIN_PROXY( CUBE_Plugin )
|
40
|
+
</pre>
|
41
|
+
|
42
|
+
<p>And here's an inline <code class="language-ruby">def call; end</code></p>
|
43
|
+
<p>Here's one that's left untouched: <code id="untouched1">def call; end</code></p>
|
44
|
+
<p>Here's another that's left untouched: <span id="untouched2" class="ruby">def call; end</span></p>
|
45
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
title: Highlighting Markdown
|
2
|
+
+++
|
3
|
+
Here's some code to highlight:
|
4
|
+
|
5
|
+
~~~ cpp
|
6
|
+
#include <AtlasUtils/Plugin.h>
|
7
|
+
#include <AtlasUtils/PluginRegistry.h>
|
8
|
+
|
9
|
+
#include "Cube.h"
|
10
|
+
|
11
|
+
class CUBE_Plugin: public AtlasUtils::Plugin<AtlasSG::NodePtr>
|
12
|
+
{
|
13
|
+
public:
|
14
|
+
// The constructor calls the super-class constructor
|
15
|
+
// passing it the plug-in's name "cube"
|
16
|
+
CUBE_Plugin():
|
17
|
+
AtlasUtils::Plugin<AtlasSG::NodePtr>("cube")
|
18
|
+
{
|
19
|
+
}
|
20
|
+
|
21
|
+
// The read method will be called whenever a request is
|
22
|
+
// made to open a file with an extension ".cube"
|
23
|
+
virtual AtlasSG::NodePtr read( const std::string &filename )
|
24
|
+
{
|
25
|
+
// Since this is a pseudo-plug-in we can ignore the filename
|
26
|
+
|
27
|
+
return AtlasSG::NodePtr( new Cube );
|
28
|
+
}
|
29
|
+
|
30
|
+
virtual bool write( AtlasSG::NodePtr, const std::string &)
|
31
|
+
{
|
32
|
+
return false;
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
|
37
|
+
// The PLUGIN_PROXY macro instantiates an object of class CUBE_Plugin
|
38
|
+
// when the dynamic shared object is loaded.
|
39
|
+
|
40
|
+
PLUGIN_PROXY( CUBE_Plugin )
|
41
|
+
~~~
|
42
|
+
|
43
|
+
And here's an inline `def call; end`{: .language-ruby} Ruby code.
|
44
|
+
|
45
|
+
Here's one that's left untouched: `def call; end`{: #untouched1}
|
46
|
+
|
47
|
+
Here's another that's left untouched: <span id="untouched2" class="language-ruby">def call; end</span>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
title: Highlighting No HTML
|
2
|
+
highlight: off
|
3
|
+
+++
|
4
|
+
<p>Here's some HTML to highlight:</p>
|
5
|
+
<pre class="language-cpp">
|
6
|
+
#include <AtlasUtils/Plugin.h>
|
7
|
+
#include <AtlasUtils/PluginRegistry.h>
|
8
|
+
|
9
|
+
#include "Cube.h"
|
10
|
+
|
11
|
+
class CUBE_Plugin: public AtlasUtils::Plugin<AtlasSG::NodePtr>
|
12
|
+
{
|
13
|
+
public:
|
14
|
+
// The constructor calls the super-class constructor
|
15
|
+
// passing it the plug-in's name "cube"
|
16
|
+
CUBE_Plugin():
|
17
|
+
AtlasUtils::Plugin<AtlasSG::NodePtr>("cube")
|
18
|
+
{
|
19
|
+
}
|
20
|
+
|
21
|
+
// The read method will be called whenever a request is
|
22
|
+
// made to open a file with an extension ".cube"
|
23
|
+
virtual AtlasSG::NodePtr read( const std::string &filename )
|
24
|
+
{
|
25
|
+
// Since this is a pseudo-plug-in we can ignore the filename
|
26
|
+
|
27
|
+
return AtlasSG::NodePtr( new Cube );
|
28
|
+
}
|
29
|
+
|
30
|
+
virtual bool write( AtlasSG::NodePtr, const std::string &)
|
31
|
+
{
|
32
|
+
return false;
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
|
37
|
+
// The PLUGIN_PROXY macro instantiates an object of class CUBE_Plugin
|
38
|
+
// when the dynamic shared object is loaded.
|
39
|
+
|
40
|
+
PLUGIN_PROXY( CUBE_Plugin )
|
41
|
+
</pre>
|
42
|
+
|
43
|
+
<p>And here's an inline <code class="language-ruby">def call; end</code></p>
|
44
|
+
<p>Here's one that's left untouched: <code id="untouched1">def call; end</code></p>
|
45
|
+
<p>Here's another that's left untouched: <span id="untouched2" class="ruby">def call; end</span></p>
|
46
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
title: Highlighting No Markdown
|
2
|
+
highlight:off
|
3
|
+
+++
|
4
|
+
Here's some code to highlight:
|
5
|
+
|
6
|
+
~~~ cpp
|
7
|
+
#include <AtlasUtils/Plugin.h>
|
8
|
+
#include <AtlasUtils/PluginRegistry.h>
|
9
|
+
|
10
|
+
#include "Cube.h"
|
11
|
+
|
12
|
+
class CUBE_Plugin: public AtlasUtils::Plugin<AtlasSG::NodePtr>
|
13
|
+
{
|
14
|
+
public:
|
15
|
+
// The constructor calls the super-class constructor
|
16
|
+
// passing it the plug-in's name "cube"
|
17
|
+
CUBE_Plugin():
|
18
|
+
AtlasUtils::Plugin<AtlasSG::NodePtr>("cube")
|
19
|
+
{
|
20
|
+
}
|
21
|
+
|
22
|
+
// The read method will be called whenever a request is
|
23
|
+
// made to open a file with an extension ".cube"
|
24
|
+
virtual AtlasSG::NodePtr read( const std::string &filename )
|
25
|
+
{
|
26
|
+
// Since this is a pseudo-plug-in we can ignore the filename
|
27
|
+
|
28
|
+
return AtlasSG::NodePtr( new Cube );
|
29
|
+
}
|
30
|
+
|
31
|
+
virtual bool write( AtlasSG::NodePtr, const std::string &)
|
32
|
+
{
|
33
|
+
return false;
|
34
|
+
}
|
35
|
+
};
|
36
|
+
|
37
|
+
|
38
|
+
// The PLUGIN_PROXY macro instantiates an object of class CUBE_Plugin
|
39
|
+
// when the dynamic shared object is loaded.
|
40
|
+
|
41
|
+
PLUGIN_PROXY( CUBE_Plugin )
|
42
|
+
~~~
|
43
|
+
|
44
|
+
And here's an inline `def call; end`{: .language-ruby} Ruby code.
|
45
|
+
|
46
|
+
Here's one that's left untouched: `def call; end`{: #untouched1}
|
47
|
+
|
48
|
+
Here's another that's left untouched: <span id="untouched2" class="language-ruby">def call; end</span>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require_relative '_helper'
|
3
|
+
|
4
|
+
describe "Applying syntax highlighting" do
|
5
|
+
before do
|
6
|
+
@bundle = DocuBot::Bundle.new SAMPLES/'highlighting'
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should highlight code in HTML" do
|
10
|
+
doc = @bundle.pages.find{ |p| p.meta.title=="Highlighting HTML" }.nokodoc
|
11
|
+
cpp_class = doc.at_css('pre.language-cpp span.class')
|
12
|
+
cpp_class.wont_be_nil
|
13
|
+
cpp_class.text.must_equal "CUBE_Plugin"
|
14
|
+
|
15
|
+
ruby_key = doc.at_css('code.language-ruby span.keyword')
|
16
|
+
ruby_key.wont_be_nil
|
17
|
+
ruby_key.text.must_equal "def"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should highlight code in Markdown" do
|
21
|
+
doc = @bundle.pages.find{ |p| p.meta.title=="Highlighting Markdown" }.nokodoc
|
22
|
+
cpp_class = doc.at_css('pre span.class')
|
23
|
+
cpp_class.wont_be_nil
|
24
|
+
cpp_class.text.must_equal "CUBE_Plugin"
|
25
|
+
|
26
|
+
ruby_key = doc.at_css('code.language-ruby span.keyword')
|
27
|
+
ruby_key.wont_be_nil
|
28
|
+
ruby_key.text.must_equal "def"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not highlight code without a matching class" do
|
32
|
+
%w[ HTML Markdown ].each do |title|
|
33
|
+
doc = @bundle.pages.find{ |p| p.meta.title=="Highlighting #{title}" }.nokodoc
|
34
|
+
no_touch = doc.at_css('#untouched1')
|
35
|
+
no_touch.wont_be_nil
|
36
|
+
no_touch.inner_html.must_equal "def call; end"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not highlight if turned off" do
|
41
|
+
%w[ HTML Markdown ].each do |title|
|
42
|
+
doc = @bundle.pages.find{ |p| p.meta.title=="Highlighting No #{title}" }.nokodoc
|
43
|
+
cpp_class = doc.at_css('pre.language-cpp span.class')
|
44
|
+
cpp_class.must_be_nil
|
45
|
+
|
46
|
+
ruby_key = doc.at_css('code.language-ruby span.keyword')
|
47
|
+
ruby_key.must_be_nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docubot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Kistner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: haml
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - ! '>='
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: coderay
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
84
98
|
description: DocuBot creates HTML or CHM documentation from a hierarchy of files,
|
85
99
|
supporting markups like Markdown, Textile, and Haml.
|
86
100
|
email: gavin@phrogz.net
|
@@ -255,6 +269,10 @@ files:
|
|
255
269
|
- spec/samples/hierarchy/main.css
|
256
270
|
- spec/samples/hierarchy/main.haml
|
257
271
|
- spec/samples/hierarchy/toc.md
|
272
|
+
- spec/samples/highlighting/HTML.html
|
273
|
+
- spec/samples/highlighting/Markdown.md
|
274
|
+
- spec/samples/highlighting/NOHTML.html
|
275
|
+
- spec/samples/highlighting/NOMarkdown.md
|
258
276
|
- spec/samples/links/index.txt
|
259
277
|
- spec/samples/links/one two three.textile
|
260
278
|
- spec/samples/links/pending.md
|
@@ -302,6 +320,7 @@ files:
|
|
302
320
|
- spec/samples/underscores/_static/Foo/_ignoremore.txt
|
303
321
|
- spec/samples/underscores/_static/_Bar/_ignoreevenmore.txt
|
304
322
|
- spec/samples/underscores/subsection/_andignoreme.md
|
323
|
+
- spec/syntaxhighlighting.rb
|
305
324
|
- spec/templates.rb
|
306
325
|
- spec/toc.rb
|
307
326
|
- spec/writer/chm.rb
|
@@ -331,6 +350,7 @@ requirements:
|
|
331
350
|
- kramdown gem for Markdown conversion.
|
332
351
|
- RedCloth gem for Textile conversion.
|
333
352
|
- MiniTest gem for running specifications.
|
353
|
+
- CodeRay gem for syntax highlighting.
|
334
354
|
rubyforge_project:
|
335
355
|
rubygems_version: 2.2.2
|
336
356
|
signing_key:
|