146 lines
3.1 KiB
Ruby
146 lines
3.1 KiB
Ruby
|
require 'yaml'
|
||
|
require 'redcloth'
|
||
|
|
||
|
def process_faq_list( faqs )
|
||
|
puts "<ul>"
|
||
|
faqs.each do |faq|
|
||
|
process_faq_list_item faq
|
||
|
end
|
||
|
puts "</ul>"
|
||
|
end
|
||
|
|
||
|
def process_faq_list_item( faq )
|
||
|
question = faq.keys.first
|
||
|
answer = faq.values.first
|
||
|
|
||
|
print "<li>"
|
||
|
|
||
|
question_text = RedCloth.new(question).to_html.gsub( %r{</?p>},"" )
|
||
|
if answer.is_a?( Array )
|
||
|
puts question_text
|
||
|
process_faq_list answer
|
||
|
else
|
||
|
print "<a href='##{question.object_id}'>#{question_text}</a>"
|
||
|
end
|
||
|
|
||
|
puts "</li>"
|
||
|
end
|
||
|
|
||
|
def process_faq_descriptions( faqs, path=nil )
|
||
|
faqs.each do |faq|
|
||
|
process_faq_description faq, path
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def process_faq_description( faq, path )
|
||
|
question = faq.keys.first
|
||
|
path = ( path ? path + " " : "" ) + question
|
||
|
answer = faq.values.first
|
||
|
|
||
|
if answer.is_a?( Array )
|
||
|
process_faq_descriptions( answer, path )
|
||
|
else
|
||
|
title = RedCloth.new( path ).to_html.gsub( %r{</?p>}, "" )
|
||
|
answer = RedCloth.new( answer || "" )
|
||
|
|
||
|
puts "<a name='#{question.object_id}'></a>"
|
||
|
puts "<div class='faq-title'>#{title}</div>"
|
||
|
puts "<div class='faq-answer'>#{add_api_links(answer.to_html)}</div>"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
API_OBJECTS = [ "Database", "Statement", "ResultSet",
|
||
|
"ParsedStatement", "Pragmas", "Translator" ].inject( "(" ) { |acc,name|
|
||
|
acc << "|" if acc.length > 1
|
||
|
acc << name
|
||
|
acc
|
||
|
} + ")"
|
||
|
|
||
|
def add_api_links( text )
|
||
|
text.gsub( /#{API_OBJECTS}(#(\w+))?/ ) do
|
||
|
disp_obj = obj = $1
|
||
|
|
||
|
case obj
|
||
|
when "Pragmas"; disp_obj = "Database"
|
||
|
end
|
||
|
|
||
|
method = $3
|
||
|
s = "<a href='http://sqlite-ruby.rubyforge.org/classes/SQLite/#{obj}.html'>#{disp_obj}"
|
||
|
s << "##{method}" if method
|
||
|
s << "</a>"
|
||
|
s
|
||
|
end
|
||
|
end
|
||
|
|
||
|
faqs = YAML.load( File.read( "faq.yml" ) )
|
||
|
|
||
|
puts <<-EOF
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>SQLite3/Ruby FAQ</title>
|
||
|
<style type="text/css">
|
||
|
a, a:visited, a:active {
|
||
|
color: #00F;
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
|
||
|
a:hover {
|
||
|
text-decoration: underline;
|
||
|
}
|
||
|
|
||
|
.faq-list {
|
||
|
color: #000;
|
||
|
font-family: vera-sans, verdana, arial, sans-serif;
|
||
|
}
|
||
|
|
||
|
.faq-title {
|
||
|
background: #007;
|
||
|
color: #FFF;
|
||
|
font-family: vera-sans, verdana, arial, sans-serif;
|
||
|
padding-left: 1em;
|
||
|
padding-top: 0.5em;
|
||
|
padding-bottom: 0.5em;
|
||
|
font-weight: bold;
|
||
|
font-size: large;
|
||
|
border: 1px solid #000;
|
||
|
}
|
||
|
|
||
|
.faq-answer {
|
||
|
margin-left: 1em;
|
||
|
color: #000;
|
||
|
font-family: vera-sans, verdana, arial, sans-serif;
|
||
|
}
|
||
|
|
||
|
.faq-answer pre {
|
||
|
margin-left: 1em;
|
||
|
color: #000;
|
||
|
background: #FFE;
|
||
|
font-size: normal;
|
||
|
border: 1px dotted #CCC;
|
||
|
padding: 1em;
|
||
|
}
|
||
|
|
||
|
h1 {
|
||
|
background: #005;
|
||
|
color: #FFF;
|
||
|
font-family: vera-sans, verdana, arial, sans-serif;
|
||
|
padding-left: 1em;
|
||
|
padding-top: 1em;
|
||
|
padding-bottom: 1em;
|
||
|
font-weight: bold;
|
||
|
font-size: x-large;
|
||
|
border: 1px solid #00F;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<h1>SQLite/Ruby FAQ</h1>
|
||
|
<div class="faq-list">
|
||
|
EOF
|
||
|
|
||
|
process_faq_list( faqs )
|
||
|
puts "</div>"
|
||
|
process_faq_descriptions( faqs )
|
||
|
|
||
|
puts "</body></html>"
|