Changes between Version 3 and Version 4 of WikiMacros
- Timestamp:
- Dec 30, 2016, 2:54:47 AM (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
WikiMacros
v3 v4 1 = Trac マクロ = #TracMacros1 = Trac Macros 2 2 3 [[PageOutline ]]3 [[PageOutline(2-5,Contents,pullout)]] 4 4 5 Trac マクロとは、 Python で書かれた 'カスタム関数' によって Trac の Wiki エンジンを拡張するプラグインです。 WikiFormatting エンジンが利用可能なあらゆるコンテキストにおいて、マクロを使用することによって、動的な HTML データが挿入されます。 5 '''Trac macros''' extend the Trac engine with custom functionality. Macros are a special type of plugin and are written in Python. A macro inserts dynamic HTML data in any context supporting WikiFormatting. 6 6 7 もう 1 種類のマクロは WikiProcessors です。これは通常、 Wiki 以外のマークアップ形式と表示を取り扱うために使用し、多くは、 (ソースコードハイライトのような) より大きいブロックに使用します。 7 The macro syntax is `[[macro-name(optional-arguments)]]`. 8 8 9 == マクロの利用 == #UsingMacros 9 '''WikiProcessors''' are another kind of macros. They are typically used for source code highlighting, such as `!#python` or `!#apache` and when the source code spans multiple lines, such as: 10 10 11 マクロ呼び出しは、二つの ''角括弧 (square brackets) '' で括られた箇所です。 Python 関数のように、マクロは引数を取ることができ、括弧 (parenthesis) の中に、カンマで区切ったリストで表記します。 11 {{{ 12 {{{#!wiki-processor-name 13 ... 14 }}} 15 }}} 12 16 13 === 詳細なヘルプを見るには === #GettingDetailedHelp 14 マクロの一覧と完全なヘルプは、 下記の[#AvailableMacros マクロ一覧] にある !MacroList マクロを使用してみることができます。 17 == Using Macros 15 18 16 簡単なマクロ一覧は `[[MacroList(*)]]` や `[[?]]` で見ることができます。 19 Macro calls are enclosed in double-square brackets `[[..]]`. Like Python functions, macros can have arguments, which is then a comma separated list within parentheses `[[..(,)]]`. 17 20 18 特定のマクロの詳細なヘルプを参照したい場合は、 !MacroList マクロに引数渡すことによって参照することができます。 例) `[[MacroList(MacroList)]]` 。もしくは、便宜上、 `[[MacroList?]]` のようにマクロ名にクエスチョンマーク ('?') をつけることでヘルプをみることができます。 21 === Getting Detailed Help 19 22 23 The list of available macros and the full help can be obtained using the !MacroList macro, as seen [#AvailableMacros below]. 20 24 25 A brief list can be obtained via `[[MacroList(*)]]` or `[[?]]`. 21 26 22 === 利用例 === #Example 27 Detailed help on a specific macro can be obtained by passing it as an argument to !MacroList, e.g. `[[MacroList(MacroList)]]`, or, more conveniently, by appending a question mark (`?`) to the macro's name, like in `[[MacroList?]]`. 23 28 24 'Trac' で始まる Wiki ページの最近の変更履歴 3 件分を表示するマクロです: 29 === Example 25 30 26 ||= Wiki マークアップ =||= 表示 =|| 31 A list of the 3 most recently changed wiki pages starting with 'Trac': 32 33 ||= Wiki Markup =||= Display =|| 27 34 {{{#!td 28 35 {{{ … … 49 56 }}} 50 57 {{{#!td style="padding-left: 2em" 51 {{{#!html 52 <div style="font-size: 80%"class="trac-macrolist">53 <h3><code>[[Image]]</code></h3> 画像を Wiki 形式のテキストに組み込みます。58 {{{#!html 59 <div class="trac-macrolist"> 60 <h3><code>[[Image]]</code></h3>Embed an image in wiki-formatted text. 54 61 55 1 番目の引数は、ファイル名を指定します。ファイルの指定は添付ファイルなど … 56 <h3><code>[[InterTrac]]</code></h3> 既知の <a class="wiki" href="/wiki/InterTrac">InterTrac</a> プレフィックスをリスト形式で表示します。57 <h3><code>[[InterWiki]]</code></h3> 既知の <a class="wiki" href="/wiki/InterWiki">InterWiki</a> プレフィックスに関する概要のリストを表示します。58 <h3><code>[[KnownMimeTypes]]</code></h3> <a class="wiki" href="/wiki/WikiProcessors">WikiProcessors</a> で処理できる既知の mime-type を表示します。59 引数が与えられた場合は、 mime-type ...</div>62 The first argument is the file, as in <code>[[Image(filename.png)]]</code> 63 <h3><code>[[InterTrac]]</code></h3>Provide a list of known <a class="wiki" href="/wiki/InterTrac">InterTrac</a> prefixes. 64 <h3><code>[[InterWiki]]</code></h3>Provide a description list for the known <a class="wiki" href="/wiki/InterWiki">InterWiki</a> prefixes. 65 <h3><code>[[KnownMimeTypes]]</code></h3>List all known mime-types which can be used as <a class="wiki" href="/wiki/WikiProcessors">WikiProcessors</a>. 66 </div> 60 67 }}} 61 68 etc. 62 69 }}} 63 70 64 == マクロ一覧 == #AvailableMacros71 == Available Macros 65 72 66 ''Note : 以下に示すリストはマクロドキュメントを含むものだけです。 `-OO` による最適化や、 [wiki:TracModPython mod_python] での `PythonOptimize` オプションが設定されていると表示されません。''73 ''Note that the following list will only contain the macro documentation if you've not enabled `-OO` optimizations, or not set the `PythonOptimize` option for [wiki:TracModPython mod_python].'' 67 74 68 75 [[MacroList]] 69 76 70 == 世界のマクロを共有 == #Macrosfromaroundtheworld77 == Macros from around the world 71 78 72 [http://trac-hacks.org/ Trac Hacks] というサイトは、コミュニティに寄稿されたマクロと [TracPlugins プラグイン] を収集し提供しています。新しいマクロを探している、共有したいマクロを作成した、などの場合は遠慮なく Trac Hacks のサイトを訪問してください。 79 The [http://trac-hacks.org/ Trac Hacks] site provides a wide collection of macros and other Trac [TracPlugins plugins] contributed by the Trac community. If you are looking for new macros, or have written one that you would like to share, please visit that site. 73 80 74 == カスタムマクロを開発する == #DevelopingCustomMacros 75 マクロは、 Trac 本体と同様 [http://python.org/ Python] で書かれています。そして TracPlugins の一種として開発します。 81 == Developing Custom Macros 76 82 77 マクロの開発についての詳しい情報は [trac:TracDev リソースの開発] を参照してください。 83 Macros, like Trac itself, are written in the [http://python.org/ Python programming language] and are developed as part of TracPlugins. 78 84 85 For more information about developing macros, see the [trac:TracDev development resources] on the main project site. 79 86 80 Trac 0.11 でマクロを作成する簡単な例を 2 つ紹介します。 87 Here are 2 simple examples showing how to create a Macro. Also, have a look at [trac:source:tags/trac-1.0.2/sample-plugins/Timestamp.py Timestamp.py] for an example that shows the difference between old style and new style macros and at the [trac:source:tags/trac-0.11/wiki-macros/README macros/README] which provides more insight about the transition. 81 88 82 古いマクロと新しいマクロの違いを示す例は [http://trac.edgewall.org/browser/tags/trac-0.11/sample-plugins/Timestamp.py Timestamp.py] を参照してください。また、古いマクロから新しいマクロに移行するための情報は [http://trac.edgewall.org/browser/tags/trac-0.11/wiki-macros/README macros/README] を参照してください。 89 === Macro without arguments 83 90 84 === 引数なしのマクロ === #Macrowithoutarguments 85 下記のソースコードをテストするためには、このソースコードを `timestamp_sample.py` として保存し、 TracEnvironment の `plugins/` に配置しなければなりません。 86 {{{ 87 #!python 91 To test the following code, save it in a `timestamp_sample.py` file located in the TracEnvironment's `plugins/` directory. 92 93 {{{#!python 88 94 from datetime import datetime 89 95 # Note: since Trac 0.11, datetime objects are used internally … … 102 108 def expand_macro(self, formatter, name, text): 103 109 t = datetime.now(utc) 104 return tag. b(format_datetime(t, '%c'))110 return tag.strong(format_datetime(t, '%c')) 105 111 }}} 106 112 107 === 引数付きのマクロ === #Macrowitharguments 108 下記のソースコードをテストするためには、このソースコードを `helloworld_sample.py` として保存し、 TracEnvironment の `plugins/` に配置しなければなりません。 109 {{{ 110 #!python 113 === Macro with arguments 114 115 To test the following code, save it in a `helloworld_sample.py` file located in the TracEnvironment's `plugins/` directory. 116 117 {{{#!python 111 118 from genshi.core import Markup 112 119 … … 144 151 }}} 145 152 146 Note : `expand_macro` は 第4パラメータに、 ''`args`'' を任意に取ることもできます。 このマクロが [WikiProcessors WikiProcessor] として呼ばれたとき、 `key=value` 形式の [WikiProcessors#UsingProcessors プロセッサパラメータ] を渡すことも可能です。もし、このパラメータを指定したとき、これらの値は、ディクショナリの中に保存され、 追加の `args` パラメータによって渡されます。一方で、マクロとして呼び出されたときは、 `args` パラメータは、 `None` として扱われます (''0.12 以降'') 。153 Note that `expand_macro` optionally takes a 4^th^ parameter ''`args`''. When the macro is called as a [WikiProcessors WikiProcessor], it is also possible to pass `key=value` [WikiProcessors#UsingProcessors processor parameters]. If given, those are stored in a dictionary and passed in this extra `args` parameter. In the other case, when called as a macro, `args` is `None`. (''since 0.12''). 147 154 148 例として、このように記述した場合:155 For example, when writing: 149 156 {{{ 150 157 {{{#!HelloWorld style="polite" -silent verbose … … 158 165 [[HelloWorld(<Hello World!>)]] 159 166 }}} 160 結果はこのようになります: 167 168 One should get: 161 169 {{{ 162 Hello World, text = <Hello World!> 163 Hello World, text = <Hello World!> 164 Hello World, text = <Hello World!> 170 Hello World, text = <Hello World!>, args = {'style': u'polite', 'silent': False, 'verbose': True} 171 Hello World, text = <Hello World!>, args = {} 172 Hello World, text = <Hello World!>, args = None 165 173 }}} 166 174 167 Note : `expand_macro` が返す値は、 HTML がエスケープされて '''いない''' ことに注意して下さい。期待する戻り値によっては、あなた自身でエスケープする必要があります (`return Markup.escape(result)` を使用できます)。また、戻り値として HTML が返ってくると分かっているならば、結果を (`return Markup(result)`) という風に Genshi が提供している Markup (`from genshi.core import Markup`) オブジェクトでラップすることもできます。175 Note that the return value of `expand_macro` is '''not''' HTML escaped. Depending on the expected result, you should escape it yourself (using `return Markup.escape(result)`) or, if this is indeed HTML, wrap it in a Markup object (`return Markup(result)`) with `Markup` coming from Genshi (`from genshi.core import Markup`). 168 176 169 また、`text` を Wiki としてマークアップする場合、 Wiki Formatter (`from trac.wiki import Formatter`) オブジェクトも再帰的に使用することができます。以下がサンプルです:177 You can also recursively use a wiki Formatter (`from trac.wiki import Formatter`) to process the `text` as wiki markup: 170 178 171 {{{ 172 #!python 179 {{{#!python 173 180 from genshi.core import Markup 174 181 from trac.wiki.macros import WikiMacroBase … … 177 184 178 185 class HelloWorldMacro(WikiMacroBase): 179 180 181 182 183 184 186 def expand_macro(self, formatter, name, text, args): 187 text = "whatever '''wiki''' markup you want, even containing other macros" 188 # Convert Wiki markup to HTML, new style 189 out = StringIO.StringIO() 190 Formatter(self.env, formatter.context).format(text, out) 191 return Markup(out.getvalue()) 185 192 }}}