That's a good idea -- I'll do that in a followup. On Thu, Aug 14, 2008 at 6:53 PM, Kevin Brown <[EMAIL PROTECTED]> wrote:
> You should introduce a new semantically meaningful exception type rather > than recycling GadgetException here. We really need to get rid of as much > usage of that as possible. > > On Thu, Aug 14, 2008 at 6:33 PM, <[EMAIL PROTECTED]> wrote: > > > Author: johnh > > Date: Thu Aug 14 18:33:55 2008 > > New Revision: 686103 > > > > URL: http://svn.apache.org/viewvc?rev=686103&view=rev > > Log: > > Second try. > > > > Resolution to SHINDIG-501. > > > > Framework for generating a parse tree of HTML and CSS content. > > > > These interfaces are defined in order to cleanly separate parsing logic > > from classes that manipulate a given parse tree (HTML or CSS). The parse > > tree objects are intended to be only as complex as is needed for the vast > > majority of content rewriting manipulation. They provide structure but > > no more semantics (validation, CSS resolution, etc.) than that. > > > > This code is new, and does not affect existing functionality. > > > > > > Added: > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetCssParser.java > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssDeclaration.java > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssRule.java > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlAttribute.java > > > > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlNode.java > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetCssParser.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetCssParser.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetCssParser.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetCssParser.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,34 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +import org.apache.shindig.gadgets.GadgetException; > > + > > +import java.util.List; > > + > > +/** > > + * Parser for CSS content. Parsing may be done on a fully-formed > > + * CSS block, such as the contents of a CSS file or <style> block. > > + * > > + * [EMAIL PROTECTED] ParsedCssRule} and [EMAIL PROTECTED] > > ParsedCssDeclaration} for additional > > + * parsing requirements and semantics. > > + */ > > +public interface GadgetCssParser { > > + public List<ParsedCssRule> parse(String css) throws GadgetException; > > + public List<ParsedCssDeclaration> parseInline(String style) throws > > GadgetException; > > +} > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,34 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +import org.apache.shindig.gadgets.GadgetException; > > + > > +import java.util.List; > > + > > +/** > > + * Parser for arbitrary HTML content. The content may simply be a > > + * fragment or snippet of HTML rather than a fully-structured Document, > > + * so the interface returns a list of [EMAIL PROTECTED] ParsedHtmlNode} > > objects > > + * rather than a single top-level item. > > + * > > + * [EMAIL PROTECTED] ParsedHtmlNode} for parsing details > > + */ > > +public interface GadgetHtmlParser { > > + public List<ParsedHtmlNode> parse(String source) throws > GadgetException; > > +} > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssDeclaration.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssDeclaration.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssDeclaration.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssDeclaration.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,36 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +/** > > + * Interface for a single CSS declaration, eg. color: blue; in: > > + * #id { > > + * color: blue; > > + * } > > + */ > > +public interface ParsedCssDeclaration { > > + /** > > + * @return Name of the declaration > > + */ > > + public String getName(); > > + > > + /** > > + * @return Value of the declaration > > + */ > > + public String getValue(); > > +} > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssRule.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssRule.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssRule.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedCssRule.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,37 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +import java.util.List; > > + > > +/** > > + * Simplified interface for a parsed CSS rule. > > + * > > + * For rule: > > + * #id1, .class1 { > > + * color: blue; > > + * font-size: 10 em; > > + * } > > + * > > + * Selectors are "#id1" and ".class1", and ParsedCssDeclarations > > + * are name/value "color"/"blue" and "font-size"/"10 em". > > + */ > > +public interface ParsedCssRule { > > + public List<String> getSelectors(); > > + public List<ParsedCssDeclaration> getDeclarations(); > > +} > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlAttribute.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlAttribute.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlAttribute.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlAttribute.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,33 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +/** > > + * Simple name/value representation of a parsed HTML attribute. > > + */ > > +public interface ParsedHtmlAttribute { > > + /** > > + * @return HTML attribute name. > > + */ > > + public String getName(); > > + > > + /** > > + * @return HTML attribute value. > > + */ > > + public String getValue(); > > +} > > > > Added: > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlNode.java > > URL: > > > http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlNode.java?rev=686103&view=auto > > > > > ============================================================================== > > --- > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlNode.java > > (added) > > +++ > > > incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/ParsedHtmlNode.java > > Thu Aug 14 18:33:55 2008 > > @@ -0,0 +1,56 @@ > > +/** > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you under the Apache License, Version 2.0 (the > > + * "License"); you may not use this file except in compliance > > + * with the License. You may obtain a copy of the License at > > + * > > + * http://www.apache.org/licenses/LICENSE-2.0 > > + * > > + * Unless required by applicable law or agreed to in writing, > > + * software distributed under the License is distributed on an > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > + * KIND, either express or implied. See the License for the > > + * specific language governing permissions and limitations under the > > License. > > + */ > > +package org.apache.shindig.gadgets.parse; > > + > > +import java.util.List; > > + > > +/** > > + * Simplified interface wrapping a unit of parsed HTML. > > + * Each [EMAIL PROTECTED] ParsedHtmlNode} is either text-type or > > + * tag-type. The following snippet of HTML provides an example of both > > types: > > + * > > + * <div id="foo">content<div> > > + * > > + * This corresponds to a single top-level [EMAIL PROTECTED] ParsedHtmlNode} > > + * where [EMAIL PROTECTED] getTagName()} returns "div" and has one > > + * [EMAIL PROTECTED] ParsedHtmlAttribute} with N/V "id"/"foo", [EMAIL > > PROTECTED] getText()} > > + * is [EMAIL PROTECTED] null}, and has one [EMAIL PROTECTED] > > ParsedHtmlNode} child. That > > + * child in turn has [EMAIL PROTECTED] getText()} equal to "content", with > > + * all other methods returning [EMAIL PROTECTED] null}. > > + */ > > +public interface ParsedHtmlNode { > > + /** > > + * @return Tag name for an HTML element, or null if text-type. > > + */ > > + public String getTagName(); > > + > > + /** > > + * @return List of HTML attributes on an element, or null if text-type > > + */ > > + public List<ParsedHtmlAttribute> getAttributes(); > > + > > + /** > > + * @return List of child nodes of the HTML element, or null if > text-type > > + */ > > + public List<ParsedHtmlNode> getChildren(); > > + > > + /** > > + * @return Unescaped text as contained in an HTML string; null if > > tag-type > > + */ > > + public String getText(); > > +} > > > > > > >

