KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > ModeList


1 /*
2  * ModeList.java
3  *
4  * Copyright (C) 1998-2004 Peter Graves
5  * $Id: ModeList.java,v 1.19 2004/06/08 19:20:03 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j;
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.Iterator JavaDoc;
26
27 public final class ModeList implements Constants
28 {
29     private static ModeList modeList;
30
31     public static synchronized ModeList getInstance()
32     {
33         if (modeList == null)
34             modeList = new ModeList();
35         return modeList;
36     }
37
38     private ArrayList JavaDoc list;
39
40     private ModeList()
41     {
42         list = new ArrayList JavaDoc();
43         addEntry(ARCHIVE_MODE, ARCHIVE_MODE_NAME, "ArchiveMode", false, null);
44         addEntry(ASM_MODE, ASM_MODE_NAME, "AsmMode", true, ".+\\.asm|.+\\inc");
45         addEntry(AUTOCONF_MODE, AUTOCONF_MODE_NAME, "AutoconfMode", true, "configure.ac|configure.in|aclocal.m4");
46         addEntry(BINARY_MODE, BINARY_MODE_NAME, "BinaryMode", true, null);
47         addEntry(CHECKIN_MODE, CHECKIN_MODE_NAME, "CheckinMode", false, null);
48         addEntry(COMPILATION_MODE, COMPILATION_MODE_NAME, "CompilationMode", false, null);
49         addEntry(CPP_MODE, CPP_MODE_NAME, "CppMode", true, "(.+\\.cpp)|(.+\\.cxx)|(.+\\.cc)|(.+\\.hpp)|(.+\\.hxx)|(.+\\.h)");
50         addEntry(CSS_MODE, CSS_MODE_NAME, "CSSMode", true, ".+\\.css");
51         addEntry(C_MODE, C_MODE_NAME, "CMode", true, ".+\\.c");
52         addEntry(DIFF_MODE, DIFF_MODE_NAME, "DiffMode", true, ".+\\.diff|.+\\.patch");
53         addEntry(DIRECTORY_MODE, DIRECTORY_MODE_NAME, "DirectoryMode", false, null);
54         addEntry(HTML_MODE, HTML_MODE_NAME, "HtmlMode", true, ".+\\.html?");
55         addEntry(IMAGE_MODE, IMAGE_MODE_NAME, "ImageMode", false, ".+\\.gif|.+\\.jpe?g|.+\\.png");
56         addEntry(JAVASCRIPT_MODE, JAVASCRIPT_MODE_NAME, "JavaScriptMode", true, ".+\\.js");
57         addEntry(JAVA_MODE, JAVA_MODE_NAME, "JavaMode", true, ".+\\.java|.+\\.jad");
58         addEntry(JDB_MODE, JDB_MODE_NAME, "JdbMode", false, null);
59         addEntry(LISP_MODE, LISP_MODE_NAME, "LispMode", true, ".+\\.[ej]l|.*\\.li?sp|.*\\.cl|.*\\.emacs|.*\\.asd");
60         addEntry(LISP_SHELL_MODE, LISP_SHELL_MODE_NAME, "LispShellMode", false, null);
61         addEntry(LIST_OCCURRENCES_MODE, LIST_OCCURRENCES_MODE_NAME, "ListOccurrencesMode", false, null);
62         addEntry(LIST_REGISTERS_MODE, LIST_REGISTERS_MODE_NAME, "ListRegistersMode", false, null);
63         addEntry(LIST_TAGS_MODE, LIST_TAGS_MODE_NAME, "ListTagsMode", false, null);
64         addEntry(MAILBOX_MODE, MAILBOX_MODE_NAME, "mail.MailboxMode", false, null);
65         addEntry(MAKEFILE_MODE, MAKEFILE_MODE_NAME, "MakefileMode", true, "makefile(\\.in)?");
66         addEntry(MAN_MODE, MAN_MODE_NAME, "ManMode", false, null);
67         addEntry(MESSAGE_MODE, MESSAGE_MODE_NAME, "mail.MessageMode", false, null);
68         addEntry(NEWS_GROUPS_MODE, NEWS_GROUPS_MODE_NAME, "mail.NewsGroupsMode", false, null);
69         addEntry(NEWS_GROUP_SUMMARY_MODE, NEWS_GROUP_SUMMARY_MODE_NAME, "mail.NewsGroupsSummaryMode", false, null);
70         addEntry(OBJC_MODE, OBJC_MODE_NAME, "ObjCMode", true, ".+\\.m");
71         addEntry(PERL_MODE, PERL_MODE_NAME, "PerlMode", true, ".+\\.p[lm]");
72         addEntry(PHP_MODE, PHP_MODE_NAME, "PHPMode", true, ".+\\.php[34]?");
73         addEntry(PLAIN_TEXT_MODE, PLAIN_TEXT_MODE_NAME, "PlainTextMode", true, null);
74         addEntry(PROPERTIES_MODE, PROPERTIES_MODE_NAME, "PropertiesMode", true, "(.+\\.config)|(.+\\.co?nf)|(.+\\.cfg)|(.+\\.ini)|(.+\\.properties)|prefs");
75         addEntry(PYTHON_MODE, PYTHON_MODE_NAME, "PythonMode", true, ".+\\.py");
76         addEntry(RUBY_MODE, RUBY_MODE_NAME, "RubyMode", true, ".+\\.rb");
77         addEntry(SCHEME_MODE, SCHEME_MODE_NAME, "SchemeMode", true, ".+\\.sc[ehm]|.+\\.ss");
78         addEntry(SEND_MAIL_MODE, SEND_MAIL_MODE_NAME, "mail.SendMailMode", false, null);
79         addEntry(SHELL_MODE, SHELL_MODE_NAME, "ShellMode", false, null);
80         addEntry(SHELL_SCRIPT_MODE, SHELL_SCRIPT_MODE_NAME, "ShellScriptMode", true, ".+\\.[ck]?sh|\\.bashrc|\\.bash_profile");
81         addEntry(TCL_MODE, TCL_MODE_NAME, "TclMode", true, ".+\\.tcl");
82         addEntry(VERILOG_MODE, VERILOG_MODE_NAME, "VerilogMode", true, ".+\\.v");
83         addEntry(VHDL_MODE, VHDL_MODE_NAME, "VHDLMode", true, ".+\\.vhdl?");
84         addEntry(WEB_MODE, WEB_MODE_NAME, "WebMode", false, null);
85         addEntry(WORD_MODE, WORD_MODE_NAME, "WordMode", false, null);
86         addEntry(XML_MODE, XML_MODE_NAME, "XmlMode", true, ".+\\.x[msu]l|.+\\.dtd");
87     }
88
89     public synchronized Mode getMode(int id)
90     {
91         final ModeListEntry entry = getEntry(id);
92         return entry == null ? null : entry.getMode(true);
93     }
94
95     public synchronized boolean modeAccepts(int id, String JavaDoc filename)
96     {
97         final ModeListEntry entry = getEntry(id);
98         if (entry == null) {
99             Debug.bug("ModeList.modeAccepts() invalid mode id " + id);
100             return false;
101         }
102         return entry.accepts(filename);
103     }
104
105     public synchronized Mode getModeFromModeName(String JavaDoc modeName)
106     {
107         if (modeName != null) {
108             for (int i = list.size(); i-- > 0;) {
109                 ModeListEntry entry = (ModeListEntry) list.get(i);
110                 if (modeName.equalsIgnoreCase(entry.getDisplayName()))
111                     return entry.getMode(true);
112             }
113             if (modeName.equalsIgnoreCase("asm"))
114                 return getMode(ASM_MODE);
115             if (modeName.equalsIgnoreCase("objc"))
116                 return getMode(OBJC_MODE);
117             if (modeName.equalsIgnoreCase("text"))
118                 return getMode(PLAIN_TEXT_MODE);
119         }
120         return null;
121     }
122
123     public synchronized int getModeIdFromModeName(String JavaDoc modeName)
124     {
125         if (modeName != null) {
126             for (int i = list.size(); i-- > 0;) {
127                 ModeListEntry entry = (ModeListEntry) list.get(i);
128                 if (modeName.equalsIgnoreCase(entry.getDisplayName()))
129                     return entry.getId();
130             }
131             if (modeName.equalsIgnoreCase("asm"))
132                 return ASM_MODE;
133             if (modeName.equalsIgnoreCase("objc"))
134                 return OBJC_MODE;
135             if (modeName.equalsIgnoreCase("text"))
136                 return PLAIN_TEXT_MODE;
137         }
138         return -1;
139     }
140
141     public synchronized Mode getModeForFileName(String JavaDoc fileName)
142     {
143         int id = getModeIdForFileName(fileName);
144         return id > 0 ? getMode(id) : null;
145     }
146
147     public synchronized int getModeIdForFileName(String JavaDoc fileName)
148     {
149         if (fileName != null) {
150             for (int i = list.size(); i-- > 0;) {
151                 ModeListEntry entry = (ModeListEntry) list.get(i);
152                 if (entry.accepts(fileName))
153                     return entry.getId();
154             }
155         }
156         return -1;
157     }
158
159     // Hard-coded for now.
160
public synchronized Mode getModeForContentType(String JavaDoc contentType)
161     {
162         if (contentType != null) {
163             if (contentType.toLowerCase().startsWith("text/css"))
164                 return getMode(CSS_MODE);
165         }
166         return null;
167     }
168
169     public synchronized final Iterator JavaDoc iterator()
170     {
171         return list.iterator();
172     }
173
174     // Does not check for duplicate entries.
175
private final void addEntry(int id, String JavaDoc displayName, String JavaDoc className,
176         boolean selectable, String JavaDoc defaultFiles)
177     {
178         list.add(new ModeListEntry(id, displayName, className, selectable, defaultFiles));
179     }
180
181     private final ModeListEntry getEntry(int id)
182     {
183         for (int i = list.size(); i-- > 0;) {
184             ModeListEntry entry = (ModeListEntry) list.get(i);
185             if (entry.getId() == id) {
186                 // Found entry.
187
return entry;
188             }
189         }
190         return null;
191     }
192 }
193
Popular Tags