[Hiki-dev] Table support

アーカイブの一覧に戻る

Kazuhiko kazuh****@fdiar*****
2003年 4月 4日 (金) 00:15:18 JST


かずひこです。

At Thu, 03 Apr 2003 23:37:24 +0900,
Kazuhiko wrote:

> tdiary の wiki style を使っていないので互換性のほどはよくわかりませんが、
> とりあえずできました。パッチを添付しておきます。

マルチパートで添付すると sf.jp のアーカイブが文字化けするようですね。プ
レーンテキストでパッチを挿入することにします。ついでに
||1||||3
みたいなのの解析結果が wiki style と異なりそうなのを修正しました。さっき
のパッチは忘れてください。:p

diff -ur hiki/html_formatter.rb hiki/html_formatter.rb
--- hiki/html_formatter.rb	2003-02-23 11:20:08.000000000 +0900
+++ hiki/html_formatter.rb	2003-04-03 09:24:49.000000000 +0900
@@ -24,7 +24,7 @@
     MAP[:ordered_list_open]    = '<ol>'
     MAP[:ordered_list_close]   = '</ol>'
     MAP[:listitem_open]        = '<li>'
-    MAP[:listitem_close]       = ''
+    MAP[:listitem_close]       = '</li>'
     MAP[:blockquote_open]      = '<blockquote>'
     MAP[:blockquote_close]     = '</blockquote>'
     MAP[:definition_list_open] = '<dl>'
@@ -43,7 +43,13 @@
     MAP[:strong_close]         = '</strong>'
     MAP[:delete_open]          = '<del>'
     MAP[:delete_close]         = '</del>'
-    
+    MAP[:table_open]           = '<table border="1">'
+    MAP[:table_close]          = '</table>'
+    MAP[:table_row_open]       = '<tr>'
+    MAP[:table_row_close]      = '</tr>'
+    MAP[:table_data_open]      = '<td>'
+    MAP[:table_data_close]     = '</td>'
+
     def initialize( s, db, plugin, suffix = 'l')
       @tokens     = s
       @db         = db
diff -ur hiki/parser.rb hiki/parser.rb
--- hiki/parser.rb	2003-03-24 17:10:48.000000000 +0900
+++ hiki/parser.rb	2003-04-04 00:11:23.000000000 +0900
@@ -34,6 +34,7 @@
     IMAGE      = '\.(?:jpg|jpeg|png|gif)'
     PLUGIN     = '\{\{(.+?)(?:\((.*?)\))?\s*\}\}'
     SPECIAL    = '^\[\]\'=\{\}'
+    TABLE      = '\|\|(.*)'
 
     EMPHASIS_RE    = /^#{EMPHASIS}/
     STRONG_RE      = /^#{STRONG}(?!:')/
@@ -46,6 +47,7 @@
     INTERWIKI_RE   = /^#{INTERWIKI}/
     IMAGE_RE       = /#{IMAGE}$/i
     PLUGIN_RE      = /^#{PLUGIN}/
+    TABLE_RE       = /^#{TABLE}/
 
     def parse( s )
       @stack = HikiStack::new
@@ -84,6 +86,9 @@
           @cur_stack.push( {:e => :empty} )
         when /^\s(.*)/
           @cur_stack.push( {:e => :pre, :s => $1} )
+        when /^#{TABLE}/
+          @cur_stack.push( {:e => :table} )
+	  inline( line )
         when /^#{PLUGIN}\s*$/
           if $use_plugin
             @cur_stack.push( {:e => :plugin, :method => $1, :param => $2} )
@@ -169,6 +174,15 @@
         when WIKINAME_RE
           str = ($2 || '') + $'
           @cur_stack.push ( {:e => :wikiname, :s => $1} )
+        when TABLE_RE
+	  @cur_stack.push( {:e => :table_row_open} )
+	  $1.split( /\|\|/ ).each do |s|
+	    @cur_stack.push( {:e => :table_data_open} )
+	    inline (s)
+	    @cur_stack.push( {:e => :table_data_close} )
+	  end
+	  @cur_stack.push( {:e => :table_row_close} )
+	  str = ''
         when NORMAL_TEXT_RE
           m = $&
           after = $'
@@ -264,6 +278,12 @@
           end
           e[:e] = :normal_text
           ns.push( e )
+        when :table
+          if type != @last_blocktype.last
+            close_blocks( ns, block_level )
+            ns.push( {:e => "#{type}_open".intern} )
+            @last_blocktype.push type
+          end
         when :emphasis_close, :strong_close, :delete_close
           ns.push ( e )
         else

-- 
かずひこ <http://www.fdiary.net/~kazuhiko/diary/>
  ★シャア「名字が付いてない」
  ☆一兵卒「あんなの飾りです。偉い人にはそれが分からんのです」



Hiki-dev メーリングリストの案内
アーカイブの一覧に戻る