LoginSignup
1
1

More than 5 years have passed since last update.

Trac wikiでdivタグをもっとかんたんに

Last updated at Posted at 2012-11-30

divタグの利用

TracでWikiを書いているときに、例えばこんな注意書きを入れたい場合とかありますよね。
div-msg

こういうのをどう書くかというと、あらかじめスタイルシートを用意しておいて、

style.css
div[class|="msg"] {
    background-repeat: no-repeat;
    background-position: 5px 10px;
    border-top: solid 1px; 
    border-left: solid 10px; 
    padding: 3px 45px;
}
div.msg-devil {
    background-image: url("face-devilish.png");
    border-color: red;
}

divプロセッサを使う訳です。

{{{
#!div class="msg-devil"
'''試験に出るよ!!!'''
}}}

・・・めんどくさい

こんなかさばるのじゃなくて、こんな感じ [[div(devil, '''試験に出るよ!!!''')]] で1行で書きたいんですよ。
なので、簡単なプラグインを作りました。

DivHelperPlugin

web_ui.py
# -*- coding:utf8 -*-
from trac.core import *
from trac.config import ConfigSection
from trac.wiki import IWikiMacroProvider
from trac.wiki.formatter import system_message
from trac.wiki.formatter import WikiProcessor
from trac.wiki.parser import parse_processor_args

class DivHelperPlugin(Component):
    "undocumented"
    implements (IWikiMacroProvider)

    _section = ConfigSection('divhelper', 'undocumented')
    _prefixes = {"div": "div-alias.", "span": "span-alias."}

    def get_macros(self):
        yield "cdiv"
        yield "cspan"
        for name, value in self._section.options():
            for pname, prefix in self._prefixes.items():
                if name.startswith(prefix):
                    yield pname + '_' + name[len(prefix):]

    def get_macro_description(self, name):
        return 'undocumented : %s' % name

    def expand_macro(self, formatter, name, content, args = None):
        if name in ("cdiv", "cspan"):
            try:
                clsname, content = content.split(",", 1)
                pname = name[1:]
                pargs = {"class": clsname}
                content = content.strip()
            except:
                return system_message("%s: invalid args (%s)" % (name, content))
        else:
            pname, alias = name.split("_", 1)
            key = self._prefixes[pname] + alias
            pargs = parse_processor_args(self._section.get(key))

        p = WikiProcessor(formatter, pname, pargs)
        return p.processor(content)

get_macro_descriptionあたりとか手抜きっぷりがヒドいですが・・・

インストール

ソースはここにあるので、 hg clone して python setup.py bdist_egg するなり python setup.py install するなり。
https://bitbucket.org/iwata0303/tracdivhelper

あとは一般的なTracプラグインのインストール手順に従ってください。

Trac 1.0でしか動かしてません。0.12系なら動くと思うけど、どうだろう。

使い方

インストールすると、 cdev というマクロが使えるようになります。これを使うと、上のがこう書けるようになります。

[[cdev(msg-devil, '''試験に出るよ!!!''')]]

また、あらかじめtrac.iniでこういうような設定を書いておけば、

trac.ini
[divhelper]
div-alias.devil = class="msg-devil"

もっと短く書けるようになります。

[[div_devil('''試験に出るよ!!!''')]]

※divタグの代わりにspanタグを使用するcspanというマクロもあります。iniファイルにエイリアスを書くときは span-alias.xxx になります。

応用

例えば、文字色を赤色にしたいという場合、普通はColorMacroをインストールするか、spanマクロを使うかして、

[[Color(none, red, 赤色の文字だよ)]]
[[span(赤色の文字だよ, style=color:red)]]

とかするんですが、こういうのもこのプラグインで、

trac.ini
[divhelper]
span-alias.red = style="color:red"

もっとシンプルに書けるようになります。

[[span_red(赤色の文字だよ)]]

実質30行程度のプラグインでほとんど手間かかってない割に、これはなかなか便利ではないでしょうか :) (自画自賛)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1