/* ======================================================================== * PlantUML : a free UML diagram generator * ======================================================================== * * (C) Copyright 2009-2024, Arnaud Roques * * Project Info: https://plantuml.com * * If you like this project or if you find it useful, you can support us at: * * https://plantuml.com/patreon (only 1$ per month!) * https://plantuml.com/paypal * * This file is part of PlantUML. * * PlantUML is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PlantUML 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 General Public * License for more details. * * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * * Original Author: Arnaud Roques * */ package net.sourceforge.plantuml.klimt.drawing.tikz; import java.io.IOException; import java.io.OutputStream; import net.sourceforge.plantuml.klimt.ClipContainer; import net.sourceforge.plantuml.klimt.UPath; import net.sourceforge.plantuml.klimt.color.ColorMapper; import net.sourceforge.plantuml.klimt.color.HColor; import net.sourceforge.plantuml.klimt.creole.legacy.AtomText; import net.sourceforge.plantuml.klimt.drawing.AbstractCommonUGraphic; import net.sourceforge.plantuml.klimt.drawing.AbstractUGraphic; import net.sourceforge.plantuml.klimt.font.StringBounder; import net.sourceforge.plantuml.klimt.shape.DotPath; import net.sourceforge.plantuml.klimt.shape.UCenteredCharacter; import net.sourceforge.plantuml.klimt.shape.UEllipse; import net.sourceforge.plantuml.klimt.shape.UImage; import net.sourceforge.plantuml.klimt.shape.UImageSvg; import net.sourceforge.plantuml.klimt.shape.ULine; import net.sourceforge.plantuml.klimt.shape.UPolygon; import net.sourceforge.plantuml.klimt.shape.URectangle; import net.sourceforge.plantuml.klimt.shape.UText; import net.sourceforge.plantuml.tikz.TikzGraphics; import net.sourceforge.plantuml.url.Url; public class UGraphicTikz extends AbstractUGraphic implements ClipContainer { public UGraphicTikz(HColor defaultBackground, ColorMapper colorMapper, StringBounder stringBounder, double scale, boolean withPreamble) { super(defaultBackground, colorMapper, stringBounder, new TikzGraphics(scale, withPreamble, colorMapper)); register(); } @Override protected AbstractCommonUGraphic copyUGraphic() { return new UGraphicTikz(this); } private UGraphicTikz(UGraphicTikz other) { super(other); register(); } private void register() { registerDriver(URectangle.class, new DriverRectangleTikz()); registerDriver(UText.class, new DriverTextTikz()); registerDriver(AtomText.class, new DriverAtomTextTikz()); registerDriver(ULine.class, new DriverLineTikz()); registerDriver(UPolygon.class, new DriverPolygonTikz()); registerDriver(UEllipse.class, new DriverEllipseTikz()); registerDriver(UImage.class, new DriverImageTikz()); ignoreShape(UImageSvg.class); registerDriver(UPath.class, new DriverPathTikz()); registerDriver(DotPath.class, new DriverDotPathTikz()); // registerDriver(UCenteredCharacter.class, new DriverCenteredCharacterTikz()); registerDriver(UCenteredCharacter.class, new DriverCenteredCharacterTikz2()); } @Override public void startUrl(Url url) { getGraphicObject().openLink(url.getUrl(), url.getTooltip()); } @Override public void closeUrl() { getGraphicObject().closeLink(); } @Override public void writeToStream(OutputStream os, String metadata, int dpi) throws IOException { getGraphicObject().createData(os); } @Override public boolean matchesProperty(String propertyName) { if ("SPECIALTXT".equalsIgnoreCase(propertyName)) return true; return false; } }