aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli
diff options
context:
space:
mode:
authorrenaud guezennec <renaud@rolisteam.org>2019-07-29 20:35:52 +0000
committerrenaud guezennec <renaud@rolisteam.org>2019-07-29 20:35:52 +0000
commit1a902d383eef1e042d4462cd07b9384fcdf4d118 (patch)
tree766b8ab720fa5da11730d2fc2388f51b9d14de49 /cli
parentf5906125576a8323a731c9456ce3dfc53b67ef59 (diff)
parent0d4b68221bda594cc695d216dfa21306ddb69c85 (diff)
downloadOneRoll-1a902d383eef1e042d4462cd07b9384fcdf4d118.tar.gz
OneRoll-1a902d383eef1e042d4462cd07b9384fcdf4d118.zip
Merge branch 'liberation' into 'master'
Add fuzzer on the DiceParser See merge request kde/rolisteam-diceparser!2
Diffstat (limited to 'cli')
-rw-r--r--cli/CMakeLists.txt62
-rw-r--r--cli/main.cpp57
2 files changed, 76 insertions, 43 deletions
diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt
index 215287d..c697899 100644
--- a/cli/CMakeLists.txt
+++ b/cli/CMakeLists.txt
@@ -3,15 +3,57 @@ cmake_minimum_required(VERSION 3.5)
option(UPDATE_TRANSLATIONS "update Translation" OFF)
MESSAGE(STATUS "UPDATE TRANSLATIONS: ${UPDATE_TRANSLATIONS}")
-
project(dice)
+SET( dice_sources
+ ../diceparser.cpp
+ ../range.cpp
+ ../booleancondition.cpp
+ ../validator.cpp
+ ../compositevalidator.cpp
+ ../operationcondition.cpp
+ ../die.cpp
+ ../parsingtoolbox.cpp
+ ../dicealias.cpp
+ ../result/result.cpp
+ ../result/scalarresult.cpp
+ ../result/stringresult.cpp
+ ../result/diceresult.cpp
+ ../node/countexecutenode.cpp
+ ../node/dicerollernode.cpp
+ ../node/executionnode.cpp
+ ../node/explodedicenode.cpp
+ ../node/helpnode.cpp
+ ../node/mergenode.cpp
+ ../node/jumpbackwardnode.cpp
+ ../node/keepdiceexecnode.cpp
+ ../node/listaliasnode.cpp
+ ../node/listsetrollnode.cpp
+ ../node/numbernode.cpp
+ ../node/parenthesesnode.cpp
+ # ../ node/forloopnode.cpp
+ ../node/paintnode.cpp
+ ../node/rerolldicenode.cpp
+ ../node/scalaroperatornode.cpp
+ ../node/sortresult.cpp
+ ../node/startingnode.cpp
+ ../node/filternode.cpp
+ ../node/stringnode.cpp
+ ../node/ifnode.cpp
+ ../node/splitnode.cpp
+ ../node/groupnode.cpp
+ ../node/bind.cpp
+ ../node/occurencecountnode.cpp
+ ../node/uniquenode.cpp
+ ../highlightdice.cpp
+ ../node/variablenode.cpp
+ ../node/valueslistnode.cpp
+)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
-
set(EXECUTABLE_OUTPUT_PATH bin/)
# Find the QtWidgets library
@@ -38,7 +80,6 @@ set(dice_RESOURCES diceparser.qrc)
find_package(Qt5LinguistTools)
find_package(Qt5Svg)
-
IF(UPDATE_TRANSLATIONS)
MESSAGE( update Translation )
FILE(GLOB_RECURSE translate_dice_SRCS ../*.cpp ../*.h)
@@ -50,17 +91,8 @@ ELSE()
ENDIF(UPDATE_TRANSLATIONS)
if(Qt5Core_FOUND)
-
- #IF(UPDATE_TRANSLATIONS)
- MESSAGE(status "find" ${dice_TS} ${translate_SRCS} )
- #QT5_CREATE_TRANSLATION(dice_QM ${translate_SRCS} ${dice_TS})
- #ELSE()
- #QT5_ADD_TRANSLATION(dice_QM ${dice_TS})
- #ENDIF()
-
+ MESSAGE(status "find" ${dice_TS} ${translate_SRCS} )
QT5_ADD_RESOURCES(dice_RESOURCES_RCC ${dice_RESOURCES})
-
- # guess plugins and libraries directory
set(QT_PLUGINS_DIR "${Qt5Core_DIR}/../../../plugins")
get_target_property(QT_LIBRARY_DIR Qt5::Core LOCATION)
get_filename_component(QT_LIBRARY_DIR ${QT_LIBRARY_DIR} PATH)
@@ -73,7 +105,9 @@ SET( cli_sources
set(documentation_files ../HelpMe.md ../README.md)
-add_executable( dice ${cli_sources} ${dice_QM} ${documentation_files})
+add_executable( dice ${cli_sources} ${dice_QM} ${dice_sources} ${documentation_files})
+target_include_directories(dice PRIVATE ../include)
+
target_link_libraries(dice diceparser ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Svg_LIBRARIES})
INSTALL_TARGETS(/bin dice)
diff --git a/cli/main.cpp b/cli/main.cpp
index d6f6398..c597dea 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -35,6 +35,7 @@
#include <QCoreApplication>
#endif
+#include "dicealias.h"
#include "diceparser.h"
#include "displaytoolbox.h"
#include "highlightdice.h"
@@ -115,7 +116,7 @@ QString diceToMarkdown(QJsonArray array, bool withColor, bool allSameColor, bool
}
void displayJSon(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
Q_UNUSED(withColor);
QJsonDocument doc;
@@ -133,7 +134,7 @@ void displayJSon(QString scalarText, QString resultStr, QJsonArray array, bool w
out << doc.toJson() << "\n";
}
void displayMarkdown(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd,
- QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
Q_UNUSED(withColor);
QString str("```Markdown\n");
@@ -165,7 +166,7 @@ void displayMarkdown(QString scalarText, QString resultStr, QJsonArray array, bo
out << str;
}
QString displaySVG(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
QString str(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" "
@@ -222,16 +223,16 @@ QString displaySVG(QString scalarText, QString resultStr, QJsonArray array, bool
#ifdef PAINTER_OP
void displayImage(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd, QString error,
- QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
- auto svg= displaySVG(
- scalarText, resultStr, array, withColor, cmd, error, warning, comment, allSameFaceCount, allSameColor);
+ auto svg= displaySVG(scalarText, resultStr, array, withColor, cmd, error, warning, comment, allSameFaceCount,
+ allSameColor);
out << DisplayToolBox::makeImage(svg.toUtf8());
}
#endif
void displayCommandResult(QString scalarText, QString resultStr, QJsonArray array, bool withColor, QString cmd,
- QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
+ QString error, QString warning, QString comment, bool allSameFaceCount, bool allSameColor)
{
// TODO display warning
if(!error.isEmpty())
@@ -366,11 +367,6 @@ int startDiceParsing(QStringList& cmds, QString& treeFile, bool withColor, EXPOR
stringResult.replace("\\n", "\n");
stringResult= ParsingToolBox::replaceVariableToValue(stringResult, strLst);
- /*for(auto it= strLst.rbegin(); it != strLst.rend(); ++it)
- {
- stringResult.replace(QStringLiteral("$%1").arg(i), (*it));
- --i;
- }*/
int i= strLst.size();
for(auto it= strLst.rbegin(); it != strLst.rend(); ++it)
@@ -405,26 +401,26 @@ int startDiceParsing(QStringList& cmds, QString& treeFile, bool withColor, EXPOR
{
case TERMINAL:
displayCommandResult(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
case SVG:
out << displaySVG(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor)
+ allSameFaceCount, allSameColor)
<< "\n";
break;
case BOT:
case MARKDOWN:
displayMarkdown(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
case JSON:
displayJSon(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
#ifdef PAINTER_OP
case IMAGE:
displayImage(scalarText, resultStr, array, withColor, cmdRework, error, warnings, comment,
- allSameFaceCount, allSameColor);
+ allSameFaceCount, allSameColor);
break;
#endif
}
@@ -440,10 +436,12 @@ int startDiceParsing(QStringList& cmds, QString& treeFile, bool withColor, EXPOR
}
else
{
+ QString error= parser.humanReadableError();
+ err << "Error: " << error << "\n";
rt= 1;
}
}
-
+ parser.cleanAll();
return rt;
}
#include <QTextCodec>
@@ -466,38 +464,39 @@ int main(int argc, char* argv[])
QCommandLineParser optionParser;
QCommandLineOption color(QStringList() << "c"
<< "color-off",
- "Disable color to highlight result");
+ "Disable color to highlight result");
QCommandLineOption version(QStringList() << "v"
<< "version",
- "Show the version and quit.");
+ "Show the version and quit.");
QCommandLineOption reset(QStringList() << "reset-settings", "Erase the settings and use the default parameters");
QCommandLineOption alias(QStringList() << "a"
<< "alias",
- "path to alias json files: <aliasfile>", "aliasfile");
+ "path to alias json files: <aliasfile>", "aliasfile");
QCommandLineOption character(QStringList() << "s"
<< "charactersheet",
- "set Parameters to simulate character sheet: <sheetfile>", "sheetfile");
+ "set Parameters to simulate character sheet: <sheetfile>", "sheetfile");
QCommandLineOption markdown(QStringList() << "m"
<< "markdown",
- "The output is formatted in markdown.");
+ "The output is formatted in markdown.");
QCommandLineOption bot(QStringList() << "b"
<< "bot",
- "Discord bot.");
+ "Discord bot.");
QCommandLineOption svg(QStringList() << "g"
<< "svg",
- "The output is formatted in svg.");
+ "The output is formatted in svg.");
QCommandLineOption json(QStringList() << "j"
<< "json",
- "The output is formatted in json.");
+ "The output is formatted in json.");
QCommandLineOption dotFile(QStringList() << "d"
<< "dot-file",
- "Instead of rolling dice, generate the execution tree and write it in <dotfile>", "dotfile");
+ "Instead of rolling dice, generate the execution tree and write it in <dotfile>",
+ "dotfile");
QCommandLineOption translation(QStringList() << "t"
<< "translation",
- "path to the translation file: <translationfile>", "translationfile");
+ "path to the translation file: <translationfile>", "translationfile");
QCommandLineOption help(QStringList() << "h"
<< "help",
- "Display this help");
+ "Display this help");
optionParser.addOption(color);
optionParser.addOption(version);