rote 0.3.0 → 0.3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|