package com.google.sitebricks.compiler;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
/**
Based on jsoup.nodes.TextNode by Jonathan Hedley, jonathan@hedley.net
AnnotationNode is for Sitebricks text annotations such as
@Repeat(...) or @ShowIf(true)<div ... />
*/
public class AnnotationNode extends TextNode {
static final String ANNOTATION_KEY = "_annokey";
static final String ANNOTATION_CONTENT = "_annocontent";
static final String ANNOTATION = "_annotation";
/**
Create a new AnnotationNode representing the supplied (unencoded) text).
@param annotation raw text
@param baseUri base uri
@see #createFromEncoded(String, String)
*/
public AnnotationNode(String annotation, String baseUri) {
super(annotation, baseUri);
this.annotation(annotation);
}
public AnnotationNode(String annotation) {
super(annotation, "");
this.annotation(annotation);
}
public String nodeName() {
return "#annotation";
}
/**
* Set the annotation of this node.
* @param annotation raw annotation
* @return this, for chaining
*/
public AnnotationNode annotation(String annotation) {
this.attr(ANNOTATION, annotation);
String[] kc = AnnotationParser.extractKeyAndContent(annotation);
this.attr(ANNOTATION_KEY, kc[0]);
this.attr(ANNOTATION_CONTENT, kc[1]);
return this;
}
public Node apply (Node annotate) {
annotate.attr(ANNOTATION, this.attr(ANNOTATION));
annotate.attr(ANNOTATION_KEY, this.attr(ANNOTATION_KEY));
annotate.attr(ANNOTATION_CONTENT, this.attr(ANNOTATION_CONTENT));
return annotate;
}
}