[Zope] Structured Text with Images in regular Zope?
Wed, 30 May 2001 07:54:00 -0400
Michel Pelletier <firstname.lastname@example.org> wrote:
> On Tue, 29 May 2001, Mike Renfro wrote:
>> On Tue, May 29, 2001 at 11:10:36AM -0400, marc lindahl wrote:
>> > I concur -- it would be nice to add an easy image tag in STX. Just
>> > as double quotes is supposed to create a link, some other syntax to
>> > generate an OBJECT tag (or, intelligently, IMG if an image... for,
>> > ugh, NS4 compatibility), for inclusion of images, sound, video, etc.
>> The syntax is already there in the code for the Zope book -- I forgot
>> to mention that earlier. My problem is in making the book's
>> StructuredText code work with regular Zope. Making it work with the
>> STX_Document ZClass would be even better.
> The book code is in Zope too, it's just not exposed in any way. You would
> have to do your processing in an external method.
> Zope does a really poor job of exposing stx to users. The only interface
> is <dtml-var fmt=structured-text> and that sucks for a few reasons:
> You can't use other input parser, like for images.
> You can't use other outputs, like docbook
> The stx is turned into a dom and transformed every time, instead of
> being cached, making it slow.
> I had written a pure python product called STXDocument that exposed all of
> this functionality through an API and addable object. Someone at DC
> however, probably mistakenly, deleted it from the CVS repository (or moved
> it to where I can't find it) without informing me, so it's gone.
> I suggest using an External Method to hack you way to the
> StructuredText.HTMLWithImages.HTMLWithImages class. The syntax is similar
> to a link in stx:
> "Image alt tag contents":img:/path/to/image
Here is how we added "embedded images" in the CMF (just recently):
- Created a utility function, '_format_stx', with two supporting classes,
'CMFDocumentWithImages' and 'CMFHtmlWithImages'::
# StructuredText handling.
from StructuredText.HTMLWithImages import HTMLWithImages
_STXDWI = StructuredText.DocumentWithImages.__class__
class CMFDocumentClass( StructuredText.DocumentWithImages.__class__ ):
Override DWI to get '_' into links.
_URL_AND_PUNC = r'([a-zA-Z0-9_\@\.\,\?\!\/\:\;\-\#\~]+)'
def doc_href( self
, expr1 = re.compile( _STXDWI._DQUOTEDTEXT
, expr2 = re.compile( _STXDWI._DQUOTEDTEXT
return _STXDWI.doc_href( self, s, expr1, expr2 )
CMFDocumentClass = CMFDocumentClass()
class CMFHtmlWithImages( HTMLWithImages ):
Special subclass of HTMLWithImages, overriding document().
def document(self, doc, level, output):
HTMLWithImages.document renders full HTML (head, title,
CMF Purposes, we don't want that. We just want those nice
body parts perfectly rendered.
for c in doc.getChildNodes():
CMFHtmlWithImages = CMFHtmlWithImages()
def _format_stx( text, level=1 ):
Render STX to HTML.
st = StructuredText.Basic( text ) # Creates the basic DOM
if not st: # If it's an empty object
return "" # return now or have errors!
doc = CMFDocumentClass( st )
html = CMFHtmlWithImages( doc, level )
- Changed our Docuement class (as well as other STX clients) to call
'_format_stx' whenever the content changes, capturing the result as
the 'cooked' version.
- We render the Document without using the 'fmt="strucutred-text"'
The code for '_format_stx' whould package OK as an ExternalMethod,
I think. Hope this helps,
Tres Seaver email@example.com
Digital Creations "Zope Dealers" http://www.zope.org