kyanite 0.3.7 → 0.4.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.
- data/0_rake_test.bat +12 -0
- data/1_rake_install_gem.bat +20 -0
- data/3_rake_deploy.bat +4 -0
- data/4_ruby_script_console.bat +12 -0
- data/Div +23 -0
- data/History.txt +4 -2
- data/License.txt +21 -2
- data/Manifest.txt +46 -29
- data/README.txt +26 -33
- data/Rakefile.rb +6 -6
- data/config/website.yml +2 -0
- data/lib/kyanite.rb +46 -2
- data/lib/kyanite/array/array.rb +15 -14
- data/lib/kyanite/array/array2.rb +1 -1
- data/lib/kyanite/dictionary.rb +17 -2
- data/lib/kyanite/enumerable/enumerable_enumerables.rb +19 -9
- data/lib/kyanite/enumerable/enumerable_numerics.rb +25 -19
- data/lib/kyanite/enumerable/enumerable_strings.rb +14 -6
- data/lib/kyanite/enumerable/structure.rb +45 -29
- data/lib/kyanite/general/callerutils.rb +9 -1
- data/lib/kyanite/general/classutils.rb +59 -78
- data/lib/kyanite/general/kernel.rb +21 -3
- data/lib/kyanite/general/nil.rb +34 -12
- data/lib/kyanite/general/object.rb +25 -3
- data/lib/kyanite/general/true_false.rb +28 -10
- data/lib/kyanite/general/undoable.rb +24 -0
- data/lib/kyanite/hash.rb +43 -28
- data/lib/kyanite/numeric/float.rb +12 -5
- data/lib/kyanite/numeric/integer.rb +16 -9
- data/lib/kyanite/numeric/numeric.rb +19 -11
- data/lib/kyanite/operation/regexp.rb +5 -1
- data/lib/kyanite/optimizer.rb +31 -16
- data/lib/kyanite/range.rb +15 -8
- data/lib/kyanite/set.rb +35 -6
- data/lib/kyanite/string/cast.rb +18 -7
- data/lib/kyanite/string/chars.rb +24 -17
- data/lib/kyanite/string/diff.rb +14 -5
- data/lib/kyanite/string/div.rb +8 -1
- data/lib/kyanite/string/include.rb +13 -5
- data/lib/kyanite/string/list.rb +3 -3
- data/lib/kyanite/string/mgsub.rb +6 -2
- data/lib/kyanite/string/nested.rb +22 -3
- data/lib/kyanite/string/random.rb +4 -0
- data/lib/kyanite/string/split.rb +15 -7
- data/lib/kyanite/symbol.rb +14 -0
- data/lib/kyanite/tree.rb +10 -4
- data/script/console +10 -0
- data/script/console.cmd +1 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/script/txt2html +82 -0
- data/script/txt2html.cmd +1 -0
- data/tasks/deployment.rake +92 -0
- data/tasks/documentation.rake +28 -0
- data/tasks/environment.rake +7 -0
- data/test/array/test_matrix2.rb +1 -0
- data/test/enumerable/test_enumerable_numerics.rb +3 -2
- data/test/general/test_classutils.rb +3 -0
- data/test/general/test_nil.rb +1 -0
- data/test/general/test_object.rb +2 -1
- data/test/general/test_true_false.rb +1 -0
- data/test/numeric/test_numeric_integer.rb +2 -0
- data/test/string/test_cast.rb +4 -0
- data/test/string/test_chars.rb +3 -0
- data/test/string/test_diff.rb +3 -0
- data/test/string/test_list.rb +2 -0
- data/test/string/test_nested.rb +2 -0
- data/test/string/test_split.rb +3 -0
- data/test/test_dictionary.rb +3 -0
- data/test/test_hash.rb +2 -0
- data/test/test_optimizer.rb +14 -14
- data/test/test_range.rb +1 -0
- data/test/test_tree.rb +1 -1
- metadata +48 -31
data/lib/kyanite/string/diff.rb
CHANGED
@@ -5,12 +5,12 @@ class String
|
|
5
5
|
|
6
6
|
|
7
7
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
8
|
-
# :section:
|
9
|
-
#
|
8
|
+
# :section: Overlap / Diff
|
9
|
+
# See TestKyaniteStringDiff for tests and examples.
|
10
10
|
|
11
11
|
# Gibt den gemeinsamen Teil zweier Strings aus (von vorne gezählt).
|
12
12
|
#
|
13
|
-
# Beispiele & Tests siehe
|
13
|
+
# Beispiele & Tests siehe TestKyaniteStringDiff#test_overlap
|
14
14
|
def overlap(b)
|
15
15
|
return '' if b.nil?
|
16
16
|
b = b.to_str
|
@@ -26,7 +26,7 @@ class String
|
|
26
26
|
# Im Zweifelsfall immer den längsten String.
|
27
27
|
# Wenn dann immer noch Zweifel, dann self.
|
28
28
|
#
|
29
|
-
# Beispiele & Tests siehe
|
29
|
+
# Beispiele & Tests siehe TestKyaniteStringDiff#test_diff
|
30
30
|
def diff(b)
|
31
31
|
return self if b.nil?
|
32
32
|
b = b.to_str
|
@@ -46,7 +46,7 @@ class String
|
|
46
46
|
# Waren beide gleichlang, so erhält man self.
|
47
47
|
# overlapdiff braucht genauso viel Zeit wie diff alleine.
|
48
48
|
#
|
49
|
-
# Beispiele & Tests siehe
|
49
|
+
# Beispiele & Tests siehe TestKyaniteStringDiff#test_overlapdiff
|
50
50
|
def overlapdiff(b)
|
51
51
|
return '', self if b.nil?
|
52
52
|
b = b.to_str
|
@@ -66,8 +66,17 @@ end
|
|
66
66
|
|
67
67
|
|
68
68
|
class NilClass
|
69
|
+
|
70
|
+
# Rückgabe: Leerer String,
|
71
|
+
# siehe String#overlap
|
69
72
|
def overlap(*a); ''; end
|
73
|
+
|
74
|
+
# Rückgabe: b,
|
75
|
+
# siehe String#diff
|
70
76
|
def diff(b); b; end
|
77
|
+
|
78
|
+
# Rückgabe: ['', b],
|
79
|
+
# siehe String#overlapdiff
|
71
80
|
def overlapdiff(b); ['', b]; end
|
72
81
|
end
|
73
82
|
|
data/lib/kyanite/string/div.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
|
4
4
|
class String
|
5
5
|
|
6
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
7
|
+
# :section: Div
|
8
|
+
#
|
9
|
+
|
6
10
|
# Wörter zählen
|
7
11
|
def count_words
|
8
12
|
n = 0
|
@@ -15,5 +19,8 @@ end
|
|
15
19
|
|
16
20
|
|
17
21
|
class NilClass
|
18
|
-
|
22
|
+
|
23
|
+
# Rückgabe: 0
|
24
|
+
def count_words; 0; end
|
25
|
+
|
19
26
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
|
2
2
|
class String
|
3
|
+
|
4
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
5
|
+
# :section: include
|
6
|
+
#
|
7
|
+
|
3
8
|
alias :old_include? :include?
|
4
9
|
|
5
|
-
# Nimmt jetzt auch ein Array an.
|
6
|
-
# Die Array-Elemente werden ODER-verknüpft, d.h.
|
7
|
-
# include? ist true, wenn für mindestens eines der Elemente include? true ist.
|
8
|
-
# Alle Strings includen '', [] oder nil.
|
9
|
-
# Andersherum enthält nil niemals irgendwas (nil.include? => false)
|
10
|
+
# [ ] Nimmt jetzt auch ein Array an.
|
11
|
+
# [ ] Die Array-Elemente werden ODER-verknüpft, d.h.
|
12
|
+
# [ ] include? ist true, wenn für mindestens eines der Elemente include? true ist.
|
13
|
+
# [ ] Alle Strings includen '', [] oder nil.
|
14
|
+
# [ ] Andersherum enthält nil niemals irgendwas (nil.include? => false)
|
10
15
|
def include?(input)
|
11
16
|
return true if input.nil?
|
12
17
|
return true if input.empty?
|
@@ -23,6 +28,9 @@ end
|
|
23
28
|
|
24
29
|
|
25
30
|
class NilClass
|
31
|
+
|
32
|
+
# Rückgabe: false
|
33
|
+
# redundante Definition!
|
26
34
|
def include?(*a); false; end
|
27
35
|
end
|
28
36
|
|
data/lib/kyanite/string/list.rb
CHANGED
@@ -5,11 +5,11 @@ require 'kyanite/symbol'
|
|
5
5
|
class String
|
6
6
|
|
7
7
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
8
|
-
# :section:
|
9
|
-
#
|
8
|
+
# :section: List / Database
|
9
|
+
# See TestKyaniteStringList for tests and examples.
|
10
10
|
|
11
11
|
|
12
|
-
# Listet Text auf. Beispiele siehe
|
12
|
+
# Listet Text auf. Beispiele siehe TestKyaniteStringList
|
13
13
|
def list_with( elemente, options = {}, &block )
|
14
14
|
|
15
15
|
options = { :pre => %q{'},
|
data/lib/kyanite/string/mgsub.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
|
2
2
|
class String
|
3
|
+
|
4
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
5
|
+
# :section: mgsub
|
6
|
+
#
|
3
7
|
|
4
8
|
# Mehrere Patterns mit einer RegExp replacen.
|
5
9
|
# Ruby Cookbook Seite 32
|
6
|
-
#
|
7
|
-
#
|
10
|
+
# "between".mgsub([[/ee/, 'AA'], [/e/, 'E']]) # Good code
|
11
|
+
# => "bEtwAAn"
|
8
12
|
#
|
9
13
|
def mgsub(key_value_pairs=[].freeze)
|
10
14
|
regexp_fragments = key_value_pairs.collect { |k,v| k }
|
@@ -1,5 +1,10 @@
|
|
1
1
|
|
2
2
|
class String
|
3
|
+
|
4
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
5
|
+
# :section: Nested
|
6
|
+
# See TestKyaniteStringNested for tests and examples.
|
7
|
+
#
|
3
8
|
|
4
9
|
|
5
10
|
# Gibt die passende gegenteilige Klammer zurück
|
@@ -8,6 +13,9 @@ class String
|
|
8
13
|
# ']'.anti -> '['
|
9
14
|
# '<hallo>'.anti -> '</hallo>'
|
10
15
|
# '</hallo>'.anti -> '<hallo>'
|
16
|
+
#
|
17
|
+
# See TestKyaniteStringNested for tests and examples.
|
18
|
+
#
|
11
19
|
def anti
|
12
20
|
if self.size == 1
|
13
21
|
return self.tr('([{<)]}>',')]}>([{<')
|
@@ -26,6 +34,9 @@ class String
|
|
26
34
|
# Findet das nächste zueinander passende Klammerpaar ab Position start.
|
27
35
|
# Liefert die Positionen der Klammern als Range.
|
28
36
|
# Bsp.: 'Hallo(welt)wort'.index_bracket -> 5..10
|
37
|
+
#
|
38
|
+
# See TestKyaniteStringNested for tests and examples.
|
39
|
+
#
|
29
40
|
def index_bracket( pattern=nil, start=0, last_found = nil )
|
30
41
|
return nil if self.empty?
|
31
42
|
pattern = /[{<\[]/ unless pattern
|
@@ -63,7 +74,9 @@ class String
|
|
63
74
|
|
64
75
|
|
65
76
|
# Wendet den Block auf eine hierarchisch definierte Auswahl des Strings an.
|
66
|
-
#
|
77
|
+
#
|
78
|
+
# See TestKyaniteStringNested for tests and examples.
|
79
|
+
#
|
67
80
|
def mask( options={}, &block )
|
68
81
|
|
69
82
|
# vorbereiten
|
@@ -176,7 +189,10 @@ class String
|
|
176
189
|
end # def
|
177
190
|
|
178
191
|
|
179
|
-
# Liefert die Verschachtelungstiefe
|
192
|
+
# Liefert die Verschachtelungstiefe.
|
193
|
+
#
|
194
|
+
# See TestKyaniteStringNested for tests and examples.
|
195
|
+
#
|
180
196
|
def nestinglevel(pattern=/[{<(\[]/)
|
181
197
|
result = 0
|
182
198
|
self.mask( :level_start => 0,
|
@@ -202,10 +218,13 @@ end # class
|
|
202
218
|
|
203
219
|
|
204
220
|
class NilClass
|
221
|
+
|
222
|
+
# Rückgabe: 0
|
223
|
+
def nestinglevel; 0; end
|
224
|
+
|
205
225
|
def anti; nil; end
|
206
226
|
def index_bracket; nil; end
|
207
227
|
def mask(*a); nil; end
|
208
|
-
def nestinglevel; 0; end
|
209
228
|
end
|
210
229
|
|
211
230
|
|
@@ -44,6 +44,10 @@ end
|
|
44
44
|
|
45
45
|
class String
|
46
46
|
|
47
|
+
# ---------------------------------------------------------------------------------------------------------------------------------
|
48
|
+
# :section: Random
|
49
|
+
#
|
50
|
+
|
47
51
|
# Zufällige Reihenfolge
|
48
52
|
def shuffle(separator=//)
|
49
53
|
split(separator).shuffle.join('')
|
data/lib/kyanite/string/split.rb
CHANGED
@@ -6,13 +6,17 @@
|
|
6
6
|
require 'kyanite/array/array'
|
7
7
|
|
8
8
|
|
9
|
+
|
10
|
+
class String
|
11
|
+
|
9
12
|
# ---------------------------------------------------------------------------------------------------------------------------------
|
10
|
-
# :section:
|
13
|
+
# :section: Split
|
14
|
+
# See TestKyaniteStringSplit for tests and examples.
|
11
15
|
#
|
12
|
-
# Aus {Facets/String}[http://facets.rubyforge.org/
|
13
|
-
# *
|
14
|
-
#
|
15
|
-
|
16
|
+
# Aus {Facets/String}[http://facets.rubyforge.org/doc/api/core/classes/String.html]eingefügt:
|
17
|
+
# [ ] *shatter*(re)
|
18
|
+
# [ ] Breaks a string up into an array based on a regular expression. Similar to +scan+, but includes the matches.
|
19
|
+
|
16
20
|
|
17
21
|
|
18
22
|
# Returns _n_ characters of the string. If _n_ is positive
|
@@ -117,7 +121,7 @@ class String
|
|
117
121
|
# Trennt numerische Teile ab und entfernt abschließende Whitespaces, Bindestriche, Unterstriche und Punkte.
|
118
122
|
# Wird z.B. für die Generierung des Doku-Pfades verwendet.
|
119
123
|
#
|
120
|
-
# Tests siehe
|
124
|
+
# Tests siehe TestKyaniteStringSplit
|
121
125
|
def without_versioninfo
|
122
126
|
shatter(/\d+/)[0].strip.chomp('_').chomp('-').chomp('.')
|
123
127
|
end
|
@@ -126,8 +130,12 @@ end
|
|
126
130
|
|
127
131
|
|
128
132
|
class NilClass
|
129
|
-
|
133
|
+
|
134
|
+
# Rückgabe: Leerer String,
|
135
|
+
# siehe String#split
|
130
136
|
def cut(*a); ''; end
|
137
|
+
|
138
|
+
def nchar(*a); nil; end
|
131
139
|
def split_by_index(*a); nil; end
|
132
140
|
def extract(*a); nil; end
|
133
141
|
def split_numeric; nil; end
|
data/lib/kyanite/symbol.rb
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
|
2
|
+
|
3
|
+
# [ | Kyanite | *Object* | Array | Set | Enumerable | Hash | ] | Object | String | *Symbol* | Numeric |
|
4
|
+
#
|
5
|
+
# ---
|
6
|
+
#
|
7
|
+
# == *Symbol*
|
8
|
+
#
|
9
|
+
#
|
2
10
|
class Symbol
|
3
11
|
|
12
|
+
# Rückgabe: false
|
4
13
|
def empty?; false; end
|
14
|
+
|
15
|
+
# Rückgabe: self
|
5
16
|
def dup; self; end
|
6
17
|
|
18
|
+
# wie gleichlautende String-Funktion
|
7
19
|
def +(other)
|
8
20
|
(self.to_s + other.to_s).to_sym
|
9
21
|
end
|
10
22
|
|
23
|
+
# wie gleichlautende String-Funktion
|
11
24
|
def <=>(other)
|
12
25
|
self.to_s <=> other.to_s
|
13
26
|
end
|
14
27
|
|
28
|
+
# wie gleichlautende String-Funktion
|
15
29
|
def size
|
16
30
|
self.to_s.size
|
17
31
|
end
|
data/lib/kyanite/tree.rb
CHANGED
@@ -2,10 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'tree'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
|
6
|
+
module Tree # :nodoc:
|
7
|
+
|
8
|
+
# [ | *Kyanite* | Object | Array | Set | Enumerable | Hash | ] | Kyanite | TrueClass | FalseClass | NilClass | *Div* |
|
9
|
+
# [ ] | Div | <b>Tree::TreeNode</b> | Optimizer |
|
10
|
+
# ---
|
11
|
+
#
|
12
|
+
# == *Ergänzungen* *zu* *rubytree* *0.5.2*
|
13
|
+
# See TestKyaniteTree for tests and examples.
|
14
|
+
#
|
9
15
|
class TreeNode
|
10
16
|
attr_reader :childrenHash
|
11
17
|
|
data/script/console
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# File: script/console
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
+
|
5
|
+
libs = " -r irb/completion"
|
6
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
7
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
8
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/kyanite.rb'}"
|
9
|
+
puts "Welcome to Kyanite gem"
|
10
|
+
exec "#{irb} #{libs} --simple-prompt --noreadline"
|
data/script/console.cmd
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
@ruby script/console %*
|
data/script/destroy
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/destroy'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/destroy.cmd
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
@ruby script/destroy %*
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/script/generate.cmd
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
@ruby script/generate %*
|
data/script/txt2html
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
GEM_NAME = 'kyanite' # what ppl will type to install your gem
|
4
|
+
RUBYFORGE_PROJECT = 'kyanite'
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
begin
|
8
|
+
require 'newgem'
|
9
|
+
require 'rubyforge'
|
10
|
+
rescue LoadError
|
11
|
+
puts "\n\nGenerating the website requires the newgem RubyGem"
|
12
|
+
puts "Install: gem install newgem\n\n"
|
13
|
+
exit(1)
|
14
|
+
end
|
15
|
+
require 'redcloth'
|
16
|
+
require 'syntax/convertors/html'
|
17
|
+
require 'erb'
|
18
|
+
require File.dirname(__FILE__) + "/../lib/#{GEM_NAME}/version.rb"
|
19
|
+
|
20
|
+
version = Kyanite::VERSION::STRING
|
21
|
+
download = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
22
|
+
|
23
|
+
def rubyforge_project_id
|
24
|
+
RubyForge.new.autoconfig["group_ids"][RUBYFORGE_PROJECT]
|
25
|
+
end
|
26
|
+
|
27
|
+
class Fixnum
|
28
|
+
def ordinal
|
29
|
+
# teens
|
30
|
+
return 'th' if (10..19).include?(self % 100)
|
31
|
+
# others
|
32
|
+
case self % 10
|
33
|
+
when 1: return 'st'
|
34
|
+
when 2: return 'nd'
|
35
|
+
when 3: return 'rd'
|
36
|
+
else return 'th'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Time
|
42
|
+
def pretty
|
43
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def convert_syntax(syntax, source)
|
48
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
49
|
+
end
|
50
|
+
|
51
|
+
if ARGV.length >= 1
|
52
|
+
src, template = ARGV
|
53
|
+
template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
|
54
|
+
else
|
55
|
+
puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
|
56
|
+
exit!
|
57
|
+
end
|
58
|
+
|
59
|
+
template = ERB.new(File.open(template).read)
|
60
|
+
|
61
|
+
title = nil
|
62
|
+
body = nil
|
63
|
+
File.open(src) do |fsrc|
|
64
|
+
title_text = fsrc.readline
|
65
|
+
body_text_template = fsrc.read
|
66
|
+
body_text = ERB.new(body_text_template).result(binding)
|
67
|
+
syntax_items = []
|
68
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
69
|
+
ident = syntax_items.length
|
70
|
+
element, syntax, source = $1, $2, $3
|
71
|
+
syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
|
72
|
+
"syntax-temp-#{ident}"
|
73
|
+
}
|
74
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
75
|
+
body = RedCloth.new(body_text).to_html
|
76
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
77
|
+
end
|
78
|
+
stat = File.stat(src)
|
79
|
+
created = stat.ctime
|
80
|
+
modified = stat.mtime
|
81
|
+
|
82
|
+
$stdout << template.result(binding)
|