【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

塚本牧生 - WalWikiの作者。

目次

WalWikiの作者。

Yuki Wiki 1.6.7への改造

「ページの目次をつける」「表組みに対応する」ための改造。 convert_htmlサブルーチンを変更するだけです。

 # テキスト本体をHTMLに変換する
 sub convert_html {
    my ($txt) = shift;
    my (@txt) = split(/\n/, $txt);
    my (@toc);                          # Walrus add (TOC)
    foreach (@txt) {
        chomp;
        # Walrus mod (TOC) start
        if (/^(\*{1,2})(.*)/) {
            my ($level, $hl, $title, $num) = (length($1), length($1) + 1, $2, int(@toc) + 1);
            push(@result, splice(@saved), sprintf('<h%d><a name="%d">%s</a></h%d>', $hl, $num, &inline($title), $hl));
            push(@toc, sprintf('%s <a href="#%d">%s</a>', '-' x $level, $num, &escape($title)));
        # Walrus mod (TOC) end
        } elsif (/^----/) {
            push(@result, splice(@saved), '<hr>');
        # Walrus add (TABLE) start
        } elsif (/^,/) {
            &back_push('table', 1);
            my $tmp  = substr($_, 1);
            # separation routin is borrowed from Mr. Ohzaki's Perl Memo
            $tmp =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
            my @value = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
            my @align = map {(s/^\s+//) ? ((s/\s+$//) ? ' align="center"' : ' align="right"') : ''} @value;
            my @colspan = map {($_ eq '==') ? 0 : 1} @value;
            for ($i = 0; $i < @value; $i++) {
                $value[$i] = '' or next unless ($colspan[$i]);
                while ($i + $colspan[$i] < @value and $value[$i + $colspan[$i]] eq '==') { $colspan[$i]++; }
                $colspan[$i] = ($colspan[$i] > 1) ? sprintf(' colspan="%d"', $colspan[$i]) : '';
                $value[$i] = sprintf('<td%s%s>%s</td>', $align[$i], $colspan[$i], &inline($value[$i]));
            }
            push(@result, join('', '<tr>', @value, '</tr>'));
        # Walrus add (TABLE) end
        } elsif (/^(-{1,3})(.*)/) {
            &back_push('ul', length($1));
            push(@result, '<li>' . &inline($2) . '</li>');
        } elsif (/^:([^:]+):(.*)/) {
            &back_push('dl', 1);
            push(@result, '<dt>' . &inline($1) . '</dt>', '<dd>' . &inline($2) . '</dd>');
        } elsif (/^(>{1,3})(.*)/) {
            &back_push('blockquote', length($1));
            push(@result, &inline($2));
        } elsif (/^\s*$/) {
            push(@result, splice(@saved));
            unshift(@saved, "</p>");
            push(@result, "<p>");
        } elsif (/^(\s+.*)$/) {
            &back_push('pre', 1);
            push(@result, &escape($1)); # Not &inline, but &escape
        } else {
            push(@result, &inline($_));
        }
    }
    # Walrus mod (TOC) start
    @txt = (splice(@result), splice(@saved));
    foreach (@toc) {
        if (/^(-{1,3})(.*)/) {
            &back_push('ul', length($1));
            push(@result, '<li>' . $2 . '</li>');
        }
    }
    return join("\n", @result, splice(@saved), @txt);
    # Walrus mod (TOC) end
 }

ホーム

http://digit.que.ne.jp

その他、ちょっとづつ改造しながら、YukiWikiを使わせていただいています。 この場を借りて、お礼申し上げます。