Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
5d3f14c3
Commit
5d3f14c3
authored
Jan 04, 2001
by
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merged StructuredText-Dev
parent
1a7fdfd5
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
3917 additions
and
27 deletions
+3917
-27
lib/python/StructuredText/ClassicDocumentClass.py
lib/python/StructuredText/ClassicDocumentClass.py
+689
-0
lib/python/StructuredText/DocBookClass.py
lib/python/StructuredText/DocBookClass.py
+325
-0
lib/python/StructuredText/DocumentClass.py
lib/python/StructuredText/DocumentClass.py
+777
-0
lib/python/StructuredText/DocumentWithImages.py
lib/python/StructuredText/DocumentWithImages.py
+134
-0
lib/python/StructuredText/HTMLClass.py
lib/python/StructuredText/HTMLClass.py
+308
-0
lib/python/StructuredText/HTMLWithImages.py
lib/python/StructuredText/HTMLWithImages.py
+133
-0
lib/python/StructuredText/ST.py
lib/python/StructuredText/ST.py
+278
-0
lib/python/StructuredText/STDOM.py
lib/python/StructuredText/STDOM.py
+736
-0
lib/python/StructuredText/STNG.txt
lib/python/StructuredText/STNG.txt
+116
-0
lib/python/StructuredText/StructuredText.py
lib/python/StructuredText/StructuredText.py
+4
-1
lib/python/StructuredText/Zwiki.py
lib/python/StructuredText/Zwiki.py
+158
-0
lib/python/StructuredText/__init__.py
lib/python/StructuredText/__init__.py
+27
-0
lib/python/StructuredText/regressions/examples.stx
lib/python/StructuredText/regressions/examples.stx
+17
-0
lib/python/StructuredText/regressions/regress
lib/python/StructuredText/regressions/regress
+0
-26
lib/python/StructuredText/ts_regex.py
lib/python/StructuredText/ts_regex.py
+215
-0
No files found.
lib/python/StructuredText/ClassicDocumentClass.py
0 → 100644
View file @
5d3f14c3
This diff is collapsed.
Click to expand it.
lib/python/StructuredText/DocBookClass.py
0 → 100644
View file @
5d3f14c3
This diff is collapsed.
Click to expand it.
lib/python/StructuredText/DocumentClass.py
0 → 100644
View file @
5d3f14c3
This diff is collapsed.
Click to expand it.
lib/python/StructuredText/DocumentWithImages.py
0 → 100644
View file @
5d3f14c3
##############################################################################
#
# Zope Public License (ZPL) Version 1.0
# -------------------------------------
#
# Copyright (c) Digital Creations. All rights reserved.
#
# This license has been certified as Open Source(tm).
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions in source code must retain the above copyright
# notice, this list of conditions, and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. Digital Creations requests that attribution be given to Zope
# in any manner possible. Zope includes a "Powered by Zope"
# button that is installed by default. While it is not a license
# violation to remove this button, it is requested that the
# attribution remain. A significant investment has been put
# into Zope, and this effort will continue if the Zope community
# continues to grow. This is one way to assure that growth.
#
# 4. All advertising materials and documentation mentioning
# features derived from or use of this software must display
# the following acknowledgement:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# In the event that the product being advertised includes an
# intact Zope distribution (with copyright and license included)
# then this clause is waived.
#
# 5. Names associated with Zope or Digital Creations must not be used to
# endorse or promote products derived from this software without
# prior written permission from Digital Creations.
#
# 6. Modified redistributions of any form whatsoever must retain
# the following acknowledgment:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# Intact (re-)distributions of any official Zope release do not
# require an external acknowledgement.
#
# 7. Modifications are encouraged but must be packaged separately as
# patches to official Zope releases. Distributions that do not
# clearly separate the patches from the original work must be clearly
# labeled as unofficial distributions. Modifications which do not
# carry the name Zope may be packaged in any form, as long as they
# conform to all of the clauses above.
#
#
# Disclaimer
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# This software consists of contributions made by Digital Creations and
# many individuals on behalf of Digital Creations. Specific
# attributions are listed in the accompanying credits file.
#
##############################################################################
import
re
,
ST
,
STDOM
from
string
import
split
,
join
,
replace
,
expandtabs
,
strip
,
find
from
DocumentClass
import
*
class
StructuredTextImage
(
StructuredTextMarkup
):
"A simple embedded image"
class
DocumentWithImages
(
DocumentClass
):
"""
"""
text_types
=
[
'doc_img'
,
]
+
DocumentClass
.
text_types
def
doc_img
(
self
,
s
,
expr1
=
re
.
compile
(
'
\
"
([ _a-zA-Z0-9*.:/;,
\
-
\
n
\
~]+)
\
":img:([a-zA-Z0-9
\
-.:/;,
\
n
\
~]+)
'
).search,
expr2=re.compile('
\
"([ _a-zA-Z0-9*.:/;,
\
-
\
n
\
~]+)
\
"
:
img
:([
a
-
zA
-
Z0
-
9
\
-
.:
/
;,
\
n
\
~
]
+
):([
a
-
zA
-
Z0
-
9
\
-
.:
/
;,
\
n
\
~
]
+
)
').search
):
r = expr2(s)
if r:
startt, endt = r.span(1)
startk, endk = r.span(2)
starth, endh = r.span(3)
start, end = r.span()
return (StructuredTextImage(s[startt:endt], href=s[starth:endh], key=s[startk:endk]),
start, end)
else:
r=expr1(s)
if r:
startt, endt = r.span(1)
starth, endh = r.span(2)
start, end = r.span()
return (StructuredTextImage(s[startt:endt], href=s[starth:endh]),
start, end)
return None
lib/python/StructuredText/HTMLClass.py
0 → 100644
View file @
5d3f14c3
This diff is collapsed.
Click to expand it.
lib/python/StructuredText/HTMLWithImages.py
0 → 100644
View file @
5d3f14c3
##############################################################################
#
# Zope Public License (ZPL) Version 1.0
# -------------------------------------
#
# Copyright (c) Digital Creations. All rights reserved.
#
# This license has been certified as Open Source(tm).
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions in source code must retain the above copyright
# notice, this list of conditions, and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. Digital Creations requests that attribution be given to Zope
# in any manner possible. Zope includes a "Powered by Zope"
# button that is installed by default. While it is not a license
# violation to remove this button, it is requested that the
# attribution remain. A significant investment has been put
# into Zope, and this effort will continue if the Zope community
# continues to grow. This is one way to assure that growth.
#
# 4. All advertising materials and documentation mentioning
# features derived from or use of this software must display
# the following acknowledgement:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# In the event that the product being advertised includes an
# intact Zope distribution (with copyright and license included)
# then this clause is waived.
#
# 5. Names associated with Zope or Digital Creations must not be used to
# endorse or promote products derived from this software without
# prior written permission from Digital Creations.
#
# 6. Modified redistributions of any form whatsoever must retain
# the following acknowledgment:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# Intact (re-)distributions of any official Zope release do not
# require an external acknowledgement.
#
# 7. Modifications are encouraged but must be packaged separately as
# patches to official Zope releases. Distributions that do not
# clearly separate the patches from the original work must be clearly
# labeled as unofficial distributions. Modifications which do not
# carry the name Zope may be packaged in any form, as long as they
# conform to all of the clauses above.
#
#
# Disclaimer
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# This software consists of contributions made by Digital Creations and
# many individuals on behalf of Digital Creations. Specific
# attributions are listed in the accompanying credits file.
#
##############################################################################
from
string
import
join
,
split
,
find
import
re
,
sys
,
ST
import
time
from
HTMLClass
import
HTMLClass
ets
=
HTMLClass
.
element_types
ets
.
update
({
'StructuredTextImage'
:
'image'
})
class
HTMLWithImages
(
HTMLClass
):
element_types
=
ets
def
document
(
self
,
doc
,
level
,
output
):
output
(
'<html>
\
n
'
)
children
=
doc
.
getChildNodes
()
if
(
children
and
children
[
0
].
getNodeName
()
==
'StructuredTextSection'
):
output
(
'<head>
\
n
<title>%s</title>
\
n
</head>
\
n
'
%
children
[
0
].
getChildNodes
()[
0
].
getNodeValue
())
output
(
'<body bgcolor="#FFFFFF">
\
n
'
)
for
c
in
children
:
getattr
(
self
,
self
.
element_types
[
c
.
getNodeName
()])(
c
,
level
,
output
)
output
(
'</body>
\
n
'
)
output
(
'</html>
\
n
'
)
def
image
(
self
,
doc
,
level
,
output
):
output
(
'<img src="%s" alt="%s">'
%
(
doc
.
href
,
doc
.
getNodeValue
()))
def
image
(
self
,
doc
,
level
,
output
):
if
hasattr
(
doc
,
'key'
):
output
(
'<a name="%s"></a>
\
n
<img src="%s" alt="%s">'
%
(
doc
.
key
,
doc
.
href
,
doc
.
getNodeValue
()))
else
:
output
(
'<img src="%s" alt="%s">'
%
(
doc
.
href
,
doc
.
getNodeValue
()))
def
xref
(
self
,
doc
,
level
,
output
):
val
=
doc
.
getNodeValue
()
output
(
'<a href="#%s">%s</a>'
%
(
val
,
val
)
)
lib/python/StructuredText/ST.py
0 → 100644
View file @
5d3f14c3
import
re
,
STDOM
from
string
import
split
,
join
,
replace
,
expandtabs
,
strip
,
find
#####################################################################
# Updated functions #
#####################################################################
def
indention
(
str
,
front
=
re
.
compile
(
"^
\
s+
"
).match):
"""
Convert all tabs to the appropriate number of spaces.
Find the number of leading spaces. If none, return 0
"""
if front(str):
start,end = front(str).span()
return end-start-1
else:
return 0 # no leading spaces
def insert(struct, top, level):
"""
find what will be the parant paragraph of
a sentence and return that paragraph's
sub-paragraphs. The new paragraph will be
appended to those sub-paragraphs
"""
#print "
struct
", struct, top-1
if not top-1 in range(len(struct)):
return None
run = struct[top-1]
i = 0
while i+1 < level:
run = run.getSubparagraphs()[len(run.getSubparagraphs())-1]
i = i + 1
#print "
parent
for
level
", level, "
was
=>
", run.getColorizableTexts()
return run.getSubparagraphs()
def display(struct):
"""
runs through the structure and prints out
the paragraphs. If the insertion works
correctly, display's results should mimic
the orignal paragraphs.
"""
if struct.getColorizableTexts():
print join(struct.getColorizableTexts()),"
\
n
"
if struct.getSubparagraphs():
for x in struct.getSubparagraphs():
display(x)
def display2(struct):
"""
runs through the structure and prints out
the paragraphs. If the insertion works
correctly, display's results should mimic
the orignal paragraphs.
"""
if struct.getNodeValue():
print struct.getNodeValue(),"
\
n
"
if struct.getSubparagraphs():
for x in struct.getSubparagraphs():
display(x)
def findlevel(levels,indent):
"""
remove all level information of levels
with a greater level of indentation.
Then return which level should insert this
paragraph
"""
keys = levels.keys()
for key in keys:
if levels[key] > indent:
del(levels[key])
keys = levels.keys()
if not(keys):
return 0
else:
for key in keys:
if levels[key] == indent:
return key
highest = 0
for key in keys:
if key > highest:
highest = key
return highest-1
#####################################################################
# Golly, the capitalization of this function always makes me think it's a class
def StructuredText(paragraphs, paragraph_delimiter=re.compile('
\
n
\
s*
\
n')):
"""
StructuredText accepts paragraphs, which is a list of
lines to be parsed. StructuredText creates a structure
which mimics the structure of the paragraphs.
Structure => [paragraph,[sub-paragraphs]]
"""
currentlevel = 0
currentindent = 0
levels = {0:0}
level = 0 # which header are we under
struct = [] # the structure to be returned
run = struct
paragraphs = filter(
strip,
paragraph_delimiter.split(expandtabs('
\
n
\
n
'+paragraphs+'
\
n
\
n
'))
)
if not paragraphs: return []
ind = [] # structure based on indention levels
for paragraph in paragraphs:
ind.append([indention(paragraph), paragraph])
currentindent = indention(paragraphs[0])
levels[0] = currentindent
#############################################################
# updated #
#############################################################
for indent,paragraph in ind :
if indent == 0:
level = level + 1
currentlevel = 0
currentindent = 0
levels = {0:0}
struct.append(StructuredTextParagraph(paragraph, indent=indent, level=currentlevel))
elif indent > currentindent:
currentlevel = currentlevel + 1
currentindent = indent
levels[currentlevel] = indent
run = insert(struct,level,currentlevel)
run.append(StructuredTextParagraph(paragraph, indent=indent, level=currentlevel))
elif indent < currentindent:
result = findlevel(levels,indent)
if result > 0:
currentlevel = result
currentindent = indent
run = insert(struct,level,currentlevel)
run.append(StructuredTextParagraph(paragraph, indent=indent, level=currentlevel))
else:
if insert(struct,level,currentlevel):
run = insert(struct,level,currentlevel)
else:
run = struct
currentindet = indent
run.append(StructuredTextParagraph(paragraph, indent=indent, level=currentlevel))
return StructuredTextDocument(struct)
Basic = StructuredText
class StructuredTextParagraph(STDOM.Element):
indent=0
def __init__(self, src, subs=None, **kw):
if subs is None: subs=[]
self._src=src
self._subs=list(subs)
self._attributes=kw.keys()
for k, v in kw.items(): setattr(self, k, v)
def getChildren(self, type=type, lt=type([])):
src=self._src
if type(src) is not lt: src=[src]
return src+self._subs
def getAttribute(self, name):
return getattr(self, name, None)
def getAttributeNode(self, name):
if hasattr(self, name):
return STDOM.Attr(name, getattr(self, name))
def getAttributes(self):
d={}
for a in self._attributes:
d[a]=getattr(self, a, '')
return STDOM.NamedNodeMap(d)
def getSubparagraphs(self):
return self._subs
def setSubparagraphs(self, subs):
self._subs=subs
def getColorizableTexts(self):
return (self._src,)
def setColorizableTexts(self, src):
self._src=src[0]
def __repr__(self):
r=[]; a=r.append
a((' '*(self.indent or 0))+
('%s(' % self.__class__.__name__)
+str(self._src)+', ['
)
for p in self._subs: a(`p`)
a((' '*(self.indent or 0))+'])')
return join(r,'
\
n
')
"""
create aliases for all above functions in the pythony way.
"""
def _get_Children(self, type=type, lt=type([])):
return self.getChildren(type,lt)
def _get_Attribute(self, name):
return self.getAttribute(name)
def _get_AttributeNode(self, name):
return self.getAttributeNode(name)
def _get_Attributes(self):
return self.getAttributes()
def _get_Subparagraphs(self):
return self.getSubparagraphs()
def _set_Subparagraphs(self, subs):
return self.setSubparagraphs(subs)
def _get_ColorizableTexts(self):
return self.getColorizableTexts()
def _set_ColorizableTexts(self, src):
return self.setColorizableTexts(src)
class StructuredTextDocument(StructuredTextParagraph):
"""
A StructuredTextDocument holds StructuredTextParagraphs
as its subparagraphs.
"""
_attributes=()
def __init__(self, subs=None, **kw):
apply(StructuredTextParagraph.__init__,
(self, '', subs),
kw)
def getChildren(self):
return self._subs
def getColorizableTexts(self):
return ()
def setColorizableTexts(self, src):
pass
def __repr__(self):
r=[]; a=r.append
a('%s([' % self.__class__.__name__)
for p in self._subs: a(`p`+',')
a('])')
return join(r,'
\
n
')
"""
create aliases for all above functions in the pythony way.
"""
def _get_Children(self):
return self.getChildren()
def _get_ColorizableTexts(self):
return self.getColorizableTexts()
def _set_ColorizableTexts(self, src):
return self.setColorizableTexts(src)
lib/python/StructuredText/STDOM.py
0 → 100644
View file @
5d3f14c3
This diff is collapsed.
Click to expand it.
lib/python/StructuredText/STNG.txt
0 → 100644
View file @
5d3f14c3
Using Structured Text
The goal of StructuredText is to make it possible to express
structured text using a relatively simple plain text format. Simple
structures, like bullets or headings are indicated through
conventions that are natural, for some definition of
"natural". Hierarchical structures are indicated through
indentation. The use of indentation to express hierarchical
structure is inspired by the Python programming language.
Use of StructuredText consists of one to three logical steps. In the
first step, a text string is converted to a network of objects using
the 'StructuredText.Basic' facility, as in the following
example::
raw=open("mydocument.txt").read()
import StructuredText
st=StructuredText.Basic(raw)
The output of 'StructuredText.Basic' is simply a
StructuredTextDocumemt object containing StructuredTextParagraph
objects arranged in a hierarchy. Paragraphs are delimited by strings
of two or more whitespace characters beginning and ending with
newline characters. Hierarchy is indicated by indentation. The
indentation of a paragraph is the minimum number of leading spaces
in a line containing non-white-space characters after converting tab
characters to spaces (assuming a tab stop every eight characters).
StructuredTextNode objects support the read-only subset of the
Document Object Model (DOM) API. It should be possible to process
'StructuredTextNode' hierarchies using XML tools such as XSLT.
The second step in using StructuredText is to apply additional
structuring rules based on text content. A variety of differentText
rules can be used. Typically, these are used to implement a
structured text language for producing documents, but any sort of
structured text language could be implemented in the second
step. For example, it is possible to use StructuredText to implement
structured text formats for representing structured data. The second
step, which could consist of multiple processing steps, is
performed by processing, or "coloring", the hierarchy of generic
StructuredTextParagraph objects into a network of more specialized
objects. Typically, the objects produced should also implement the DOM
API to allow processing with XML tools.
A document processor is provided to convert a StructuredTextDocument
object containing only StructuredStructuredTextParagraph objects
into a StructuredTextDocument object containing a richer collection
of objects such as bullets, headings, emphasis, and so on using
hints in the text. Hints are selected based on conventions of the
sort typically seen in electronic mail or news-group postings. It
should be noted, however, that these conventions are somewhat
culturally dependent, fortunately, the document processor is easily
customized to implement alternative rules. Here's an example of
using the DOC processor to convert the output of the previous example::
doc=StructuredText.Document(st)
The final step is to process the colored networks produced from the
second step to produce additional outputs. The final step could be
performed by Python programs, or by XML tools. A Python outputter is
provided for the document processor output that produces Hypertext Markup
Language (HTML) text::
html=StructuredText.HTML(doc)
Customizing the document processor
The document processor is driven by two tables. The first table,
named 'paragraph_types', is a sequence of callable objects or method
names for coloring paragraphs. If a table entry is a string, then it
is the name of a method of the document processor to be used. For
each input paragraph, the objects in the table are called until one
returns a value (not 'None'). The value returned replaces the
original input paragraph in the output. If none of the objects in
the paragraph types table return a value, then a copy of the
original paragraph is used. The new object returned by calling a
paragraph type should implement the ReadOnlyDOM,
StructuredTextColorizable, and StructuredTextSubparagraphContainer
interfaces. See the 'Document.py' source file for examples.
A paragraph type may return a list or tuple of replacement
paragraphs, this allowing a paragraph to be split into multiple
paragraphs.
The second table, 'text_types', is a sequence of callable objects or
method names for coloring text. The callable objects in this table
are used in sequence to transform the input text into new text or
objects. The callable objects are passed a string and return
nothing ('None') or a three-element tuple consisting of:
- a replacement object,
- a starting position, and
- an ending position
The text from the starting position is (logically) replaced with the
replacement object. The replacement object is typically an object
that implements that implements the ReadOnlyDOM, and
StructuredTextColorizable interfaces. The replacement object can
also be a string or a list of strings or objects. Replacement is
done from beginning to end and text after the replacement ending
position will be passed to the character type objects for processing.
Example: adding wiki links
We want to add support for Wiki links. A Wiki link is a string of
text containing mixed-case letters, such that at least two of the
letters are upper case and such that the first letter is upper case.
lib/python/StructuredText/StructuredText.py
View file @
5d3f14c3
...
...
@@ -204,7 +204,7 @@ Special symbology is used to indicate special constructs:
</TABLE>
$Id: StructuredText.py,v 1.
29 2000/11/10 16:55:56
brian Exp $'''
$Id: StructuredText.py,v 1.
30 2001/01/04 15:01:59
brian Exp $'''
# Copyright
#
# Copyright 1996 Digital Creations, L.C., 910 Princess Anne
...
...
@@ -256,6 +256,9 @@ $Id: StructuredText.py,v 1.29 2000/11/10 16:55:56 brian Exp $'''
# (540) 371-6909
#
# $Log: StructuredText.py,v $
# Revision 1.30 2001/01/04 15:01:59 brian
# Merged StructuredText-Dev
#
# Revision 1.29 2000/11/10 16:55:56 brian
# Fixed stx to allow ampersands in urls.
#
...
...
lib/python/StructuredText/Zwiki.py
0 → 100644
View file @
5d3f14c3
#!/usr/bin/python
##############################################################################
#
# Zope Public License (ZPL) Version 1.0
# -------------------------------------
#
# Copyright (c) Digital Creations. All rights reserved.
#
# This license has been certified as Open Source(tm).
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions in source code must retain the above copyright
# notice, this list of conditions, and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. Digital Creations requests that attribution be given to Zope
# in any manner possible. Zope includes a "Powered by Zope"
# button that is installed by default. While it is not a license
# violation to remove this button, it is requested that the
# attribution remain. A significant investment has been put
# into Zope, and this effort will continue if the Zope community
# continues to grow. This is one way to assure that growth.
#
# 4. All advertising materials and documentation mentioning
# features derived from or use of this software must display
# the following acknowledgement:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# In the event that the product being advertised includes an
# intact Zope distribution (with copyright and license included)
# then this clause is waived.
#
# 5. Names associated with Zope or Digital Creations must not be used to
# endorse or promote products derived from this software without
# prior written permission from Digital Creations.
#
# 6. Modified redistributions of any form whatsoever must retain
# the following acknowledgment:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# Intact (re-)distributions of any official Zope release do not
# require an external acknowledgement.
#
# 7. Modifications are encouraged but must be packaged separately as
# patches to official Zope releases. Distributions that do not
# clearly separate the patches from the original work must be clearly
# labeled as unofficial distributions. Modifications which do not
# carry the name Zope may be packaged in any form, as long as they
# conform to all of the clauses above.
#
#
# Disclaimer
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# This software consists of contributions made by Digital Creations and
# many individuals on behalf of Digital Creations. Specific
# attributions are listed in the accompanying credits file.
#
##############################################################################
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
lib/python/StructuredText/__init__.py
View file @
5d3f14c3
...
...
@@ -82,4 +82,31 @@
# attributions are listed in the accompanying credits file.
#
##############################################################################
import
HTMLClass
,
DocumentClass
import
ClassicDocumentClass
from
StructuredText
import
html_with_references
,
HTML
from
ST
import
Basic
import
DocBookClass
import
HTMLWithImages
import
DocumentWithImages
ClassicHTML
=
HTML
HTMLNG
=
HTMLClass
.
HTMLClass
()
def
HTML
(
src
,
level
=
0
,
type
=
type
,
StringType
=
type
(
''
)):
if
type
(
src
)
is
StringType
:
return
ClassicHTML
(
src
,
level
)
return
HTMLNG
(
src
,
level
)
Classic
=
ClassicDocumentClass
.
DocumentClass
()
Document
=
DocumentClass
.
DocumentClass
()
DocumentWithImages
=
DocumentWithImages
.
DocumentWithImages
()
HTMLWithImages
=
HTMLWithImages
.
HTMLWithImages
()
DocBookBook
=
DocBookClass
.
DocBookBook
DocBookChapter
=
DocBookClass
.
DocBookChapter
()
DocBookChapterWithFigures
=
DocBookClass
.
DocBookChapterWithFigures
()
DocBookArticle
=
DocBookClass
.
DocBookArticle
()
lib/python/StructuredText/regressions/examples.stx
View file @
5d3f14c3
...
...
@@ -10,6 +10,23 @@ Small Trials for Structured Text Formatting
- A word: _underlined_.
- A word **strong**.
- An inline example: '1+2'.
- Another example with a different format:
``x='spam''' or ``y='spam''' or ``<dtml-var spam>''.'
We can use expressions in the DTML var tag as
in ``<dtml-var "x+'.txt'">''
- A mult-line example::
blah
*foo bar*
<dtml-var yeha>
.. [1] (The referring text should be a paragraph, not a header, and
should contain a reference to this footnote, footnote "[1]".)
...
...
lib/python/StructuredText/regressions/regress
deleted
100755 → 0
View file @
1a7fdfd5
#!/bin/sh
# Compare current StructuredText.py processing against prior versions.
# You should see no output if there are no discrepancies.
regressdir
=
`
dirname
$0
`
PYTHONPATH
=
`
cd
$regressdir
/../..
;
pwd
`
:
$PYTHONPATH
export
PYTHONPATH
differences
=
""
for
i
in
*
.stx
;
do
stx
=
$i
base
=
`
basename
$i
.stx
`
ref
=
$base
.ref
new
=
$base
.new
python ../StructuredText.py
$stx
>
$new
if
cmp
$ref
$new
;
then
:
else
differences
=
"
$differences
$stx
"
fi
done
if
[
-n
"
$differences
"
]
;
then
echo
"Differences encountered processing
$differences
."
fi
lib/python/StructuredText/ts_regex.py
0 → 100644
View file @
5d3f14c3
##############################################################################
#
# Zope Public License (ZPL) Version 1.0
# -------------------------------------
#
# Copyright (c) Digital Creations. All rights reserved.
#
# This license has been certified as Open Source(tm).
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions in source code must retain the above copyright
# notice, this list of conditions, and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. Digital Creations requests that attribution be given to Zope
# in any manner possible. Zope includes a "Powered by Zope"
# button that is installed by default. While it is not a license
# violation to remove this button, it is requested that the
# attribution remain. A significant investment has been put
# into Zope, and this effort will continue if the Zope community
# continues to grow. This is one way to assure that growth.
#
# 4. All advertising materials and documentation mentioning
# features derived from or use of this software must display
# the following acknowledgement:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# In the event that the product being advertised includes an
# intact Zope distribution (with copyright and license included)
# then this clause is waived.
#
# 5. Names associated with Zope or Digital Creations must not be used to
# endorse or promote products derived from this software without
# prior written permission from Digital Creations.
#
# 6. Modified redistributions of any form whatsoever must retain
# the following acknowledgment:
#
# "This product includes software developed by Digital Creations
# for use in the Z Object Publishing Environment
# (http://www.zope.org/)."
#
# Intact (re-)distributions of any official Zope release do not
# require an external acknowledgement.
#
# 7. Modifications are encouraged but must be packaged separately as
# patches to official Zope releases. Distributions that do not
# clearly separate the patches from the original work must be clearly
# labeled as unofficial distributions. Modifications which do not
# carry the name Zope may be packaged in any form, as long as they
# conform to all of the clauses above.
#
#
# Disclaimer
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# This software consists of contributions made by Digital Creations and
# many individuals on behalf of Digital Creations. Specific
# attributions are listed in the accompanying credits file.
#
##############################################################################
"""Provide a thread-safe interface to regex
"""
import
regex
,
regsub
#, Sync
from
regex
import
*
from
regsub
import
split
,
sub
,
gsub
,
splitx
,
capwords
try
:
import
thread
except
:
class
allocate_lock
:
def
acquire
(
*
args
):
pass
def
release
(
*
args
):
pass
else
:
class
SafeFunction
:
_l
=
thread
.
allocate_lock
()
_a
=
_l
.
acquire
_r
=
_l
.
release
def
__init__
(
self
,
f
):
self
.
_f
=
f
def
__call__
(
self
,
*
args
,
**
kw
):
self
.
_a
()
try
:
return
apply
(
self
.
_f
,
args
,
kw
)
finally
:
self
.
_r
()
split
=
SafeFunction
(
split
)
sub
=
SafeFunction
(
sub
)
gsub
=
SafeFunction
(
gsub
)
splitx
=
SafeFunction
(
splitx
)
capwords
=
SafeFunction
(
capwords
)
allocate_lock
=
thread
.
allocate_lock
class
compile
:
_r
=
None
groupindex
=
None
def
__init__
(
self
,
*
args
):
self
.
_r
=
r
=
apply
(
regex
.
compile
,
args
)
self
.
_init
(
r
)
def
_init
(
self
,
r
):
lock
=
allocate_lock
()
self
.
__a
=
lock
.
acquire
self
.
__r
=
lock
.
release
self
.
translate
=
r
.
translate
self
.
givenpat
=
r
.
givenpat
self
.
realpat
=
r
.
realpat
def
match
(
self
,
string
,
pos
=
0
):
self
.
__a
()
try
:
return
self
.
_r
.
match
(
string
,
pos
)
finally
:
self
.
__r
()
def
search
(
self
,
string
,
pos
=
0
):
self
.
__a
()
try
:
return
self
.
_r
.
search
(
string
,
pos
)
finally
:
self
.
__r
()
def
search_group
(
self
,
str
,
group
,
pos
=
0
):
"""Search a string for a pattern.
If the pattern was not found, then None is returned,
otherwise, the location where the pattern was found,
as well as any specified group are returned.
"""
self
.
__a
()
try
:
r
=
self
.
_r
l
=
r
.
search
(
str
,
pos
)
if
l
<
0
:
return
None
return
l
,
apply
(
r
.
group
,
group
)
finally
:
self
.
__r
()
def
match_group
(
self
,
str
,
group
,
pos
=
0
):
"""Match a pattern against a string
If the string does not match the pattern, then None is
returned, otherwise, the length of the match, as well
as any specified group are returned.
"""
self
.
__a
()
try
:
r
=
self
.
_r
l
=
r
.
match
(
str
,
pos
)
if
l
<
0
:
return
None
return
l
,
apply
(
r
.
group
,
group
)
finally
:
self
.
__r
()
def
search_regs
(
self
,
str
,
pos
=
0
):
"""Search a string for a pattern.
If the pattern was not found, then None is returned,
otherwise, the 'regs' attribute of the expression is
returned.
"""
self
.
__a
()
try
:
r
=
self
.
_r
r
.
search
(
str
,
pos
)
return
r
.
regs
finally
:
self
.
__r
()
def
match_regs
(
self
,
str
,
pos
=
0
):
"""Match a pattern against a string
If the string does not match the pattern, then None is
returned, otherwise, the 'regs' attribute of the expression is
returned.
"""
self
.
__a
()
try
:
r
=
self
.
_r
r
.
match
(
str
,
pos
)
return
r
.
regs
finally
:
self
.
__r
()
class
symcomp
(
compile
):
def
__init__
(
self
,
*
args
):
self
.
_r
=
r
=
apply
(
regex
.
symcomp
,
args
)
self
.
_init
(
r
)
self
.
groupindex
=
r
.
groupindex
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment