package net.sourceforge.phpeclipse.phpeditor; /********************************************************************** Copyright (c) 2000, 2002 IBM Corp. and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html Contributors: IBM Corporation - Initial implementation Klaus Hartlage - www.eclipseproject.de **********************************************************************/ import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants; import net.sourceforge.phpeclipse.phpeditor.php.PHPPartitionScanner; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.DefaultLineTracker; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.ILineTracker; import org.eclipse.jface.text.rules.DefaultPartitioner; import org.eclipse.ui.editors.text.FileDocumentProvider; import org.eclipse.ui.part.FileEditorInput; /** * The PHPDocumentProvider provides the IDocuments used by java editors. */ public class PHPDocumentProvider extends FileDocumentProvider { // private final static String[] TYPES= new String[] { PHPPartitionScanner.PHP, PHPPartitionScanner.JAVA_DOC, PHPPartitionScanner.JAVA_MULTILINE_COMMENT }; private final static String[] TYPES = new String[] { IPHPPartitionScannerConstants.PHP, IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT, IPHPPartitionScannerConstants.HTML, IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT, IPHPPartitionScannerConstants.JAVASCRIPT, IPHPPartitionScannerConstants.CSS }; private static PHPPartitionScanner fgScanner = null; public PHPDocumentProvider() { super(); } /* (non-Javadoc) * Method declared on AbstractDocumentProvider */ protected IDocument createDocument(Object element) throws CoreException { IDocument document = super.createDocument(element); if (document != null) { // int fileType = 0; // PHP IDocumentPartitioner partitioner = null; if (element instanceof FileEditorInput) { IFile file = (IFile) ((FileEditorInput) element).getAdapter(IFile.class); String filename = file.getLocation().toString(); String extension = filename.substring(filename.lastIndexOf("."), filename.length()); // System.out.println(extension); if (extension.equalsIgnoreCase(".html") || extension.equalsIgnoreCase(".htm")) { // html partitioner = createHTMLPartitioner(); } else if (extension.equalsIgnoreCase(".xml")) { // xml partitioner = createXMLPartitioner(); } else if (extension.equalsIgnoreCase(".js")) { // javascript partitioner = createJavaScriptPartitioner(); } else if (extension.equalsIgnoreCase(".css")) { // cascading style sheets partitioner = createCSSPartitioner(); } else if (extension.equalsIgnoreCase(".tpl")) { // smarty ? partitioner = createSmartyPartitioner(); } else if (extension.equalsIgnoreCase(".inc")) { // php include files ? partitioner = createIncludePartitioner(); } } if (partitioner == null) { partitioner = createPHPPartitioner(); } document.setDocumentPartitioner(partitioner); partitioner.connect(document); } return document; } /** * Return a partitioner for .php files. */ private IDocumentPartitioner createPHPPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } /** * Return a partitioner for .html files. */ private IDocumentPartitioner createHTMLPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } private IDocumentPartitioner createXMLPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } private IDocumentPartitioner createJavaScriptPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } private IDocumentPartitioner createCSSPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } private IDocumentPartitioner createSmartyPartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } private IDocumentPartitioner createIncludePartitioner() { return new DefaultPartitioner(getPHPPartitionScanner(), TYPES); } /** * Return a scanner for creating php partitions. */ private PHPPartitionScanner getPHPPartitionScanner() { if (fgScanner == null) fgScanner = new PHPPartitionScanner(); return fgScanner; } /** * Creates a line tracker working with the same line delimiters as the document * of the given element. Assumes the element to be managed by this document provider. * * @param element the element serving as blue print * @return a line tracker based on the same line delimiters as the element's document */ public ILineTracker createLineTracker(Object element) { return new DefaultLineTracker(); } }