[+google-caja-discuss]

On Thu, Aug 7, 2008 at 9:27 PM, John Hjelmstad <[EMAIL PROTECTED]> wrote:
> On Thu, Aug 7, 2008 at 3:20 AM, Ben Laurie <[EMAIL PROTECTED]> wrote:
>
>> On Wed, Aug 6, 2008 at 11:34 PM, John Hjelmstad <[EMAIL PROTECTED]> wrote:
>> > This proposal effectively enables the renderer to become a multi-pass
>> > compiler for gadget content (essentially, arbitrary web content). Such a
>> > compiler can provide several benefits: static optimization of gadget
>> content
>> > (auto-proxying of images, whitespace/comment removal, consolidation of
>> CSS
>> > blocks), security benefits (caja et al), new functionality (annotation of
>> > content for stats, document analysis, container-specific features), etc.
>> To
>> > my knowledge no such infrastructure exists today (with the possible
>> > exception of Caja itself, which I'd like to dovetail with this work).
>>
>> Caja clearly provides a large chunk of the code you'd need for this.
>> I'd like to hear how we'd manage to avoid duplication between the two
>> projects.
>>
>> A generalised framework for manipulating content sounds like a great
>> idea, but probably should not live in either of the two projects (Caja
>> and Shindig) but rather should be shared by both of them, I suspect.
>
>
> I agree on both counts. As I mentioned, the piece of this idea that I expect
> to change the most is the parse tree, and Caja's .parser.html and
> .parser.css packages contain much of what I've thrown in here as a base.
>
> My key requirements are:
> * Lightweight framework.
> * Parser modularity, mostly for HTML parsers (to re-use the good work done
> by WebKit or Gecko.. CSS/JS can come direct from Caja I'd bet)
> * Automatic maintenance of DOM<->String conversion.
> * Easy to manipulate structure.

I'm not sure what the value of parser modularity is? If the resulting
tree is different, then that's a problem for people processing the
tree. And if it is not, then why do we care?

>
> I'd love to see both projects share the same base syntax tree
> representations. I considered .parser.html(.DomTree) and .parser.css for
> these, but at the moment these appeared to be a little more tied to Caja's
> lexer/parser implementation than I preferred (though I admit
> AbstractParseTreeNode contains most of what's needed).
>
> To be sure, I don't see this as an end-all-be-all transformation system in
> any way. I'd just like to put *something* reasonable in place that we can
> play with, provide some benefit, and enhance into a truly sophisticated
> vision of document rewriting.
>
>
>>
>>
>> >  c. Add Gadget.getParsedContent().
>> >    i. Returns a mutable GadgetContentParseTree used to manipulate Gadget
>> > Contents.
>> >    ii. Mutable tree calls back to the Gadget object indicating when any
>> > change is made, and emits an error if setContent() has been called in the
>> > interim.
>>
>> In Caja we have been moving towards immutable trees...
>
>
> Interested to hear more about this. The whole idea is for the gadget's tree
> representation to be modifiable. Doing that with immutable trees to me
> suggests that a rewriter would have to create a completely new tree and set
> it as a representation of new content. That's convenient as far as the
> Gadget's maintenance of String<->Tree representations is concerned... but
> seems pretty heavyweight for many types of edits: in-situ modifications of
> text, content reordering, etc. That's particularly so in a single-threaded
> (viz rewriting) environment.

Never having been entirely sold on the concept, I'll let those on the
Caja team who advocate immutability explain why.

Reply via email to