See also SectionParser

To make page layout happy, use CSS to enclose wiki markup, then you can use css file to define the style. Most of the following code was taken from ReimarBauer's Frame Parser.

I've added this to the current frame parser. Cheers -- ReimarBauer 2006-09-03 14:34:19

Usage

{ { {#!div type=id val=sidebar
some wiki markup
} } }

will generate

<div id="sidebar"> some wiki markup (rendered with wiki syntax) </div>

Example

divparser.jpg

Code

   1 # -*- coding: iso-8859-1 -*-
   2 """
   3     MoinMoin - Div Parser
   4 
   5     This parser is used to align enclosed wiki markup.
   6 
   7     Syntax:
   8     { { {#!div type=type val=val
   9       wiki markup
  10     } } }
  11 
  12     Parameters:
  13         type:       one of ['id', 'class'], default is 'id'
  14         val :       name of the id or class, default is 'sidebar'
  15 
  16     Install:
  17         put into 'plugin/parser' directory
  18 
  19     Note:
  20         Most of the following code was taken from ReimarBauer's Frame Parser.
  21         See http://moinmoin.wikiwikiweb.de/ParserMarket/Frame
  22         Corresponding Information
  23         @copyright: 2006 by Reimar Bauer
  24         @license: GNU GPL, see COPYING for details.
  25 
  26 """
  27 import StringIO, os, mimetypes
  28 from random import randint
  29 from MoinMoin.parser import wiki
  30 from MoinMoin import wikiutil
  31 from MoinMoin.action import AttachFile
  32 from MoinMoin.webapi.color import Color
  33 
  34 Dependencies = []
  35 
  36 class Parser:
  37 
  38     extensions = ['*']
  39     Dependencies = Dependencies
  40 
  41     def __init__(self, raw, request, **kw):
  42         self.raw = raw
  43         self.request = request
  44         self.type = 'id'
  45         self.val = 'sidebar'
  46 
  47         for arg in kw.get('format_args', '').split():
  48             if arg.find('=') > -1:
  49                 key, value = arg.split('=')
  50                 setattr(self, key, wikiutil.escape(value.strip(), quote=1))
  51 
  52 
  53     def format(self, formatter):
  54         raw = self.raw
  55 
  56         import string
  57         raw = string.split(raw, '\n')
  58         parser_name = ''
  59         for line in raw:
  60             if line.strip().startswith("#!"):
  61                 parser_name = line.strip()[2:].split()[0]
  62                 for arg in line.split(','):
  63                     if arg.find('=') > -1:
  64                         key, value = arg.split('=')
  65                         setattr(self, key, wikiutil.escape(value.strip(), quote=1))
  66 
  67         pagename = formatter.page.page_name
  68 
  69         out = StringIO.StringIO()
  70         self.request.redirect(out)
  71         if parser_name != '':
  72             self.request.write(formatter.parser(parser_name, raw))
  73         else:
  74             wikiizer = wiki.Parser(self.raw, self.request)
  75             wikiizer.format(formatter)
  76         result = out.getvalue()
  77         self.request.redirect()
  78         del out
  79 
  80         div = '<div %(type)s="%(val)s">' % {"val":self.val, "type":self.type}
  81         self.request.write("%(div)s%(result)s</div>" % {
  82             "div": div,
  83             "result": result})
  84 

MoinMoin: ZhangYunfeng/DivParser (last edited 2007-10-29 19:11:41 by localhost)