/*
* 01/06/2009
*
* MarkupTagComletion.java - A completion representing a tag in markup, such
* as HTML or XML.
*
* This library is distributed under a modified BSD license. See the included
* RSyntaxTextArea.License.txt file for details.
*/
package org.fife.ui.autocomplete;
import java.util.ArrayList;
import java.util.List;
import org.fife.ui.autocomplete.ParameterizedCompletion.Parameter;
/**
* A completion representing a tag in markup, such as HTML or XML.
*
* @author Robert Futrell
* @version 1.0
*/
public class MarkupTagCompletion extends AbstractCompletion {
private String name;
private String desc;
private String definedIn;
/**
* Attributes of the tag.
*/
private List<Parameter> attrs;
/**
* Constructor.
*
* @param provider The parent provider instance.
* @param name The name of the tag.
*/
public MarkupTagCompletion(CompletionProvider provider, String name) {
super(provider);
this.name = name;
}
/**
* Adds HTML describing the attributes of this tag to a buffer.
*
* @param sb The buffer to append to.
*/
protected void addAttributes(StringBuilder sb) {
// TODO: Localize me.
int attrCount = getAttributeCount();
if (attrCount>0) {
sb.append("<b>Attributes:</b><br>");
sb.append("<center><table width='90%'><tr><td>");
for (int i=0; i<attrCount; i++) {
Parameter attr = getAttribute(i);
sb.append(" <b>");
sb.append(attr.getName()!=null ? attr.getName() :
attr.getType());
sb.append("</b> ");
String desc = attr.getDescription();
if (desc!=null) {
sb.append(desc);
}
sb.append("<br>");
}
sb.append("</td></tr></table></center><br><br>");
}
}
protected void addDefinitionString(StringBuilder sb) {
sb.append("<html><b>").append(name).append("</b>");
}
/**
* Returns all attributes of this tag.
*
* @return A list of {@link ParameterizedCompletion.Parameter}s.
* @see #getAttribute(int)
* @see #getAttributeCount()
*/
public List<Parameter> getAttributes() {
return attrs;
}
/**
* Returns the specified {@link ParameterizedCompletion.Parameter}.
*
* @param index The index of the attribute to retrieve.
* @return The attribute.
* @see #getAttributeCount()
*/
public Parameter getAttribute(int index) {
return attrs.get(index);
}
/**
* Returns the number of attributes of this tag.
*
* @return The number of attributes of this tag.
* @see #getAttribute(int)
*/
public int getAttributeCount() {
return attrs==null ? 0 : attrs.size();
}
/**
* Returns where this variable is defined.
*
* @return Where this variable is defined.
* @see #setDefinedIn(String)
*/
public String getDefinedIn() {
return definedIn;
}
/**
* Returns a short description of this variable. This should be an
* HTML snippet.
*
* @return A short description of this variable. This may be
* <code>null</code>.
* @see #setDescription(String)
*/
public String getDescription() {
return desc;
}
/**
* Returns the name of this tag.
*
* @return The name of this tag.
*/
public String getName() {
return name;
}
/**
* {@inheritDoc}
*/
public String getReplacementText() {
return getName();
}
/**
* {@inheritDoc}
*/
public String getSummary() {
StringBuilder sb = new StringBuilder();
addDefinitionString(sb);
possiblyAddDescription(sb);
addAttributes(sb);
possiblyAddDefinedIn(sb);
return sb.toString();
}
/**
* Adds some HTML describing where this variable is defined, if this
* information is known.
*
* @param sb The buffer to append to.
*/
protected void possiblyAddDefinedIn(StringBuilder sb) {
if (definedIn!=null) {
sb.append("<hr>Defined in:"); // TODO: Localize me
sb.append(" <em>").append(definedIn).append("</em>");
}
}
/**
* Adds the description text as HTML to a buffer, if a description is
* defined.
*
* @param sb The buffer to append to.
*/
protected void possiblyAddDescription(StringBuilder sb) {
if (desc!=null) {
sb.append("<hr><br>");
sb.append(desc);
sb.append("<br><br><br>");
}
}
/**
* Sets where this variable is defined.
*
* @param definedIn Where this variable is defined.
* @see #getDefinedIn()
*/
public void setDefinedIn(String definedIn) {
this.definedIn = definedIn;
}
/**
* Sets the short description of this tag. This should be an
* HTML snippet.
*
* @param desc A short description of this tag. This may be
* <code>null</code>.
* @see #getDescription()
*/
public void setDescription(String desc) {
this.desc = desc;
}
/**
* Sets the attributes of this tag.
*
* @param attrs The attributes.
* @see #getAttribute(int)
* @see #getAttributeCount()
*/
public void setAttributes(List<? extends Parameter> attrs) {
// Deep copy so parsing can re-use its array.
this.attrs = new ArrayList<Parameter>(attrs);
}
}