package com.google.sitebricks.compiler;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.nodes.Node;
/**
* @author shawn
*/
public class AnnotationParser {
// TODO regex is not powerful enough to parse annotation expressions
public static final Pattern WIDGET_ANNOTATION_REGEX = Pattern.compile("(@\\w+(\\([\\w,=\"'/()?:><!\\[\\];{}. \\|&+-]*\\))?[ \n\r\t]*)\\Z");
public static String readAnnotation(String text) {
String annotation = null;
final Matcher matcher = WIDGET_ANNOTATION_REGEX.matcher(text);
if (matcher.find())
annotation = matcher.group().trim();
return annotation;
}
public static String readAnnotation(Node node) {
if (null == node) return null;
Node preceding = node.previousSibling();
//if this is a text node, then match for annotations
return readAnnotation(node.outerHtml());
}
public static String stripAnnotation(String text) {
return Dom.stripAnnotation(text); // TODO - move it here?
}
/**
* @param annotation A string representing an unparsed annotation of the form: <pre>
* "{@literal @}MyAnn(property = [expr], ...)"</pre>
* @return A partially parsed array following this structure:<pre>
* [0] -> "MyAnn" <br/>
* [1] -> "prop = [expr], ..."
* </pre>
*/
public static String[] extractKeyAndContent(String annotation) {
return Dom.extractKeyAndContent(annotation); // TODO - move it here?
}
}