/*
* EditorLanguage.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.common.reditor;
/**
* Models a language for CodeMirror.
*
* == HOW TO ADD A NEW LANGUAGE TO THE SOURCE EDITOR ==
* 1) Edit ./resources/colors.css, add all necessary CSS rules there
* 2) Put your parser file in ./resources/
* 3) Add your parser to REditorResources, following the example of the other
* parsers
* 4) Add your parser to this class's ALL_PARSER_URLS
* 5) In this class, add a static LANG_xyz field for your language
* 6) In this class, edit the static getLanguageForExtension to return your
* EditorLanguage for any applicable extensions
*/
public class EditorLanguage
{
// RStudio-maintained or extended modes
public static final EditorLanguage LANG_R = new EditorLanguage(
"mode/r", true);
public static final EditorLanguage LANG_RDOC = new EditorLanguage(
"mode/rdoc", false, false);
public static final EditorLanguage LANG_TEX = new EditorLanguage(
"mode/tex", false);
public static final EditorLanguage LANG_SWEAVE = new EditorLanguage(
"mode/sweave", true);
public static final EditorLanguage LANG_MARKDOWN = new EditorLanguage(
"mode/markdown", false);
public static final EditorLanguage LANG_RMARKDOWN = new EditorLanguage(
"mode/rmarkdown", true);
public static final EditorLanguage LANG_DCF = new EditorLanguage(
"mode/dcf", false, false);
public static final EditorLanguage LANG_MERMAID = new EditorLanguage(
"mode/mermaid", false, true);
public static final EditorLanguage LANG_RHTML = new EditorLanguage(
"mode/rhtml", true);
public static final EditorLanguage LANG_CPP = new EditorLanguage(
"mode/c_cpp", true);
public static final EditorLanguage LANG_STAN = new EditorLanguage(
"mode/stan", false, true);
// Modes borrowed from Ace
public static final EditorLanguage LANG_PLAIN = new EditorLanguage(
"ace/mode/text", false);
public static final EditorLanguage LANG_HTML = new EditorLanguage(
"ace/mode/html", false, true);
public static final EditorLanguage LANG_CSS = new EditorLanguage(
"ace/mode/css", false, true);
public static final EditorLanguage LANG_JAVASCRIPT = new EditorLanguage(
"ace/mode/javascript", false, true);
public static final EditorLanguage LANG_PYTHON = new EditorLanguage(
"ace/mode/python", false, true);
public static final EditorLanguage LANG_SQL = new EditorLanguage(
"mode/sql", false, true);
public static final EditorLanguage LANG_SH = new EditorLanguage(
"ace/mode/sh", false, false);
public static final EditorLanguage LANG_YAML = new EditorLanguage(
"ace/mode/yaml", false, false);
public static final EditorLanguage LANG_XML = new EditorLanguage(
"ace/mode/xml", false, false);
public static final EditorLanguage LANG_GRAPHVIZ = new EditorLanguage("ace/mode/dot", false, true);
public static final EditorLanguage LANG_CLOJURE = new EditorLanguage("ace/mode/clojure", false, true);
public static final EditorLanguage LANG_COFFEE = new EditorLanguage("ace/mode/coffee", false, true);
public static final EditorLanguage LANG_CSHARP = new EditorLanguage("ace/mode/csharp", false, true);
public static final EditorLanguage LANG_GITIGNORE = new EditorLanguage("ace/mode/gitignore", false, false);
public static final EditorLanguage LANG_GO = new EditorLanguage("ace/mode/golang", false, true);
public static final EditorLanguage LANG_GROOVY = new EditorLanguage("ace/mode/groovy", false, true);
public static final EditorLanguage LANG_HASKELL = new EditorLanguage("ace/mode/haskell", false, true);
public static final EditorLanguage LANG_HAXE = new EditorLanguage("ace/mode/haxe", false, true);
public static final EditorLanguage LANG_JAVA = new EditorLanguage("ace/mode/java", false, true);
public static final EditorLanguage LANG_JULIA = new EditorLanguage("ace/mode/julia", false, true);
public static final EditorLanguage LANG_LISP = new EditorLanguage("ace/mode/lisp", false, true);
public static final EditorLanguage LANG_LUA = new EditorLanguage("ace/mode/lua", false, true);
public static final EditorLanguage LANG_MAKEFILE = new EditorLanguage("ace/mode/makefile", false, true);
public static final EditorLanguage LANG_MATLAB = new EditorLanguage("ace/mode/matlab", false, true);
public static final EditorLanguage LANG_PERL = new EditorLanguage("ace/mode/perl", false, true);
public static final EditorLanguage LANG_RUBY = new EditorLanguage("ace/mode/ruby", false, true);
public static final EditorLanguage LANG_RUST = new EditorLanguage("ace/mode/rust", false, true);
public static final EditorLanguage LANG_SCALA = new EditorLanguage("ace/mode/scala", false, true);
public static final EditorLanguage LANG_SNIPPETS = new EditorLanguage("ace/mode/snippets", false, false);
/**
*
* @param parserName The name of the parser--it's found at the top of the
* parser .js file
* e. This MUST match the value inside the .js file or else
* dynamic language switching (Save As... with a different extension)
* won't work.
* @param useRCompletion If true, then Tab is intercepted for completion
*/
public EditorLanguage(
String parserName,
boolean useRCompletion)
{
this(parserName, useRCompletion, false);
}
public EditorLanguage(
String parserName,
boolean useRCompletion,
boolean useAceLanguageTools)
{
parserName_ = parserName;
useRCompletion_ = useRCompletion;
useAceLanguageTools_ = useAceLanguageTools;
}
public String getParserName()
{
return parserName_;
}
public String getModeName()
{
int lastSlash = parserName_.lastIndexOf('/');
return parserName_.substring(lastSlash + 1);
}
public boolean useRCompletion()
{
return useRCompletion_;
}
public boolean useAceLanguageTools()
{
return useAceLanguageTools_;
}
private final String parserName_;
private final boolean useRCompletion_;
private final boolean useAceLanguageTools_;
}