|
|
|
|
|
|
|
|
|
Re: Auto convert keywords to uppercase while typing [message #1028725 is a reply to message #1028477] |
Thu, 28 March 2013 16:55   |
Cash Ko Messages: 21 Registered: May 2012 |
Junior Member |
|
|
Hi,
i founded 2 solutions, which is working fine to me.
NOTE: This is a basic version and can only recognise keywords separated by whitespaces.
Solution 1 ( quickier one ):
public class MyDslEditStrategyProvider extends DefaultAutoEditStrategyProvider {
@Inject
Provider<IGrammarAccess> iGrammar;
private Set<String> kwds;
@Override
protected void configure(IEditStrategyAcceptor acceptor) {
kwds = GrammarUtil.getAllKeywords(iGrammar.get().getGrammar());
IAutoEditStrategy strategy = new IAutoEditStrategy() {
@Override
public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
if ( command.text.length() == 0 || command.text.charAt(0) > ' ') return;
IRegion reg = ((XtextDocument) document).getLastDamage();
try {
String token = document.get(reg.getOffset(), reg.getLength());
String uToken = token.toUpperCase();
if ( uToken.equals(token) || !kwds.contains(uToken) ) return;
document.replace(reg.getOffset(), reg.getLength(), uToken);
} catch (Exception e) {}
}
};
acceptor.accept(strategy, IDocument.DEFAULT_CONTENT_TYPE);
super.configure(acceptor);
}
}
Solution 2 ( more stable ):
public class MyDslEditStrategyProvider extends DefaultAutoEditStrategyProvider {
@Inject
Provider<ITokenScanner> iScanner;
private ITokenScanner scanner;
private TextAttribute kwdatt;
@Override
protected void configure(IEditStrategyAcceptor acceptor) {
scanner = iScanner.get();
kwdatt = ((TokenScanner)scanner).getTextAttributeProvider().getAttribute("keyword");
IAutoEditStrategy strategy = new IAutoEditStrategy() {
@Override
public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
if ( command.text.length() == 0 || command.text.charAt(0) > ' ') return;
IRegion reg = ((XtextDocument) document).getLastDamage();
scanner.setRange(document, reg.getOffset(), reg.getLength());
IToken tok = scanner.nextToken();
if (!tok.getData().equals(kwdatt)) return;
try {
String token = document.get(reg.getOffset(), reg.getLength());
String uToken = token.toUpperCase();
if ( uToken.equals(token) ) return;
document.replace(reg.getOffset(), reg.getLength(), uToken);
} catch (Exception e) {}
}
};
acceptor.accept(strategy, IDocument.DEFAULT_CONTENT_TYPE);
super.configure(acceptor);
}
}
Many thanks to Christian for support!
[Updated on: Thu, 28 March 2013 18:54] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03171 seconds