Edgewall Software

Changes between Initial Version and Version 1 of TranslationRu/WikiMacros


Ignore:
Timestamp:
Sep 16, 2008, 5:00:03 AM (16 years ago)
Author:
kossmak@…
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • TranslationRu/WikiMacros

    v1 v1  
     1= Trac макросы =
     2
     3[[PageOutline]]
     4
     5En-Version: WikiMacros
     6
     7Trac макросы — плагины для расширения Trac движка с помощью специальных функций, написанных на Python. Макрос вставляет динамические HTML данные в любом контексте, поддерживающем Wiki-форматирование.
     8
     9Другой тип макросов — WikiProcessors. Обычно имеют дело с альтернативными форматами разметки и представления больших блоков информации (как подсветка исходных кодов).
     10
     11== Использование макросов ==
     12
     13Вызов макроса заключается в двойные квадратные скобки. Как и все функции Python, макросы могут принимать аргументы, перечисленные через запятую в круглых скобках после имени макроса.
     14
     15Trac макросы могут быть также написаны как TracPlugins. Это позволяет им некотороые дополнительные возможности, которых обычные макросы не имеют, например, непосредственный доступ к HTTP запросу.
     16
     17== Пример ==
     18
     19Список из 3 страниц, начинающихся с 'Trac', которые недавно изменялись:
     20{{{
     21 [[RecentChanges(Trac,3)]]
     22}}}
     23
     24Отображается:
     25 [[RecentChanges(Trac,3)]]
     26
     27== Доступные макросы ==
     28
     29''Отметьте, что следующий список будет содержать макро-документацию, только если вы не используете `OO` оптимизацию, или не установлена опция `PythonOptimize` в [wiki:TracModPython mod_python].''
     30
     31{{{
     32[[MacroList]]
     33}}}
     34[[MacroList]]
     35
     36== Макросы в сети ==
     37
     38Сайт [http://trac-hacks.org/ Trac Hacks] содержит большую коллекцию макросов и других Trac [TracPlugins plugins] плагинов, созданных Trac-сообществом. Если вы ищете или написали новый макрос, которым хотите поделиться с другими, пожалуйста, не стесняйтесь заходить на этот сайт.
     39
     40== Разработка своих макросов ==
     41
     42Макросы, подобно самому Trac, пишутся на [http://python.org/ языке программирования Python].
     43
     44Для дополнительной информации о разработке макроса, см. TracDev на главной странице проекта.
     45{{{
     46!#comment
     47[wiki:TracDev development resources]
     48}}}
     49
     50== Реализация ==
     51Здесь 2 простых примера, как создавать макрос для [wiki:0.11 Trac 0.11], различия между старым и новым стилем макросов можно посмотреть в исходнике source:trunk/sample-plugins/Timestamp.py, а также в source:trunk/wiki-macros/README.
     52
     53=== Макрос без аргументов ===
     54
     55Этот код должен быть сохранен как `TimeStamp.py`, чтобы использоваться в Trac по имени макроса.
     56{{{
     57#!python
     58from datetime import datetime
     59# Note: since Trac 0.11, datetime objects are used internally
     60
     61from genshi.builder import tag
     62
     63from trac.util.datefmt import format_datetime, utc
     64from trac.wiki.macros import WikiMacroBase
     65
     66class TimestampMacro(WikiMacroBase):
     67    """Inserts the current time (in seconds) into the wiki page."""
     68
     69    revision = "$Rev$"
     70    url = "$URL$"
     71
     72    def expand_macro(self, formatter, name, args):
     73        t = datetime.now(utc)
     74        return tag.b(format_datetime(t, '%c'))
     75}}}
     76
     77=== Макрос с аргументами ===
     78Этот код должен быть сохранен как `HelloWorld.py` (в папке plugins/).
     79{{{
     80#!python
     81from trac.wiki.macros import WikiMacroBase
     82
     83class HelloWorldMacro(WikiMacroBase):
     84    """Simple HelloWorld macro.
     85
     86    Note that the name of the class is meaningful:
     87     - it must end with "Macro"
     88     - what comes before "Macro" ends up being the macro name
     89
     90    The documentation of the class (i.e. what you're reading)
     91    will become the documentation of the macro, as shown by
     92    the !MacroList macro (usually used in the WikiMacros page).
     93    """
     94
     95    revision = "$Rev$"
     96    url = "$URL$"
     97
     98    def expand_macro(self, formatter, name, args):
     99        """Return some output that will be displayed in the Wiki content.
     100
     101        `name` is the actual name of the macro (no surprise, here it'll be
     102        `'HelloWorld'`),
     103        `args` is the text enclosed in parenthesis at the call of the macro.
     104          Note that if there are ''no'' parenthesis (like in, e.g.
     105          [[HelloWorld]]), then `args` is `None`.
     106        """
     107        return 'Hello World, args = ' + unicode(args)
     108   
     109    # Note that there's no need to HTML escape the returned data,
     110    # as the template engine (Genshi) will do it for us.
     111}}}
     112
     113
     114=== {{{expand_macro}}} details ===
     115{{{expand_macro}}} должно возвращать также простую строку Python, которая будет интерпретирована как HTML, или предпочтительный объект разметки (используйте {{{from trac.util.html import Markup}}}). {{{Markup(string)}}} просто вставляет строку, которую интерпретатор преобразует в HTML строку как есть. Также вам может понадобиться использовать импорт Formatter {{{from trac.wiki import Formatter}}}.
     116
     117Если ваш макрос создает wiki-разметку вместо HTML, вы можете конвертировать ее в HTML примерно так:
     118{{{
     119#!python
     120  text = "whatever wiki markup you want, even containing other macros"
     121  # Convert Wiki markup to HTML, new style
     122  out = StringIO()
     123  Formatter(self.env, formatter.context).format(text, out)
     124  return Markup(out.getvalue())
     125}}}