/* * $Id$ * * Copyright (c) 2004-2005 by the TeXlapse Team. * 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 net.sourceforge.texlipse.editor; import net.sourceforge.texlipse.TexlipsePlugin; import net.sourceforge.texlipse.builder.TexlipseNature; import net.sourceforge.texlipse.properties.TexlipseProperties; import net.sourceforge.texlipse.wizards.TexlipseProjectCreationOperation; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.editors.text.ForwardingDocumentProvider; import org.eclipse.ui.editors.text.TextFileDocumentProvider; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.IDocumentProvider; /** * Simple document provider implementation that * adds latex nature to the project holding a newly created file. * This way we also get latex builder and properties to any project * that contains latex files. * * @author Kimmo Karlsson * @author Boris von Loesch */ public class TexDocumentProvider extends TextFileDocumentProvider { /** * */ public TexDocumentProvider() { IDocumentProvider provider= new TextFileDocumentProvider(); provider= new ForwardingDocumentProvider(TexEditor.TEX_PARTITIONING, new TexDocumentSetupParticipant(), provider); setParentDocumentProvider(provider); } /** * Does the same as super.createDocument(Object), except this also adds * latex nature to the project containing the given document. */ public IDocument getDocument(Object element) { IDocument doc = super.getDocument(element); // add latex nature to project holding this latex file // this way we also get latex builder to any project that has latex files if (element instanceof FileEditorInput) { IFile file = (IFile) ((FileEditorInput)element).getAdapter(IFile.class); if (file != null) { IProject project = file.getProject(); try { if (!project.hasNature(TexlipseNature.NATURE_ID)) { TexlipseProjectCreationOperation.addProjectNature(project, new NullProgressMonitor()); } else if (TexlipseProperties.getProjectProperty(project, TexlipseProperties.OUTPUT_FORMAT) == null) { // this is needed for imported projects TexlipseNature n = new TexlipseNature(); // the nature is not added, just configured n.setProject(project); // this will cause the builder to be added, if not already there n.configure(); } } catch (CoreException e) { return doc; } // output format might not yet be set String format = TexlipseProperties.getProjectProperty(project, TexlipseProperties.OUTPUT_FORMAT); if (format == null || format.length() == 0) { TexlipseProperties.setProjectProperty(project, TexlipseProperties.OUTPUT_FORMAT, TexlipsePlugin.getPreference(TexlipseProperties.OUTPUT_FORMAT)); TexlipseProperties.setProjectProperty(project, TexlipseProperties.BUILDER_NUMBER, TexlipsePlugin.getPreference(TexlipseProperties.BUILDER_NUMBER)); TexlipseProperties.setProjectProperty(project, TexlipseProperties.MARK_TEMP_DERIVED_PROPERTY, "true"); TexlipseProperties.setProjectProperty(project, TexlipseProperties.MARK_OUTPUT_DERIVED_PROPERTY, "true"); String name = file.getName(); TexlipseProperties.setProjectProperty(project, TexlipseProperties.MAINFILE_PROPERTY, name); String output = name.substring(0, name.lastIndexOf('.')+1) + TexlipsePlugin.getPreference(TexlipseProperties.OUTPUT_FORMAT); TexlipseProperties.setProjectProperty(project, TexlipseProperties.OUTPUTFILE_PROPERTY, output); IPath path = file.getFullPath(); String dir = path.removeFirstSegments(1).removeLastSegments(1).toString(); if (dir.length() > 0) { TexlipseProperties.setProjectProperty(project, TexlipseProperties.SOURCE_DIR_PROPERTY, dir); TexlipseProperties.setProjectProperty(project, TexlipseProperties.OUTPUT_DIR_PROPERTY, dir); TexlipseProperties.setProjectProperty(project, TexlipseProperties.TEMP_DIR_PROPERTY, dir); } } } } return doc; } }