faqml 0.1.0 → 0.1.1
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/Gemfile +2 -0
- data/README.markdown +51 -0
- data/faqml.gemspec +16 -0
- data/lib/faqml.rb +63 -0
- metadata +6 -2
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# FML
|
2
|
+
|
3
|
+
The FAQ Markup Language. It's pretty simple. The gem is called `faqml`, so first install it.
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
require 'rubygems'
|
7
|
+
require 'faqml'
|
8
|
+
data = File.readlines('mypage.fml').join()
|
9
|
+
puts FML.new(data).to_html
|
10
|
+
```
|
11
|
+
|
12
|
+
Your markup in `mypage.fml` should be valid markdown. The only difference is, that QnA blocks are started by three dashes (`---`), and questions and answers are seperated by three equals (`===`). The first line of the question block will be the QnA's title. That's all.
|
13
|
+
|
14
|
+
This FML
|
15
|
+
|
16
|
+
```fml
|
17
|
+
---
|
18
|
+
What kind of Bear is Best?
|
19
|
+
I hear there are basically two school of thought.
|
20
|
+
===
|
21
|
+
False. *Blackbear*.
|
22
|
+
|
23
|
+
---
|
24
|
+
Do Bears eat Beats?
|
25
|
+
===
|
26
|
+
Of course.
|
27
|
+
```
|
28
|
+
|
29
|
+
Produces this HTML
|
30
|
+
|
31
|
+
```html
|
32
|
+
<section class="qna">
|
33
|
+
<h1><a href="#">What kind of Bear is Best?</a></h1>
|
34
|
+
<div class="qna">
|
35
|
+
<div class="question">
|
36
|
+
<p>I hear there are basically two school of thought.</p>
|
37
|
+
</div>
|
38
|
+
<div class="answer">
|
39
|
+
<p>False. <em>Blackbear</em>.</p>
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</section>
|
43
|
+
<section class="qna">
|
44
|
+
<h1><a href="#">Do Bears eat Beats?</a></h1>
|
45
|
+
<div class="qna">
|
46
|
+
<div class="answer">
|
47
|
+
<p>Of course.</p>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
</section>
|
51
|
+
```
|
data/faqml.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'faqml'
|
3
|
+
s.version = '0.1.1'
|
4
|
+
s.date = '2012-08-10'
|
5
|
+
s.summary = "FAQ Markup Language"
|
6
|
+
s.description = "A Simple FAQ Markup Language, based on Markdown"
|
7
|
+
s.authors = ["Eric Redmond"]
|
8
|
+
s.email = 'eric@basho.com'
|
9
|
+
s.files = ["lib/faqml.rb"]
|
10
|
+
s.homepage = 'http://rubygems.org/gems/faqml'
|
11
|
+
|
12
|
+
s.add_dependency('redcarpet', '>= 2.1.1')
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
end
|
data/lib/faqml.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# FAQ Markup Language
|
2
|
+
# require 'rubygems'
|
3
|
+
require 'redcarpet'
|
4
|
+
|
5
|
+
class FML
|
6
|
+
def initialize(data)
|
7
|
+
@data = data
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_html(attrs={})
|
11
|
+
linked_question = attrs[:linked_question] || true
|
12
|
+
|
13
|
+
faqs, current = [], :t
|
14
|
+
faqs << {:q => "", :a => "", :t => ""}
|
15
|
+
@data.split(/\n/m).each do |line|
|
16
|
+
# start an answer block
|
17
|
+
if line =~ /^===\s*$/
|
18
|
+
raise "Cannot begin an answer without a question title" if current != :q
|
19
|
+
current = :a
|
20
|
+
next
|
21
|
+
end
|
22
|
+
|
23
|
+
# start a new question block
|
24
|
+
if line =~ /^---/
|
25
|
+
line = line.sub(/^#/, '').strip
|
26
|
+
faqs << {:q => "", :a => "", :t => ""}
|
27
|
+
current = :t
|
28
|
+
next
|
29
|
+
end
|
30
|
+
|
31
|
+
faqs.last[current] += line
|
32
|
+
|
33
|
+
current = :q if current == :t && line.strip != ''
|
34
|
+
end
|
35
|
+
|
36
|
+
renderer = Redcarpet::Render::HTML.new
|
37
|
+
extensions = {fenced_code_blocks: true}
|
38
|
+
redcarpet = Redcarpet::Markdown.new(renderer, extensions)
|
39
|
+
|
40
|
+
buffer = ""
|
41
|
+
for faq in faqs
|
42
|
+
next if faq[:t] == ''
|
43
|
+
buffer += "<section class=\"qna\">\n"
|
44
|
+
if linked_question
|
45
|
+
buffer += "<h1><a href=\"#\">#{faq[:t].to_s.strip}</a></h1>\n"
|
46
|
+
else
|
47
|
+
buffer += "<h1>#{faq[:t].to_s.strip}</h1>\n"
|
48
|
+
end
|
49
|
+
buffer += "<div class=\"qna\">"
|
50
|
+
if faq[:q].to_s != ''
|
51
|
+
buffer += "<div class=\"question\">"
|
52
|
+
buffer += redcarpet.render(faq[:q])
|
53
|
+
buffer += "</div>"
|
54
|
+
end
|
55
|
+
buffer += "<div class=\"answer\">"
|
56
|
+
buffer += redcarpet.render(faq[:a].to_s)
|
57
|
+
buffer += "</div>"
|
58
|
+
buffer += "</div>"
|
59
|
+
buffer += "</section>\n"
|
60
|
+
end
|
61
|
+
return buffer
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faqml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -32,7 +32,11 @@ email: eric@basho.com
|
|
32
32
|
executables: []
|
33
33
|
extensions: []
|
34
34
|
extra_rdoc_files: []
|
35
|
-
files:
|
35
|
+
files:
|
36
|
+
- Gemfile
|
37
|
+
- README.markdown
|
38
|
+
- faqml.gemspec
|
39
|
+
- lib/faqml.rb
|
36
40
|
homepage: http://rubygems.org/gems/faqml
|
37
41
|
licenses: []
|
38
42
|
post_install_message:
|