bndtools.editor.utils.ToolTips Maven / Gradle / Ivy
The newest version!
package bndtools.editor.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bndtools.api.ILogger;
import org.bndtools.api.Logger;
import org.eclipse.swt.widgets.Control;
import aQute.bnd.help.Syntax;
public class ToolTips {
private static final ILogger logger = Logger.getLogger(ToolTips.class);
static private String getStrippedExample(Syntax syntax, String constant) {
String example = syntax.getExample();
if ((example == null) || (example.trim()
.length() == 0)) {
return null;
}
Pattern p = Pattern.compile("^(\\s*" + Pattern.quote(constant.trim()) + "\\s*)(:|=|:=)(\\s*)(.*?)\\s*$");
Matcher matcher = p.matcher(example);
if (matcher.matches()) {
return example.substring(matcher.start(4), matcher.end(4));
}
return example;
}
/**
* Setup the message and the tooltip of a control. The Syntax class of bnd
* is used to determine these.
*
* @param control the control
* @param constant the constant, as mentioned in aQute.bnd.osgi.Constants
*/
static public void setupMessageAndToolTipFromSyntax(Control control, String constant) {
Syntax syntax = Syntax.HELP.get(constant);
if (syntax == null) {
logger.logError("No bnd syntax found for " + constant, null);
syntax = new Syntax(constant, "Description of " + constant, constant + ": Example for " + constant, null,
null);
}
String values = syntax.getValues();
if (values != null) {
/* filter out macros */
values = values.replaceAll("\\$\\{[^\\}]*\\}", "");
values = values.replaceAll(",\\s*,", ",");
values = values.replaceAll("(^,|,$)", "");
}
if ((values == null) || (values.trim()
.length() == 0)) {
values = "";
} else {
values = "\n\nProposed Values:\n" + values.trim()
.replaceAll("\\s*,\\s*", ", ");
}
String examples = getStrippedExample(syntax, constant);
if (examples == null) {
examples = "";
} else {
examples = "\n\nExample:\n" + examples;
}
String tt = syntax.getLead() + values + examples;
control.setToolTipText(tt);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy