/******************************************************************************* * Copyright (c) 2005, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.eclipse.dltk.tcl.internal.ui; import org.eclipse.dltk.core.IDLTKLanguageToolkit; import org.eclipse.dltk.core.IImportContainer; import org.eclipse.dltk.core.IModelElement; import org.eclipse.dltk.core.IProjectFragment; import org.eclipse.dltk.core.IScriptFolder; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.tcl.core.TclConstants; import org.eclipse.dltk.tcl.core.TclLanguageToolkit; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageElement; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageFragment; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageSourceModule; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesElement; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesFragment; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesSourceModule; import org.eclipse.dltk.tcl.internal.ui.templates.TclTemplateAccess; import org.eclipse.dltk.tcl.internal.ui.text.SimpleTclSourceViewerConfiguration; import org.eclipse.dltk.ui.AbstractDLTKUILanguageToolkit; import org.eclipse.dltk.ui.IDLTKUILanguageToolkit; import org.eclipse.dltk.ui.ScriptElementLabels; import org.eclipse.dltk.ui.text.ScriptSourceViewerConfiguration; import org.eclipse.dltk.ui.text.ScriptTextTools; import org.eclipse.dltk.ui.text.templates.ITemplateAccess; import org.eclipse.dltk.ui.viewsupport.ScriptUILabelProvider; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.preference.IPreferenceStore; public class TclUILanguageToolkit extends AbstractDLTKUILanguageToolkit { private static TclUILanguageToolkit sToolkit = null; public static synchronized IDLTKUILanguageToolkit getInstance() { if (sToolkit == null) { sToolkit = new TclUILanguageToolkit(); } return sToolkit; } private static class TclScriptElementLabels extends ScriptElementLabels { @Override public void getElementLabel(IModelElement element, long flags, StringBuffer buf) { StringBuffer buffer = new StringBuffer(60); super.getElementLabel(element, flags, buffer); String s = buffer.toString(); if (s != null && !s.startsWith(element.getElementName())) { if (s.indexOf('$') != -1) { s = s.replaceAll("\\$", "::"); //$NON-NLS-1$//$NON-NLS-2$ } } buf.append(s); } @Override protected void getImportContainerLabel(IModelElement element, long flags, StringBuffer buf) { IImportContainer container = (IImportContainer) element; if (TclConstants.SOURCE_CONTAINER .equals(container.getContainerName())) { buf.append("sourced files"); } else if (TclConstants.REQUIRE_CONTAINER .equals(container.getContainerName())) { buf.append("required packages"); } else { super.getImportContainerLabel(element, flags, buf); } } @Override public void getScriptFolderLabel(IProjectFragment pack, long flags, StringBuffer buf) { if (pack instanceof TclPackageFragment || pack instanceof TclSourcesFragment) { // buf.append(((IProjectFragment) // pack).getPath().lastSegment()); // buf.append(' '); return; } super.getScriptFolderLabel(pack, flags, buf); } @Override public void getProjectFragmentLabel(IProjectFragment root, long flags, StringBuffer buf) { if (root instanceof TclPackageFragment) { buf.append(((TclPackageFragment) root).getPackageName()); buf.append(' '); return; } // if (root instanceof TclSourcesFragment) { // return; // } super.getProjectFragmentLabel(root, flags, buf); }; @Override protected void getScriptFolderLabel(IScriptFolder folder, long flags, StringBuffer buf) { // if( folder instanceof PodSourcesFolder ) { // return; // } // boolean podFolder = true;// folder instanceof PodSourcesFolder; if (getFlag(flags, P_QUALIFIED)) { getProjectFragmentLabel((IProjectFragment) folder.getParent(), ROOT_QUALIFIED, buf); buf.append('/'); } // refreshPackageNamePattern(); if (folder.isRootFolder()) { // if (!podFolder) { // buf.append(DEFAULT_PACKAGE); // } } else if (getFlag(flags, P_COMPRESSED) && fgPkgNameLength >= 0) { String name = folder.getElementName(); int start = 0; int dot = name.indexOf(IScriptFolder.PACKAGE_DELIMITER, start); while (dot > 0) { if (dot - start > fgPkgNameLength - 1) { buf.append(fgPkgNamePrefix); if (fgPkgNameChars > 0) buf.append(name.substring(start, Math.min(start + fgPkgNameChars, dot))); buf.append(fgPkgNamePostfix); } else buf.append(name.substring(start, dot + 1)); start = dot + 1; dot = name.indexOf(IScriptFolder.PACKAGE_DELIMITER, start); } buf.append(name.substring(start)); } else { getScriptFolderLabel(folder, buf); } if (getFlag(flags, P_POST_QUALIFIED)) { // if (!podFolder) { // buf.append(CONCAT_STRING); // } getProjectFragmentLabel((IProjectFragment) folder.getParent(), ROOT_QUALIFIED, buf); } } @Override protected void getScriptFolderLabel(IScriptFolder folder, StringBuffer buf) { if (folder instanceof TclPackageElement || folder instanceof TclSourcesElement) { return; } String name = folder.getElementName(); // name = name.replace(IScriptFolder.PACKAGE_DELIMITER, '.'); buf.append(name); } @Override protected void getSourceModule(ISourceModule module, long flags, StringBuffer buf) { if (getFlag(flags, CU_QUALIFIED)) { IScriptFolder pack = (IScriptFolder) module.getParent(); getScriptFolderLabel(pack, (flags & QUALIFIER_FLAGS), buf); // if (!(module instanceof PodModule)) { // buf.append(getTypeDelimiter(module)); // } } buf.append(module.getElementName()); if (getFlag(flags, CU_POST_QUALIFIED)) { if ((!(module instanceof TclPackageSourceModule || module instanceof TclSourcesSourceModule))) { buf.append(CONCAT_STRING); } getScriptFolderLabel((IScriptFolder) module.getParent(), flags & QUALIFIER_FLAGS, buf); } }; }; private static TclScriptElementLabels sInstance = new TclScriptElementLabels(); @Override public ScriptElementLabels getScriptElementLabels() { return sInstance; } @Override public IPreferenceStore getPreferenceStore() { return TclUI.getDefault().getPreferenceStore(); } @Override public IDLTKLanguageToolkit getCoreToolkit() { return TclLanguageToolkit.getDefault(); } public IDialogSettings getDialogSettings() { return TclUI.getDefault().getDialogSettings(); } @Override public String getPartitioningId() { return TclConstants.TCL_PARTITIONING; } @Override public String getEditorId(Object inputElement) { return "org.eclipse.dltk.tcl.ui.editor.TclEditor"; //$NON-NLS-1$ } @Override public String getInterpreterContainerId() { return "org.eclipse.dltk.tcl.launching.INTERPRETER_CONTAINER"; //$NON-NLS-1$ } @Override public ScriptUILabelProvider createScriptUILabelProvider() { return null; } @Override public boolean getProvideMembers(ISourceModule element) { return true; } @Override public ScriptTextTools getTextTools() { return TclUI.getDefault().internalgetTextTools(); } @Override public ScriptSourceViewerConfiguration createSourceViewerConfiguration() { return new SimpleTclSourceViewerConfiguration( getTextTools().getColorManager(), getPreferenceStore(), null, getPartitioningId(), false); } private static final String INTERPRETERS_PREFERENCE_PAGE_ID = "org.eclipse.dltk.tcl.preferences.interpreters"; //$NON-NLS-1$ private static final String DEBUG_PREFERENCE_PAGE_ID = "org.eclipse.dltk.tcl.preferences.debug"; //$NON-NLS-1$ private static final String[] EDITOR_PREFERENCE_PAGES_IDS = { "org.eclipse.dltk.tcl.preferences.editor", //$NON-NLS-1$ "org.eclipse.dltk.tcl.preferences.templates", //$NON-NLS-1$ "org.eclipse.dltk.tcl.preferences.editor.syntaxcoloring", //$NON-NLS-1$ "org.eclipse.dltk.tcl.preferences.editor.hovers", //$NON-NLS-1$ "org.eclipse.dltk.tcl.preferences.editor.smarttyping", //$NON-NLS-1$ "org.eclipse.dltk.tcl.preferences.editor.folding", //$NON-NLS-1$ "org.eclipse.dltk.tcl.ui.assistance" //$NON-NLS-1$ }; @Override public String getInterpreterPreferencePage() { return INTERPRETERS_PREFERENCE_PAGE_ID; } @Override public String getDebugPreferencePage() { return DEBUG_PREFERENCE_PAGE_ID; } @Override public String[] getEditorPreferencePages() { return EDITOR_PREFERENCE_PAGES_IDS; } @Override public ITemplateAccess getEditorTemplates() { return TclTemplateAccess.getInstance(); } }