rote 0.3.0 → 0.3.0.2
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/TODO +3 -0
- data/lib/rote.rb +2 -2
- data/lib/rote/filters/base.rb +38 -43
- data/lib/rote/filters/syntax.rb +3 -3
- data/lib/rote/page.rb +2 -1
- data/lib/rote/project/Rakefile +9 -5
- data/lib/rote/project/doc/layouts/{normal.html → normal.thtml} +0 -0
- data/lib/rote/project/doc/pages/COMMON.rb +5 -3
- data/lib/rote/project/doc/pages/index.rb +0 -3
- data/lib/rote/project/doc/pages/{index.html → index.thtml} +0 -0
- data/test/test_formatting.rb +7 -27
- metadata +4 -4
data/TODO
CHANGED
|
@@ -16,3 +16,6 @@ Send any suggestions or patches (preferably as/with tests) to:
|
|
|
16
16
|
pages) and user guide (one page) generated from same source.
|
|
17
17
|
** Maybe in concert with plugins?
|
|
18
18
|
* (maybe?) Rant integration
|
|
19
|
+
* Macro that evaluates it's body
|
|
20
|
+
* Macro/method to run external commands and capture the output.
|
|
21
|
+
* Deprecate 'rote' command supporting Rake tasks.
|
data/lib/rote.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# rote.rb - main Rote module
|
|
2
2
|
# Copyright (c) 2005 Ross Bamford (and contributors)
|
|
3
|
-
# $Id: rote.rb,v 1.
|
|
3
|
+
# $Id: rote.rb,v 1.22 2005/12/14 19:19:58 roscopeco Exp $
|
|
4
4
|
#
|
|
5
5
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
6
|
# this software and associated documentation files (the "Software"), to deal in
|
|
@@ -41,7 +41,7 @@ end
|
|
|
41
41
|
require 'rake'
|
|
42
42
|
|
|
43
43
|
# Master Rote version. Manage this from the Rake release support.
|
|
44
|
-
ROTEVERSION = '0.3.0'
|
|
44
|
+
ROTEVERSION = '0.3.0.2'
|
|
45
45
|
|
|
46
46
|
#####
|
|
47
47
|
## *Rote* is a Rake (http://rake.rubyforge.org) based build tool for static
|
data/lib/rote/filters/base.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# (c)2005 Ross Bamford (and contributors)
|
|
4
4
|
#
|
|
5
5
|
# See 'rote.rb' or LICENSE for licence information.
|
|
6
|
-
# $Id: base.rb,v 1.
|
|
6
|
+
# $Id: base.rb,v 1.3 2005/12/14 19:17:21 roscopeco Exp $
|
|
7
7
|
#++
|
|
8
8
|
module Rote
|
|
9
9
|
module Filters
|
|
@@ -15,7 +15,8 @@ module Rote
|
|
|
15
15
|
# #code#
|
|
16
16
|
#
|
|
17
17
|
# to :code, args, body
|
|
18
|
-
MACRO_RE = /^\s*\#\:([a-z]+)(?:\#([a-z]*))?\#\s
|
|
18
|
+
MACRO_RE = /^\s*\#\:([a-z]+)(?:\#([a-z]*))?\#\s*?\n?(.*?)\s*\#\:\1\#(?:\2\#)?\s*$/m
|
|
19
|
+
PLACEHOLDER_RE = /(?:<[^>]*>)?xmxmxmacro(\d+)orcamxmxmx(?:<[^>]*>)?/
|
|
19
20
|
|
|
20
21
|
#####
|
|
21
22
|
## Baseclass from which Rote filters can be derived if
|
|
@@ -26,7 +27,7 @@ module Rote
|
|
|
26
27
|
## are replaced with the corresponding (numbered) original
|
|
27
28
|
## macro body.
|
|
28
29
|
class TextFilter
|
|
29
|
-
attr_accessor :handler_blk, :
|
|
30
|
+
attr_accessor :handler_blk, :macros
|
|
30
31
|
|
|
31
32
|
# Create a new TextFilter. The supplied block will be called
|
|
32
33
|
# with the text to be rendered, with all macros replaced
|
|
@@ -35,14 +36,14 @@ module Rote
|
|
|
35
36
|
# { |text, page| "replacement" }
|
|
36
37
|
def initialize(&handler)
|
|
37
38
|
@handler_blk = handler
|
|
38
|
-
@
|
|
39
|
+
@macros = []
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def filter(text, page)
|
|
42
43
|
# we need to remove any macros to stop them being touched
|
|
43
44
|
n = -1
|
|
44
45
|
tmp = text.gsub(MACRO_RE) do
|
|
45
|
-
|
|
46
|
+
macros << $&
|
|
46
47
|
# we need make the marker a 'paragraph'
|
|
47
48
|
"\nxmxmxmacro#{n += 1}orcamxmxmx\n"
|
|
48
49
|
end
|
|
@@ -51,7 +52,7 @@ module Rote
|
|
|
51
52
|
|
|
52
53
|
# Match the placeholder, including any (and greedily all) markup that's
|
|
53
54
|
# been placed before or after it, and put the macro text back.
|
|
54
|
-
tmp.gsub(
|
|
55
|
+
tmp.gsub(PLACEHOLDER_RE) { macros[$1.to_i] }
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
protected
|
|
@@ -66,17 +67,31 @@ module Rote
|
|
|
66
67
|
#####
|
|
67
68
|
## Baseclass from which Rote filters can be derived if
|
|
68
69
|
## you want some help with macro replacement.
|
|
70
|
+
##
|
|
71
|
+
## There are three ways to make a macro filter:
|
|
72
|
+
##
|
|
73
|
+
## * Subclass this class, and provide +macro_name+
|
|
74
|
+
## methods where +name+ is the macro name. These
|
|
75
|
+
## methods receive args (args, body, raw_macro)
|
|
76
|
+
##
|
|
77
|
+
## * Create an instance of this class with a block
|
|
78
|
+
## taking up to four arguments
|
|
79
|
+
## (name,args,body,raw_macro)
|
|
80
|
+
##
|
|
81
|
+
## * Subclass this class and override the +handler+
|
|
82
|
+
## method to process all macros.
|
|
83
|
+
##
|
|
69
84
|
class MacroFilter
|
|
70
85
|
|
|
71
86
|
# An array of macro names supported by this filter.
|
|
72
87
|
# This can be used to selectively disable individual
|
|
73
88
|
# macro support.
|
|
74
|
-
attr_accessor :
|
|
89
|
+
attr_accessor :names
|
|
75
90
|
|
|
76
91
|
# Block that will be called for each supported macro
|
|
77
92
|
# in the filtered text. Like:
|
|
78
93
|
#
|
|
79
|
-
# { |macro, args, body| "replacement" }
|
|
94
|
+
# { |macro, args, body, raw_macro| "replacement" }
|
|
80
95
|
#
|
|
81
96
|
# The presence of a block precludes the use of any
|
|
82
97
|
# +macro_xxxx+ methods on the subclass.
|
|
@@ -88,45 +103,25 @@ module Rote
|
|
|
88
103
|
# as methods (e.g. +macro_code+). If an array of names isn't
|
|
89
104
|
# passed, a search such methods will be used to populate
|
|
90
105
|
# the names array.
|
|
91
|
-
def initialize(
|
|
92
|
-
@
|
|
93
|
-
@
|
|
106
|
+
def initialize(names = [], code_re = MACRO_RE, &block)
|
|
107
|
+
@names = (names || []).map { |n| n.to_s }
|
|
108
|
+
@block = block
|
|
94
109
|
@code_re = code_re
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def filter(text,page)
|
|
98
|
-
# Just go through, subbing with block if this is
|
|
99
|
-
# our macro, or with the original match if not.
|
|
100
|
-
text.gsub(@code_re) do
|
|
101
|
-
if macros.detect { |it| it.to_s == $1 }
|
|
102
|
-
# Handler might refuse the macro (bad args, etc)
|
|
103
|
-
handler($1,$2,$3) || $&
|
|
104
|
-
else
|
|
105
|
-
$&
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
110
|
end
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
# Calls the handler block, or attempts to call a method named
|
|
113
|
-
# 'macro_XXXX' where 'XXXX' is the name of the macro.
|
|
114
|
-
# Macro methods take two arguments -args and body.
|
|
115
|
-
# Name is implied by method that is invoked.
|
|
116
|
-
def handler(macro,args,body)
|
|
117
|
-
if handler_blk
|
|
118
|
-
handler_blk[macro,args,body]
|
|
119
|
-
elsif respond_to?(meth = "macro_#{macro}")
|
|
120
|
-
send(meth, args, body) # name implied by method
|
|
121
|
-
end
|
|
111
|
+
|
|
112
|
+
def filter(text,page)
|
|
113
|
+
text.gsub(@code_re) { handler($1,$2,$3,$&) || $& }
|
|
122
114
|
end
|
|
123
115
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
116
|
+
# You may override this method if you want to completely
|
|
117
|
+
# override the standard macro dispatch.
|
|
118
|
+
def handler(macro,args,body,all)
|
|
119
|
+
if @names.include?(macro) then
|
|
120
|
+
@block[macro,args,body,all]
|
|
121
|
+
elsif respond_to?(meth = "macro_#{macro}") then
|
|
122
|
+
self.send(meth,args,body,all)
|
|
123
|
+
else
|
|
124
|
+
nil
|
|
130
125
|
end
|
|
131
126
|
end
|
|
132
127
|
end
|
data/lib/rote/filters/syntax.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# (c)2005 Ross Bamford (and contributors)
|
|
4
4
|
#
|
|
5
5
|
# See 'rote.rb' or LICENSE for licence information.
|
|
6
|
-
# $Id: syntax.rb,v 1.
|
|
6
|
+
# $Id: syntax.rb,v 1.3 2005/12/14 19:17:21 roscopeco Exp $
|
|
7
7
|
#++
|
|
8
8
|
|
|
9
9
|
require 'syntax'
|
|
@@ -26,10 +26,10 @@ module Rote
|
|
|
26
26
|
##
|
|
27
27
|
class Syntax < MacroFilter
|
|
28
28
|
def initialize(macro_re = MACRO_RE)
|
|
29
|
-
super([
|
|
29
|
+
super([],macro_re)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def macro_code(lang,body)
|
|
32
|
+
def macro_code(lang,body,raw)
|
|
33
33
|
converter = ::Syntax::Convertors::HTML.for_syntax(lang)
|
|
34
34
|
"<pre class='#{lang}'><code>#{converter.convert(body,false)}</code></pre>"
|
|
35
35
|
end
|
data/lib/rote/page.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# (c)2005 Ross Bamford (and contributors)
|
|
4
4
|
#
|
|
5
5
|
# See 'rote.rb' or LICENSE for licence information.
|
|
6
|
-
# $Id: page.rb,v 1.
|
|
6
|
+
# $Id: page.rb,v 1.11 2005/12/14 19:01:05 roscopeco Exp $
|
|
7
7
|
#++
|
|
8
8
|
|
|
9
9
|
require 'erb'
|
|
@@ -60,6 +60,7 @@ module Rote
|
|
|
60
60
|
resolve_common_rubys(parent,arr) unless parent == dir # at root
|
|
61
61
|
fn = File.join(dir,'COMMON.rb')
|
|
62
62
|
arr << fn if (File.exists?(fn) && File.readable?(fn))
|
|
63
|
+
arr
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
data/lib/rote/project/Rakefile
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
# Standard Rakefile for custom Rote build
|
|
2
2
|
#
|
|
3
3
|
# Generated from:
|
|
4
|
-
# $Id: Rakefile,v 1.
|
|
4
|
+
# $Id: Rakefile,v 1.3 2005/12/14 19:01:05 roscopeco Exp $
|
|
5
5
|
#
|
|
6
6
|
begin
|
|
7
7
|
require 'rubygems'
|
|
8
8
|
rescue LoadError
|
|
9
9
|
nil # optional
|
|
10
10
|
end
|
|
11
|
+
|
|
11
12
|
require 'rake'
|
|
12
13
|
require 'rake/clean'
|
|
13
14
|
require 'rote'
|
|
15
|
+
require 'rote/filters/redcloth'
|
|
16
|
+
require 'rote/filters/rdoc'
|
|
17
|
+
require 'rote/format/html'
|
|
18
|
+
|
|
14
19
|
include Rote
|
|
15
20
|
|
|
16
21
|
# Create a set of tasks with the prefix 'doc' to build the
|
|
@@ -40,18 +45,17 @@ ws = Rote::DocTask.new(:doc) do |site|
|
|
|
40
45
|
site.res.dir = 'doc/res'
|
|
41
46
|
site.res.include('**/*')
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
site.ext_mapping(/(thtml)/, 'html') do |page|
|
|
48
|
+
site.ext_mapping(/thtml|textile/, 'html') do |page|
|
|
45
49
|
page.extend Format::HTML
|
|
46
50
|
page.page_filter Filters::RedCloth.new(:textile)
|
|
47
51
|
end
|
|
48
52
|
|
|
49
|
-
site.ext_mapping(/mhtml/, 'html') do |page|
|
|
53
|
+
site.ext_mapping(/mhtml|markdown/, 'html') do |page|
|
|
50
54
|
page.extend Format::HTML
|
|
51
55
|
page.page_filter Filters::RedCloth.new(:markdown)
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
site.ext_mapping(/rdoc/, 'html') do |page|
|
|
58
|
+
site.ext_mapping(/rdhtml|rdoc/, 'html') do |page|
|
|
55
59
|
page.extend Format::HTML
|
|
56
60
|
page.page_filter Filters::RDoc.new
|
|
57
61
|
end
|
|
File without changes
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
# Shared code for all pages
|
|
2
|
-
|
|
1
|
+
# Shared code for all pages below this directory.
|
|
2
|
+
#
|
|
3
3
|
# This is executed for every file transformed, in the binding of
|
|
4
4
|
# the appropriate Rote::Page instance. Individual page sources
|
|
5
5
|
# ([pagename].rb) override anything defined here.
|
|
6
|
-
|
|
6
|
+
#
|
|
7
|
+
# Any COMMON.rb files found in directories above this will also
|
|
8
|
+
# be loaded.
|
|
7
9
|
@site_title = "My site"
|
|
File without changes
|
data/test/test_formatting.rb
CHANGED
|
@@ -8,7 +8,6 @@ require 'test/unit'
|
|
|
8
8
|
require 'rote/page'
|
|
9
9
|
require 'rote/filters/redcloth'
|
|
10
10
|
require 'rote/filters/rdoc'
|
|
11
|
-
require 'rote/filters/proc'
|
|
12
11
|
require 'rote/filters/toc'
|
|
13
12
|
require 'rote/filters/syntax'
|
|
14
13
|
|
|
@@ -87,30 +86,8 @@ module Rote
|
|
|
87
86
|
end
|
|
88
87
|
end
|
|
89
88
|
|
|
90
|
-
############## filters
|
|
91
|
-
# FIXME Fails under Gem install, but passes when run normally (???)
|
|
92
|
-
def test_proc_no_block
|
|
93
|
-
begin
|
|
94
|
-
Filters::Proc.new
|
|
95
|
-
rescue ArgumentError => ex
|
|
96
|
-
assert_equal 'No block given', ex.message
|
|
97
|
-
end
|
|
98
|
-
end
|
|
89
|
+
############## filters #################
|
|
99
90
|
|
|
100
|
-
def test_render_with_proc
|
|
101
|
-
f = Filters::Proc.new { |text, page| text + page }
|
|
102
|
-
assert_equal f.filter('some text ', 'fake page'), 'some text fake page'
|
|
103
|
-
|
|
104
|
-
# equivalent
|
|
105
|
-
f = Filters::Proc.with do |text, page|
|
|
106
|
-
text + page
|
|
107
|
-
end
|
|
108
|
-
assert_equal f.filter('some text ', 'fake page'), 'some text fake page'
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# Toc filter is a non-output filter - it's used to get a list of links in
|
|
112
|
-
# the page, from layout code. It should output it's input directly, so
|
|
113
|
-
# that it doesn't matter where in the chain it is.
|
|
114
91
|
def test_toc_filter
|
|
115
92
|
# default RE
|
|
116
93
|
toc = Filters::TOC::new
|
|
@@ -128,13 +105,16 @@ module Rote
|
|
|
128
105
|
|
|
129
106
|
def test_syntax_filter
|
|
130
107
|
# bad
|
|
131
|
-
assert_equal '', Filters::Syntax.new.filter('',
|
|
132
|
-
assert_equal 'Has no source', Filters::Syntax.new.filter('Has no source',
|
|
108
|
+
assert_equal '', Filters::Syntax.new.filter('',nil)
|
|
109
|
+
assert_equal 'Has no source', Filters::Syntax.new.filter('Has no source',nil)
|
|
133
110
|
|
|
134
111
|
# good
|
|
135
|
-
assert_equal SYNEXPECT.chomp, Filters::Syntax.new.filter(SYNTEST,
|
|
112
|
+
assert_equal SYNEXPECT.chomp, Filters::Syntax.new.filter(SYNTEST,nil)
|
|
136
113
|
end
|
|
114
|
+
# TODO test macro stuff etc.
|
|
115
|
+
|
|
137
116
|
end
|
|
138
117
|
|
|
118
|
+
|
|
139
119
|
end
|
|
140
120
|
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: rote
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 0.3.0
|
|
7
|
-
date: 2005-12-
|
|
6
|
+
version: 0.3.0.2
|
|
7
|
+
date: 2005-12-14 00:00:00 +00:00
|
|
8
8
|
summary: Adds template-based doc support to Rake.
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|
|
@@ -60,8 +60,8 @@ files:
|
|
|
60
60
|
- lib/rote/project/doc/layouts
|
|
61
61
|
- lib/rote/project/doc/res/images
|
|
62
62
|
- lib/rote/project/doc/res/images/rote-tiny.png
|
|
63
|
-
- lib/rote/project/doc/pages/index.
|
|
64
|
-
- lib/rote/project/doc/layouts/normal.
|
|
63
|
+
- lib/rote/project/doc/pages/index.thtml
|
|
64
|
+
- lib/rote/project/doc/layouts/normal.thtml
|
|
65
65
|
- test/test_formatting.rb
|
|
66
66
|
- test/test_page.rb
|
|
67
67
|
- test/pages
|