ruhoh 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +13 -0
- data/README.md +5 -53
- data/Rakefile +56 -0
- data/bin/ruhoh +23 -14
- data/lib/ruhoh/client/client.rb +310 -0
- data/lib/ruhoh/client/help.yml +56 -0
- data/lib/ruhoh/compiler.rb +16 -19
- data/lib/ruhoh/converters/converter.rb +30 -3
- data/lib/ruhoh/db.rb +7 -17
- data/lib/ruhoh/deployers/s3.rb +71 -0
- data/lib/ruhoh/friend.rb +71 -0
- data/lib/ruhoh/page.rb +41 -11
- data/lib/ruhoh/parsers/drafts.rb +54 -0
- data/lib/ruhoh/parsers/layouts.rb +14 -9
- data/lib/ruhoh/parsers/pages.rb +47 -35
- data/lib/ruhoh/parsers/partials.rb +14 -2
- data/lib/ruhoh/parsers/posts.rb +139 -88
- data/lib/ruhoh/parsers/routes.rb +4 -8
- data/lib/ruhoh/parsers/site.rb +2 -8
- data/lib/ruhoh/previewer.rb +48 -0
- data/lib/ruhoh/templaters/base.rb +53 -0
- data/lib/ruhoh/templaters/helpers.rb +159 -0
- data/lib/ruhoh/templaters/rmustache.rb +29 -0
- data/lib/ruhoh/utils.rb +25 -7
- data/lib/ruhoh/version.rb +1 -1
- data/lib/ruhoh/watch.rb +22 -9
- data/lib/ruhoh.rb +74 -29
- data/ruhoh.gemspec +70 -9
- data/scaffolds/blog/_config.yml +33 -0
- data/scaffolds/blog/_drafts/.gitkeep +0 -0
- data/scaffolds/blog/_posts/.gitkeep +0 -0
- data/scaffolds/blog/_site.yml +16 -0
- data/scaffolds/blog/_templates/partials/categories_list +3 -0
- data/scaffolds/blog/_templates/partials/pages_list +7 -0
- data/scaffolds/blog/_templates/partials/posts_collate +9 -0
- data/scaffolds/blog/_templates/partials/posts_list +1 -0
- data/scaffolds/blog/_templates/partials/tags_list +3 -0
- data/scaffolds/blog/_templates/syntax/google_prettify/default.css +52 -0
- data/scaffolds/blog/_templates/syntax/google_prettify/desert.css +34 -0
- data/scaffolds/blog/_templates/syntax/google_prettify/sons-of-obsidian.css +117 -0
- data/scaffolds/blog/_templates/syntax/google_prettify/sunburst.css +51 -0
- data/scaffolds/blog/_templates/syntax/google_prettify/twitter-bootstrap.css +30 -0
- data/scaffolds/blog/_templates/themes/twitter/bootstrap/css/bootstrap.min.css +689 -0
- data/scaffolds/blog/_templates/themes/twitter/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/scaffolds/blog/_templates/themes/twitter/bootstrap/img/glyphicons-halflings.png +0 -0
- data/scaffolds/blog/_templates/themes/twitter/css/style.css +68 -0
- data/scaffolds/blog/_templates/themes/twitter/layouts/default.html +64 -0
- data/scaffolds/blog/_templates/themes/twitter/layouts/page.html +13 -0
- data/scaffolds/blog/_templates/themes/twitter/layouts/post.html +55 -0
- data/scaffolds/blog/_templates/themes/twitter/manifest.yml +11 -0
- data/scaffolds/blog/about.md +5 -0
- data/scaffolds/blog/archive.html +11 -0
- data/scaffolds/blog/categories.html +21 -0
- data/scaffolds/blog/config.ru +9 -0
- data/scaffolds/blog/index.html +13 -0
- data/scaffolds/blog/pages.html +14 -0
- data/scaffolds/blog/tags.html +21 -0
- data/scaffolds/layout.html +3 -0
- data/scaffolds/page.html +6 -0
- data/scaffolds/post.html +8 -0
- data/scaffolds/theme/css/style.css +0 -0
- data/scaffolds/theme/images/.gitkeep +0 -0
- data/scaffolds/theme/layouts/default.html +17 -0
- data/scaffolds/theme/layouts/page.html +7 -0
- data/scaffolds/theme/layouts/post.html +8 -0
- data/scaffolds/theme/partials/.gitkeep +0 -0
- data/spec/db_spec.rb +88 -0
- data/spec/page_spec.rb +200 -0
- data/spec/parsers/layouts_spec.rb +32 -0
- data/spec/parsers/pages_spec.rb +97 -0
- data/spec/parsers/posts_spec.rb +301 -0
- data/spec/parsers/routes_spec.rb +45 -0
- data/spec/parsers/site_spec.rb +32 -0
- data/spec/setup_spec.rb +72 -0
- data/spec/spec_helper.rb +23 -0
- data/system_partials/analytics/getclicky +12 -0
- data/system_partials/analytics/google +11 -0
- data/system_partials/comments/disqus +13 -0
- data/system_partials/comments/facebook +9 -0
- data/system_partials/comments/intensedebate +6 -0
- data/system_partials/comments/livefyre +6 -0
- data/system_partials/syntax/google_prettify +11 -0
- metadata +84 -23
- data/lib/ruhoh/client.rb +0 -28
- data/lib/ruhoh/preview.rb +0 -36
- data/lib/ruhoh/templaters/helper_mustache.rb +0 -109
- data/lib/ruhoh/templaters/templater.rb +0 -39
@@ -0,0 +1,11 @@
|
|
1
|
+
<!-- Google Prettify -->
|
2
|
+
<link rel="stylesheet" href="{{ SYNTAX_PATH }}/google_prettify/{{ site.config.syntax.google_prettify.theme }}.css" type="text/css" media="screen" charset="utf-8">
|
3
|
+
<script src="http://cdnjs.cloudflare.com/ajax/libs/prettify/188.0.0/prettify.js"></script>
|
4
|
+
<script>
|
5
|
+
var pres = document.getElementsByTagName("pre");
|
6
|
+
for (var i=0; i < pres.length; ++i) {
|
7
|
+
pres[i].className = "prettyprint {{# site.config.syntax.google_prettify.linenums }}linenums{{/site.config.syntax.google_prettify.linenums}}";
|
8
|
+
}
|
9
|
+
prettyPrint();
|
10
|
+
</script>
|
11
|
+
<!-- end Google Prettify -->
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruhoh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,52 +9,52 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &70238314583000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '1.4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70238314583000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mustache
|
27
|
-
requirement: &
|
27
|
+
requirement: &70238314582500 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
|
-
- -
|
30
|
+
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '0'
|
32
|
+
version: '0.99'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70238314582500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: directory_watcher
|
38
|
-
requirement: &
|
38
|
+
requirement: &70238314582040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '1.4'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70238314582040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: maruku
|
49
|
-
requirement: &
|
49
|
+
requirement: &70238314581580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
54
|
+
version: '0.6'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70238314581580
|
58
58
|
description: Ruhoh is a Universal API for your static blog.
|
59
59
|
email: plusjade@gmail.com
|
60
60
|
executables:
|
@@ -62,28 +62,89 @@ executables:
|
|
62
62
|
extensions: []
|
63
63
|
extra_rdoc_files: []
|
64
64
|
files:
|
65
|
+
- Gemfile
|
65
66
|
- README.md
|
67
|
+
- Rakefile
|
66
68
|
- bin/ruhoh
|
67
69
|
- lib/ruhoh.rb
|
68
|
-
- lib/ruhoh/client.rb
|
70
|
+
- lib/ruhoh/client/client.rb
|
71
|
+
- lib/ruhoh/client/help.yml
|
69
72
|
- lib/ruhoh/compiler.rb
|
70
73
|
- lib/ruhoh/converters/converter.rb
|
71
74
|
- lib/ruhoh/db.rb
|
75
|
+
- lib/ruhoh/deployers/s3.rb
|
76
|
+
- lib/ruhoh/friend.rb
|
72
77
|
- lib/ruhoh/page.rb
|
78
|
+
- lib/ruhoh/parsers/drafts.rb
|
73
79
|
- lib/ruhoh/parsers/layouts.rb
|
74
80
|
- lib/ruhoh/parsers/pages.rb
|
75
81
|
- lib/ruhoh/parsers/partials.rb
|
76
82
|
- lib/ruhoh/parsers/posts.rb
|
77
83
|
- lib/ruhoh/parsers/routes.rb
|
78
84
|
- lib/ruhoh/parsers/site.rb
|
79
|
-
- lib/ruhoh/
|
80
|
-
- lib/ruhoh/templaters/
|
81
|
-
- lib/ruhoh/templaters/
|
85
|
+
- lib/ruhoh/previewer.rb
|
86
|
+
- lib/ruhoh/templaters/base.rb
|
87
|
+
- lib/ruhoh/templaters/helpers.rb
|
88
|
+
- lib/ruhoh/templaters/rmustache.rb
|
82
89
|
- lib/ruhoh/utils.rb
|
83
90
|
- lib/ruhoh/version.rb
|
84
91
|
- lib/ruhoh/watch.rb
|
85
92
|
- ruhoh.gemspec
|
86
|
-
|
93
|
+
- scaffolds/blog/_config.yml
|
94
|
+
- scaffolds/blog/_drafts/.gitkeep
|
95
|
+
- scaffolds/blog/_posts/.gitkeep
|
96
|
+
- scaffolds/blog/_site.yml
|
97
|
+
- scaffolds/blog/_templates/partials/categories_list
|
98
|
+
- scaffolds/blog/_templates/partials/pages_list
|
99
|
+
- scaffolds/blog/_templates/partials/posts_collate
|
100
|
+
- scaffolds/blog/_templates/partials/posts_list
|
101
|
+
- scaffolds/blog/_templates/partials/tags_list
|
102
|
+
- scaffolds/blog/_templates/syntax/google_prettify/default.css
|
103
|
+
- scaffolds/blog/_templates/syntax/google_prettify/desert.css
|
104
|
+
- scaffolds/blog/_templates/syntax/google_prettify/sons-of-obsidian.css
|
105
|
+
- scaffolds/blog/_templates/syntax/google_prettify/sunburst.css
|
106
|
+
- scaffolds/blog/_templates/syntax/google_prettify/twitter-bootstrap.css
|
107
|
+
- scaffolds/blog/_templates/themes/twitter/bootstrap/css/bootstrap.min.css
|
108
|
+
- scaffolds/blog/_templates/themes/twitter/bootstrap/img/glyphicons-halflings-white.png
|
109
|
+
- scaffolds/blog/_templates/themes/twitter/bootstrap/img/glyphicons-halflings.png
|
110
|
+
- scaffolds/blog/_templates/themes/twitter/css/style.css
|
111
|
+
- scaffolds/blog/_templates/themes/twitter/layouts/default.html
|
112
|
+
- scaffolds/blog/_templates/themes/twitter/layouts/page.html
|
113
|
+
- scaffolds/blog/_templates/themes/twitter/layouts/post.html
|
114
|
+
- scaffolds/blog/_templates/themes/twitter/manifest.yml
|
115
|
+
- scaffolds/blog/about.md
|
116
|
+
- scaffolds/blog/archive.html
|
117
|
+
- scaffolds/blog/categories.html
|
118
|
+
- scaffolds/blog/config.ru
|
119
|
+
- scaffolds/blog/index.html
|
120
|
+
- scaffolds/blog/pages.html
|
121
|
+
- scaffolds/blog/tags.html
|
122
|
+
- scaffolds/layout.html
|
123
|
+
- scaffolds/page.html
|
124
|
+
- scaffolds/post.html
|
125
|
+
- scaffolds/theme/css/style.css
|
126
|
+
- scaffolds/theme/images/.gitkeep
|
127
|
+
- scaffolds/theme/layouts/default.html
|
128
|
+
- scaffolds/theme/layouts/page.html
|
129
|
+
- scaffolds/theme/layouts/post.html
|
130
|
+
- scaffolds/theme/partials/.gitkeep
|
131
|
+
- spec/db_spec.rb
|
132
|
+
- spec/page_spec.rb
|
133
|
+
- spec/parsers/layouts_spec.rb
|
134
|
+
- spec/parsers/pages_spec.rb
|
135
|
+
- spec/parsers/posts_spec.rb
|
136
|
+
- spec/parsers/routes_spec.rb
|
137
|
+
- spec/parsers/site_spec.rb
|
138
|
+
- spec/setup_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
- system_partials/analytics/getclicky
|
141
|
+
- system_partials/analytics/google
|
142
|
+
- system_partials/comments/disqus
|
143
|
+
- system_partials/comments/facebook
|
144
|
+
- system_partials/comments/intensedebate
|
145
|
+
- system_partials/comments/livefyre
|
146
|
+
- system_partials/syntax/google_prettify
|
147
|
+
homepage: http://github.com/ruhoh/ruhoh.rb
|
87
148
|
licenses:
|
88
149
|
- http://unlicense.org/
|
89
150
|
post_install_message:
|
data/lib/ruhoh/client.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
|
3
|
-
module Client
|
4
|
-
Root = File.expand_path(File.join(File.dirname(__FILE__), '../..'))
|
5
|
-
|
6
|
-
def self.new_blog(name)
|
7
|
-
if name.nil?
|
8
|
-
puts "Name must be specified"
|
9
|
-
exit 0
|
10
|
-
end
|
11
|
-
|
12
|
-
source_directory = File.join(Root, 'scaffolds/blog')
|
13
|
-
target_directory = File.join(Dir.pwd, name)
|
14
|
-
|
15
|
-
if File.exist?(target_directory)
|
16
|
-
puts "#{target_directory} already exists. Specify another directory."
|
17
|
-
exit 0
|
18
|
-
end
|
19
|
-
|
20
|
-
FileUtils.mkdir target_directory
|
21
|
-
FileUtils.cp_r "#{source_directory}/.", target_directory
|
22
|
-
|
23
|
-
puts "=> Blog successfully cloned to:"
|
24
|
-
puts "=> #{target_directory}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
end #Ruhoh
|
data/lib/ruhoh/preview.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
|
3
|
-
# Public: Rack application used to render singular pages via their URL.
|
4
|
-
#
|
5
|
-
# Examples
|
6
|
-
#
|
7
|
-
# In config.ru:
|
8
|
-
#
|
9
|
-
# require 'ruhoh'
|
10
|
-
#
|
11
|
-
# Ruhoh.setup
|
12
|
-
# use Rack::Static, {:root => '.', :urls => ['/_media', "/#{Ruhoh.folders.templates}"]}
|
13
|
-
# run Ruhoh::Preview.new
|
14
|
-
#
|
15
|
-
class Preview
|
16
|
-
|
17
|
-
def initialize
|
18
|
-
Ruhoh::DB.initialize
|
19
|
-
@page = Ruhoh::Page.new
|
20
|
-
Ruhoh::Watch.start
|
21
|
-
end
|
22
|
-
|
23
|
-
def call(env)
|
24
|
-
return favicon if env['PATH_INFO'] == '/favicon.ico'
|
25
|
-
|
26
|
-
@page.change_with_url(env['PATH_INFO'])
|
27
|
-
[200, {'Content-Type' => 'text/html'}, [@page.render]]
|
28
|
-
end
|
29
|
-
|
30
|
-
def favicon
|
31
|
-
[200, {'Content-Type' => 'image/x-icon'}, ['']]
|
32
|
-
end
|
33
|
-
|
34
|
-
end #Preview
|
35
|
-
|
36
|
-
end #Ruhoh
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'pp'
|
2
|
-
|
3
|
-
class Ruhoh
|
4
|
-
|
5
|
-
class HelperMustache < Mustache
|
6
|
-
|
7
|
-
class HelperContext < Context
|
8
|
-
|
9
|
-
# Overload find method to catch helper expressions
|
10
|
-
def find(obj, key, default = nil)
|
11
|
-
return super unless key.to_s.index('?')
|
12
|
-
|
13
|
-
puts "=> Executing helper: #{key}"
|
14
|
-
context, helper = key.to_s.split('?')
|
15
|
-
context = context.empty? ? obj : super(obj, context)
|
16
|
-
|
17
|
-
self.mustache_in_stack.__send__ helper, context
|
18
|
-
end
|
19
|
-
|
20
|
-
end #HelperContext
|
21
|
-
|
22
|
-
def context
|
23
|
-
@context ||= HelperContext.new(self)
|
24
|
-
end
|
25
|
-
|
26
|
-
def partial(name)
|
27
|
-
Ruhoh::DB.partials[name.to_s]
|
28
|
-
end
|
29
|
-
|
30
|
-
def debug(sub_context)
|
31
|
-
puts "=>DEBUG:"
|
32
|
-
puts sub_context.class
|
33
|
-
puts sub_context.inspect
|
34
|
-
"<pre>#{sub_context.class}\n#{sub_context.pretty_inspect}</pre>"
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_tags(sub_context)
|
38
|
-
if sub_context.is_a?(Array)
|
39
|
-
sub_context.map { |id|
|
40
|
-
self.context['_posts']['tags'][id] if self.context['_posts']['tags'][id]
|
41
|
-
}
|
42
|
-
else
|
43
|
-
tags = []
|
44
|
-
self.context['_posts']['tags'].each_value { |tag|
|
45
|
-
tags << tag
|
46
|
-
}
|
47
|
-
tags
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def to_posts(sub_context)
|
52
|
-
sub_context = sub_context.is_a?(Array) ? sub_context : self.context['_posts']['chronological']
|
53
|
-
|
54
|
-
sub_context.map { |id|
|
55
|
-
self.context['_posts']['dictionary'][id] if self.context['_posts']['dictionary'][id]
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
def to_pages(sub_context)
|
60
|
-
puts "=> call: pages_list with context: #{sub_context}"
|
61
|
-
pages = []
|
62
|
-
if sub_context.is_a?(Array)
|
63
|
-
sub_context.each do |id|
|
64
|
-
if self.context[:pages][id]
|
65
|
-
pages << self.context[:pages][id]
|
66
|
-
end
|
67
|
-
end
|
68
|
-
else
|
69
|
-
self.context[:pages].each_value {|page| pages << page }
|
70
|
-
end
|
71
|
-
pages
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_categories(sub_context)
|
75
|
-
if sub_context.is_a?(Array)
|
76
|
-
sub_context.map { |id|
|
77
|
-
self.context['_posts']['categories'][id] if self.context['_posts']['categories'][id]
|
78
|
-
}
|
79
|
-
else
|
80
|
-
cats = []
|
81
|
-
self.context['_posts']['categories'].each_value { |cat|
|
82
|
-
cats << cat
|
83
|
-
}
|
84
|
-
cats
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def analytics
|
89
|
-
analytics_config = self.context['site']['config']['analytics']
|
90
|
-
return '' unless analytics_config && analytics_config['provider']
|
91
|
-
code = self.partial("analytics-providers/#{analytics_config['provider']}")
|
92
|
-
return "<h2 style='color:red'>!Analytics Provider partial for '#{analytics_config['provider']}' not found </h2>" if code.nil?
|
93
|
-
|
94
|
-
self.render(code)
|
95
|
-
end
|
96
|
-
|
97
|
-
def comments
|
98
|
-
comments_config = self.context['site']['config']['comments']
|
99
|
-
return '' unless comments_config && comments_config['provider']
|
100
|
-
code = self.partial("comments-providers/#{comments_config['provider']}")
|
101
|
-
puts "comments-provders/#{comments_config['provider']}"
|
102
|
-
return "<h2 style='color:red'>!Comments Provider partial for '#{comments_config['provider']}' not found </h2>" if code.nil?
|
103
|
-
|
104
|
-
self.render(code)
|
105
|
-
end
|
106
|
-
|
107
|
-
end #HelperMustache
|
108
|
-
|
109
|
-
end #Ruhoh
|
@@ -1,39 +0,0 @@
|
|
1
|
-
class Ruhoh
|
2
|
-
|
3
|
-
module Templater
|
4
|
-
|
5
|
-
def self.build_payload(page)
|
6
|
-
{
|
7
|
-
"page" => page.attributes,
|
8
|
-
"site" => Ruhoh::DB.site,
|
9
|
-
"pages" => Ruhoh::DB.pages,
|
10
|
-
"_posts" => Ruhoh::DB.posts,
|
11
|
-
"ASSET_PATH" => Ruhoh.config.asset_path
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.expand_and_render(page)
|
16
|
-
self.render(self.expand(page), page)
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.render(output, page)
|
20
|
-
Ruhoh::HelperMustache.render(output, self.build_payload(page))
|
21
|
-
end
|
22
|
-
|
23
|
-
# Expand the page.
|
24
|
-
# Places page content into sub-template then into master template if available.
|
25
|
-
def self.expand(page)
|
26
|
-
output = page.sub_layout['content'].gsub(Ruhoh::Utils::ContentRegex, page.content)
|
27
|
-
|
28
|
-
# An undefined master means the page/post layouts is only one deep.
|
29
|
-
# This means it expects to load directly into a master template.
|
30
|
-
if page.master_layout && page.master_layout['content']
|
31
|
-
output = page.master_layout['content'].gsub(Ruhoh::Utils::ContentRegex, output);
|
32
|
-
end
|
33
|
-
|
34
|
-
output
|
35
|
-
end
|
36
|
-
|
37
|
-
end #Templater
|
38
|
-
|
39
|
-
end #Ruhoh
|