Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Schindl2014-11-04 10:54:08 +0000
committerTom Schindl2014-11-04 10:54:08 +0000
commit4b12172c0bef77174e68a89fa3798876e0ea60d8 (patch)
treea5fe4a00b0547f15f95be56ef582dd04985fa9ce
parent98e95a1c0a1e8ade9501e7c2d847ab8b1505dbe6 (diff)
downloadorg.eclipse.efxclipse-4b12172c0bef77174e68a89fa3798876e0ea60d8.tar.gz
org.eclipse.efxclipse-4b12172c0bef77174e68a89fa3798876e0ea60d8.tar.xz
org.eclipse.efxclipse-4b12172c0bef77174e68a89fa3798876e0ea60d8.zip
Bug 446116 - [css] Editor does not recognize @font-face
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.css.ui/src/org/eclipse/fx/ide/css/ui/contentassist/CssDslProposalProvider.java116
-rwxr-xr-xbundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF26
2 files changed, 94 insertions, 48 deletions
diff --git a/bundles/tooling/org.eclipse.fx.ide.css.ui/src/org/eclipse/fx/ide/css/ui/contentassist/CssDslProposalProvider.java b/bundles/tooling/org.eclipse.fx.ide.css.ui/src/org/eclipse/fx/ide/css/ui/contentassist/CssDslProposalProvider.java
index d765fc828..3a4bc1914 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css.ui/src/org/eclipse/fx/ide/css/ui/contentassist/CssDslProposalProvider.java
+++ b/bundles/tooling/org.eclipse.fx.ide.css.ui/src/org/eclipse/fx/ide/css/ui/contentassist/CssDslProposalProvider.java
@@ -16,9 +16,11 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.fx.ide.css.ui.extapi.UIProposal;
import org.eclipse.fx.ide.css.util.Utils;
import org.eclipse.jface.text.BadLocationException;
@@ -37,12 +39,14 @@ import org.eclipse.xtext.ui.editor.hover.DispatchingEObjectTextHover;
import org.eclipse.fx.ide.css.cssDsl.CssDslFactory;
import org.eclipse.fx.ide.css.cssDsl.CssTok;
import org.eclipse.fx.ide.css.cssDsl.css_declaration;
+import org.eclipse.fx.ide.css.cssDsl.font_face;
import org.eclipse.fx.ide.css.cssDsl.ruleset;
import org.eclipse.fx.ide.css.cssDsl.selector;
import org.eclipse.fx.ide.css.cssDsl.stylesheet;
import org.eclipse.fx.ide.css.extapi.CssExt;
import org.eclipse.fx.ide.css.extapi.Proposal;
import org.eclipse.fx.ide.css.extapi.Proposal.Type;
+import org.eclipse.fx.ide.css.extapi.SimpleProposal;
import com.google.inject.Inject;
@@ -55,23 +59,23 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
@Inject
private CssExt cssExt;
-
+
@Inject
private DispatchingEObjectTextHover hoverDispatcher;
-
+
@Inject
private ILabelProvider labelProvider;
-
-
+
+
private void acceptProposals(List<Proposal> proposals, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
for (Proposal p : proposals) {
-
+
final Image img = labelProvider.getImage(CssDslFactory.eINSTANCE.createcss_property());
-
+
if (p instanceof UIProposal) {
ConfigurableCompletionProposal cp = (ConfigurableCompletionProposal) createCompletionProposal(p.getLabel(), p.getLabel(), img, context);
final UIProposal uiP = (UIProposal)p;
-
+
if (cp != null) {
cp.setTextApplier(new ReplacementTextApplier() {
//@Override
@@ -87,18 +91,18 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
}
}
else {
-
+
ConfigurableCompletionProposal cp = (ConfigurableCompletionProposal) createCompletionProposal(p.getProposal(), p.getLabel(), img, context);
if (cp != null) {
cp.setAdditionalProposalInfo(p.getAdditionalInfo());
cp.setHover(hoverDispatcher);
-
+
cp.setTriggerCharacters(new char[] { ' ' });
-
+
if (p.getType() == Type.Property) {
// add ": " to proposal
cp.setTextApplier(new IReplacementTextApplier() {
-
+
@Override
public void apply(IDocument document, ConfigurableCompletionProposal proposal) throws BadLocationException {
document.replace(proposal.getReplacementOffset(), proposal.getReplacementLength(), proposal.getReplacementString() + ": ");
@@ -108,11 +112,11 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
}
if (p.getType() == Type.Value) {
cp.setTextApplier(new IReplacementTextApplier() {
-
+
private int findWSCountBeforeProposal(IDocument document, ConfigurableCompletionProposal proposal) throws BadLocationException {
// remove spaces " " before proposal
int offset = 0;
-
+
int amount = 10;
if (proposal.getReplacementOffset() - amount < 0) {
amount = proposal.getReplacementOffset();
@@ -126,18 +130,18 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
}
return offset;
}
-
+
@Override
public void apply(IDocument document, ConfigurableCompletionProposal proposal) throws BadLocationException {
if (proposal.getReplacementString().equals(";")) {
int wsCount = findWSCountBeforeProposal(document, proposal);
-
+
document.replace(proposal.getReplacementOffset()-wsCount, proposal.getReplacementLength()+wsCount, proposal.getReplacementString());
proposal.setCursorPosition(proposal.getCursorPosition()-wsCount);
}
else if (proposal.getReplacementString().equals(",")) {
int wsCount = findWSCountBeforeProposal(document, proposal);
-
+
document.replace(proposal.getReplacementOffset()-wsCount, proposal.getReplacementLength()+wsCount, proposal.getReplacementString() + " ");
proposal.setCursorPosition(proposal.getCursorPosition()+1-wsCount);
}
@@ -150,7 +154,7 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
});
}
cp.setPriority(p.getPriority());
-
+
acceptor.accept(cp);
}
else {
@@ -159,9 +163,9 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
}
}
}
-
-
-
+
+
+
private List<CssTok> findPrefixTokens(ContentAssistContext context) {
List<CssTok> prefixToks = new ArrayList<CssTok>();
if (context.getLastCompleteNode().getSemanticElement() instanceof CssTok) {
@@ -170,27 +174,29 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
if (tok == currentTok) break;
prefixToks.add(tok);
}
-
- // TEST
+
+ // TEST
prefixToks.add(currentTok);
}
return prefixToks;
}
-
+
private List<selector> findSelectors(css_declaration decl) {
if (decl.eContainer() instanceof ruleset) {
return ((ruleset)decl.eContainer()).getSelectors();
}
return Collections.emptyList();
}
-
-
+
public void complete_CssTok(css_declaration model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
- System.err.println("complete_CssTok prefixTok=" + findPrefixTokens(context) + "prefixString=" + context.getPrefix());
+ System.err.println("A DECLARATION!!!!");
+ if( model.eContainer() instanceof font_face ) {
+ return;
+ }
+
+// System.err.println("complete_CssTok prefixTok=" + findPrefixTokens(context) + "prefixString=" + context.getPrefix());
final List<Proposal> proposals = cssExt.getValueProposalsForProperty(Utils.getFile(model.eResource()),model,findSelectors(model), model.getProperty(), findPrefixTokens(context), context.getPrefix());
-
-
-
+
acceptProposals(proposals, context, acceptor);
}
@@ -207,20 +213,60 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
}
}
}
-
+
+ static class FontPropertyProposal extends SimpleProposal {
+
+ public FontPropertyProposal(String proposal) {
+ super(proposal);
+ }
+
+ @Override
+ public Type getType() {
+ return Type.Property;
+ }
+ }
+
+ private static <O extends EObject> void filterDuplicates(O model, Function<O, List<css_declaration>> f, List<Proposal> proposals) {
+ final Set<String> defined = new HashSet<>();
+ for (css_declaration d : f.apply(model)) {
+ defined.add(d.getProperty().getName());
+ }
+ final Iterator<Proposal> filterIterator = proposals.iterator();
+ while (filterIterator.hasNext()) {
+ Proposal curr = filterIterator.next();
+ if (defined.contains(curr.getProposal())) {
+ filterIterator.remove();
+ }
+ }
+ }
+
+ @Override
+ public void completeFont_face_Declarations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+ List<Proposal> proposals = new ArrayList<>();
+ proposals.add(new FontPropertyProposal("font-family")); //$NON-NLS-1$
+ proposals.add(new FontPropertyProposal("src")); //$NON-NLS-1$
+ proposals.add(new FontPropertyProposal("font-stretch")); //$NON-NLS-1$
+ proposals.add(new FontPropertyProposal("font-style")); //$NON-NLS-1$
+ proposals.add(new FontPropertyProposal("font-weight")); //$NON-NLS-1$
+ proposals.add(new FontPropertyProposal("unicode-range")); //$NON-NLS-1$
+ filterDuplicates((font_face)model, (o) -> o.getDeclarations(), proposals);
+ acceptProposals(proposals, context, acceptor);
+
+ super.completeFont_face_Declarations(model, assignment, context, acceptor);
+ }
+
public void completeRuleset_Declarations(ruleset model, Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
final List<Proposal> proposals = cssExt.getPropertyProposalsForSelector(Utils.getFile(model.eResource()),model,model.getSelectors());
filterDuplicates(model, proposals);
acceptProposals(proposals, context, acceptor);
}
-
+
// known issue
// for some reason autocompletion for the last property in a ruleset ends up here
// for now i try to get the current model, but in case we fail i return the full list
public void completeRuleset_Declarations(stylesheet model, Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
-
if (context.getPreviousModel() instanceof ruleset) {
ruleset ruleset = (ruleset) context.getPreviousModel();
final List<Proposal> proposals = cssExt.getPropertyProposalsForSelector(Utils.getFile(model.eResource()),model,ruleset.getSelectors());
@@ -232,13 +278,13 @@ public class CssDslProposalProvider extends AbstractCssDslProposalProvider {
acceptProposals(proposals, context, acceptor);
}
}
-
-
+
+
@Override
public void completeKeyword(Keyword keyword,
ContentAssistContext contentAssistContext,
ICompletionProposalAcceptor acceptor) {
return;
}
-
+
}
diff --git a/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF b/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
index 40108e7d1..8a15491ac 100755
--- a/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
+++ b/bundles/tooling/org.eclipse.fx.ide.css/META-INF/MANIFEST.MF
@@ -28,17 +28,17 @@ Import-Package: org.apache.commons.logging,
org.apache.log4j,
org.eclipse.xtext.xbase.lib
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.fx.ide.css;x-internal:=true,
- org.eclipse.fx.ide.css.cssDsl;x-internal:=true,
- org.eclipse.fx.ide.css.cssDsl.impl;x-internal:=true,
- org.eclipse.fx.ide.css.cssDsl.util;x-internal:=true,
- org.eclipse.fx.ide.css.extapi;x-internal:=true,
- org.eclipse.fx.ide.css.formatting;x-internal:=true,
- org.eclipse.fx.ide.css.parser.antlr;x-internal:=true,
- org.eclipse.fx.ide.css.parser.antlr.internal;x-internal:=true,
- org.eclipse.fx.ide.css.scoping;x-internal:=true,
- org.eclipse.fx.ide.css.serializer;x-internal:=true,
- org.eclipse.fx.ide.css.services;x-internal:=true,
- org.eclipse.fx.ide.css.util;x-internal:=true,
- org.eclipse.fx.ide.css.validation;x-internal:=true
+Export-Package: org.eclipse.fx.ide.css;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.cssDsl;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.cssDsl.impl;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.cssDsl.util;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.extapi;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.formatting;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.parser.antlr;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.parser.antlr.internal;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.scoping;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.serializer;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.services;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.util;x-friends:="org.eclipse.fx.ide.css.ui",
+ org.eclipse.fx.ide.css.validation;x-friends:="org.eclipse.fx.ide.css.ui"

Back to the top