X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.jtidy/src/net/sourceforge/phpdt/tidy/JtidyPlugin.java b/archive/net.sourceforge.phpeclipse.jtidy/src/net/sourceforge/phpdt/tidy/JtidyPlugin.java new file mode 100644 index 0000000..ce0d272 --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.jtidy/src/net/sourceforge/phpdt/tidy/JtidyPlugin.java @@ -0,0 +1,339 @@ +package net.sourceforge.phpdt.tidy; + +import java.io.File; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.IPluginDescriptor; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import net.sourceforge.phpdt.tidy.w3c.Configuration; +import net.sourceforge.phpdt.tidy.w3c.Tidy; + +import net.sourceforge.phpdt.tidy.preferences.IPreferenceConstants; + +/** + * The main plugin class to be used in the desktop. + */ +public class JtidyPlugin extends AbstractUIPlugin implements IPreferenceConstants { + //The shared instance. + private static JtidyPlugin fPlugin; + //Resource bundle. + private ResourceBundle fResourceBundle; + + private Tidy fTidy; + private boolean fUseConfigurationFile; + public static String MARKER_NAME = "net.sourceforge.phpdt.tidy.MarkerName"; + + /** + * The constructor. + */ + public JtidyPlugin(IPluginDescriptor descriptor) { + super(descriptor); + fPlugin = this; + try { + fResourceBundle = ResourceBundle.getBundle("net.sourceforge.phpdt.tidy.JtidyPluginResources"); + } catch (MissingResourceException x) { + fResourceBundle = null; + } + initTidy(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences(org.eclipse.jface.preference.IPreferenceStore) + */ + protected void initializeDefaultPreferences(IPreferenceStore store) { + store.setDefault(GENERAL_CONFIG_FILE, ""); //$NON-NLS-1$ + store.setDefault(GENERAL_USE_CONFIG_FILE, "false"); //$NON-NLS-1$ + + store.setDefault(GENERAL_TIDY_MARK, "true"); //$NON-NLS-1$ + store.setDefault(GENERAL_SHOW_WARNINGS, "true"); //$NON-NLS-1$ + store.setDefault(GENERAL_QUIET, "false"); //$NON-NLS-1$ + store.setDefault(GENERAL_EMACS, "false"); //$NON-NLS-1$ + store.setDefault(GENERAL_KEEP_FILE_TIMES, "true"); //$NON-NLS-1$ + + store.setDefault(WRAP_ATT_VALS, "false"); //$NON-NLS-1$ + store.setDefault(WRAP_SCRIPTLETS, "false"); //$NON-NLS-1$ + store.setDefault(WRAP_SECTION, "true"); //$NON-NLS-1$ + store.setDefault(WRAP_ASP, "true"); //$NON-NLS-1$ + store.setDefault(WRAP_JSTE, "true"); //$NON-NLS-1$ + store.setDefault(WRAP_PHP, "true"); //$NON-NLS-1$ + store.setDefault(INDENT_ATTRIBUTES, "false"); //$NON-NLS-1$ + store.setDefault(LITERAL_ATTRIBS, "false"); //$NON-NLS-1$ + + // store.setDefault(TYPE_TREAD_AS_XML, "false"); //$NON-NLS-1$ + // store.setDefault(TYPE_DOCTYPE, "false"); //$NON-NLS-1$ + + store.setDefault(OUTPUT_MAKE_CLEAR, "false"); //$NON-NLS-1$ + store.setDefault(OUTPUT_STRIP_WORD, "false"); //$NON-NLS-1$ + store.setDefault(OUTPUT_ENCLOSE_BODY_TEXT, "false"); //$NON-NLS-1$ + store.setDefault(OUTPUT_ENCLOSE_BLOCK_TEXT, "false"); //$NON-NLS-1$ + + store.setDefault(OUT_AS_RAW, "false"); //$NON-NLS-1$ + store.setDefault(OUT_UPPER_TAGS, "false"); //$NON-NLS-1$ + store.setDefault(OUT_UPPER_ATTR, "false"); //$NON-NLS-1$ + store.setDefault(OUT_BREAK_BR, "false"); //$NON-NLS-1$ + store.setDefault(OUT_WRAP_ATTR_VALUES, "false"); //$NON-NLS-1$ + store.setDefault(OUT_WRAP_SCRIPS, "false"); //$NON-NLS-1$ + + store.setDefault(GENERAL_TIDY_MARK, "true"); //$NON-NLS-1$ + } + + /** + * Initialises the Tidy Instance and registers the Preference Listener. + */ + private void initTidy() { + fTidy = new Tidy(); + String rawConfigFileName = getPreferenceStore().getString(GENERAL_CONFIG_FILE); + updateTidyConfig(rawConfigFileName); + IPropertyChangeListener listener = new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + String propName = event.getProperty(); + IPreferenceStore store = JtidyPlugin.getDefault().getPreferenceStore(); + Configuration configuration = fTidy.getConfiguration(); + Object value = event.getNewValue(); + + if (value instanceof Boolean) { + boolean enabled = ((Boolean) value).booleanValue(); + if (propName.equals(GENERAL_USE_CONFIG_FILE)) { + fUseConfigurationFile = enabled; + initConfiguration(); + return; + } + fUseConfigurationFile = store.getBoolean(GENERAL_USE_CONFIG_FILE); + if (!fUseConfigurationFile) { + if (propName.equals(GENERAL_TIDY_MARK)) { + configuration.TidyMark = enabled; + } + if (propName.equals(GENERAL_SHOW_WARNINGS)) { + configuration.ShowWarnings = enabled; + } + if (propName.equals(GENERAL_QUIET)) { + configuration.Quiet = enabled; + } + if (propName.equals(GENERAL_EMACS)) { + configuration.Emacs = enabled; + } + if (propName.equals(GENERAL_KEEP_FILE_TIMES)) { + configuration.KeepFileTimes = enabled; + } + // wrap / indent + if (propName.equals(WRAP_ATT_VALS)) { + configuration.WrapAttVals = enabled; + } + if (propName.equals(WRAP_SCRIPTLETS)) { + configuration.WrapScriptlets = enabled; + } + if (propName.equals(WRAP_SECTION)) { + configuration.WrapSection = enabled; + } + if (propName.equals(WRAP_ASP)) { + configuration.WrapAsp = enabled; + } + if (propName.equals(WRAP_JSTE)) { + configuration.WrapJste = enabled; + } + if (propName.equals(WRAP_PHP)) { + configuration.WrapPhp = enabled; + } + if (propName.equals(INDENT_ATTRIBUTES)) { + configuration.IndentAttributes = enabled; + } + if (propName.equals(LITERAL_ATTRIBS)) { + configuration.LiteralAttribs = enabled; + } + + // if (propName.equals(TYPE_TREAD_AS_XML)) { + // configuration.XmlTags = enabled; + // } + // if (propName.equals(TYPE_DOCTYPE)) { + // configuration.XmlPi = enabled; + // } + + if (propName.equals(OUTPUT_MAKE_CLEAR)) { + configuration.MakeClean = enabled; + } + + if (propName.equals(OUTPUT_ENCLOSE_BODY_TEXT)) { + configuration.EncloseBodyText = enabled; + } + if (propName.equals(OUTPUT_ENCLOSE_BLOCK_TEXT)) { + configuration.EncloseBlockText = enabled; + } + if (propName.equals(OUTPUT_STRIP_WORD)) { + configuration.Word2000 = enabled; + } + // if (propName.equals(OUTPUT_DEFAULT_ALT_TEXT)) { + // configuration. = enabled; + // } + + if (propName.equals(OUT_AS_RAW)) { + configuration.RawOut = enabled; + } + if (propName.equals(OUT_UPPER_TAGS)) { + configuration.UpperCaseTags = enabled; + } + if (propName.equals(OUT_UPPER_ATTR)) { + configuration.UpperCaseAttrs = enabled; + } + + } + } else if (value instanceof String) { + if (fUseConfigurationFile) { + if (propName.equals(GENERAL_CONFIG_FILE)) { + updateTidyConfig((String) value); + } + } else { + if (propName.equals(OUTPUT_DEFAULT_ALT_TEXT)) { + configuration.altText = (String) value; + } + if (propName.equals(INPUT_NEW_EMPTY_TAGS)) { + configuration.parseEmptyTagNames((String) value, null); + } + if (propName.equals(INPUT_NEW_INLINE_TAGS)) { + configuration.parseInlineTagNames((String) value, null); + } + if (propName.equals(INPUT_NEW_BLOCKLEVEL_TAGS)) { + configuration.parseBlockTagNames((String) value, null); + } + if (propName.equals(INPUT_NEW_PRE_TAGS)) { + configuration.parsePreTagNames((String) value, null); + } + } + } + } + }; + + getPreferenceStore().addPropertyChangeListener(listener); + initConfiguration(); + } + + private void initConfiguration() { + IPreferenceStore store = JtidyPlugin.getDefault().getPreferenceStore(); + + fUseConfigurationFile = store.getBoolean(GENERAL_USE_CONFIG_FILE); + Configuration configuration = fTidy.getConfiguration(); + + String value; + if (fUseConfigurationFile) { + if ((value = store.getString(GENERAL_CONFIG_FILE)) != null) { + updateTidyConfig((String) value); + } + } else { + + configuration.TidyMark = store.getBoolean(GENERAL_TIDY_MARK); + configuration.ShowWarnings = store.getBoolean(GENERAL_SHOW_WARNINGS); + configuration.Quiet = store.getBoolean(GENERAL_QUIET); + configuration.Emacs = store.getBoolean(GENERAL_EMACS); + configuration.KeepFileTimes = store.getBoolean(GENERAL_KEEP_FILE_TIMES); + + configuration.WrapAttVals = store.getBoolean(WRAP_ATT_VALS); + configuration.WrapScriptlets = store.getBoolean(WRAP_SCRIPTLETS); + configuration.WrapSection = store.getBoolean(WRAP_SECTION); + configuration.WrapAsp = store.getBoolean(WRAP_ASP); + configuration.WrapJste = store.getBoolean(WRAP_JSTE); + configuration.WrapPhp = store.getBoolean(WRAP_PHP); + configuration.IndentAttributes = store.getBoolean(INDENT_ATTRIBUTES); + configuration.LiteralAttribs = store.getBoolean(LITERAL_ATTRIBS); + + configuration.MakeClean = store.getBoolean(OUTPUT_MAKE_CLEAR); + configuration.EncloseBodyText = store.getBoolean(OUTPUT_ENCLOSE_BODY_TEXT); + configuration.EncloseBlockText = store.getBoolean(OUTPUT_ENCLOSE_BLOCK_TEXT); + configuration.Word2000 = store.getBoolean(OUTPUT_STRIP_WORD); + if ((value = store.getString(OUTPUT_DEFAULT_ALT_TEXT)) != null) { + configuration.altText = value; + } + + configuration.RawOut = store.getBoolean(OUT_AS_RAW); + configuration.UpperCaseTags = store.getBoolean(OUT_UPPER_TAGS); + configuration.UpperCaseAttrs = store.getBoolean(OUT_UPPER_ATTR); + + if ((value = store.getString(INPUT_NEW_EMPTY_TAGS)) != null) { + configuration.parseEmptyTagNames(value, null); + } + if ((value = store.getString(INPUT_NEW_INLINE_TAGS)) != null) { + configuration.parseInlineTagNames(value, null); + } + if ((value = store.getString(INPUT_NEW_BLOCKLEVEL_TAGS)) != null) { + configuration.parseBlockTagNames(value, null); + } + if ((value = store.getString(INPUT_NEW_PRE_TAGS)) != null) { + configuration.parsePreTagNames(value, null); + } + } + } + + /** + * Updates the configuration of the tidy instance with content of the given + * file, if ths file exists. Returns silently on error. + * + * @param rawConfigFileName + */ + private void updateTidyConfig(String rawConfigFileName) { + File config = new File(rawConfigFileName); + if (config.exists()) { + fTidy.setConfigurationFromFile(config.getAbsolutePath()); + } + } + + /** + * Returns the shared instance. + */ + public static JtidyPlugin getDefault() { + return fPlugin; + } + + /** + * Returns the workspace instance. + */ + public static IWorkspace getWorkspace() { + return ResourcesPlugin.getWorkspace(); + } + + /** + * Returns the string from the plugin's resource bundle, + * or 'key' if not found. + */ + public static String getResourceString(String key) { + ResourceBundle bundle = JtidyPlugin.getDefault().getResourceBundle(); + if (bundle == null) { + return key; + } + try { + return bundle.getString(key); + } catch (MissingResourceException e) { + return key; + } + + } + + /** + * Returns the plugin's resource bundle, + */ + public ResourceBundle getResourceBundle() { + return fResourceBundle; + } + + /** + * Returns the Tidy instance for this resource. Curently the resource can be + * null, I just copied a similar conzept from a differnt Project, which uses + * a per Project configuration. + * @param resource + * @return Tidy + */ + + public static Tidy getTidyInstance(IResource resource) { + //IProject project = resource.getProject(); + //TODO: bind the instance to the resource... + if (getDefault().fTidy == null) { + getDefault().initTidy(); + } + return getDefault().fTidy; + } + +}