File: Zwiki.py

package info (click to toggle)
python-happydoc 2.0-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 4,176 kB
  • ctags: 3,347
  • sloc: python: 11,321; makefile: 88; sh: 77
file content (85 lines) | stat: -rw-r--r-- 2,706 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
# 
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
# 
##############################################################################

from Html   import HTML
from string import split
from ST     import DOC
import re

"""
This is the new structured text type.
"""

class Zwiki_Title:
   def __init__(self,str=''):
      self.expr1   = re.compile('([A-Z]+[A-Z]+[a-zA-Z]*)').search
      self.expr2   = re.compile('([A-Z]+[a-z]+[A-Z]+[a-zA-Z]*)').search
      self.str    = [str]
      self.typ    = "Zwiki_Title"

   def type(self):
      return '%s' % self.typ

   def string(self):
      return self.str

   def __getitem__(self,index):
      return self.str[index]

   def __call__(self,raw_string,subs):

      """
      The raw_string is checked to see if it matches the rules
      for this structured text expression. If the raw_string does,
      it is parsed for the sub-string which matches and a doc_inner_link
      instance is returned whose string is the matching substring.
      If raw_string does not match, nothing is returned.
      """

      if self.expr1(raw_string):
         start,end               = self.expr1(raw_string).span()
         result                  = Zwiki_Title(raw_string[start:end])
         result.start,result.end = self.expr1(raw_string).span()
         return result
      elif self.expr2(raw_string):
         start,end               = self.expr2(raw_string).span()
         result                  = Zwiki_Title(raw_string[start:end])
         result.start,result.end = self.expr2(raw_string).span()
         return result
      else:
         return None

   def span(self):
      return self.start,self.end

class Zwiki_doc(DOC):

   def __init__(self):
      DOC.__init__(self)
      """
      Add the new type to self.types
      """
      self.types.append(Zwiki_Title())

class Zwiki_parser(HTML):
   def __init__(self):
      HTML.__init__(self)
      self.types["Zwiki_Title"] = self.zwiki_title

   def zwiki_title(self,object):
      result = ""
      for x in object.string():
         result = result + x
      result = "<a href=%s>%s</a>" % (result,result)
      #result = "<dtml-wikiname %s>" % result
      self.string = self.string + result