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();
+}