viewer.add(in.trim());
txtInput.setText("");
part.setDirty(true);
+ save();
}
}
});
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import net.mograsim.plugin.AsmOps;
+
public class AsmContentAssistProcessor implements IContentAssistProcessor
{
// }
// return new ICompletionProposal[0];
// text.
- return new ICompletionProposal[] { new AsmOperationProposal("ADD", "Addition operation", offset),
- new AsmOperationProposal("MUL", "Multiplication operation", offset) };
+ return AsmOps.ops.stream().map(o -> new AsmOperationProposal(o, "", offset)).toArray(ICompletionProposal[]::new);
}
@Override
@Override
public char[] getCompletionProposalAutoActivationCharacters()
{
- return new char[] { '\t' }; // NON-NLS-1
+ return new char[] { '\n', '\r' }; // NON-NLS-1
}
@Override
{
private final Token comment = new Token(null);
- private final Token std = new Token(null);
+// private final Token std = new Token(null);
private final Token op = new Token(null);
private final Token label = new Token(null);
private final Token number = new Token(null);
rules = new IRule[4];
rules[0] = new EndOfLineRule(";", comment);
rules[1] = new AsmLabelRule(label);
- rules[2] = new InstructionRule(op, true);
+ rules[2] = new InstructionRule(Token.UNDEFINED, op, true);
rules[3] = new AsmNumberRule(number);
scanner.setRules(rules);
package net.mograsim.plugin.asm.editor;
+import java.lang.ref.WeakReference;
+
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.reconciler.Reconciler;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
+import net.mograsim.plugin.AsmOps;
+
public class AsmReconciler extends Reconciler
{
super.install(textViewer);
ProjectionViewer pViewer = (ProjectionViewer) textViewer;
fStrategy.setProjectionViewer(pViewer);
+ WeakReference<ITextViewer> tv = new WeakReference<>(textViewer);
+ AsmOps.addListener(ops ->
+ {
+ System.out.println("refresh");
+ if (tv.get() != null)
+ tv.get().invalidateTextPresentation();
+ });
}
}
\ No newline at end of file
package net.mograsim.plugin.asm.editor.rules;\r
\r
+import java.util.Objects;\r
import java.util.Set;\r
\r
import org.eclipse.jface.text.rules.IToken;\r
\r
public class InstructionRule extends WordRule\r
{\r
- public InstructionRule(IToken defaultToken)\r
+ private final IToken instToken;\r
+\r
+ public InstructionRule(IToken defaultToken, IToken instToken)\r
{\r
- this(defaultToken, false);\r
+ this(defaultToken, instToken, false);\r
}\r
\r
- public InstructionRule(IToken defaultToken, boolean ignoreCase)\r
+ public InstructionRule(IToken defaultToken, IToken instToken, boolean ignoreCase)\r
{\r
- super(new InstructionDetector(), defaultToken, ignoreCase);\r
+ super(new InstructionDetector(), Objects.requireNonNull(defaultToken), ignoreCase);\r
+ this.instToken = Objects.requireNonNull(instToken);\r
AsmOps.addListener(this::update);\r
}\r
\r
void update(Set<String> words)\r
{\r
fWords.clear();\r
- words.forEach(s -> fWords.put(s, fDefaultToken));\r
+ words.forEach(s -> fWords.put(s, instToken));\r
}\r
\r
static class InstructionDetector implements IWordDetector\r