--- /dev/null
+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;
+ }
+
+}