/* * This library is part of OpenCms - * the Open Source Content Management System * * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * For further information about Alkacon Software GmbH, please see the * company website: http://www.alkacon.com * * For further information about OpenCms, please see the * project website: http://www.opencms.org * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.opencms.editors.editarea; import org.opencms.file.CmsResource; import org.opencms.file.types.CmsResourceTypeJsp; import org.opencms.file.types.CmsResourceTypeXmlContent; import org.opencms.file.types.CmsResourceTypeXmlPage; import org.opencms.jsp.CmsJspActionElement; import org.opencms.main.CmsException; import org.opencms.util.CmsStringUtil; import org.opencms.workplace.editors.CmsSimpleEditor; import java.util.Arrays; import java.util.List; import java.util.Locale; /** * Provides helper methods for the usage of the EditArea editor that can be used * for syntax highlighting of text based files.<p> * * @since 7.0.5 */ public class CmsEditArea extends CmsSimpleEditor { /** Syntax highlight type name: CSS. */ public static final String HIGHLIGHT_TYPE_CSS = "css"; /** Syntax highlight type name: HTML. */ public static final String HIGHLIGHT_TYPE_HTML = "html"; /** Syntax highlight type name: JavaScript. */ public static final String HIGHLIGHT_TYPE_JAVASCRIPT = "js"; /** Syntax highlight type name: JSP. */ public static final String HIGHLIGHT_TYPE_JSP = "jsp"; /** Syntax highlight type name: XML. */ public static final String HIGHLIGHT_TYPE_XML = "xml"; /** Possible type suffix names. */ protected static final String[] HIGHLIGHT_TYPES = { HIGHLIGHT_TYPE_CSS, HIGHLIGHT_TYPE_HTML, HIGHLIGHT_TYPE_JAVASCRIPT, HIGHLIGHT_TYPE_JSP, HIGHLIGHT_TYPE_XML}; /** Possible type suffix names as list. */ protected static final List HIGHLIGHT_TYPES_LIST = Arrays.asList(HIGHLIGHT_TYPES); /** Sub path fragment to the editor resources. */ protected static final String SUBPATH_EDITAREA = "editors/editarea/"; /** Path to the editor resources. */ protected static final String VFS_PATH_EDITOR = VFS_PATH_RESOURCES + SUBPATH_EDITAREA; /** Path to the editor distribution resources. */ protected static final String VFS_PATH_EDITOR_DIST = VFS_PATH_EDITOR + "dist/"; /** * Public constructor.<p> * * @param jsp an initialized JSP action element */ public CmsEditArea(CmsJspActionElement jsp) { super(jsp); } /** * Returns the editor language to use according to the current users workplace settings.<p> * * @return the editor language to use */ public String getEditorLanguage() { String testLocale = getLocale().toString(); if (getCms().existsResource(VFS_PATH_EDITOR_DIST + "langs/" + testLocale + ".js")) { return testLocale; } return Locale.ENGLISH.toString(); } /** * @see org.opencms.workplace.editors.CmsSimpleEditor#getEditorResourceUri() */ public String getEditorResourceUri() { return getSkinUri() + SUBPATH_EDITAREA; } /** * Returns the start syntax highlighting type for the currently edited resource.<p> * * @return the start syntax highlighting type */ public String getStartHighlight() { // read edited resource CmsResource resource = null; try { resource = getCms().readResource(getParamResource()); } catch (CmsException e) { // ignore } if (resource != null) { // determine resource type int type = resource.getTypeId(); if (CmsResourceTypeJsp.isJspTypeId(type)) { // JSP file return HIGHLIGHT_TYPE_JSP; } if (CmsResourceTypeXmlContent.isXmlContent(resource) || CmsResourceTypeXmlPage.isXmlPage(resource)) { // XML content file or XML page file return HIGHLIGHT_TYPE_XML; } // all other files will be matched according to their suffix int dotIndex = getParamResource().lastIndexOf('.'); if (dotIndex != -1) { String suffix = getParamResource().substring(dotIndex + 1); if (CmsStringUtil.isNotEmpty(suffix)) { // there is a suffix, determine matching syntax highlighting int typeIndex = HIGHLIGHT_TYPES_LIST.indexOf(suffix.toLowerCase()); if (typeIndex != -1) { return (String)HIGHLIGHT_TYPES_LIST.get(typeIndex); } } } } // return HTML type as default return HIGHLIGHT_TYPE_HTML; } }