nanoc-code-classifier 0.0.2 → 0.0.3

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.
data/README.md CHANGED
@@ -0,0 +1,53 @@
1
+ # nanoc-code-classifier
2
+
3
+ The nanoc syntax highlighting filter (Nanoc3::Filters::ColorizeSyntax) requires that the class of the `code` element is set to the language used in the `code` element. However it is impossible to set a class in markup formats other than HTML (e.g. markdown, textile, etc).
4
+
5
+ This nanoc filter pre-processes HTML for `code` elements for simple tags which are used to modify the markup for your code blocks.
6
+
7
+ For example, the following markdown:
8
+
9
+ This is a code block in ruby:
10
+
11
+ [@language="ruby"]
12
+ [@caption="Listing 1: Example in ruby."]
13
+
14
+ puts "hello world"
15
+
16
+ And this is a code block in javascript:
17
+
18
+ [@language="javascript"]
19
+ [@caption="Listing 2: Example in javascript."]
20
+
21
+ alert("hello world");
22
+
23
+ becomes:
24
+
25
+ <p>This is a code block in ruby:</p>
26
+
27
+ <figure>
28
+ <pre><code class="language-ruby">
29
+ puts "hello world"
30
+ </code></pre>
31
+ <figcaption>Listing 1: Example in ruby.</figcaption>
32
+ </figure>
33
+
34
+ <p>And this is a code block in javascript:</p>
35
+
36
+ <figure>
37
+ <pre><code class="language-javascript">
38
+ alert("hello world");
39
+ </code></pre>
40
+ <figcaption>Listing 2: Example in javascript.</figcaption>
41
+ </figure>
42
+
43
+
44
+ ## Quickstart
45
+
46
+ This rule first generates HTML from markdown using bluecloth, then applies the language classes using nanoc-code-classifier and finally highlights the syntax using coderay.
47
+
48
+ compile "/*/" do
49
+ filter :bluecloth
50
+ filter :code_classifier, :pre_class => "coderay"
51
+ filter :colorize_syntax, :colorizers => {:ruby => :coderay}
52
+ layout "default"
53
+ end
@@ -1 +1 @@
1
- require "nanoc3/filters/code_classifier"
1
+ require 'nanoc3/filters/code_classifier'
@@ -2,21 +2,59 @@ require 'nokogiri'
2
2
 
3
3
  module Nanoc3
4
4
  module Filters
5
- # A nanoc filter which pre-processes a code block for a language tag.
5
+ # A nanoc filter which pre-processes code elements for special tags.
6
+ #
7
+ # For example:
8
+ #
9
+ # [@language="ruby"]
10
+ # [@caption="lorem ipsum"]
6
11
  class CodeClassifier < Nanoc3::Filter
7
12
  identifier :code_classifier
8
13
  type :text
9
14
 
10
15
  def run(content, params = {})
11
- doc = Nokogiri::HTML.fragment(content)
12
- doc.css("pre > code").each do |element|
13
- element.content = element.content.sub(/\s*@(language-\w+)\s*/) do
14
- element["class"] = $1
15
- element.parent["class"] = "coderay"
16
- nil
17
- end.strip
16
+ html = Nokogiri::HTML.fragment(content)
17
+
18
+ html.xpath("pre/code").each do |code|
19
+ pre = code.parent
20
+
21
+ # Set the class on the <pre>.
22
+ append_class(pre, params[:pre_class]) if params[:pre_class]
23
+
24
+ process_language_tag(code)
25
+ process_caption_tag(code)
18
26
  end
19
- doc.to_s
27
+
28
+ html.to_s
29
+ end
30
+
31
+ private
32
+
33
+ def process_language_tag(element)
34
+ element.content = element.content.sub(/\[\s*@language\s*=\s*"([^"]+)"\s*\]/) do
35
+ append_class(element, "language-#{$1}")
36
+ nil
37
+ end.strip!
38
+ end
39
+
40
+ def process_caption_tag(element)
41
+ element.content = element.content.sub(/\[\s*@caption\s*=\s*"([^"]+)"\s*\]/) do
42
+ # Wrap in a <figure>.
43
+ figure = Nokogiri::XML::Node.new("figure", element.document)
44
+ element.parent.add_next_sibling(figure)
45
+ element.parent.parent = figure
46
+
47
+ # Add a <figcaption>.
48
+ figcaption = Nokogiri::XML::Node.new("figcaption", element.document)
49
+ figcaption.content = $1
50
+ element.parent.add_next_sibling(figcaption)
51
+
52
+ nil
53
+ end.strip!
54
+ end
55
+
56
+ def append_class(element, klass)
57
+ element["class"] = ((element["class"] || "") + " " + klass).strip
20
58
  end
21
59
  end
22
60
  end
@@ -1,7 +1,7 @@
1
1
  module Nanoc3
2
2
  module Filters
3
3
  module CodeClassifier
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc-code-classifier
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Josh Bassett
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-19 00:00:00 +11:00
18
+ date: 2011-01-21 00:00:00 +11:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,14 +24,30 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ">="
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 3
29
+ hash: 15
30
30
  segments:
31
+ - 1
31
32
  - 0
32
- version: "0"
33
+ version: "1.0"
33
34
  type: :runtime
34
35
  version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: nanoc
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 3
47
+ - 0
48
+ version: "3.0"
49
+ type: :runtime
50
+ version_requirements: *id002
35
51
  description: By using special tags the code classifier filter can pre-process you code blocks and apply classes to the generated HTML.
36
52
  email: josh.bassett@gmail.com
37
53
  executables: []