Monday, April 18, 2005

Spyce tag compilation example

I had the question,

What do you mean by "compiling" tag libraries?

I mean, that Spyce compiles that chatbox.spy into in a more-or-less 1.3-legal python module. (The classcode/handlers/exports features aren't in 1.3, but you get the idea.) The compiled result looks like this (output courtesy of the Spyce -c option):

class boxlet(spyceTagPlus):
  name='boxlet'
  buffer=False
  exports=1
  classcode=((7,4),(10,83),"def addLine(self):\n    # (use get() in case server restarted)\n    request._api.getServerGlobals().get('chatlines', []).append(request['newline'])",'test-chatbox.spy')

  handlers=[('e73068ffe2d1ead1793b6790ec48f92a04fd18641','self.addLine')]

  def syntax(self):
    self.syntaxSingleOnly()
  
  def begin(self,width='300',lines='5'):
    pool=self._api._startModule('pool',None,None)
    taglib=self._api.getModules()['taglib']
    taglib.load('form','form.py','f')
    self._out.writeStatic('\n\n')
    pool.init()
    self._out.writeStatic('\n<div width="')
    self._out.writeExpr(width)
    self._out.writeStatic('">\n')
    i=-int(lines)
    line=None# for first export

    for line in pool.setdefault('chatlines',[])[i:]:
      self._out.writeStatic('  <div>')
      self._out.writeExpr(line)
      self._out.writeStatic('</div>\n')
      
    self._out.writeStatic('  <div>\n  <f:text name=newline />')
    taglib.tagPush('f','text',locals(),{'name':'newline'},False)
    try:
      taglib.tagBegin()
      taglib.tagBody()
      taglib.tagEnd()
    finally:taglib.tagPop()

    self._out.writeStatic('\n  <f:submit handler=\'self.addLine\' value="Send" />')
    taglib.tagPush('f','submit',locals(),{'_handlerid':'e73068ffe2d1ead1793b6790ec48f92a04fd18641','value':'Send'},False)
    try:
      taglib.tagBegin()
      taglib.tagBody()
      taglib.tagEnd()
    finally:taglib.tagPop()

    self._out.writeStatic('\n  <f:submit value="Refresh" />')
    taglib.tagPush('f','submit',locals(),{'_handlerid':'e73068ffe2d1ead1793b6790ec48f92a04fd18642','value':'Refresh'},False)
    try:
      taglib.tagBegin()
      taglib.tagBody()
      taglib.tagEnd()
    finally:taglib.tagPop()
    self._out.writeStatic('\n  </div>\n</div>\n\n')
    self.line=line
  
  def export(self):
    return{'last':self.line}
    
class spyceTagcollection(spyceTagLibrary):
  tags=[boxlet]

You can see why not many of these got written. :)

3 comments:

Jason Bunting said...

Jonathan . . . remember when I asked you why you didn't host your own blog . . . ? :P You should get a blog that uses some form of CAPTCHA/HIP on the comments.

Does Blogger have that as an option?

Jonathan Ellis said...

I don't think it does... I really really want to avoid sysadminning yet another system though. :-|

Viagra online without prescription said...

I read something about this in news, that a guy were demanded because he use a copy the code of a software that were patented by a company.