1 21 22 package org.armedbear.j; 23 24 import java.util.ArrayList ; 25 import java.util.Iterator ; 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 list; 39 40 private ModeList() 41 { 42 list = new ArrayList (); 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 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 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 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 fileName) 142 { 143 int id = getModeIdForFileName(fileName); 144 return id > 0 ? getMode(id) : null; 145 } 146 147 public synchronized int getModeIdForFileName(String 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 public synchronized Mode getModeForContentType(String 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 iterator() 170 { 171 return list.iterator(); 172 } 173 174 private final void addEntry(int id, String displayName, String className, 176 boolean selectable, String 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 return entry; 188 } 189 } 190 return null; 191 } 192 } 193 | Popular Tags |