nanoc3 3.1.0a1 → 3.1.0a2
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/NEWS.md +1 -0
- data/README.md +27 -31
- data/lib/nanoc3/base/core_ext/array.rb +6 -2
- data/lib/nanoc3/base/core_ext/enumerable.rb +41 -0
- data/lib/nanoc3/base/core_ext/hash.rb +6 -2
- data/lib/nanoc3/base/plugin_registry.rb +8 -1
- data/lib/nanoc3/extra/core_ext/enumerable.rb +2 -8
- data/lib/nanoc3/filters/colorize_syntax.rb +61 -0
- data/lib/nanoc3/filters.rb +2 -0
- data/lib/nanoc3.rb +1 -1
- metadata +4 -2
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -2,54 +2,50 @@
|
|
2
2
|
|
3
3
|
nanoc is a simple but very flexible static site generator written in Ruby.
|
4
4
|
It operates on local files, and therefore does not run on the server. nanoc
|
5
|
-
|
5
|
+
“compiles” the local source files into HTML (usually), by evaluating eRuby,
|
6
6
|
Markdown, etc.
|
7
7
|
|
8
|
-
##
|
8
|
+
## Resources
|
9
9
|
|
10
|
-
The [
|
10
|
+
The [nanoc web site](http://nanoc.stoneship.org) contains a few useful
|
11
11
|
resources to help you get started with nanoc:
|
12
12
|
|
13
13
|
* The [tutorial](http://nanoc.stoneship.org/tutorial)
|
14
14
|
* The [manual](http://nanoc.stoneship.org/manual)
|
15
15
|
* The [migration guide](http://nanoc.stoneship.org/migrating)
|
16
16
|
|
17
|
-
|
18
|
-
discussion groups:
|
17
|
+
If you need assistance, the following places will help you out:
|
19
18
|
|
20
|
-
* The [discussion group
|
21
|
-
* The [
|
19
|
+
* The [discussion group](http://groups.google.com/group/nanoc)
|
20
|
+
* The [IRC channel](irc://chat.freenode.net/#nanoc)
|
22
21
|
|
23
|
-
|
22
|
+
## Source Code Documentation
|
24
23
|
|
25
|
-
The source code is structured in a few
|
24
|
+
The source code is located in `lib/nanoc3` and is structured in a few
|
25
|
+
directories:
|
26
26
|
|
27
|
-
* `
|
28
|
-
* `
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
be used by helpers, data sources, filters or VCSes.
|
38
|
-
* `filters` contains the standard filters (Nanoc3::Filter subclasses) such
|
39
|
-
as ERB, Markdown, Haml, ...
|
40
|
-
* `test` contains testing code, structured in the same way as lib/nanoc
|
27
|
+
* `base` contains the bare essentials necessary for nanoc to function
|
28
|
+
* `cli` contains the commandline interface
|
29
|
+
* `data_sources` contains the standard data sources ({Nanoc3::DataSource}
|
30
|
+
subclasses), such as the filesystem data source
|
31
|
+
* `helpers` contains helpers, which provide functionality some sites
|
32
|
+
may find useful, such as the blogging and tagging helpers
|
33
|
+
* `extra` contains stuff that is not needed by nanoc itself, but which may
|
34
|
+
be used by helpers, data sources, filters or VCSes.
|
35
|
+
* `filters` contains the standard filters ({Nanoc3::Filter} subclasses)
|
36
|
+
such as ERB, Markdown, Haml, ...
|
41
37
|
|
42
38
|
The namespaces (modules) are organised like this:
|
43
39
|
|
44
|
-
*
|
40
|
+
* {Nanoc3} is the namespace for everything nanoc-related (obviously). The
|
45
41
|
classes in `lib/nanoc3/base` are part of this module (not `Nanoc3::Base`)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
* {Nanoc3::CLI} containing everything related to the commandline tool.
|
43
|
+
* {Nanoc3::DataSources} contains the data sources
|
44
|
+
* {Nanoc3::Helpers} contains the helpers
|
45
|
+
* {Nanoc3::Extra} contains useful stuff not needed by nanoc itself
|
46
|
+
* {Nanoc3::Filters} contains the (textual) filters
|
51
47
|
|
52
|
-
The central class in nanoc is
|
48
|
+
The central class in nanoc is {Nanoc3::Site}, so you should start there if
|
53
49
|
you want to explore nanoc from a technical perspective.
|
54
50
|
|
55
51
|
## Dependencies
|
@@ -74,7 +70,7 @@ components, however, do have dependencies:
|
|
74
70
|
* Nicky Peeters
|
75
71
|
* Christian Plessl
|
76
72
|
* Šime Ramov
|
77
|
-
*
|
73
|
+
* “Soryu”
|
78
74
|
* Eric Sunshine
|
79
75
|
* Dennis Sutch
|
80
76
|
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
module Nanoc3::ArrayExtensions
|
4
4
|
|
5
|
-
# Returns a new array where all items' keys are recursively converted to
|
5
|
+
# Returns a new array where all items' keys are recursively converted to
|
6
|
+
# symbols by calling {Nanoc3::ArrayExtensions#symbolize_keys} or
|
7
|
+
# {Nanoc3::HashExtensions#symbolize_keys}.
|
6
8
|
#
|
7
9
|
# @return [Array] The converted array
|
8
10
|
def symbolize_keys
|
@@ -11,7 +13,9 @@ module Nanoc3::ArrayExtensions
|
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
|
-
# Returns a new array where all items' keys are recursively converted to
|
16
|
+
# Returns a new array where all items' keys are recursively converted to
|
17
|
+
# strings by calling {Nanoc3::ArrayExtensions#stringify_keys} or
|
18
|
+
# {Nanoc3::HashExtensions#stringify_keys}.
|
15
19
|
#
|
16
20
|
# @return [Array] The converted array
|
17
21
|
def stringify_keys
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Nanoc3::EnumerableExtensions
|
4
|
+
|
5
|
+
module GroupBy
|
6
|
+
|
7
|
+
# Returns a hash, which keys are evaluated result from the block, and
|
8
|
+
# values are arrays of elements in enum corresponding to the key. This
|
9
|
+
# method is provided for backward compatibility with Ruby 1.8.6 and lower,
|
10
|
+
# since {#group_by} is only available in 1.8.7 and higher.
|
11
|
+
#
|
12
|
+
# @yieldparam [Object] obj The object to classify
|
13
|
+
#
|
14
|
+
# @return [Hash]
|
15
|
+
#
|
16
|
+
# @example Grouping integers by rest by division through 3
|
17
|
+
#
|
18
|
+
# (1..6).group_by { |i| i % 3 }
|
19
|
+
# # => { 0 => [3, 6], 1 => [1, 4], 2 => [2, 5] }
|
20
|
+
def group_by
|
21
|
+
groups = {}
|
22
|
+
each do |item|
|
23
|
+
key = yield(item)
|
24
|
+
|
25
|
+
groups[key] ||= []
|
26
|
+
groups[key] << item
|
27
|
+
end
|
28
|
+
groups
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
module Enumerable
|
36
|
+
|
37
|
+
if !Enumerable.instance_methods.include?('group_by')
|
38
|
+
include Nanoc3::EnumerableExtensions::GroupBy
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
module Nanoc3::HashExtensions
|
4
4
|
|
5
|
-
# Returns a new hash where all keys are recursively converted to symbols
|
5
|
+
# Returns a new hash where all keys are recursively converted to symbols by
|
6
|
+
# calling {Nanoc3::ArrayExtensions#symbolize_keys} or
|
7
|
+
# {Nanoc3::HashExtensions#symbolize_keys}.
|
6
8
|
#
|
7
9
|
# @return [Hash] The converted hash
|
8
10
|
def symbolize_keys
|
@@ -11,7 +13,9 @@ module Nanoc3::HashExtensions
|
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
|
-
# Returns a new hash where all keys are recursively converted to strings
|
16
|
+
# Returns a new hash where all keys are recursively converted to strings by
|
17
|
+
# calling {Nanoc3::ArrayExtensions#stringify_keys} or
|
18
|
+
# {Nanoc3::HashExtensions#stringify_keys}.
|
15
19
|
#
|
16
20
|
# @return [Hash] The converted hash
|
17
21
|
def stringify_keys
|
@@ -11,6 +11,7 @@ module Nanoc3
|
|
11
11
|
# for setting identifiers, registering plugins and finding plugins. Plugin
|
12
12
|
# classes should extend this module.
|
13
13
|
module PluginMethods
|
14
|
+
|
14
15
|
# Sets the identifiers for this plugin.
|
15
16
|
#
|
16
17
|
# @param [Array<Symbol>] identifier A list of identifiers to assign to
|
@@ -40,7 +41,13 @@ module Nanoc3
|
|
40
41
|
#
|
41
42
|
# @return [void]
|
42
43
|
def register(class_or_name, *identifiers)
|
43
|
-
|
44
|
+
# Find plugin class
|
45
|
+
klass = self
|
46
|
+
klass = klass.superclass while klass.superclass.respond_to?(:register)
|
47
|
+
|
48
|
+
# Register
|
49
|
+
registry = Nanoc3::PluginRegistry.instance
|
50
|
+
registry.register(klass, class_or_name, *identifiers)
|
44
51
|
end
|
45
52
|
|
46
53
|
# Returns the plugin with the given name (identifier)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
module
|
3
|
+
module Enumerable
|
4
4
|
|
5
|
-
|
5
|
+
if !Enumerable.instance_methods.include?('group_by')
|
6
6
|
|
7
7
|
# Returns a hash, which keys are evaluated result from the block, and
|
8
8
|
# values are arrays of elements in enum corresponding to the key. This
|
@@ -31,9 +31,3 @@ module Nanoc3::Extra::EnumerableExtensions
|
|
31
31
|
end
|
32
32
|
|
33
33
|
end
|
34
|
-
|
35
|
-
module Enumerable
|
36
|
-
if !Enumerable.instance_methods.include?('group_by')
|
37
|
-
include Nanoc3::Extra::EnumerableExtensions::GroupBy
|
38
|
-
end
|
39
|
-
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Nanoc3::Filters
|
4
|
+
class ColorizeSyntax < Nanoc3::Filter
|
5
|
+
|
6
|
+
DEFAULT_COLORIZER = :coderay
|
7
|
+
|
8
|
+
def run(content, params={})
|
9
|
+
require 'nokogiri'
|
10
|
+
|
11
|
+
# Take colorizers from parameters
|
12
|
+
@colorizers = Hash.new(DEFAULT_COLORIZER)
|
13
|
+
(params[:colorizers] || {}).each_pair do |language, colorizer|
|
14
|
+
@colorizers[language] = colorizer
|
15
|
+
end
|
16
|
+
|
17
|
+
# Colorize
|
18
|
+
doc = Nokogiri::HTML.fragment(content)
|
19
|
+
doc.css('pre > code[class^="lang"]').each do |element|
|
20
|
+
language = element['class'][/lang-([^ ]+)/].sub(/^lang-/, '')
|
21
|
+
element.parent.replace(
|
22
|
+
Nokogiri.make(highlight(element.inner_text, language, params))
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
doc.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
KNOWN_COLORIZERS = [ :coderay, :dummy, :pygmentize ]
|
32
|
+
|
33
|
+
def highlight(code, language, params={})
|
34
|
+
colorizer = @colorizers[language]
|
35
|
+
if KNOWN_COLORIZERS.include?(colorizer)
|
36
|
+
send(colorizer, code, language, params[colorizer])
|
37
|
+
else
|
38
|
+
raise RuntimeError, "I don’t know how to highlight code using the “#{colorizer}” colorizer"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def coderay(code, language, params={})
|
43
|
+
require 'coderay'
|
44
|
+
|
45
|
+
CodeRay.scan(code, language).div(params)
|
46
|
+
end
|
47
|
+
|
48
|
+
def dummy(code, language, params={})
|
49
|
+
code
|
50
|
+
end
|
51
|
+
|
52
|
+
def pygmentize(code, language, params={})
|
53
|
+
IO.popen("pygmentize -l #{language} -f html", "r+") do |io|
|
54
|
+
io.write(code)
|
55
|
+
io.close_write
|
56
|
+
return io.read
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/lib/nanoc3/filters.rb
CHANGED
@@ -4,6 +4,7 @@ module Nanoc3::Filters
|
|
4
4
|
|
5
5
|
autoload 'BlueCloth', 'nanoc3/filters/bluecloth'
|
6
6
|
autoload 'CodeRay', 'nanoc3/filters/coderay'
|
7
|
+
autoload 'ColorizeSyntax', 'nanoc3/filters/colorize_syntax'
|
7
8
|
autoload 'ERB', 'nanoc3/filters/erb'
|
8
9
|
autoload 'Erubis', 'nanoc3/filters/erubis'
|
9
10
|
autoload 'Haml', 'nanoc3/filters/haml'
|
@@ -21,6 +22,7 @@ module Nanoc3::Filters
|
|
21
22
|
|
22
23
|
Nanoc3::Filter.register '::Nanoc3::Filters::BlueCloth', :bluecloth
|
23
24
|
Nanoc3::Filter.register '::Nanoc3::Filters::CodeRay', :coderay
|
25
|
+
Nanoc3::Filter.register '::Nanoc3::Filters::ColorizeSyntax', :colorize_syntax
|
24
26
|
Nanoc3::Filter.register '::Nanoc3::Filters::ERB', :erb
|
25
27
|
Nanoc3::Filter.register '::Nanoc3::Filters::Erubis', :erubis
|
26
28
|
Nanoc3::Filter.register '::Nanoc3::Filters::Haml', :haml
|
data/lib/nanoc3.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.0a2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-20 00:00:00 +01:00
|
13
13
|
default_executable: nanoc3
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/nanoc3/base/compiler_dsl.rb
|
45
45
|
- lib/nanoc3/base/context.rb
|
46
46
|
- lib/nanoc3/base/core_ext/array.rb
|
47
|
+
- lib/nanoc3/base/core_ext/enumerable.rb
|
47
48
|
- lib/nanoc3/base/core_ext/hash.rb
|
48
49
|
- lib/nanoc3/base/core_ext/string.rb
|
49
50
|
- lib/nanoc3/base/core_ext.rb
|
@@ -104,6 +105,7 @@ files:
|
|
104
105
|
- lib/nanoc3/extra.rb
|
105
106
|
- lib/nanoc3/filters/bluecloth.rb
|
106
107
|
- lib/nanoc3/filters/coderay.rb
|
108
|
+
- lib/nanoc3/filters/colorize_syntax.rb
|
107
109
|
- lib/nanoc3/filters/erb.rb
|
108
110
|
- lib/nanoc3/filters/erubis.rb
|
109
111
|
- lib/nanoc3/filters/haml.rb
|