Changeset 11579
- Timestamp:
- 05/14/08 15:09:21 (5 years ago)
- Location:
- websites/starruby/trunk
- Files:
-
- 2 modified
-
doc/index (modified) (1 diff)
-
lib/document.rb (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
websites/starruby/trunk/doc/index
r11498 r11579 4 4 @type h 5 5 @lang ja 6 Ruby で簡単ゲーム開発 6 Ruby でお手軽ゲーム開発! 7 8 @type h 9 @lang en 10 Agile game development with Ruby! 11 -
websites/starruby/trunk/lib/document.rb
r11498 r11579 1 1 module ParagraphModule 2 2 3 attr_reader :lang 4 attr_reader :children 5 private :children 6 7 include Enumerable 8 9 def initialize(children) 10 @children = children.dup 11 @children.freeze 12 end 13 14 def [](index) 15 children[index] 16 end 17 18 def size 19 children.size 20 end 21 22 def each 23 children.each{|i| yield(i)} 24 end 25 26 def children_with_lang(lang = nil) 27 children.select{|c| c.lang.nil? or c.lang == lang} 28 end 29 30 end 31 32 class Paragraph 33 34 def self.level(str) 35 level = 0 36 while str =~ /\A\x20\x20/ 37 level += 1 38 str = str[2..-1] 39 end 40 level 41 end 42 43 include ParagraphModule 44 45 attr_reader :level 3 46 attr_reader :type 4 47 attr_reader :arg 5 48 attr_reader :text 6 attr_reader :lang 7 attr_reader :level 8 9 include Enumerable 10 11 def initialize(str) 49 50 def initialize(str, children = []) 51 super(children) 52 @text = "" 53 @level = Paragraph.level(str) 12 54 @type = :p 13 @text = ""14 @level = 015 while str =~ /\A\x20\x20/16 @level += 117 str = str[2..-1]18 end19 55 str.strip.each do |line| 20 56 case line.lstrip … … 33 69 end 34 70 end 35 end36 37 def [](index)38 children[index]39 end40 41 def <<(paragraph)42 children << paragraph43 end44 45 def size46 children.size47 end48 49 def each50 children.each{|i| yield(i)}51 71 end 52 72 … … 125 145 private 126 146 127 def children128 @children ||= []129 end130 131 def children_with_lang(lang = nil)132 children.select{|c| c.lang.nil? or c.lang == lang}133 end134 135 147 def content(text) 136 148 content = h(text) … … 180 192 end 181 193 182 class Paragraph194 class RootParagraph 183 195 184 196 include ParagraphModule 185 197 186 end 187 188 class RootParagraph 189 190 include ParagraphModule 191 192 def initialize 198 def initialize(children) 199 super(children) 193 200 end 194 201 … … 198 205 199 206 def to_html(lang = nil) 200 html = children_with_lang(lang).map {|p| p.to_html(lang)}.join("\n") 201 html.gsub!("</dl>\n<dl>\n", "") 202 html 207 (@htmls ||= {})[lang] ||= 208 (html = children_with_lang(lang).map {|p| p.to_html(lang)}.join("\n") 209 html.gsub!("</dl>\n<dl>\n", "") 210 html) 203 211 end 204 212 … … 210 218 211 219 def initialize(text) 212 @root = RootParagraph.new 213 paragraphs = text.split(/\n\s*\n/).map {|p| Paragraph.new(p)}.unshift(@root) 214 paragraphs.inject([]) do |done, para| 215 if para != @root 216 parent = done.find do |p| 217 raise "invalid indent level" if p.level + 2 <= para.level 218 p.level + 1 == para.level 220 stack = [] 221 text.split(/\n\s*\n/).reverse_each do |p| 222 level = Paragraph.level(p) 223 if stack.empty? 224 stack.push(Paragraph.new(p)) 225 else 226 if stack.last.level == level + 1 227 children = [] 228 while not stack.empty? and stack.last.level == level + 1 229 children << stack.pop 230 end 231 stack.push(Paragraph.new(p, children)) 232 elsif stack.last.level <= level 233 stack.push(Paragraph.new(p)) 234 else 235 raise "invalid indent level" unless parent 219 236 end 220 raise "invalid indent level" unless parent221 parent << para222 237 end 223 done.unshift(para) 224 end 238 end 239 raise "invalid indent level" unless stack.all?{|p| p.level == 0} 240 @root = RootParagraph.new(stack.reverse) 225 241 end 226 242 227 243 def to_html(lang = nil) 228 root.to_html(lang)244 (@htmls ||= {})[lang] ||= root.to_html(lang) 229 245 end 230 246 231 247 def title(lang = nil) 232 para = root.find do |para| 233 para.type == :title and (para.lang.nil? or para.lang == lang) 234 end 235 if para 236 para.text 237 else 238 nil 239 end 248 (@titles ||= {})[lang] ||= 249 (para = root.find do |para| 250 para.type == :title and (para.lang.nil? or para.lang == lang) 251 end 252 if para 253 para.text 254 else 255 nil 256 end) 240 257 end 241 258
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)