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