vebdew 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # vebdew
2
+
3
+ A simple HTML5 slide generate.
4
+ Using reveal.js as default.
5
+
6
+ ## Usage
7
+
8
+ Usage: vebdew COMMAND
9
+
10
+ Directory:
11
+ - /vew \# Vew file
12
+ - template.erb
13
+ - /css \# CSS styles
14
+ - /js \# Javascript files
15
+ - *.html \# Compiled html slides
16
+
17
+ Commands:
18
+ new \# Create a new slide project
19
+ generate \# Generate slides for current directory (shortcut: g)
20
+ compile \# Compiles single file into HTML5 slides (shortcut: c)
21
+ \# [VEW FILE] [ERB TEMPLATE] [HTML SLIDE]
22
+
23
+ ## Vew file syntax
24
+
25
+ ### Head elements
26
+
27
+ :title <Page title>
28
+ :description <Description>
29
+ :author <Author Name>
30
+ :email <Author email>
31
+ :stylesheet_link_tag <File Path>
32
+ :javascript_include_tag <File Path>
33
+
34
+ - Head elements should be put on the top of the document.
35
+ - When any of the body elements are reached, head element is closed. That is, </head> is emitted and the Reveal.js body structure is established.
36
+
37
+ ### !SLIDE, !ENDSLIDE
38
+
39
+ Marks the starting and ending of a slide (`<section>`) block.
40
+ Current slide is closed and a new slide is created when a "!SLIDE" token is encountered. Thus the ending is not mandatory.
41
+
42
+ ### !STACK, !ENDSTACK
43
+ Marks the starting and ending of a stack (vertical slide stack). Rules are the same as !SLIDE and !ENDSLIDE.
44
+
45
+ ### Code spans & code blocks
46
+ Code spans are wrapped by ``. This emits a `<code>` block. Brackets (<, >) are escaped to &lt; and &gt; automatically. To output a '`' charactor, escape it like '\`'.
47
+
48
+ Two types of code blocks are supported here. The code blocks wrapped in three or more '`'s. This kind of code blocks emits <pre><code>...</code></pre>. The second kind is wrapped in three or more '~'s. This kind of code blocks emits <script type="text/x-sample">...</script>, which makes uses of sample.js.
49
+
50
+
51
+ ### HTML elements
52
+ HTML tags are allowed in the syntax and is outputted as-is. Since we do not have any token that emits custom <div>, one can write <div class="whatever" id="they-want"></div> in vebdew directly.
53
+
54
+ ### Headers
55
+ The following syntaxes are allowed:
56
+
57
+ # H1 Header
58
+ ## H2 Header
59
+ ...
60
+ ###### H6 Header
61
+
62
+ H1 Header
63
+ =========
64
+
65
+ H2 Header
66
+ ---------
67
+
68
+ ### Horizontal Rules
69
+ Three or more '-' in a row with a leading and trailing blank line emits a <hr> tag.
70
+
71
+ ### Paragraphs
72
+ Lines with leading and trailing blank lines, if not matched by any of the rules above, are treated as a paragraph. (p element).
73
+
74
+ ### Attributes
75
+ CSS-Selector like decorators can be appended to any of the elements above. The syntax is like:
76
+ {:#ID.class[attr=value]}
77
+ Such examples are:
78
+
79
+ {:.inverted}
80
+ Introducing HTML
81
+ ================
82
+
83
+ generating
84
+
85
+ <h1 class="inverted">Introducing HTML</h1>
86
+
87
+ Another example is:
88
+
89
+ `<input>` tag has an attribute called `type`{:.attr[title="checkbox|radio|submit"]}
90
+
91
+ emits
92
+
93
+ <code>&lt;input&gt;</code> tag has an attribute called <code class="attr" title="checkbox|radio|submit">type</code>
94
+
95
+
96
+ ## Copyright
97
+
98
+ Release under MIT license.
99
+
100
+ Copyright (c) 2012 Andrew Liu. See LICENSE.txt for
101
+ further details.
102
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/bin/vebdew CHANGED
@@ -2,8 +2,30 @@
2
2
 
3
3
  require 'vebdew'
4
4
 
5
- unless ARGV.size == 3
6
- puts "[USAGE] vebdew [VEW FILE] [ERB FILE] [HTML FILE]"
5
+ usage =
6
+ "Usage: vebdew COMMAND
7
+
8
+ Directory:
9
+ - /vew \# Vew file
10
+ - template.erb
11
+ - /css \# CSS styles
12
+ - /js \# Javascript files
13
+ - *.html \# Compiled html slides
14
+
15
+ Commands:
16
+ new \# Create a new slide project
17
+ generate \# Generate slides for current directory (shortcut: g)
18
+ compile \# Compiles single file into HTML5 slides (shortcut: c)
19
+ \# [VEW FILE] [ERB TEMPLATE] [HTML SLIDE]
20
+ "
21
+
22
+ case ARGV[0]
23
+ when /new/
24
+ Vebdew::Runner.create
25
+ when /generate|g/
26
+ Vebdew::Runner.generate
27
+ when /compile|c/
28
+ Vebdew::Runner.compile ARGV[1], ARGV[2], ARGV[3]
7
29
  else
8
- Vebdew::Runner.generate ARGV[0], ARGV[1], ARGV[2]
30
+ puts usage
9
31
  end
@@ -0,0 +1,84 @@
1
+ :title 學 CSS
2
+
3
+ :description 不囉唆學 CSS。以 reveal.js 製作的 HTML / CSS / JS 投影片。
4
+ :author MrOrz
5
+ :email johnsonliang7@gmail.com
6
+
7
+ :stylesheet_link_tag css/main.css, css/style.css, css/sample.css, css/jquery-ui.css
8
+ :stylesheet_link_tag css/ruler.css, css/zenburn.css
9
+
10
+ :javascript_include_tag js/jquery.min.js
11
+ :javascript_include_tag https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js
12
+ :javascript_include_tag js/reveal.js, lib/highlight.js, js/ruler.js, js/sample.js
13
+ :javascript_include_tag js/index.js
14
+
15
+ !SLIDE
16
+
17
+ CSS
18
+ ===
19
+ {:.nav}
20
+ * [html.html](HTML)
21
+ * Javascript
22
+
23
+ !STACK
24
+
25
+ !SLIDE
26
+ 長這樣
27
+ -----
28
+ {:.nopreview}
29
+ ~~~
30
+ html, body {
31
+ position: relative;
32
+ padding: 0; margin: 0;
33
+ overflow: hidden;
34
+ font-family: '文泉驛微米黑', 'LiHei Pro', '微軟正黑體';
35
+ font-weight: 200;
36
+ letter-spacing: -0.02em;
37
+ color: #eee; width: 100%; height: 100%;
38
+ min-height: 400px;
39
+ }
40
+
41
+ table {
42
+ border-collapse: collapse;
43
+ border-spacing: 0;
44
+ }
45
+ ~~~
46
+
47
+ !SLIDE
48
+ CSS Syntax
49
+ ---
50
+
51
+ ![images/css/selector.gif](Selection and declaration)
52
+
53
+ [http://w3schools.com/css/css_syntax.asp](Source: W3Schools)
54
+
55
+
56
+ !SLIDE
57
+ 怎麼加進 HTML
58
+ ------------
59
+
60
+ 在 `<head>` 中加入
61
+
62
+ {:.nopreview}
63
+ ~~~~~~~
64
+ <link rel="stylesheet" type="text/css" href="path/to/style.css">
65
+ ~~~~~~~
66
+
67
+ 或直接把 CSS 寫在 `<style>` 裡;
68
+
69
+ ~~~~~~~
70
+ <style type="text/css">
71
+ div {
72
+ color: blue;
73
+ }
74
+ </style>
75
+ <div>I am div!</div>
76
+ ~~~~~~~
77
+
78
+ `<style>` 可放在 `<head>` 或 `<body>` 均可。
79
+
80
+ !ENDSTACK
81
+
82
+ !SLIDE.chapter#attribute
83
+ CSS Selectors
84
+ ---
@@ -0,0 +1,30 @@
1
+ <!doctype html>
2
+ <html lang="zh_TW">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <%= @header %>
7
+ </head>
8
+
9
+ <body>
10
+ <div id="reveal">
11
+ <div class="slides">
12
+ <%= @body %>
13
+ </div>
14
+
15
+ <!-- The navigational controls UI -->
16
+ <aside class="controls">
17
+ <a class="left" href="#">&#x25C4;</a>
18
+ <a class="right" href="#">&#x25BA;</a>
19
+ <a class="up" href="#">&#x25B2;</a>
20
+ <a class="down" href="#">&#x25BC;</a>
21
+ </aside>
22
+
23
+ <!-- Displays presentation progress, max value changes via JS to reflect # of slides -->
24
+ <div class="progress"><span></span></div>
25
+
26
+ </div>
27
+ <%= @footer %>
28
+ </body>
29
+
30
+ </html>
data/lib/vebdew/parser.rb CHANGED
@@ -8,6 +8,7 @@ module Vebdew
8
8
  @body = []
9
9
  @footer = []
10
10
  @buffer = []
11
+ @attrs = ""
11
12
  @flag = Hash.new { |h, k| h[k] = false }
12
13
 
13
14
  parse
@@ -40,6 +41,8 @@ module Vebdew
40
41
  close_buffer
41
42
  close_flag :slide
42
43
  close_flag :stack
44
+ when /\{:([^\}]+)\}/
45
+ selector $1
43
46
  when /^~+/
44
47
  if @flag[:code]
45
48
  @body << @buffer.join
@@ -49,23 +52,26 @@ module Vebdew
49
52
  close_buffer
50
53
  start_flag :code
51
54
  end
55
+ when /^(#+) (.*)/
56
+ level = $1.size
57
+ @body << "<h#{level}#{append}>#{$2}</h#{level}>"
52
58
  when /^-+/
53
59
  tagged = @buffer.pop
54
60
  close_buffer
55
61
  if tagged and !tagged.empty?
56
- @body << "<h2>#{tagged.strip}</h2>"
62
+ @body << "<h2#{append}>#{tagged.strip}</h2>"
57
63
  else
58
- @body << "<hr>"
64
+ @body << "<hr#{append}>"
59
65
  end
60
66
  when /^=+/
61
67
  tagged = @buffer.pop
62
68
  close_buffer
63
69
  if tagged and !tagged.empty?
64
- @body << "<h1>#{tagged.strip}</h1>"
70
+ @body << "<h1#{append}>#{tagged.strip}</h1>"
65
71
  end
66
72
  when /^\* (.+)/
67
73
  start_flag :ul unless @flag[:ul]
68
- @body << "<li>#{format_content($1)}</li>"
74
+ @body << "<li#{append}>#{format_content($1)}</li>"
69
75
  else
70
76
  @buffer << raw_line
71
77
  end
@@ -111,7 +117,9 @@ module Vebdew
111
117
  :ul => "<ul>" }
112
118
 
113
119
  def start_flag flag
114
- @body << START_STR[flag]
120
+ str = START_STR[flag]
121
+ str[-1] = "#{append}>" unless @attrs.empty?
122
+ @body << str
115
123
  @flag[flag] = true
116
124
  end
117
125
 
@@ -125,9 +133,28 @@ module Vebdew
125
133
  @flag[flag] = false
126
134
  end
127
135
 
136
+ def selector str
137
+ klass = str.scan(/\.([^\.\[#]+)/).flatten
138
+ id = str.scan(/#([^\.\[#])+/).flatten
139
+ attrs = str.scan(/\[([^\.\]=#]+)=([^\.\]]+)\]/)
140
+
141
+ @attrs = ""
142
+ @attrs += " class='#{klass.join(' ')}'" unless klass.empty?
143
+ @attrs += " id='#{id.join(' ')}'" unless id.empty?
144
+ attrs.each do |a|
145
+ @attrs += " #{a[0]}='#{a[1]}'"
146
+ end
147
+ end
148
+
149
+ def append
150
+ str = @attrs
151
+ @attrs = ""
152
+ str
153
+ end
154
+
128
155
  def format_buffer
129
156
  @buffer.map! do |buf|
130
- "<p>#{format_content(buf)}</p>"
157
+ "<p#{append}>#{format_content(buf)}</p>"
131
158
  end
132
159
  end
133
160
 
data/lib/vebdew/runner.rb CHANGED
@@ -1,11 +1,44 @@
1
+ require 'fileutils'
2
+
1
3
  module Vebdew
2
4
  module Runner
3
5
  module_function
4
6
 
5
- def generate vew, erb, html
6
- parser = Parser.new(IO.readlines(vew))
7
- result = Formatter.new(parser, File.read(erb)).to_html
8
- File.open(html, "w") { |f| f.write result }
7
+ def create
8
+ dir = File.join File.dirname(__FILE__), "../template/*"
9
+ Dir[File.expand_path dir].each do |file|
10
+ FileUtils.cp_r file, Dir.pwd
11
+ end
12
+ puts "Vebdew project generated!"
13
+ end
14
+
15
+ def generate
16
+ vew = File.join Dir.pwd, "vew"
17
+ temp = File.join vew, "template.erb"
18
+
19
+ if !File.exist?(vew) or !File.directory?(vew)
20
+ puts "Is this a Vebdew project? 'vew' directory does not exist!"
21
+ elsif !File.exist?(temp)
22
+ puts "The template file 'vew/template.erb' does not exist!"
23
+ else
24
+ Dir[File.join vew, "*.vew"].each do |file|
25
+ html = File.basename(file, ".vew") + ".html"
26
+ compile file, temp, File.join(Dir.pwd, html)
27
+ puts "#{html} compiled!"
28
+ end
29
+ end
30
+ end
31
+
32
+ def compile vew, erb, html
33
+ if !File.exist?(vew)
34
+ puts "Vew file doesn't exist!"
35
+ elsif !File.exist?(erb)
36
+ puts "Erb template doesn't exist!"
37
+ else
38
+ parser = Parser.new(IO.readlines(vew))
39
+ result = Formatter.new(parser, File.read(erb)).to_html
40
+ File.open(html, "w") { |f| f.write result }
41
+ end
9
42
  end
10
43
  end
11
44
  end
data/vebdew.gemspec ADDED
@@ -0,0 +1,69 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "vebdew"
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Andrew Liu"]
12
+ s.date = "2012-03-10"
13
+ s.description = "Generate HTML5 slides"
14
+ s.email = "andrewliu33@gmail.com"
15
+ s.executables = ["vebdew"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/vebdew",
29
+ "lib/template/vew/sample.vew",
30
+ "lib/template/vew/template.erb",
31
+ "lib/vebdew.rb",
32
+ "lib/vebdew/formatter.rb",
33
+ "lib/vebdew/parser.rb",
34
+ "lib/vebdew/runner.rb",
35
+ "test/helper.rb",
36
+ "test/test_vebdew.rb",
37
+ "vebdew.gemspec"
38
+ ]
39
+ s.homepage = "http://github.com/eggegg/vebdew"
40
+ s.licenses = ["MIT"]
41
+ s.require_paths = ["lib"]
42
+ s.rubygems_version = "1.8.10"
43
+ s.summary = "HTML5 slides generator"
44
+
45
+ if s.respond_to? :specification_version then
46
+ s.specification_version = 3
47
+
48
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
+ s.add_runtime_dependency(%q<erubis>, [">= 0"])
50
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
51
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
52
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
54
+ else
55
+ s.add_dependency(%q<erubis>, [">= 0"])
56
+ s.add_dependency(%q<shoulda>, [">= 0"])
57
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
59
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
60
+ end
61
+ else
62
+ s.add_dependency(%q<erubis>, [">= 0"])
63
+ s.add_dependency(%q<shoulda>, [">= 0"])
64
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
65
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
67
+ end
68
+ end
69
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vebdew
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-08 00:00:00.000000000Z
12
+ date: 2012-03-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: erubis
16
- requirement: &2154928420 !ruby/object:Gem::Requirement
16
+ requirement: &2154377100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2154928420
24
+ version_requirements: *2154377100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &2154927900 !ruby/object:Gem::Requirement
27
+ requirement: &2154376360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2154927900
35
+ version_requirements: *2154376360
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &2154927320 !ruby/object:Gem::Requirement
38
+ requirement: &2154375620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.12'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2154927320
46
+ version_requirements: *2154375620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &2154926720 !ruby/object:Gem::Requirement
49
+ requirement: &2154374500 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2154926720
57
+ version_requirements: *2154374500
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &2154926140 !ruby/object:Gem::Requirement
60
+ requirement: &2154371000 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 1.8.3
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2154926140
68
+ version_requirements: *2154371000
69
69
  description: Generate HTML5 slides
70
70
  email: andrewliu33@gmail.com
71
71
  executables:
@@ -73,22 +73,25 @@ executables:
73
73
  extensions: []
74
74
  extra_rdoc_files:
75
75
  - LICENSE.txt
76
- - README.rdoc
76
+ - README.md
77
77
  files:
78
78
  - .document
79
79
  - Gemfile
80
80
  - Gemfile.lock
81
81
  - LICENSE.txt
82
- - README.rdoc
82
+ - README.md
83
83
  - Rakefile
84
84
  - VERSION
85
85
  - bin/vebdew
86
+ - lib/template/vew/sample.vew
87
+ - lib/template/vew/template.erb
86
88
  - lib/vebdew.rb
87
89
  - lib/vebdew/formatter.rb
88
90
  - lib/vebdew/parser.rb
89
91
  - lib/vebdew/runner.rb
90
92
  - test/helper.rb
91
93
  - test/test_vebdew.rb
94
+ - vebdew.gemspec
92
95
  homepage: http://github.com/eggegg/vebdew
93
96
  licenses:
94
97
  - MIT
@@ -104,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
107
  version: '0'
105
108
  segments:
106
109
  - 0
107
- hash: -757110420489084152
110
+ hash: 3658937832927531774
108
111
  required_rubygems_version: !ruby/object:Gem::Requirement
109
112
  none: false
110
113
  requirements:
data/README.rdoc DELETED
@@ -1,19 +0,0 @@
1
- = vebdew
2
-
3
- Description goes here.
4
-
5
- == Contributing to vebdew
6
-
7
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
- * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
- * Fork the project.
10
- * Start a feature/bugfix branch.
11
- * Commit and push until you are happy with your contribution.
12
- * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
- * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
-
15
- == Copyright
16
-
17
- Copyright (c) 2012 Andrew Liu. See LICENSE.txt for
18
- further details.
19
-