Well, I tried to download and run Kid, and it fails. My system is Mac OS X, 1.3.7. Python is v2.3.
• Downloaded Kid-0.3
• Downloaded ElementTree
• Added both things to python path.
• Run KIDC -s Kid-0.3/test/basic-test.html.kid to produce the Python file below.
• Run python basic-test.html.py and I get the error below.

I tried looking through the code in basic-test.html.py but had difficulty understanding a word of it. Something to do with the way Kid is compiling the "for fruit in fruits" statement into code. Anybody have any pointers?

------------------------
basic-test.html.py:

from __future__ import generators
from elementtree import ElementTree
from kid.util import *
import pulltree
from pulltree import START, END, TEXT, TAIL, PullElement as Element
__all__ = ["expand"]
encoding = "utf-8"
media_type = 'text/html'

title = "Hello World"
def say_hello():
return "Hello world!"
fruits = ["apple", "orange", "kiwi", "M&M"]

some_links = [('http://python.org', 'Python'),
('http://www.planetpython.org/', 'Planet Python')]

import time

def expand(context=None):
context = context or {}
_elem = None
_e = Element('html', attrib=_k_attrib({}))
_e.namespaces = {u'http://naeblis.cx/ns/kid#': u'kid'}
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('head', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_cont = _k_generate_content(title, TEXT)
_e = Element('title', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('body', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:content')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_cont = _k_generate_content(say_hello(), TEXT)
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n\n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:repeat')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'These are some things I like to eat:')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('ul', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_cont = _k_generate_content(fruit, TEXT)
_e = Element('li', attrib=_k_attrib({'{http://naeblis.cx/ns/kid#}repeat': 'fruit in fruits'}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n \n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:if (False value)')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', "You shouldn't see anything after this paragraph..")
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
if False:
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'This should not be output or put out.')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n \n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:if (True value)')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'You ')
_e = Element('em', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'should')
yield (END, _elem); _elem = _elem.parent
yield ('tail', ' see something after this paragraph..')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
if True:
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'This should be output.')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n\n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'attribute interpolation')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('ul', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('li', attrib=_k_attrib({'{http://naeblis.cx/ns/kid#}repeat': 'link in some_links'}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_cont = _k_generate_content(link[1], TEXT)
_e = Element('a', attrib=_k_attrib({'href': [link[0]]}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('a', attrib=_k_attrib({'title': ['This ','should',' read ','like',' a ','normal',' sentence.']}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'The title attribute should read: "This should read like a normal sentence."')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('a', attrib=_k_attrib({'title': [None,None]}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', "The title attribute of this element shouldn't be output at all")
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n\n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:omit')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
yield ('text', '\n The containing <div> should be omitted.\n ')
yield ('tail', '\n ')
if not False:
_e = Element('div', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n The containing <div> should not be omitted.\n ')
if not False:
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
if not True:
_e = Element('div', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n The containing <div> should be omitted.\n ')
if not True:
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n \n ')
_e = Element('h3', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', 'kid:repeat (with nesting)')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('ul', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_e = Element('li', attrib=_k_attrib({'{http://naeblis.cx/ns/kid#}repeat': 'num1 in range(1,6)'}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_cont = _k_generate_content(num1, TEXT)
_e = Element('p', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
_e = Element('ul', attrib=_k_attrib({}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
yield ('text', '\n ')
_cont = _k_generate_content(str(num1) + str(num2), TEXT)
_e = Element('li', attrib=_k_attrib({'{http://naeblis.cx/ns/kid#}repeat': 'num2 in range(1,6)'}))
(_e.parent, _elem) = (_elem, _e)
yield (START, _elem)
if _cont is not None:
for _ev in _cont: yield _ev
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield ('tail', ' ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n ')
yield (END, _elem); _elem = _elem.parent
yield ('tail', '\n')
yield (END, _elem); _elem = _elem.parent
yield (TAIL, '\n')
if __name__ == '__main__':
import sys
pulltree.write(expand(), sys.stdout)


--------------------
Sample output when running python basic-test.html.py

[EMAIL PROTECTED] ~/svn/python/extern/kid-0.3/test% python basic-test.html.py
<?xml version='1.0' encoding='utf-8'?>
<html xmlns:kid="http://naeblis.cx/ns/kid#">
<head>
<title>Hello World</title>
</head>
<body>
<h3>kid:content</h3>
<p>Hello world!</p>

<h3>kid:repeat</h3>
<p>These are some things I like to eat:</p>
<ul>
Traceback (most recent call last):
File "basic-test.html.py", line 257, in ?
pulltree.write(expand(), sys.stdout)
File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/pulltree.py", line 149, in write
for text in serialize(stream, xml_decl, encoding):
File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/pulltree.py", line 171, in serialize
for ev, item in stream:
File "basic-test.html.py", line 76, in expand
_cont = _k_generate_content(fruit, TEXT)
NameError: global name 'fruit' is not defined
_________________________________________
winston wolff - (646) 827-2242 - http://www.stratolab.com - learning by creating

Reply via email to