Skip to content

Commit

Permalink
fix: wip
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaudroques committed Jun 11, 2023
1 parent c95bbfe commit 4a246c7
Show file tree
Hide file tree
Showing 21 changed files with 345 additions and 166 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
@@ -1,4 +1,4 @@
# Warning, "version" should be the same in gradle.properties and Version.java
# Any idea anyone how to magically synchronize those :-) ?
version = 1.2023.9beta2
version = 1.2023.9beta3
org.gradle.workers.max = 3
3 changes: 2 additions & 1 deletion src/net/sourceforge/plantuml/PSystemBuilder.java
Expand Up @@ -70,6 +70,7 @@
import net.sourceforge.plantuml.emoji.PSystemListEmojiFactory;
import net.sourceforge.plantuml.error.PSystemError;
import net.sourceforge.plantuml.error.PSystemErrorUtils;
import net.sourceforge.plantuml.filesdiagram.FilesDiagramFactory;
import net.sourceforge.plantuml.flowdiagram.FlowDiagramFactory;
import net.sourceforge.plantuml.font.PSystemListFontsFactory;
import net.sourceforge.plantuml.gitlog.GitDiagramFactory;
Expand Down Expand Up @@ -101,7 +102,6 @@
import net.sourceforge.plantuml.text.StringLocated;
import net.sourceforge.plantuml.timingdiagram.TimingDiagramFactory;
import net.sourceforge.plantuml.utils.Log;
import net.sourceforge.plantuml.version.License;
import net.sourceforge.plantuml.version.PSystemLicenseFactory;
import net.sourceforge.plantuml.version.PSystemVersionFactory;
import net.sourceforge.plantuml.wbs.WBSDiagramFactory;
Expand Down Expand Up @@ -251,6 +251,7 @@ final public Diagram createPSystem(List<StringLocated> source, List<StringLocate
factories.add(new JsonDiagramFactory());
factories.add(new GitDiagramFactory());
// ::comment when __CORE__
factories.add(new FilesDiagramFactory());
factories.add(new BoardDiagramFactory());
// ::done
factories.add(new YamlDiagramFactory());
Expand Down
Expand Up @@ -181,6 +181,8 @@ private FtileBox(ISkinParam skinParam, Display label, Swimlane swimlane, BoxStyl

@Override
public String toString() {
if (print == null)
return super.toString();
return print;
}

Expand Down
16 changes: 8 additions & 8 deletions src/net/sourceforge/plantuml/command/CommandFactorySprite.java
Expand Up @@ -105,9 +105,9 @@ protected CommandExecutionResult executeNow(final WithSprite system, BlocLines l

lines = lines.subExtract(1, 1);
lines = lines.removeEmptyColumns();
if (lines.size() == 0) {
if (lines.size() == 0)
return CommandExecutionResult.error("No sprite defined.");
}

return executeInternal(system, line0, lines.getLinesAsStringForSprite());
}

Expand All @@ -123,17 +123,17 @@ private CommandExecutionResult executeInternal(WithSprite system, RegexResult li
final int height = Integer.parseInt(line0.get("DIM", 1));
if (line0.get("DIM", 4) == null) {
final int nbLevel = Integer.parseInt(line0.get("DIM", 2));
if (nbLevel != 4 && nbLevel != 8 && nbLevel != 16) {
if (nbLevel != 4 && nbLevel != 8 && nbLevel != 16)
return CommandExecutionResult.error("Only 4, 8 or 16 graylevel are allowed.");
}

final SpriteGrayLevel level = SpriteGrayLevel.get(nbLevel);
if (line0.get("DIM", 3) == null) {
sprite = level.buildSprite(width, height, strings);
} else {
sprite = level.buildSpriteZ(width, height, concat(strings));
if (sprite == null) {
if (sprite == null)
return CommandExecutionResult.error("Cannot decode sprite.");
}

}
} else {
sprite = SpriteColorBuilder4096.buildSprite(strings);
Expand All @@ -145,9 +145,9 @@ private CommandExecutionResult executeInternal(WithSprite system, RegexResult li

private String concat(final List<String> strings) {
final StringBuilder sb = new StringBuilder();
for (String s : strings) {
for (String s : strings)
sb.append(StringUtils.trin(s));
}

return sb.toString();
}

Expand Down
5 changes: 4 additions & 1 deletion src/net/sourceforge/plantuml/core/DiagramType.java
Expand Up @@ -40,7 +40,7 @@
public enum DiagramType {
// ::remove folder when __HAXE__
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, JUNGLE, CUTE, MATH, LATEX, DEFINITION, GANTT, NW,
MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, EBNF, REGEX, UNKNOWN;
MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, EBNF, REGEX, FILES, UNKNOWN;

static public DiagramType getTypeFromArobaseStart(String s) {
s = s.toLowerCase();
Expand Down Expand Up @@ -125,6 +125,9 @@ static public DiagramType getTypeFromArobaseStart(String s) {
if (StartUtils.startsWithSymbolAnd("startregex", s))
return REGEX;

if (StartUtils.startsWithSymbolAnd("startfiles", s))
return FILES;

return UNKNOWN;
}
}
85 changes: 85 additions & 0 deletions src/net/sourceforge/plantuml/filesdiagram/FilesDiagram.java
@@ -0,0 +1,85 @@
/* ========================================================================
* 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.filesdiagram;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;

import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.core.DiagramDescription;
import net.sourceforge.plantuml.core.ImageData;
import net.sourceforge.plantuml.core.UmlSource;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.skin.UmlDiagramType;
import net.sourceforge.plantuml.text.StringLocated;

public class FilesDiagram extends UmlDiagram {

private final FilesListing list;

public FilesDiagram(UmlSource source) {
super(source, UmlDiagramType.FILES, null);
this.list = new FilesListing(getSkinParam());

final Iterator<StringLocated> it = source.iterator2();
it.next();
while (true) {
final String line = it.next().getString();
if (it.hasNext() == false)
break;
this.list.add(line);
}

}

public DiagramDescription getDescription() {
return new DiagramDescription("(Files)");
}

@Override
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
throws IOException {

return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
}

@Override
protected TextBlock getTextBlock() {
return list;
}

}
56 changes: 56 additions & 0 deletions src/net/sourceforge/plantuml/filesdiagram/FilesDiagramFactory.java
@@ -0,0 +1,56 @@
/* ========================================================================
* 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.filesdiagram;

import java.util.Map;

import net.sourceforge.plantuml.command.PSystemAbstractFactory;
import net.sourceforge.plantuml.core.Diagram;
import net.sourceforge.plantuml.core.DiagramType;
import net.sourceforge.plantuml.core.UmlSource;

public class FilesDiagramFactory extends PSystemAbstractFactory {

public FilesDiagramFactory() {
super(DiagramType.FILES);
}

@Override
public Diagram createSystem(UmlSource source, Map<String, String> skinParam) {
return new FilesDiagram(source);
}

}
83 changes: 83 additions & 0 deletions src/net/sourceforge/plantuml/filesdiagram/FilesListing.java
@@ -0,0 +1,83 @@
/* ========================================================================
* 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.filesdiagram;

import java.util.ArrayList;
import java.util.List;

import net.sourceforge.plantuml.klimt.UTranslate;
import net.sourceforge.plantuml.klimt.creole.Display;
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
import net.sourceforge.plantuml.klimt.font.StringBounder;
import net.sourceforge.plantuml.klimt.font.UFont;
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
import net.sourceforge.plantuml.klimt.shape.TextBlock;
import net.sourceforge.plantuml.style.ISkinParam;

public class FilesListing extends AbstractTextBlock {

private final ISkinParam skinParam;
private final FontConfiguration fontConfiguration = FontConfiguration.blackBlueTrue(UFont.courier(14));
private final List<String> tmp = new ArrayList<>();

public FilesListing(ISkinParam skinParam) {
this.skinParam = skinParam;
}

@Override
public XDimension2D calculateDimension(StringBounder stringBounder) {
return new XDimension2D(200, 200);
}

@Override
public void drawU(UGraphic ug) {
for (String s : tmp) {
final Display display = Display.getWithNewlines("<:1f4c4:>" + s);
TextBlock result = display.create(fontConfiguration, HorizontalAlignment.LEFT, skinParam);
result.drawU(ug);
ug = ug.apply(UTranslate.dy(result.calculateDimension(ug.getStringBounder()).getHeight()));
}

}

public void add(String line) {
if (line.startsWith("/"))
tmp.add(line.substring(1));
}

}
16 changes: 8 additions & 8 deletions src/net/sourceforge/plantuml/gitlog/Commit.java
Expand Up @@ -49,9 +49,9 @@ public Commit(String name, CursorPosition position) {
this.name = name;
this.position = position;
this.comment = position.getCommentInLine();
if (position.matches("* ") == false && position.matches("*-") == false) {
if (position.matches("* ") == false && position.matches("*-") == false)
throw new IllegalArgumentException();
}

}

public String getComment() {
Expand Down Expand Up @@ -94,15 +94,15 @@ public List<CursorPosition> getCandidatesForDown() {
}

private static void addAbove(List<CursorPosition> result, CursorPosition here) {
if (here.move(0, 1).matches("|")) {
if (here.move(0, 1).matches("|"))
result.add(here.move(0, 1));
}
if (here.move(1, 1).matches("\\")) {

if (here.move(1, 1).matches("\\"))
result.add(here.move(1, 1));
}
if (here.move(-1, 1).matches("/")) {

if (here.move(-1, 1).matches("/"))
result.add(here.move(-1, 1));
}

}

public List<Commit> getAncestors() {
Expand Down

0 comments on commit 4a246c7

Please sign in to comment.