Gridarta Editor
TokenMarkerFactory.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.textedit.textarea.tokenmarker;
21 
22 import java.io.File;
23 import java.util.HashMap;
24 import java.util.Map;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27 
32 public class TokenMarkerFactory {
33 
37  @NotNull
38  private static final String CROSSFIRE_DIALOG = "crossfire-dialog";
39 
43  @NotNull
44  private static final String DAIMONIN_AI = "daimonin-ai";
45 
49  @NotNull
50  private static final Map<String, Class<? extends TokenMarker>> TOKEN_MARKERS = new HashMap<>();
51 
52  static {
53  TOKEN_MARKERS.put("c", CTokenMarker.class);
54  TOKEN_MARKERS.put("cc", CTokenMarker.class);
55  TOKEN_MARKERS.put("cpp", CTokenMarker.class);
56  TOKEN_MARKERS.put("h", CTokenMarker.class);
57  TOKEN_MARKERS.put("hh", CTokenMarker.class);
58  TOKEN_MARKERS.put("htm", HTMLTokenMarker.class);
59  TOKEN_MARKERS.put("html", HTMLTokenMarker.class);
60  TOKEN_MARKERS.put("js", JavaScriptTokenMarker.class);
61  TOKEN_MARKERS.put("lua", LuaTokenMarker.class);
62  TOKEN_MARKERS.put("py", PythonTokenMarker.class);
63  TOKEN_MARKERS.put("xml", XMLTokenMarker.class);
66  }
67 
71  private TokenMarkerFactory() {
72  }
73 
79  @NotNull
80  public static TokenMarker createTokenMarker(@Nullable final File file) {
81  if (file == null) {
82  return new EmptyTokenMarker();
83  }
84 
85  final String filename = file.getName();
86  final int dotIndex = filename.lastIndexOf('.');
87  if (dotIndex == -1) {
88  return new EmptyTokenMarker();
89  }
90  return createTokenMarker(filename.substring(dotIndex + 1));
91  }
92 
98  @NotNull
99  public static TokenMarker createTokenMarker(@Nullable final String extension) {
100  if (extension == null) {
101  return new EmptyTokenMarker();
102  }
103 
104  final Class<? extends TokenMarker> tokenMarkerClass = TOKEN_MARKERS.get(extension);
105  if (tokenMarkerClass == null) {
106  return new EmptyTokenMarker();
107  }
108  try {
109  return tokenMarkerClass.newInstance();
110  } catch (final IllegalAccessException | InstantiationException ex) {
111  return new EmptyTokenMarker();
112  }
113  }
114 
115 }
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.TokenMarkerFactory
TokenMarkerFactory()
Private constructor to prevent instantiation.
Definition: TokenMarkerFactory.java:71
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.CROSSFIRE_DIALOG
static final String CROSSFIRE_DIALOG
File extension for CrossfireDialogTokenMarker.
Definition: TokenMarkerFactory.java:38
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.createTokenMarker
static TokenMarker createTokenMarker(@Nullable final String extension)
Creates a TokenMarker for a given file extension.
Definition: TokenMarkerFactory.java:99
net.sf.gridarta.textedit.textarea.tokenmarker.DaimoninAITokenMarker
A TokenMarker for the message field of Daimonin AI objects.
Definition: DaimoninAITokenMarker.java:39
net.sf.gridarta.textedit.textarea.tokenmarker.LuaTokenMarker
Lua token marker.
Definition: LuaTokenMarker.java:27
net.sf.gridarta.textedit.textarea.tokenmarker.CrossfireDialogTokenMarker
A TokenMarker for the message field of Crossfire objects allowing.
Definition: CrossfireDialogTokenMarker.java:30
net.sf.gridarta.textedit.textarea.tokenmarker.HTMLTokenMarker
HTML token marker.
Definition: HTMLTokenMarker.java:22
net.sf.gridarta.textedit.textarea.tokenmarker.JavaScriptTokenMarker
JavaScript token marker.
Definition: JavaScriptTokenMarker.java:19
net.sf.gridarta.textedit.textarea.tokenmarker.XMLTokenMarker
XML token marker.
Definition: XMLTokenMarker.java:17
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.DAIMONIN_AI
static final String DAIMONIN_AI
File extension for DaimoninAITokenMarker.
Definition: TokenMarkerFactory.java:44
net.sf.gridarta.textedit.textarea.tokenmarker.PythonTokenMarker
Python token marker.
Definition: PythonTokenMarker.java:24
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.createTokenMarker
static TokenMarker createTokenMarker(@Nullable final File file)
Creates a suitable TokenMarker for a given file.
Definition: TokenMarkerFactory.java:80
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory.TOKEN_MARKERS
static final Map< String, Class<? extends TokenMarker > > TOKEN_MARKERS
Maps file extensions to token marker classes.
Definition: TokenMarkerFactory.java:50
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker
A token marker that splits lines of text into tokens.
Definition: TokenMarker.java:32
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarkerFactory
A factory for creatingTokenMarker instances for Files.
Definition: TokenMarkerFactory.java:32
net.sf.gridarta.textedit.textarea.tokenmarker.EmptyTokenMarker
Empty token marker.
Definition: EmptyTokenMarker.java:30
net.sf.gridarta.textedit.textarea.tokenmarker.CTokenMarker
C token marker.
Definition: CTokenMarker.java:23