/* ======================================================================== * PlantUML : a free UML diagram generator * ======================================================================== * * (C) Copyright 2009-2020, Arnaud Roques * * Project Info: http://plantuml.com * * If you like this project or if you find it useful, you can support us at: * * http://plantuml.com/patreon (only 1$ per month!) * http://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.creole; import java.util.Collections; import java.util.List; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.graphic.FontConfiguration; public class StripeTree implements Stripe { private FontConfiguration fontConfiguration; final private ISkinSimple skinParam; final private AtomTree tree; final private Atom marged; final private StripeStyle stripeStyle = new StripeStyle(StripeStyleType.TREE, 0, '\0'); public StripeTree(FontConfiguration fontConfiguration, ISkinSimple skinParam, String line) { this.fontConfiguration = fontConfiguration; this.skinParam = skinParam; this.tree = new AtomTree(fontConfiguration.getColor()); this.marged = new AtomWithMargin(tree, 2, 2); analyzeAndAdd(line); } public List getAtoms() { return Collections. singletonList(marged); } public Atom getHeader() { return null; } public void analyzeAndAdd(String line) { final List lines = StripeTable.getWithNewlinesInternal(line); for (String s : lines) { final StripeSimple cell = new StripeSimple(fontConfiguration, stripeStyle, new CreoleContext(), skinParam, CreoleMode.FULL); final String text = s.replaceFirst("^\\s*\\|_", ""); final int level = computeLevel(s); cell.analyzeAndAdd(text); this.tree.addCell(StripeTable.asAtom(Collections.singletonList(cell), 0), level); } } private int computeLevel(String s) { int result = 1; while (s.length() > 0) { if (s.startsWith(" ")) { result++; s = s.substring(2); continue; } else if (s.startsWith("\t")) { result++; s = s.substring(1); continue; } return result; } return result; } }