[Hiki-users 169] Re: [Q] 設定ファイル、WikiName、見出しのアンカー名など

Back to archive index

Makoto Kuwata kwa****@kuwat*****
2007年 9月 2日 (日) 09:58:35 JST


桑田です。
HikiをUTF8化する方法について反応がないので、たぶんHikiはUTF8化には
未対応なのだろうと思いますが、とりあえず力ずくで各種ファイルを
UTF8に変更することで、UTF8化できました。

それとは別に、HikiDoc#parse_description() を拡張し、
  :text:description
ではなく
  :text: description
とするようにフォーマットを変更するプラグインを作りました。
これを使うと、例えば
  :File::PATH_SEPARATOR: path separator (default ':')
が
  <dt>File</dt><dd>:PATH_SEPARATOR: path separator (default ':')</dd>
ではなく
  <dt>File::PATH_SEPARATOR</dt><dd>path separator (default ':')</dd>
とparseされます。

ただし、
  :text:description
のように半角空白をおいていない場合はparseされません。

また
  ::description
は
  <dd>description</dd>
となります(従来の挙動と同じであり、半角空白はいりません)。

これでSafari2でも '\' が問題なく使えるようになり、また
   :File\:\:PATH_SEPARATOR:
のように書く必要もなくなりました。
参考までに。

hiki_description.rb
--------------------
## parse ':text: desc'
##
## This plugin changes HikiDoc#parse_definition() to require spaces after ':'.
##
## For example,
##   :File::SEPARATOR: path separator char
## is parsed as
##   <dt>File</dt><dd>:SEPARATOR: path separator char</dd>
## by the original parse_definition().
## But it will be parsed as
##   <dt>File::SEPARATOR</dt><dd>path separator char</dd>
## if this plugin is installed and enabled.
##
## Space after ':' is not required when text is empty.
## For example,
##   ::foobar
## is parsed as
##   <dd>foobar</dd>

require 'style/default/hikidoc'
class ::HikiDoc

  #DEFINITION_RE = /^:(.*?)?:(.*)\n?/      # original
  #DEFINITION_RE = /^:(.*?)?:(?:[ \t]+(.*))?$/
  DEFINITION_RE = /^:(?::[ \t]*(.*)|(.+?):(?:[ \t]+(.*))?)$/
  #DEFINITIONS_RE = /(#{DEFINITION_RE})+/  # original

  def parse_definition( text )
    parsed_text = text.gsub( DEFINITION_RE ) do |str|
      inline_parser( str )
    end
    parsed_text.gsub( DEFINITIONS_RE ) do |str|
      ret = "\n<dl>\n"
      str.chomp!
      str.scan( DEFINITION_RE ) do |d2, t, d|
        d = d2 if d2
        ret << "<dt>#{t}</dt>" if t && !t.empty?
        ret << "<dd>#{d}</dd>" if d && !d.empty?
        ret << "\n"
        #if t.empty?
        #  ret << "<dd>%s</dd>\n" % d
        #elsif d.empty?
        #  ret << "<dt>%s</dt>\n" % t
        #else
        #  ret << "<dt>%s</dt><dd>%s</dd>\n" % [ t, d ]
        #end
      end
      ret << "</dl>\n\n"
      ret
    end
  end

end
--------------------

--
makoto kuwata




Hiki-users メーリングリストの案内
Back to archive index