JavascriptLanguage.java

1    /* 
2     * Copyright 2000-2005 JetBrains s.r.o. 
3     * 
4     * Licensed under the Apache License, Version 2.0 (the "License"); 
5     * you may not use this file except in compliance with the License. 
6     * You may obtain a copy of the License at 
7     * 
8     * http://www.apache.org/licenses/LICENSE-2.0 
9     * 
10    * Unless required by applicable law or agreed to in writing, software 
11    * distributed under the License is distributed on an "AS IS" BASIS, 
12    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
13    * See the License for the specific language governing permissions and 
14    * limitations under the License. 
15    */ 
16   package com.intellij.lang.javascript; 
17    
18   import com.intellij.formatting.FormattingModel; 
19   import com.intellij.formatting.FormattingModelBuilder; 
20   import com.intellij.ide.structureView.StructureViewBuilder; 
21   import com.intellij.ide.structureView.StructureViewModel; 
22   import com.intellij.ide.structureView.TreeBasedStructureViewBuilder; 
23   import com.intellij.lang.Commenter; 
24   import com.intellij.lang.Language; 
25   import com.intellij.lang.PairedBraceMatcher; 
26   import com.intellij.lang.ParserDefinition; 
27   import com.intellij.lang.annotation.Annotator; 
28   import com.intellij.lang.findUsages.FindUsagesProvider; 
29   import com.intellij.lang.folding.FoldingBuilder; 
30   import com.intellij.lang.javascript.findUsages.JavaScriptFindUsagesProvider; 
31   import com.intellij.lang.javascript.folding.JavaScriptFoldingBuilder; 
32   import com.intellij.lang.javascript.formatter.JSFormattingModel; 
33   import com.intellij.lang.javascript.formatter.blocks.JSBlock; 
34   import com.intellij.lang.javascript.psi.JSElement; 
35   import com.intellij.lang.javascript.structureView.JSStructureViewModel; 
36   import com.intellij.lang.javascript.surroundWith.JSExpressionSurroundDescriptor; 
37   import com.intellij.lang.javascript.surroundWith.JSStatementsSurroundDescriptor; 
38   import com.intellij.lang.javascript.validation.JSAnnotatingVisitor; 
39   import com.intellij.lang.surroundWith.SurroundDescriptor; 
40   import com.intellij.openapi.fileTypes.SyntaxHighlighter; 
41   import com.intellij.openapi.project.Project; 
42   import com.intellij.psi.PsiElement; 
43   import com.intellij.psi.PsiFile; 
44   import com.intellij.psi.codeStyle.CodeStyleSettings; 
45   import org.jetbrains.annotations.NotNull; 
46    
47   /** 
48    * Created by IntelliJ IDEA. 
49    * User: max 
50    * Date: Jan 27, 2005 
51    * Time: 6:03:49 PM 
52    * To change this template use File | Settings | File Templates. 
53    */ 
54   public class JavascriptLanguage extends Language { 
55     private static final JSAnnotatingVisitor ANNOTATOR = new JSAnnotatingVisitor(); 
56     private final static SurroundDescriptor[] SURROUND_DESCRIPTORS = new SurroundDescriptor[] { 
57       new JSExpressionSurroundDescriptor(), 
58       new JSStatementsSurroundDescriptor() 
59     }; 
60    
61     public JavascriptLanguage() { 
62       super("JavaScript", "text/javascript", "application/javascript"); 
63     } 
64    
65     public ParserDefinition getParserDefinition() { 
66       return new JavascriptParserDefinition(); 
67     } 
68    
69     @NotNull 
70     public SyntaxHighlighter getSyntaxHighlighter(Project project) { 
71       return new JSHighlighter(); 
72     } 
73    
74     public FoldingBuilder getFoldingBuilder() { 
75       return new JavaScriptFoldingBuilder(); 
76     } 
77    
78     public PairedBraceMatcher getPairedBraceMatcher() { 
79       return new JSBraceMatcher(); 
80     } 
81    
82     public Annotator getAnnotator() { 
83       return ANNOTATOR; 
84     } 
85    
86     public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) { 
87       return new TreeBasedStructureViewBuilder() { 
88         public StructureViewModel createStructureViewModel() { 
89           return new JSStructureViewModel((JSElement)psiFile); 
90         } 
91       }; 
92     } 
93    
94     @NotNull 
95     public FindUsagesProvider getFindUsagesProvider() { 
96       return new JavaScriptFindUsagesProvider(); 
97     } 
98    
99     public Commenter getCommenter() { 
100      return new JavascriptCommenter(); 
101    } 
102   
103    public FormattingModelBuilder getFormattingModelBuilder() { 
104      return new FormattingModelBuilder() { 
105        @NotNull 
106        public FormattingModel createModel(final PsiElement element, final CodeStyleSettings settings) { 
107          return new JSFormattingModel(element.getContainingFile(), settings, new JSBlock(element.getNode(), null, null, null, settings)); 
108        } 
109      }; 
110    } 
111   
112    @NotNull 
113    public SurroundDescriptor[] getSurroundDescriptors() { 
114      return SURROUND_DESCRIPTORS; 
115    } 
116  } 
117