This commit is contained in:
qwerty287 2022-09-26 18:46:08 +02:00
parent ebfaf8bd3b
commit d6d1dc1d01
No known key found for this signature in database
GPG key ID: E0464C650D9D25B2
2 changed files with 124 additions and 1 deletions

View file

@ -0,0 +1,122 @@
package org.mian.gitnex.helpers.codeeditor.languages;
import com.amrdeveloper.codeview.Code;
import com.amrdeveloper.codeview.Keyword;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
/**
* @author qwerty287
*/
public class JavaScriptLanguage extends Language {
private static final Pattern PATTERN_BUILTINS = Pattern.compile("[,:;[->]{}()]");
private static final Pattern PATTERN_SINGLE_LINE_COMMENT = Pattern.compile("//[^\\n]*");
private static final Pattern PATTERN_MULTI_LINE_COMMENT =
Pattern.compile("/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/");
private static final Pattern PATTERN_ATTRIBUTE = Pattern.compile("\\.[a-zA-Z0-9_]+");
private static final Pattern PATTERN_OPERATION =
Pattern.compile(
":|==|>|<|!=|>=|<=|->|=|>|<|%|-|-=|%=|\\+|\\-|\\-=|\\+=|\\^|\\&|\\|::|\\?|\\*");
private static final Pattern PATTERN_TODO_COMMENT =
Pattern.compile("//\\s?(TODO|todo)\\s[^\n]*");
private static final Pattern PATTERN_NUMBERS = Pattern.compile("\\b(\\d*[.]?\\d+)\\b");
private static final Pattern PATTERN_CHAR = Pattern.compile("['](.*?)[']");
private static final Pattern PATTERN_STRING = Pattern.compile("[\"](.*?)[\"]");
private static final Pattern PATTERN_HEX = Pattern.compile("0x[0-9a-fA-F]+");
public static String getCommentStart() {
return "//";
}
public static String getCommentEnd() {
return "";
}
@Override
public Pattern getPattern(LanguageElement element) {
switch (element) {
case KEYWORD:
return Pattern.compile("\\b(" + String.join("|", getKeywords()) + ")\\b");
case BUILTIN:
return PATTERN_BUILTINS;
case NUMBER:
return PATTERN_NUMBERS;
case CHAR:
return PATTERN_CHAR;
case STRING:
return PATTERN_STRING;
case HEX:
return PATTERN_HEX;
case SINGLE_LINE_COMMENT:
return PATTERN_SINGLE_LINE_COMMENT;
case MULTI_LINE_COMMENT:
return PATTERN_MULTI_LINE_COMMENT;
case ATTRIBUTE:
return PATTERN_ATTRIBUTE;
case OPERATION:
return PATTERN_OPERATION;
case TODO_COMMENT:
return PATTERN_TODO_COMMENT;
case ANNOTATION:
case GENERIC:
default:
return null;
}
}
@Override
public String[] getKeywords() {
return new String[] {
"abstract", "arguments", "boolean", "break",
"byte", "case", "catch", "char",
"const", "continue", "debugger", "default",
"delete", "do", "double", "else",
"eval", "false", "final", "finally",
"float", "for", "function", "goto",
"if", "implements", "in", "instanceof",
"int", "interface", "let", "long",
"native", "new", "null", "package",
"private", "protected", "public", "return",
"short", "static", "switch", "synchronized",
"this", "throw", "throws", "transient",
"true", "try", "typeof", "var",
"void", "volatile", "while", "with",
"yield",
"class", "enum", "export", "extends",
"import", "super"
};
}
@Override
public List<Code> getCodeList() {
List<Code> codeList = new ArrayList<>();
String[] keywords = getKeywords();
for (String keyword : keywords) {
codeList.add(new Keyword(keyword));
}
return codeList;
}
@Override
public String getName() {
return "JavaScript";
}
@Override
public Set<Character> getIndentationStarts() {
Set<Character> characterSet = new HashSet<>();
characterSet.add('{');
return characterSet;
}
@Override
public Set<Character> getIndentationEnds() {
Set<Character> characterSet = new HashSet<>();
characterSet.add('}');
return characterSet;
}
}

View file

@ -29,7 +29,8 @@ public abstract class Language {
new GoLanguage(),
new PhpLanguage(),
new XmlLanguage(),
new HtmlLanguage()
new HtmlLanguage(),
new JavaScriptLanguage()
};
for (Language l : languagesArray) {
languages.put(l.getName().toUpperCase(), l);