From ab09e2ef1f48b0526c11a692345cc2f530c38ee8 Mon Sep 17 00:00:00 2001 From: The-Lum <86879521+The-Lum@users.noreply.github.com> Date: Wed, 14 Feb 2024 06:14:19 +0000 Subject: [PATCH 1/2] feat: add `%get_all_theme` builtin function --- .../sourceforge/plantuml/tim/TContext.java | 2 + .../plantuml/tim/stdlib/GetAllTheme.java | 76 +++++++++++++++++++ .../plantuml/tim/stdlib/GetTAllThemeTest.java | 30 ++++++++ 3 files changed, 108 insertions(+) create mode 100644 src/net/sourceforge/plantuml/tim/stdlib/GetAllTheme.java create mode 100644 test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java diff --git a/src/net/sourceforge/plantuml/tim/TContext.java b/src/net/sourceforge/plantuml/tim/TContext.java index af2db5c95..30f2f0b9f 100644 --- a/src/net/sourceforge/plantuml/tim/TContext.java +++ b/src/net/sourceforge/plantuml/tim/TContext.java @@ -97,6 +97,7 @@ import net.sourceforge.plantuml.tim.stdlib.Feature; import net.sourceforge.plantuml.tim.stdlib.FileExists; import net.sourceforge.plantuml.tim.stdlib.Filename; import net.sourceforge.plantuml.tim.stdlib.FunctionExists; +import net.sourceforge.plantuml.tim.stdlib.GetAllTheme; import net.sourceforge.plantuml.tim.stdlib.GetJsonKey; import net.sourceforge.plantuml.tim.stdlib.GetJsonType; import net.sourceforge.plantuml.tim.stdlib.GetVariableValue; @@ -210,6 +211,7 @@ public class TContext { functionsSet.addFunction(new LogicalNxor()); functionsSet.addFunction(new Ord()); functionsSet.addFunction(new RandomFunction()); + functionsSet.addFunction(new GetAllTheme()); // %standard_exists_function // %str_replace // !exit diff --git a/src/net/sourceforge/plantuml/tim/stdlib/GetAllTheme.java b/src/net/sourceforge/plantuml/tim/stdlib/GetAllTheme.java new file mode 100644 index 000000000..3446e6de8 --- /dev/null +++ b/src/net/sourceforge/plantuml/tim/stdlib/GetAllTheme.java @@ -0,0 +1,76 @@ +/* ======================================================================== + * 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.tim.stdlib; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sourceforge.plantuml.log.Logme; +import net.sourceforge.plantuml.json.JsonArray; +import net.sourceforge.plantuml.theme.ThemeUtils; +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; +import net.sourceforge.plantuml.tim.TContext; +import net.sourceforge.plantuml.tim.TFunctionSignature; +import net.sourceforge.plantuml.tim.TMemory; +import net.sourceforge.plantuml.tim.expression.TValue; +import net.sourceforge.plantuml.utils.LineLocation; + +public class GetAllTheme extends SimpleReturnFunction { + + public TFunctionSignature getSignature() { + return new TFunctionSignature("%get_all_theme", 0); + } + + public boolean canCover(int nbArg, Set namedArgument) { + return nbArg == 0; + } + + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List values, + Map named) throws EaterException, EaterExceptionLocated { + final JsonArray result = new JsonArray(); + try { + for (String theme : ThemeUtils.getAllThemeNames()) { + result.add(theme); + } + return TValue.fromJson(result); + } catch (IOException e) { + Logme.error(e); + return TValue.fromJson(result); + } + } +} diff --git a/test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java b/test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java new file mode 100644 index 000000000..c17bc33d2 --- /dev/null +++ b/test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java @@ -0,0 +1,30 @@ +package net.sourceforge.plantuml.tim.stdlib; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Collections; + +import org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores; +import org.junit.jupiter.api.IndicativeSentencesGeneration; +import org.junit.jupiter.api.Test; + +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; +import net.sourceforge.plantuml.tim.TFunction; +import net.sourceforge.plantuml.tim.expression.TValue; + +/** + * Tests the builtin function. + */ +@IndicativeSentencesGeneration(separator = ": ", generator = ReplaceUnderscores.class) + +class GetAllThemeTest { + TFunction cut = new GetAllTheme(); + final String cutName = "GetAllTheme"; + + @Test + void Test_without_Param() throws EaterException, EaterExceptionLocated { + final TValue tValue = cut.executeReturnFunction(null, null, null, Collections.emptyList(), null); + assertThat(tValue.toString()).contains("_none_", "amiga", "vibrant"); + } +} From 53bcc028cf9423bfd5bd88bbe7144d31bce36f18 Mon Sep 17 00:00:00 2001 From: The-Lum <86879521+The-Lum@users.noreply.github.com> Date: Wed, 14 Feb 2024 06:19:34 +0000 Subject: [PATCH 2/2] fix: typo on `GetAllThemeTest` filename --- .../tim/stdlib/{GetTAllThemeTest.java => GetAllThemeTest.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/net/sourceforge/plantuml/tim/stdlib/{GetTAllThemeTest.java => GetAllThemeTest.java} (100%) diff --git a/test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java b/test/net/sourceforge/plantuml/tim/stdlib/GetAllThemeTest.java similarity index 100% rename from test/net/sourceforge/plantuml/tim/stdlib/GetTAllThemeTest.java rename to test/net/sourceforge/plantuml/tim/stdlib/GetAllThemeTest.java