#186979 - Custom extensions for Smarty files, corrected cc offering outside delimiters
1.1 --- a/php.smarty/manifest.mf Mon Jun 14 10:39:20 2010 +0200
1.2 +++ b/php.smarty/manifest.mf Mon Jun 14 14:35:44 2010 +0200
1.3 @@ -2,5 +2,5 @@
1.4 OpenIDE-Module: org.netbeans.modules.php.smarty
1.5 OpenIDE-Module-Layer: org/netbeans/modules/php/smarty/resources/layer.xml
1.6 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/php/smarty/resources/Bundle.properties
1.7 -OpenIDE-Module-Specification-Version: 1.30
1.8 +OpenIDE-Module-Specification-Version: 1.31
1.9
2.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/TplEditorSupport.java Mon Jun 14 10:39:20 2010 +0200
2.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/TplEditorSupport.java Mon Jun 14 14:35:44 2010 +0200
2.3 @@ -90,7 +90,7 @@
2.4
2.5 @Override
2.6 protected boolean asynchronousOpen() {
2.7 - return true;
2.8 + return true;
2.9 }
2.10
2.11 @Override
2.12 @@ -104,8 +104,8 @@
2.13 StyledDocument doc = super.createStyledDocument(kit);
2.14
2.15 // see TplKit.createDefaultDocument;
2.16 - Runnable postInitRunnable = (Runnable)doc.getProperty("postInitRunnable"); //NOI18N
2.17 - if(postInitRunnable != null) {
2.18 + Runnable postInitRunnable = (Runnable) doc.getProperty("postInitRunnable"); //NOI18N
2.19 + if (postInitRunnable != null) {
2.20 postInitRunnable.run();
2.21 }
2.22
3.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/CodeCompletionUtils.java Mon Jun 14 10:39:20 2010 +0200
3.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/CodeCompletionUtils.java Mon Jun 14 14:35:44 2010 +0200
3.3 @@ -36,18 +36,17 @@
3.4 *
3.5 * Portions Copyrighted 2010 Sun Microsystems, Inc.
3.6 */
3.7 -
3.8 package org.netbeans.modules.php.smarty.editor.completion;
3.9
3.10 import java.util.Locale;
3.11 import javax.swing.text.BadLocationException;
3.12 import javax.swing.text.Document;
3.13 -import org.netbeans.modules.editor.NbEditorDocument;
3.14 +import org.netbeans.api.lexer.TokenHierarchy;
3.15 +import org.netbeans.api.lexer.TokenSequence;
3.16 import org.netbeans.modules.editor.NbEditorUtilities;
3.17 import org.netbeans.modules.php.smarty.SmartyFramework;
3.18 -import org.netbeans.modules.php.smarty.SmartyPhpModuleCustomizerExtender;
3.19 +import org.netbeans.modules.php.smarty.editor.lexer.TplTopTokenId;
3.20 import org.netbeans.modules.php.smarty.editor.utlis.LexerUtils;
3.21 -import org.netbeans.modules.php.smarty.ui.options.SmartyOptions;
3.22 import org.openide.util.Exceptions;
3.23
3.24 /**
3.25 @@ -61,11 +60,7 @@
3.26 public static String getTextPrefix(Document doc, int offset) {
3.27 int readLength = (COMPLETION_MAX_FILTER_LENGHT > offset) ? offset : COMPLETION_MAX_FILTER_LENGHT;
3.28 try {
3.29 - int lastWS = getLastWS(doc.getText(offset - readLength, readLength));
3.30 - String preWord = doc.getText(offset - lastWS, lastWS);
3.31 - if (preWord.startsWith(SmartyFramework.getOpenDelimiter(NbEditorUtilities.getFileObject(doc)))) {
3.32 - return preWord.substring(SmartyFramework.getOpenDelimiter(NbEditorUtilities.getFileObject(doc)).length());
3.33 - }
3.34 + int lastWS = getLastWS(doc.getText(offset - readLength, readLength), SmartyFramework.getOpenDelimiter(NbEditorUtilities.getFileObject(doc)));
3.35 return doc.getText(offset - lastWS, lastWS);
3.36 } catch (BadLocationException ex) {
3.37 Exceptions.printStackTrace(ex);
3.38 @@ -77,10 +72,12 @@
3.39 return getTextPrefix(doc, offset).length();
3.40 }
3.41
3.42 - public static int getLastWS(String area) {
3.43 - for (int i = area.length()-1; i >= 0; i--) {
3.44 + public static int getLastWS(String area, String openDelimiter) {
3.45 + for (int i = area.length() - 1; i >= 0; i--) {
3.46 if (LexerUtils.isWS(area.charAt(i))) {
3.47 - return area.length()-i-1;
3.48 + return area.length() - i - 1;
3.49 + } else if (area.substring(i).startsWith(openDelimiter)) {
3.50 + return area.length() - i - openDelimiter.length();
3.51 }
3.52 }
3.53 return area.length();
3.54 @@ -90,4 +87,18 @@
3.55 return text.toLowerCase(Locale.ENGLISH).startsWith(prefix.toLowerCase(Locale.ENGLISH));
3.56 }
3.57
3.58 + public static boolean insideSmartyCode(Document doc, int offset) {
3.59 + TokenHierarchy tokenHierarchy = TokenHierarchy.get(doc);
3.60 + TokenSequence tokenSequence = tokenHierarchy.tokenSequence();
3.61 +
3.62 + tokenSequence.move(offset);
3.63 + if (tokenSequence.moveNext() || tokenSequence.movePrevious()) {
3.64 + Object tokenID = tokenSequence.token().id();
3.65 + if (tokenID == TplTopTokenId.T_HTML || tokenID == TplTopTokenId.T_SMARTY_CLOSE_DELIMITER) {
3.66 + return false;
3.67 + }
3.68 + }
3.69 + return true;
3.70 + }
3.71 +
3.72 }
4.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionProvider.java Mon Jun 14 10:39:20 2010 +0200
4.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/completion/TplCompletionProvider.java Mon Jun 14 14:35:44 2010 +0200
4.3 @@ -88,7 +88,7 @@
4.4
4.5 private static class Query extends AbstractQuery {
4.6
4.7 - private volatile Collection<? extends CompletionItem> items = Collections.<CompletionItem>emptyList();
4.8 + private volatile Collection<? extends CompletionItem> items = Collections.<CompletionItem>emptyList();
4.9 private JTextComponent component;
4.10
4.11 @Override
4.12 @@ -100,7 +100,7 @@
4.13 protected void doQuery(CompletionResultSet resultSet, Document doc, int caretOffset) {
4.14 try {
4.15 TplCompletionQuery.CompletionResult result = new TplCompletionQuery(doc, caretOffset).query();
4.16 - if(result != null) {
4.17 + if (result != null && CodeCompletionUtils.insideSmartyCode(doc, caretOffset)) {
4.18 items = result.getItems();
4.19 } else {
4.20 items = Collections.emptyList();
4.21 @@ -117,9 +117,9 @@
4.22 String prefix = CodeCompletionUtils.getTextPrefix(component.getDocument(), component.getCaretPosition());
4.23
4.24 //check the items
4.25 - for(CompletionItem item : items) {
4.26 - if(item instanceof TplCompletionItem) {
4.27 - if(CodeCompletionUtils.startsWithIgnoreCase( ((TplCompletionItem)item).getItemText(), prefix)) {
4.28 + for (CompletionItem item : items) {
4.29 + if (item instanceof TplCompletionItem) {
4.30 + if (CodeCompletionUtils.startsWithIgnoreCase(((TplCompletionItem) item).getItemText(), prefix)) {
4.31 return true; //at least one item will remain
4.32 }
4.33 }
4.34 @@ -133,15 +133,16 @@
4.35 String prefix = CodeCompletionUtils.getTextPrefix(component.getDocument(), component.getCaretPosition());
4.36
4.37 //check the items
4.38 - for(CompletionItem item : items) {
4.39 - if(item instanceof TplCompletionItem) {
4.40 - if(CodeCompletionUtils.startsWithIgnoreCase(((TplCompletionItem)item).getItemText(), prefix)) {
4.41 + for (CompletionItem item : items) {
4.42 + if (item instanceof TplCompletionItem) {
4.43 + if (CodeCompletionUtils.startsWithIgnoreCase(((TplCompletionItem) item).getItemText(), prefix)) {
4.44 resultSet.addItem(item);
4.45 }
4.46 }
4.47 }
4.48 resultSet.finish();
4.49 }
4.50 +
4.51 }
4.52
4.53 public static class DocQuery extends AbstractQuery {
5.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/embedding/TplEmbeddingProvider.java Mon Jun 14 10:39:20 2010 +0200
5.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/embedding/TplEmbeddingProvider.java Mon Jun 14 14:35:44 2010 +0200
5.3 @@ -60,6 +60,7 @@
5.4 public class TplEmbeddingProvider extends EmbeddingProvider {
5.5
5.6 public static final String GENERATED_CODE = "@@@"; //NOI18N
5.7 + private boolean isPhpEnabled;
5.8
5.9 @Override
5.10 public List<Embedding> getEmbeddings(Snapshot snapshot) {
5.11 @@ -86,10 +87,10 @@
5.12 while (sequence.moveNext()) {
5.13 Token t = sequence.token();
5.14 if (t.id().getClass() == TplTopTokenId.class && isSmartyToken((TplTopTokenId) t.id())) {
5.15 -// if (isPhpEnabled) {
5.16 -// isPhpEnabled = false;
5.17 -// embeddings.add(snapshot.create(";?>", "text/x-php5"));
5.18 -// }
5.19 + if (isPhpEnabled) {
5.20 + isPhpEnabled = false;
5.21 + embeddings.add(snapshot.create(";?>", "text/x-php5"));
5.22 + }
5.23 if (from < 0) {
5.24 from = sequence.offset();
5.25 }
5.26 @@ -104,21 +105,21 @@
5.27 }
5.28 len += t.length();
5.29 if (from >= 0) {
5.30 -// if (t.id() == TplTopTokenId.T_PHP) {
5.31 -// if (!isPhpEnabled) {
5.32 -// isPhpEnabled = true;
5.33 -// embeddings.add(snapshot.create("<?", "text/x-php5"));
5.34 -// }
5.35 -// embeddings.add(snapshot.create(from, len, "text/x-php5")); //NOI18N
5.36 -// } else {
5.37 -// if (isPhpEnabled) {
5.38 -// isPhpEnabled = false;
5.39 -// embeddings.add(snapshot.create(";?>", "text/x-php5"));
5.40 -// }
5.41 - embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.42 + if (t.id() == TplTopTokenId.T_PHP) {
5.43 + if (!isPhpEnabled) {
5.44 + isPhpEnabled = true;
5.45 + embeddings.add(snapshot.create("<?", "text/x-php5"));
5.46 + }
5.47 embeddings.add(snapshot.create(from, len, "text/x-php5")); //NOI18N
5.48 - embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.49 -// }
5.50 + } else {
5.51 + if (isPhpEnabled) {
5.52 + isPhpEnabled = false;
5.53 + embeddings.add(snapshot.create(";?>", "text/x-php5"));
5.54 + }
5.55 +// embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.56 + embeddings.add(snapshot.create(from, len, "text/x-php5")); //NOI18N
5.57 +// embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.58 + }
5.59 }
5.60
5.61 from = -1;
5.62 @@ -126,9 +127,9 @@
5.63 }
5.64 }
5.65 if (from >= 0) {
5.66 - embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.67 +// embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.68 embeddings.add(snapshot.create(from, len, "text/x-php5")); //NOI18N
5.69 - embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.70 +// embeddings.add(snapshot.create(GENERATED_CODE, "text/x-php5"));
5.71 }
5.72 if (embeddings.isEmpty()) {
5.73 return Collections.emptyList();
6.1 --- a/php.smarty/src/org/netbeans/modules/php/smarty/editor/lexer/TplTopTokenId.java Mon Jun 14 10:39:20 2010 +0200
6.2 +++ b/php.smarty/src/org/netbeans/modules/php/smarty/editor/lexer/TplTopTokenId.java Mon Jun 14 14:35:44 2010 +0200
6.3 @@ -36,7 +36,6 @@
6.4 *
6.5 * Portions Copyrighted 2008 Sun Microsystems, Inc.
6.6 */
6.7 -
6.8 package org.netbeans.modules.php.smarty.editor.lexer;
6.9
6.10 import java.util.Collection;
6.11 @@ -61,16 +60,15 @@
6.12 */
6.13 public enum TplTopTokenId implements TokenId {
6.14
6.15 - T_HTML (null, "smartytop"),
6.16 - T_SMARTY (null, "smarty"),
6.17 - T_SMARTY_CLOSE_DELIMITER (null, "smarty_delimiter"),
6.18 - T_SMARTY_OPEN_DELIMITER (null, "smarty_delimiter"),
6.19 + T_HTML(null, "smartytop"),
6.20 + T_SMARTY(null, "smarty"),
6.21 + T_SMARTY_CLOSE_DELIMITER(null, "smarty_delimiter"),
6.22 + T_SMARTY_OPEN_DELIMITER(null, "smarty_delimiter"),
6.23 T_COMMENT(null, "comment"),
6.24 T_LITERAL_DEL(null, "literal"),
6.25 T_ERROR(null, "error"),
6.26 T_PHP(null, "php_embedding"),
6.27 T_PHP_DEL(null, "php_del");
6.28 -
6.29 private final String fixedText;
6.30 private final String primaryCategory;
6.31
6.32 @@ -78,15 +76,14 @@
6.33 this.fixedText = fixedText;
6.34 this.primaryCategory = primaryCategory;
6.35 }
6.36 -
6.37 +
6.38 public String fixedText() {
6.39 return fixedText;
6.40 }
6.41 -
6.42 +
6.43 public String primaryCategory() {
6.44 return primaryCategory;
6.45 }
6.46 -
6.47 private static final Language<TplTopTokenId> language =
6.48 new LanguageHierarchy<TplTopTokenId>() {
6.49
6.50 @@ -110,15 +107,14 @@
6.51 protected String mimeType() {
6.52 return "text/x-tpl";
6.53 }
6.54 -
6.55 +
6.56 @Override
6.57 protected LanguageEmbedding<?> embedding(Token<TplTopTokenId> token,
6.58 - LanguagePath languagePath, InputAttributes inputAttributes) {
6.59 + LanguagePath languagePath, InputAttributes inputAttributes) {
6.60 TplTopTokenId id = token.id();
6.61 if (id == T_HTML) {
6.62 - return LanguageEmbedding.create(HTMLTokenId.language(), 0, 0, true);
6.63 - }
6.64 - else if (id == T_SMARTY) {
6.65 + return LanguageEmbedding.create(PHPTokenId.language(), 0, 0, true);
6.66 + } else if (id == T_SMARTY) {
6.67 return LanguageEmbedding.create(TplTokenId.language(), 0, 0, false);
6.68 } else if (id == T_PHP) {
6.69 return LanguageEmbedding.create(PHPTokenId.languageInPHP(), 0, 0, true);
6.70 @@ -126,15 +122,13 @@
6.71
6.72 return null; // No embedding
6.73 }
6.74 -
6.75 }.language();
6.76
6.77 - /**
6.78 - * Is returning top level language.
6.79 - * @return top level Language
6.80 - */
6.81 - public static Language<TplTopTokenId> language() {
6.82 + /**
6.83 + * Is returning top level language.
6.84 + * @return top level Language
6.85 + */
6.86 + public static Language<TplTopTokenId> language() {
6.87 return language;
6.88 }
6.89 -
6.90 }