StandardFunctions.java
/* ========================================================================
* 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;
import net.sourceforge.plantuml.teavm.TeaVM;
import net.sourceforge.plantuml.tim.builtin.AlwaysFalse;
import net.sourceforge.plantuml.tim.builtin.AlwaysTrue;
import net.sourceforge.plantuml.tim.builtin.Backslash;
import net.sourceforge.plantuml.tim.builtin.BoolVal;
import net.sourceforge.plantuml.tim.builtin.Breakline;
import net.sourceforge.plantuml.tim.builtin.CallUserFunction;
import net.sourceforge.plantuml.tim.builtin.Chr;
import net.sourceforge.plantuml.tim.builtin.Darken;
import net.sourceforge.plantuml.tim.builtin.DateFunction;
import net.sourceforge.plantuml.tim.builtin.Dec2hex;
import net.sourceforge.plantuml.tim.builtin.Dirpath;
import net.sourceforge.plantuml.tim.builtin.Dollar;
import net.sourceforge.plantuml.tim.builtin.Eval;
import net.sourceforge.plantuml.tim.builtin.Feature;
import net.sourceforge.plantuml.tim.builtin.FileExists;
import net.sourceforge.plantuml.tim.builtin.Filedate;
import net.sourceforge.plantuml.tim.builtin.Filename;
import net.sourceforge.plantuml.tim.builtin.FilenameNoExtension;
import net.sourceforge.plantuml.tim.builtin.FunctionExists;
import net.sourceforge.plantuml.tim.builtin.GetAllStdlib;
import net.sourceforge.plantuml.tim.builtin.GetAllTheme;
import net.sourceforge.plantuml.tim.builtin.GetCurrentTheme;
import net.sourceforge.plantuml.tim.builtin.GetJsonKey;
import net.sourceforge.plantuml.tim.builtin.GetJsonType;
import net.sourceforge.plantuml.tim.builtin.GetStdlib;
import net.sourceforge.plantuml.tim.builtin.GetVariableValue;
import net.sourceforge.plantuml.tim.builtin.GetVersion;
import net.sourceforge.plantuml.tim.builtin.Getenv;
import net.sourceforge.plantuml.tim.builtin.Hex2dec;
import net.sourceforge.plantuml.tim.builtin.HslColor;
import net.sourceforge.plantuml.tim.builtin.IntVal;
import net.sourceforge.plantuml.tim.builtin.InvokeProcedure;
import net.sourceforge.plantuml.tim.builtin.IsDark;
import net.sourceforge.plantuml.tim.builtin.IsLight;
import net.sourceforge.plantuml.tim.builtin.JsonAdd;
import net.sourceforge.plantuml.tim.builtin.JsonKeyExists;
import net.sourceforge.plantuml.tim.builtin.JsonMerge;
import net.sourceforge.plantuml.tim.builtin.JsonRemove;
import net.sourceforge.plantuml.tim.builtin.JsonSet;
import net.sourceforge.plantuml.tim.builtin.LeftAlign;
import net.sourceforge.plantuml.tim.builtin.Lighten;
import net.sourceforge.plantuml.tim.builtin.LoadJson;
import net.sourceforge.plantuml.tim.builtin.LogicalAnd;
import net.sourceforge.plantuml.tim.builtin.LogicalNand;
import net.sourceforge.plantuml.tim.builtin.LogicalNor;
import net.sourceforge.plantuml.tim.builtin.LogicalNot;
import net.sourceforge.plantuml.tim.builtin.LogicalNxor;
import net.sourceforge.plantuml.tim.builtin.LogicalOr;
import net.sourceforge.plantuml.tim.builtin.LogicalXor;
import net.sourceforge.plantuml.tim.builtin.Lower;
import net.sourceforge.plantuml.tim.builtin.Modulo;
import net.sourceforge.plantuml.tim.builtin.Newline;
import net.sourceforge.plantuml.tim.builtin.NewlineShort;
import net.sourceforge.plantuml.tim.builtin.Now;
import net.sourceforge.plantuml.tim.builtin.Ord;
import net.sourceforge.plantuml.tim.builtin.Percent;
import net.sourceforge.plantuml.tim.builtin.RandomFunction;
import net.sourceforge.plantuml.tim.builtin.RetrieveProcedure;
import net.sourceforge.plantuml.tim.builtin.ReverseColor;
import net.sourceforge.plantuml.tim.builtin.ReverseHsluvColor;
import net.sourceforge.plantuml.tim.builtin.RightAlign;
import net.sourceforge.plantuml.tim.builtin.SetVariableValue;
import net.sourceforge.plantuml.tim.builtin.Size;
import net.sourceforge.plantuml.tim.builtin.SplitStr;
import net.sourceforge.plantuml.tim.builtin.SplitStrRegex;
import net.sourceforge.plantuml.tim.builtin.Str2Json;
import net.sourceforge.plantuml.tim.builtin.StringFunction;
import net.sourceforge.plantuml.tim.builtin.Strlen;
import net.sourceforge.plantuml.tim.builtin.Strpos;
import net.sourceforge.plantuml.tim.builtin.Substr;
import net.sourceforge.plantuml.tim.builtin.Tabulation;
import net.sourceforge.plantuml.tim.builtin.Upper;
import net.sourceforge.plantuml.tim.builtin.VariableExists;
import net.sourceforge.plantuml.tim.builtin.Xargs;
/**
* The functions that every diagram knows, built once and shared by all the
* {@link TContext}: they hold no state, so they can be used concurrently.
*/
public final class StandardFunctions {
private static final FunctionsSet INSTANCE = build();
private StandardFunctions() {
}
/**
* Returns the shared registry. It must never be modified.
*/
static FunctionsSet get() {
return INSTANCE;
}
private static FunctionsSet build() {
final FunctionsSet functionsSet = new FunctionsSet();
functionsSet.addFunction(new AlwaysFalse());
functionsSet.addFunction(new AlwaysTrue());
functionsSet.addFunction(new Backslash());
functionsSet.addFunction(new BoolVal());
functionsSet.addFunction(new Breakline());
functionsSet.addFunction(new CallUserFunction());
functionsSet.addFunction(new Chr());
functionsSet.addFunction(new Darken());
functionsSet.addFunction(new DateFunction());
functionsSet.addFunction(new Dec2hex());
functionsSet.addFunction(new Dirpath());
functionsSet.addFunction(new Dollar());
functionsSet.addFunction(new Eval());
functionsSet.addFunction(new Feature());
functionsSet.addFunction(new Filedate());
functionsSet.addFunction(new FileExists());
functionsSet.addFunction(new Filename());
functionsSet.addFunction(new FilenameNoExtension());
functionsSet.addFunction(new FunctionExists());
if (!TeaVM.isTeaVM()) {
functionsSet.addFunction(new GetAllStdlib());
}
functionsSet.addFunction(new GetAllTheme());
functionsSet.addFunction(new GetCurrentTheme());
functionsSet.addFunction(new GetJsonKey());
functionsSet.addFunction(new GetJsonType());
if (!TeaVM.isTeaVM()) {
functionsSet.addFunction(new GetStdlib());
}
functionsSet.addFunction(new GetVariableValue());
functionsSet.addFunction(new GetVersion());
functionsSet.addFunction(new Getenv());
functionsSet.addFunction(new Hex2dec());
functionsSet.addFunction(new HslColor());
functionsSet.addFunction(new IntVal());
functionsSet.addFunction(new InvokeProcedure());
functionsSet.addFunction(new IsDark());
functionsSet.addFunction(new IsLight());
functionsSet.addFunction(new JsonAdd());
functionsSet.addFunction(new JsonKeyExists());
functionsSet.addFunction(new JsonMerge());
functionsSet.addFunction(new JsonRemove());
functionsSet.addFunction(new JsonSet());
functionsSet.addFunction(new LeftAlign());
functionsSet.addFunction(new Lighten());
functionsSet.addFunction(new LoadJson());
// functionsSet.addFunction(new LoadJsonLegacy());
functionsSet.addFunction(new LogicalAnd());
functionsSet.addFunction(new LogicalNand());
functionsSet.addFunction(new LogicalNor());
functionsSet.addFunction(new LogicalNot());
functionsSet.addFunction(new LogicalNxor());
functionsSet.addFunction(new LogicalOr());
functionsSet.addFunction(new LogicalXor());
functionsSet.addFunction(new Lower());
functionsSet.addFunction(new Modulo());
functionsSet.addFunction(new Newline());
functionsSet.addFunction(new NewlineShort());
functionsSet.addFunction(new Now());
functionsSet.addFunction(new Ord());
functionsSet.addFunction(new Percent());
functionsSet.addFunction(new RandomFunction());
functionsSet.addFunction(new RetrieveProcedure());
functionsSet.addFunction(new ReverseColor());
functionsSet.addFunction(new ReverseHsluvColor());
functionsSet.addFunction(new RightAlign());
functionsSet.addFunction(new SetVariableValue());
functionsSet.addFunction(new Size());
functionsSet.addFunction(new SplitStr());
functionsSet.addFunction(new SplitStrRegex());
functionsSet.addFunction(new Str2Json());
functionsSet.addFunction(new StringFunction());
functionsSet.addFunction(new Strlen());
functionsSet.addFunction(new Strpos());
functionsSet.addFunction(new Substr());
functionsSet.addFunction(new Tabulation());
functionsSet.addFunction(new Upper());
functionsSet.addFunction(new VariableExists());
functionsSet.addFunction(new Xargs());
// %standard_exists_function
// %str_replace
// !exit
// !log
// %min
// %max
// Regexp
// %time
// %trim
return functionsSet;
}
}