123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- 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>"
|