/* * $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.builder; import net.sourceforge.texlipse.properties.TexlipseProperties; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; /** * Build a ps or pdf file from tex file(s) using latex and dvips or dvipdf. * * @author Kimmo Karlsson */ public class DviBuilder extends AbstractBuilder { private Builder dvi; private ProgramRunner ps; private String output; private boolean stopped; public DviBuilder(int i, String outputFormat) { super(i); output = outputFormat; isValid(); } public void reset(final IProgressMonitor monitor) { super.reset(monitor); dvi.reset(monitor); } /** * Check if the needed program runners are operational. * Update runners from registry if necessary. * @return true, if this builder is ready for operation, false otherwise */ public boolean isValid() { if (dvi == null) { dvi = BuilderRegistry.get(null, TexlipseProperties.OUTPUT_FORMAT_DVI); } if (ps == null || !ps.isValid()) { ps = BuilderRegistry.getRunner(TexlipseProperties.OUTPUT_FORMAT_DVI, output, 0); } return dvi != null && dvi.isValid() && ps != null && ps.isValid(); } /** * @return output format of the dvi-processor */ public String getOutputFormat() { return ps.getOutputFormat(); } /** * @return sequence */ public String getSequence() { return dvi.getSequence() + '+' + ps.getProgramName(); } public void stopRunners() { // stopRunners instead of stopBuild, because we didn't start a separate thread for DviBuilder dvi.stopRunners(); ps.stop(); stopped = true; } public void buildResource(IResource resource) throws CoreException { // call buildResource directly, because we don't want a separate thread for DviBuilder stopped = false; dvi.buildResource(resource); if (stopped) return; monitor.subTask("Converting dvi to " + output); ps.run(resource); monitor.worked(15); } }