hyla 1.0.3 → 1.0.4
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.
- checksums.yaml +8 -8
- data/README.adoc +38 -3
- data/bin/hyla +21 -8
- data/data/toc.adoc +3 -3
- data/documentation/introduction.adoc +30 -26
- data/documentation/scripts/create_adoc_from_toc.sh +3 -0
- data/documentation/scripts/create_myblankproject_add_artefacts.sh +7 -7
- data/documentation/scripts/create_myblankproject_add_artefacts_config.sh +14 -8
- data/documentation/scripts/create_myblankproject_add_artefacts_my_config.sh +15 -0
- data/documentation/scripts/generate_content_myblankproject.sh +7 -7
- data/documentation/scripts/generate_content_myblankproject_config.sh +17 -11
- data/documentation/scripts/generate_content_myblankproject_other_style.sh +7 -7
- data/documentation/scripts/generate_pdf_from_html.sh +1 -1
- data/documentation/scripts/generate_slideshow_deckjs.sh +4 -4
- data/documentation/scripts/generate_slideshow_mytoc_all.sh +2 -2
- data/documentation/scripts/generate_slideshow_mytoc_module.sh +1 -1
- data/documentation/scripts/generate_slideshow_revealjs.sh +13 -4
- data/documentation/scripts/generate_slideshow_revealjs_config.sh +36 -0
- data/documentation/scripts/sendmail.sh +1 -1
- data/hyla.gemspec +2 -1
- data/lib/hyla.rb +2 -1
- data/lib/hyla/commands/{create.rb → add.rb} +18 -1
- data/lib/hyla/commands/generate.rb +215 -44
- data/lib/hyla/commands/new.rb +16 -9
- data/lib/hyla/commands/sendmail.rb +37 -13
- data/lib/hyla/commands/serve.rb +2 -2
- data/lib/hyla/configuration.rb +73 -33
- data/lib/hyla/core_ext.rb +11 -1
- data/lib/hyla/project.rb +1 -1
- data/lib/resources/backends/haml/revealjs/document.html.haml +9 -2
- data/lib/resources/backends/slim/html5/block_image.html.slim +1 -0
- data/lib/resources/backends/slim/html5/document.html.slim +18 -9
- data/lib/resources/backends/slim/revealjs/block_sidebar.html.slim +5 -5
- data/lib/resources/backends/slim/revealjs/document.html.slim +10 -2
- data/lib/resources/backends/slim/revealjs/section.html.slim +5 -1
- data/lib/resources/cover.slim +70 -0
- data/lib/resources/fonts/liberation/Sans-Bold.ttf +0 -0
- data/lib/resources/fonts/liberation/Sans-BoldItalic.ttf +0 -0
- data/lib/resources/fonts/liberation/Sans-Italic.ttf +0 -0
- data/lib/resources/fonts/liberation/Sans-Regular.ttf +0 -0
- data/lib/resources/revealjs/css/theme/gpe.css +225 -0
- data/lib/resources/styles/liberation.css +3 -1
- data/lib/templates/_config.yaml +26 -8
- data/lib/templates/book/readme.adoc +1 -1
- data/lib/templates/sample/{asciidoc_article.adoc → asciidoc_article.ad} +0 -0
- data/lib/templates/sample/{asciidoc_audio.adoc → asciidoc_audio.ad} +0 -0
- data/lib/templates/sample/{asciidoc_book.adoc → asciidoc_book.ad} +0 -0
- data/lib/templates/sample/{asciidoc_image.adoc → asciidoc_image.ad} +0 -0
- data/lib/templates/sample/{asciidoc_report.adoc → asciidoc_report.ad} +3 -2
- data/lib/templates/sample/{asciidoc_source.adoc → asciidoc_source.ad} +0 -0
- data/lib/templates/sample/{asciidoc_table.adoc → asciidoc_table.ad} +0 -0
- data/lib/templates/sample/{asciidoc_video.adoc → asciidoc_video.ad} +0 -0
- data/lib/templates/sample/{slideshow_deckjs.adoc → slideshow_deckjs.ad} +0 -0
- data/lib/templates/sample/{slideshow_revealjs.adoc → slideshow_revealjs.ad} +1 -1
- data/lib/templates/training-exercises/{README.md → README.ad} +0 -0
- data/lib/templates/training/readme.adoc +1 -1
- metadata +61 -32
- data/documentation/scripts/create_adoc_from_toc_config.sh +0 -24
- data/lib/resources/backends/slim/document.html.bk.slim +0 -335
- data/lib/resources/styles/redhat.css +0 -1
- data/test/reports/test-1.0.x-11-12-2013.txt +0 -123
data/lib/hyla/commands/new.rb
CHANGED
@@ -2,17 +2,29 @@ module Hyla
|
|
2
2
|
module Commands
|
3
3
|
class New < Command
|
4
4
|
|
5
|
+
@readme_content = <<-EOS
|
6
|
+
== Readme Asciidoctor Project
|
7
|
+
|
8
|
+
This is an empty Asciidoctor readme file.
|
9
|
+
|
10
|
+
To create **asciidoc(tor)** content, more info is available http://asciidoctor.org/docs/user-manual[here]
|
11
|
+
|
12
|
+
Otherwise, you can add content to this newly project created using this hyla command :
|
13
|
+
|
14
|
+
hyla add --t asciidoc --a xxx --d pathToProjectCreated
|
15
|
+
|
16
|
+
where xxx can be article, book, source, audio, video, ...
|
17
|
+
EOS
|
18
|
+
|
5
19
|
def self.process(args, options = {})
|
6
|
-
|
20
|
+
|
7
21
|
out_dir = options[:destination] if self.check_mandatory_option?('-d / --destination', options[:destination])
|
8
22
|
|
9
23
|
#
|
10
24
|
# Calculate project path (rel/absolute)
|
11
25
|
#
|
12
|
-
#new_project_path = File.expand_path(args[0], Dir.pwd)
|
13
26
|
new_project_path = File.expand_path(out_dir, Dir.pwd)
|
14
27
|
|
15
|
-
|
16
28
|
if Dir.exist? new_project_path
|
17
29
|
|
18
30
|
Hyla.logger.debug("Dir exists: #{new_project_path}")
|
@@ -73,12 +85,7 @@ module Hyla
|
|
73
85
|
def self.create_blank_project(path)
|
74
86
|
Dir.chdir(path) do
|
75
87
|
f = File.open('readme.ad', 'w')
|
76
|
-
f.puts
|
77
|
-
f.puts "This is an empty Asciidoctor readme file."
|
78
|
-
f.puts "To create **asciidoc(tor)** content, more info are available http://asciidoctor.org/docs/user-manual[here]"
|
79
|
-
f.puts "otherwise, you can add content to this newly project created using this hyla command :"
|
80
|
-
f.puts "hyla create --t asciidoc --a xxx --d pathToProjectCreated"
|
81
|
-
f.puts "where xxx can be article, book, source, audio, video, ..."
|
88
|
+
f.puts @readme_content
|
82
89
|
end
|
83
90
|
end
|
84
91
|
|
@@ -4,9 +4,10 @@ module Hyla
|
|
4
4
|
|
5
5
|
def self.process(args, options)
|
6
6
|
|
7
|
-
location = options[:
|
7
|
+
location = options[:source] if self.check_mandatory_option?('-s / --source', options[:source])
|
8
8
|
file_name = options[:file] if check_mandatory_option?('-f / --file', options[:file])
|
9
9
|
email_attributes = options[:email_attributes] if check_mandatory_option?('-e / --email_attributes', options[:email_attributes])
|
10
|
+
attachment = options[:attachment]
|
10
11
|
|
11
12
|
sender = email_attributes[:from]
|
12
13
|
recipients = email_attributes[:to]
|
@@ -46,20 +47,22 @@ module Hyla
|
|
46
47
|
</html>
|
47
48
|
EOS
|
48
49
|
|
49
|
-
mail =
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
content_type 'multipart/related'
|
54
|
-
end
|
50
|
+
mail = populate_email(recipients, sender, subject)
|
51
|
+
|
52
|
+
case attachment
|
53
|
+
when true
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
55
|
+
attachment = File.read(file_path)
|
56
|
+
mail.attachments[file_name] = {
|
57
|
+
:mime_type => 'application/x-html',
|
58
|
+
:content => attachment,
|
59
|
+
:Content_Transfer_Encoding => 'quoted-printable'}
|
61
60
|
|
62
|
-
|
61
|
+
inline_html = inline_body_with_attachments(body, mail.attachments)
|
62
|
+
|
63
|
+
when false
|
64
|
+
inline_html = File.read(file_path)
|
65
|
+
end
|
63
66
|
|
64
67
|
html_part = Mail::Part.new do
|
65
68
|
content_type 'text/html; charset=UTF-8'
|
@@ -73,6 +76,24 @@ module Hyla
|
|
73
76
|
Hyla.logger.info "Email send to SMTP server from #{sender} with this subject : #{subject}"
|
74
77
|
end
|
75
78
|
|
79
|
+
#
|
80
|
+
# Create Mail using
|
81
|
+
# Recipients, Sender and subject
|
82
|
+
#
|
83
|
+
def self.populate_email(recipients, sender, subject)
|
84
|
+
mail = Mail.new do
|
85
|
+
to recipients
|
86
|
+
from sender
|
87
|
+
subject subject
|
88
|
+
content_type 'multipart/related'
|
89
|
+
end
|
90
|
+
return mail
|
91
|
+
end
|
92
|
+
|
93
|
+
#
|
94
|
+
# Generate the Hash of the parameters
|
95
|
+
# used by mail compoent nto send email
|
96
|
+
#
|
76
97
|
def self.parameters()
|
77
98
|
parameters = {}
|
78
99
|
parameters[:address] = @smtp_server unless @smtp_server.nil?
|
@@ -84,6 +105,9 @@ module Hyla
|
|
84
105
|
return parameters
|
85
106
|
end
|
86
107
|
|
108
|
+
#
|
109
|
+
# Substitute filename with cid
|
110
|
+
#
|
87
111
|
def self.inline_body_with_attachments(html, attachments)
|
88
112
|
attachments.each do |attachment|
|
89
113
|
if (html =~ /#{attachment.filename}/)
|
data/lib/hyla/commands/serve.rb
CHANGED
@@ -5,18 +5,18 @@ module Hyla
|
|
5
5
|
def self.process(args, options)
|
6
6
|
include WEBrick
|
7
7
|
|
8
|
-
my_opts =
|
8
|
+
my_opts = {}
|
9
9
|
|
10
10
|
destination = options[:destination] if self.check_mandatory_option?('-d / --destination', options[:destination])
|
11
11
|
|
12
12
|
my_opts[:Port] = options[:port]
|
13
13
|
my_opts[:BindAddress] = options[:host]
|
14
|
+
my_opts[:baseurl] = options[:baseurl]
|
14
15
|
my_opts[:MimeTypes] = self.mime_types
|
15
16
|
my_opts[:DoNotReverseLookupmy_opts] = true
|
16
17
|
my_opts[:StartCallback] = start_callback(options[:detach])
|
17
18
|
my_opts[:AccessLog] = []
|
18
19
|
my_opts[:Logger] = Log::new([], Log::WARN)
|
19
|
-
my_opts[:baseurl] = options[:baseurl]
|
20
20
|
|
21
21
|
# recreate NondisclosureName under utf-8 circumstance
|
22
22
|
fh_option = WEBrick::Config::FileHandler
|
data/lib/hyla/configuration.rb
CHANGED
@@ -3,33 +3,43 @@ module Hyla
|
|
3
3
|
|
4
4
|
attr_reader :HEADER, :INDEX_SUFFIX, :HEADER_INDEX, :INCLUDE_PREFIX, :INCLUDE_SUFFIX, :LEVEL_1, :LEVEL_2, :SKIP_CHARACTERS,
|
5
5
|
:ADOC_EXT, :PREFIX_ARTEFACT, :YAML_CONFIG_FILE_NAME, :DEFAULTS,
|
6
|
-
:templates, :samples, :resources, :styles, :backends
|
6
|
+
:templates, :cover_template, :samples, :resources, :styles, :fonts, :backends
|
7
7
|
|
8
8
|
DEFAULTS = {
|
9
|
-
'source'
|
10
|
-
'destination'
|
11
|
-
'watch_dir'
|
12
|
-
'watch_ext'
|
9
|
+
'source' => Dir.pwd,
|
10
|
+
'destination' => File.join(Dir.pwd, 'generated_content'),
|
11
|
+
'watch_dir' => '.',
|
12
|
+
'watch_ext' => %w(ad adoc asc asciidoc txt index),
|
13
13
|
|
14
14
|
# Asciidoctor
|
15
|
-
'backend'
|
16
|
-
'eruby'
|
17
|
-
'doctype'
|
18
|
-
'compact'
|
19
|
-
'to_dir'
|
20
|
-
'to_file'
|
21
|
-
'attributes'
|
15
|
+
'backend' => 'html5',
|
16
|
+
'eruby' => 'erb',
|
17
|
+
'doctype' => 'article',
|
18
|
+
'compact' => false,
|
19
|
+
'to_dir' => '.',
|
20
|
+
'to_file' => '',
|
21
|
+
'attributes' => {
|
22
22
|
'source-highlighter' => 'coderay',
|
23
|
-
'linkcss!'
|
24
|
-
'data-uri'
|
25
|
-
'stylesheet'
|
26
|
-
'stylesdir'
|
23
|
+
'linkcss!' => 'true',
|
24
|
+
'data-uri' => 'true',
|
25
|
+
'stylesheet' => 'asciidoctor.css',
|
26
|
+
'stylesdir' => 'styles'
|
27
27
|
},
|
28
|
-
'safe'
|
28
|
+
'safe' => 'unsafe',
|
29
29
|
'header_footer' => true
|
30
30
|
|
31
31
|
}
|
32
32
|
|
33
|
+
#
|
34
|
+
# Matches an include preprocessor directive.
|
35
|
+
#
|
36
|
+
# Examples
|
37
|
+
#
|
38
|
+
# include::chapter1.ad[]
|
39
|
+
# include::example.txt[lines=1;2;5..10]
|
40
|
+
#
|
41
|
+
IncludeDirectiveRx = /^\\?include::([^\[]+)\[(.*?)\]$/
|
42
|
+
|
33
43
|
INCLUDE_PREFIX = 'include::'
|
34
44
|
|
35
45
|
INCLUDE_SUFFIX = '[]'
|
@@ -42,11 +52,12 @@ module Hyla
|
|
42
52
|
":source-highlighter: coderay\n"
|
43
53
|
|
44
54
|
HEADER_INDEX = ":data-uri:\n" +
|
45
|
-
":navigation
|
46
|
-
":menu
|
47
|
-
":status
|
48
|
-
":goto
|
49
|
-
":notitle
|
55
|
+
":navigation: # navigation attribute used for DeckJS Slideshow\n" +
|
56
|
+
":menu: # navigation attribute used for DeckJS Slideshow\n" +
|
57
|
+
":status: # navigation attribute used for DeckJS Slideshow\n" +
|
58
|
+
":goto: # navigation attribute used for DeckJS Slideshow\n" +
|
59
|
+
":notitle: \n" +
|
60
|
+
":toc: left # Comment or uncomment this attribute if you don't need to display left part of the HTML page a table of content\n"
|
50
61
|
|
51
62
|
LEVEL_1 = '= '
|
52
63
|
|
@@ -54,7 +65,7 @@ module Hyla
|
|
54
65
|
|
55
66
|
SKIP_CHARACTERS = '>>'
|
56
67
|
|
57
|
-
ADOC_EXT = '.
|
68
|
+
ADOC_EXT = '.ad'
|
58
69
|
|
59
70
|
PREFIX_ARTEFACT = 'asciidoc_'
|
60
71
|
|
@@ -66,10 +77,21 @@ module Hyla
|
|
66
77
|
|
67
78
|
STYLES = '../../lib/resources/styles'
|
68
79
|
|
80
|
+
FONTS = '../../lib/resources/fonts'
|
81
|
+
|
69
82
|
BACKENDS = '../../lib/resources/backends'
|
70
83
|
|
84
|
+
COVER_TEMPLATE = '../../lib/resources/cover.slim'
|
85
|
+
|
71
86
|
YAML_CONFIG_FILE_NAME = '_config.yaml'
|
72
87
|
|
88
|
+
#
|
89
|
+
# Cover Slim Template
|
90
|
+
#
|
91
|
+
def self.cover_template
|
92
|
+
File.expand_path(COVER_TEMPLATE, File.dirname(__FILE__))
|
93
|
+
end
|
94
|
+
|
73
95
|
#
|
74
96
|
# Templates Location
|
75
97
|
#
|
@@ -91,6 +113,13 @@ module Hyla
|
|
91
113
|
File.expand_path(STYLES, File.dirname(__FILE__))
|
92
114
|
end
|
93
115
|
|
116
|
+
#
|
117
|
+
# Fonts Location
|
118
|
+
#
|
119
|
+
def self.fonts
|
120
|
+
File.expand_path(FONTS, File.dirname(__FILE__))
|
121
|
+
end
|
122
|
+
|
94
123
|
#
|
95
124
|
# Backends Location
|
96
125
|
#
|
@@ -133,13 +162,21 @@ module Hyla
|
|
133
162
|
config = DEFAULTS
|
134
163
|
Hyla::logger.debug("DEFAULTS Keys: #{config.inspect}")
|
135
164
|
|
136
|
-
#
|
137
|
-
#
|
138
|
-
|
139
|
-
|
140
|
-
|
165
|
+
#
|
166
|
+
# Read the config file passed as parameter if it exists
|
167
|
+
# otherwise read default _config.yaml file if it exists and
|
168
|
+
# merge content with DEFAULT config
|
169
|
+
#
|
170
|
+
alt_config = read_config_file(override['config']) if override['config']
|
171
|
+
if !alt_config.nil?
|
172
|
+
config = config.deep_merge(alt_config)
|
173
|
+
else
|
174
|
+
new_config = read_config_file(YAML_CONFIG_FILE_NAME)
|
175
|
+
Hyla::logger.debug("OVERRIDE Keys: #{new_config.inspect}") if !new_config.nil?
|
176
|
+
config = config.deep_merge(new_config) if !new_config.nil?
|
177
|
+
end
|
141
178
|
|
142
|
-
# Merge DEFAULTS < _config.yaml < override
|
179
|
+
# Merge DEFAULTS < _config.yaml or your_config.yaml file < override
|
143
180
|
config = config.deep_merge(override)
|
144
181
|
# Convert String Keys to Symbols Keys
|
145
182
|
config = Configuration[].transform_keys_to_symbols(config)
|
@@ -156,7 +193,7 @@ module Hyla
|
|
156
193
|
config = safe_load_file(f)
|
157
194
|
config
|
158
195
|
rescue SystemCallError
|
159
|
-
Hyla::logger.warn "No
|
196
|
+
Hyla::logger.warn "No configuration file retrieved for the name : #{filename}"
|
160
197
|
end
|
161
198
|
|
162
199
|
#
|
@@ -180,8 +217,10 @@ module Hyla
|
|
180
217
|
return hash if not hash.is_a?(Hash)
|
181
218
|
hash.inject({}) { |result, (key, value)|
|
182
219
|
new_key = case key
|
183
|
-
when String then
|
184
|
-
|
220
|
+
when String then
|
221
|
+
key.to_sym
|
222
|
+
else
|
223
|
+
key
|
185
224
|
end
|
186
225
|
new_value = case value
|
187
226
|
when Hash
|
@@ -190,7 +229,8 @@ module Hyla
|
|
190
229
|
else
|
191
230
|
transform_keys_to_symbols(value)
|
192
231
|
end
|
193
|
-
else
|
232
|
+
else
|
233
|
+
value
|
194
234
|
end
|
195
235
|
result[new_key] = new_value
|
196
236
|
result
|
data/lib/hyla/core_ext.rb
CHANGED
data/lib/hyla/project.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Hyla
|
2
|
-
VERSION = '1.0.
|
2
|
+
VERSION = '1.0.4'
|
3
3
|
DESCRIPTION = 'Asciidoctor Hyla - Command Line tool to create new project, watch modifications, generate content, publish or consult it live !'
|
4
4
|
SUMMARY = 'Asciidoctor Hyla - builder/generator of HTML5, slideshow. Watch modifications, generate content, publish or consult it live !'
|
5
5
|
end
|
@@ -19,11 +19,18 @@
|
|
19
19
|
%meta(name='keywords'){:content=>(attr :keywords)}
|
20
20
|
- if attr? :author
|
21
21
|
%meta(name='author'){:content=>(attr :author)}
|
22
|
-
|
22
|
+
:javascript
|
23
|
+
document.write( '<link rel="stylesheet" href="revealjs/css/print/' +
|
24
|
+
( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) +
|
25
|
+
'.css" type="text/css" media="print">' );
|
23
26
|
%body{:id=>@id, :class=>['reveal-container',(attr :doctype)]}
|
24
27
|
.reveal
|
28
|
+
.header
|
29
|
+
%img(src='image/rhheader_thin.png' alt='RedHat Corporate Logo')
|
25
30
|
.slides
|
26
31
|
=content
|
32
|
+
.footer
|
33
|
+
Copyright ©2014 Red Hat, Inc.
|
27
34
|
%script(src='lib/js/head.min.js')
|
28
35
|
%script(src='reveal.js/js/reveal.min.js')
|
29
36
|
:javascript
|
@@ -53,7 +60,7 @@
|
|
53
60
|
// Apply a 3D roll to links on hover
|
54
61
|
rollingLinks: true,
|
55
62
|
// Transition style
|
56
|
-
transition: '
|
63
|
+
transition: 'none', // default/cube/page/concave/zoom/linear/fade/none
|
57
64
|
// Transition speed
|
58
65
|
transitionSpeed: 'default', // default/fast/slow
|
59
66
|
// Transition style for full page backgrounds
|
@@ -67,6 +67,8 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
67
67
|
/ AsciiDoc leaves an empty header div even if there's no doctitle
|
68
68
|
#header
|
69
69
|
- if has_header?
|
70
|
+
- if attr? :header_image_path
|
71
|
+
img src=image_uri(attr :header_image_path)
|
70
72
|
- unless notitle
|
71
73
|
h1=@header.title
|
72
74
|
- if attr? :author
|
@@ -89,6 +91,9 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
89
91
|
- if attr? :revremark
|
90
92
|
br
|
91
93
|
span#revremark=attr :revremark
|
94
|
+
- else
|
95
|
+
- if attr? :header_image_path
|
96
|
+
img src=image_uri(attr :header_image_path)
|
92
97
|
- if (attr? :toc) && (attr? 'toc-placement', 'auto')
|
93
98
|
#toc class=(attr 'toc-class', 'toc')
|
94
99
|
#toctitle=attr 'toc-title'
|
@@ -101,12 +106,16 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
101
106
|
- footnotes.each do |fn|
|
102
107
|
.footnote id='_footnote_#{fn.index}'
|
103
108
|
<a href="#_footnoteref_#{fn.index}">#{fn.index}</a>. #{fn.text}
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
109
|
+
- if attr? :footer_copyright
|
110
|
+
.footer-copyright
|
111
|
+
=attr :footer_copyright
|
112
|
+
- unless attr? :nofooter
|
113
|
+
#footer
|
114
|
+
#footer-text
|
115
|
+
- if attr? :revnumber
|
116
|
+
| #{attr 'version-label'} #{attr :revnumber}
|
117
|
+
- if attr? 'last-update-label'
|
118
|
+
br
|
119
|
+
| #{attr 'last-update-label'} #{attr :docdatetime}
|
120
|
+
- unless (docinfo_content = (docinfo :footer)).empty?
|
121
|
+
=docinfo_content
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
aside id=@id class='notes'
|
2
|
+
- if title?
|
3
|
+
.title=title
|
4
|
+
=content
|
5
|
+
|