Skip to content

Commit

Permalink
getHelpAsCsv, getHelpAsHtmlTable, getHelpAsMarkdownTable, getHelpAsJa…
Browse files Browse the repository at this point in the history
…son: #277, #276, #275, #274
  • Loading branch information
mariuszgromada committed Jan 17, 2023
1 parent e519ec5 commit 5ef30b9
Show file tree
Hide file tree
Showing 20 changed files with 8,113 additions and 374 deletions.
342 changes: 314 additions & 28 deletions CURRENT/c-sharp/src/org/mariuszgromada/math/mxparser/Expression.cs

Large diffs are not rendered by default.

427 changes: 343 additions & 84 deletions CURRENT/c-sharp/src/org/mariuszgromada/math/mxparser/ExpressionUtils.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* @(#)StringInvariant.cs 5.2.0 2022-12-23
* @(#)StringInvariant.cs 5.2.0 2023-01-17
*
* MathParser.org-mXparser DUAL LICENSE AGREEMENT as of date 2022-05-22
* The most up-to-date license is available at the below link:
Expand Down Expand Up @@ -221,6 +221,8 @@ internal sealed class StringInvariant {
internal static readonly String RIGHT_SQUARE_BRACKET_SPACE = RIGHT_SQUARE_BRACKET + SPACE;
internal const String LEFT_BRACKET = "(";
internal const String RIGHT_BRACKET = ")";
internal const String LEFT_CURLY_BRACKET = "{";
internal const String RIGHT_CURLY_BRACKET = "}";
internal const String EQUAL = "=";
internal static readonly String SPACE_EQUAL_SPACE = SPACE + EQUAL + SPACE;
internal const String COLON = ":";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* @(#)StringResources.cs 5.2.0 2023-01-08
* @(#)StringResources.cs 5.2.0 2023-01-17
*
* MathParser.org-mXparser DUAL LICENSE AGREEMENT as of date 2022-05-22
* The most up-to-date license is available at the below link:
Expand Down Expand Up @@ -302,7 +302,6 @@ public class StringResources {
internal const String DEFAULT_EXITING = "Exiting.";
internal const String DEFAULT_DONE = "done.";
// -------------------------------------------------
internal const String DEFAULT_HELP_CONTENT = "Help content";
internal const String DEFAULT_KEYWORD = "Keyword";
internal const String DEFAULT_SYNTAX = "Syntax";
internal const String DEFAULT_NUMBER = "Number";
Expand Down Expand Up @@ -342,6 +341,10 @@ public class StringResources {
internal const String DEFAULT_USER_DEFINED_FUNCTION = "User defined function";
internal const String DEFAULT_USER_DEFINED_RECURSIVE_ARGUMENT = "User defined recursive argument";
// -------------------------------------------------
internal const String DEFAULT_HELP_CONTENT_LIMITED_TO_QUERY = "Help content limited to query";
internal const String DEFAULT_ALL_HELP_CONTENT = "All help content.";
internal const String DEFAULT_CAPTION = "Caption";
// -------------------------------------------------
internal static readonly String DEFAULT_WARNING_BINARY_SERIALIZATION_SECURITY_RISKS = "SECURITY WARNING:" + StringInvariant.NEW_LINE
+ "Deserializing data from an untrusted source can introduce security vulnerabilities" + StringInvariant.NEW_LINE
+ "to your application. Depending on the settings used during deserialization," + StringInvariant.NEW_LINE
Expand Down Expand Up @@ -1137,10 +1140,6 @@ public class StringResources {
*/
public String DONE = DEFAULT_DONE;
// -------------------------------------------------
/**
* Default String = "Help content"
*/
public String HELP_CONTENT = DEFAULT_HELP_CONTENT;
/**
* Default String = "Keyword"
*/
Expand Down Expand Up @@ -1285,6 +1284,19 @@ public class StringResources {
*/
public String USER_DEFINED_RECURSIVE_ARGUMENT = DEFAULT_USER_DEFINED_RECURSIVE_ARGUMENT;
// -------------------------------------------------
/**
* Default String = "Help content limited to query"
*/
public String HELP_CONTENT_LIMITED_TO_QUERY = DEFAULT_HELP_CONTENT_LIMITED_TO_QUERY;
/**
* Default String = "All help content."
*/
public String ALL_HELP_CONTENT = DEFAULT_ALL_HELP_CONTENT;
/**
* Default String = "Caption"
*/
public String CAPTION = DEFAULT_CAPTION;
// -------------------------------------------------
/**
* Default String = "Deserializing data from an untrusted source can introduce security vulnerabilities to your application."
*/
Expand Down Expand Up @@ -2988,7 +3000,6 @@ private static void printCurrentVsDefault(String nameStr, String currentValue, S
}
currentValueNew = quoteString(currentValue);
StringUtils.consolePrintln(nameStr + " = [VAL]" + currentValueNew + " [DEF]" + defaultValueNew);
return;
}
private static void printResources(StringResources stringResources, bool printDefault) {
printCurrentVsDefault("USER_LANGUAGE", stringResources.USER_LANGUAGE, DEFAULT_USER_LANGUAGE, printDefault);
Expand Down Expand Up @@ -3090,7 +3101,6 @@ private static void printResources(StringResources stringResources, bool printDe
printCurrentVsDefault("EXITING", stringResources.EXITING, DEFAULT_EXITING, printDefault);
printCurrentVsDefault("DONE", stringResources.DONE, DEFAULT_DONE, printDefault);
StringUtils.consolePrintln("// -------------------------------------------------");
printCurrentVsDefault("HELP_CONTENT", stringResources.HELP_CONTENT, DEFAULT_HELP_CONTENT, printDefault);
printCurrentVsDefault("KEYWORD", stringResources.KEYWORD, DEFAULT_KEYWORD, printDefault);
printCurrentVsDefault("SYNTAX", stringResources.SYNTAX, DEFAULT_SYNTAX, printDefault);
printCurrentVsDefault("NUMBER", stringResources.NUMBER, DEFAULT_NUMBER, printDefault);
Expand Down Expand Up @@ -3130,6 +3140,10 @@ private static void printResources(StringResources stringResources, bool printDe
printCurrentVsDefault("USER_DEFINED_FUNCTION", stringResources.USER_DEFINED_FUNCTION, DEFAULT_USER_DEFINED_FUNCTION, printDefault);
printCurrentVsDefault("USER_DEFINED_RECURSIVE_ARGUMENT", stringResources.USER_DEFINED_RECURSIVE_ARGUMENT, DEFAULT_USER_DEFINED_RECURSIVE_ARGUMENT, printDefault);
StringUtils.consolePrintln("// -------------------------------------------------");
printCurrentVsDefault("HELP_CONTENT_LIMITED_TO_QUERY", stringResources.HELP_CONTENT_LIMITED_TO_QUERY, DEFAULT_HELP_CONTENT_LIMITED_TO_QUERY, printDefault);
printCurrentVsDefault("ALL_HELP_CONTENT", stringResources.ALL_HELP_CONTENT, DEFAULT_ALL_HELP_CONTENT, printDefault);
printCurrentVsDefault("CAPTION", stringResources.CAPTION, DEFAULT_CAPTION, printDefault);
StringUtils.consolePrintln("// -------------------------------------------------");
printCurrentVsDefault("WARNING_BINARY_SERIALIZATION_SECURITY_RISKS", stringResources.WARNING_BINARY_SERIALIZATION_SECURITY_RISKS, DEFAULT_WARNING_BINARY_SERIALIZATION_SECURITY_RISKS, printDefault);
StringUtils.consolePrintln("// -------------------------------------------------");
printCurrentVsDefault("BINARY_RELATION", stringResources.BINARY_RELATION, DEFAULT_BINARY_RELATION, printDefault);
Expand Down
252 changes: 251 additions & 1 deletion CURRENT/c-sharp/src/org/mariuszgromada/math/mxparser/StringUtils.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* @(#)StringUtils.cs 5.2.0 2023-01-07
* @(#)StringUtils.cs 5.2.0 2023-01-17
*
* MathParser.org-mXparser DUAL LICENSE AGREEMENT as of date 2022-05-22
* The most up-to-date license is available at the below link:
Expand Down Expand Up @@ -180,6 +180,7 @@
*/
using System;
using System.Globalization;
using System.Text;
using System.Text.RegularExpressions;
using org.mariuszgromada.math.mxparser;

Expand Down Expand Up @@ -461,6 +462,243 @@ internal static void consolePrintln() {
}
internal static void consolePrintln(Object o) {
mXparser.consoleWriteLine(o);
}
internal static String cleanForHtml(String text) {
return text.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;");
}
internal static String cleanForMarkdown(String text) {
return text.Replace("\\", "\\\\").Replace("|", "\\|");
}
internal static String cleanForJson(String text) {
return text.Replace("\\", "\\\\");
}
internal static void stringBuilderPartsAppend(StringBuilder stringBuilder, params String[] partsToAppend) {
foreach (String part in partsToAppend) {
stringBuilder.Append(part);
}
}
internal static void stringBuilderLinesAppend(StringBuilder stringBuilder, params String[] linesToAppend) {
foreach (String line in linesToAppend) {
stringBuilder.Append(line);
stringBuilder.Append(StringInvariant.NEW_LINE);
}
}
internal static void stringBuilderPartsAppendDelimited(
String partTagLeft
,String partTagRight
,String delimiter
,bool clearForHtml
,bool clearForMarkdown
,bool clearForJson
,StringBuilder stringBuilder
,params String[] partsToAppend
) {
int n = 0;
foreach (String part in partsToAppend) {
n++;
if (n > 1) stringBuilder.Append(delimiter);
stringBuilder.Append(partTagLeft);

String partFinal = part;
if (clearForHtml)
partFinal = cleanForHtml(partFinal);
if (clearForMarkdown)
partFinal = cleanForMarkdown(partFinal);

if (clearForJson)
partFinal = cleanForJson(partFinal);

stringBuilder.Append(partFinal);

stringBuilder.Append(partTagRight);
}
}
internal static void stringBuilderPartsAppendDelimited(String partQuote, String delimiter, StringBuilder stringBuilder, params String[] partsToAppend) {
stringBuilderPartsAppendDelimited(partQuote, partQuote, delimiter, false, false, false, stringBuilder, partsToAppend);
}
internal static void stringBuilderPartsAppendDelimitedRow(
String partTagLeft
,String partTagRight
,String delimiter
,String rowBeforeTag
,String rowAfterTag
,bool clearForHtml
,bool clearForMarkdown
,bool clearForJson
,StringBuilder stringBuilder
,params String[] partsToAppend
) {
bool tagBefore = rowBeforeTag == null || rowBeforeTag.Length > 0;
bool tagAfter = rowAfterTag == null || rowAfterTag.Length > 0;

if (tagBefore) stringBuilder.Append(rowBeforeTag);
stringBuilderPartsAppendDelimited(partTagLeft, partTagRight, delimiter, clearForHtml, clearForMarkdown, clearForJson, stringBuilder, partsToAppend);
if (tagAfter) stringBuilder.Append(rowAfterTag);
}
internal static void stringBuilderPartsAppendDelimitedRow(
String partQuote
,String delimiter
,bool newLineBefore
,bool clearForHtml
,bool clearForMarkdown
,bool clearForJson
,StringBuilder stringBuilder
,params String[] partsToAppend
) {
if (newLineBefore)
stringBuilderPartsAppendDelimitedRow(partQuote, partQuote, delimiter, StringInvariant.NEW_LINE, "", clearForHtml, clearForMarkdown, clearForJson, stringBuilder, partsToAppend);
else
stringBuilderPartsAppendDelimitedRow(partQuote, partQuote, delimiter, "", "", clearForHtml, clearForMarkdown, clearForJson, stringBuilder, partsToAppend);
}
internal static void stringBuilderPartsAppendDelimitedRow(
String partQuote
,String delimiter
,bool newLineBefore
,StringBuilder stringBuilder
,params String[] partsToAppend
) {
stringBuilderPartsAppendDelimitedRow(partQuote, delimiter, newLineBefore, false, false, false, stringBuilder, partsToAppend);
}

private const String HTML_TD_START_TAG = "<td>";
private const String HTML_TD_END_TAG = "</td>";
private const String HTML_TH_START_TAG = "<th>";
private const String HTML_TH_END_TAG = "</th>";
private const String HTML_TR_START_TAG = "<tr>";
private static readonly String HTML_TR_END_TAG = "</tr>" + StringInvariant.NEW_LINE;

internal static void stringBuilderPartsAppendHtmlTableRow(StringBuilder stringBuilder, params String[] partsToAppend) {
stringBuilderPartsAppendDelimitedRow(
HTML_TD_START_TAG
,HTML_TD_END_TAG
,StringInvariant.EMPTY
, HTML_TR_START_TAG
,HTML_TR_END_TAG
,true
,false
,false
,stringBuilder
,partsToAppend
);
}

internal static void stringBuilderPartsAppendHtmlTableHead(StringBuilder stringBuilder, params String[] partsToAppend) {
stringBuilderPartsAppendDelimitedRow(
HTML_TH_START_TAG
,HTML_TH_END_TAG
,StringInvariant.EMPTY
,HTML_TR_START_TAG
,HTML_TR_END_TAG
,true
,false
,false
,stringBuilder
,partsToAppend);
}
private const String MARKDOWN_DELIMITER = "|";
private const String MARKDOWN_ROW_BEFORE_TAG = "|";
private static readonly String MARKDOWN_ROW_AFTER_TAG = "|" + StringInvariant.NEW_LINE;
private const String MARKDOWN_HEADER_TAG = "---";
internal static void stringBuilderPartsAppendMarkdownTableRow(StringBuilder stringBuilder, params String[] partsToAppend) {
stringBuilderPartsAppendDelimitedRow(
StringInvariant.EMPTY
,StringInvariant.EMPTY
,MARKDOWN_DELIMITER
,MARKDOWN_ROW_BEFORE_TAG
,MARKDOWN_ROW_AFTER_TAG
,false
,true
,false
,stringBuilder
,partsToAppend
);
}

internal static void stringBuilderPartsAppendMarkdownTableHead(bool addHeader, StringBuilder stringBuilder, params String[] partsToAppend) {
if (!addHeader) {
String[] mdTableEmptyHeader = new String[partsToAppend.Length];
for (int i = 0; i < mdTableEmptyHeader.Length; i++)
mdTableEmptyHeader[i] = " ";
stringBuilderPartsAppendDelimitedRow(
StringInvariant.EMPTY
,StringInvariant.EMPTY
,MARKDOWN_DELIMITER
,MARKDOWN_ROW_BEFORE_TAG
,MARKDOWN_ROW_AFTER_TAG
,false
,false
,false
,stringBuilder
,mdTableEmptyHeader
);
} else
stringBuilderPartsAppendDelimitedRow(
StringInvariant.EMPTY
,StringInvariant.EMPTY
,MARKDOWN_DELIMITER
,MARKDOWN_ROW_BEFORE_TAG
,MARKDOWN_ROW_AFTER_TAG
,false
,true
,false
,stringBuilder
,partsToAppend
);

String[] mdTableStructure = new String[partsToAppend.Length];
for (int i = 0; i < mdTableStructure.Length; i++)
mdTableStructure[i] = MARKDOWN_HEADER_TAG;

stringBuilderPartsAppendDelimitedRow(
StringInvariant.EMPTY
,StringInvariant.EMPTY
,MARKDOWN_DELIMITER
,MARKDOWN_ROW_BEFORE_TAG
,MARKDOWN_ROW_AFTER_TAG
,false
,false
,false
,stringBuilder
,mdTableStructure
);
}

internal const String JSON_ROW_INDENTATION_TAG = " ";
private static readonly String JSON_PART_INDENTATION_TAG = JSON_ROW_INDENTATION_TAG + JSON_ROW_INDENTATION_TAG;
private static readonly String JSON_ROW_BEFORE_TAG = StringInvariant.NEW_LINE
+ JSON_ROW_INDENTATION_TAG
+ StringInvariant.LEFT_CURLY_BRACKET
+ StringInvariant.NEW_LINE
;
private static readonly String JSON_ROW_AFTER_TAG = StringInvariant.NEW_LINE
+ JSON_ROW_INDENTATION_TAG
+ StringInvariant.RIGHT_CURLY_BRACKET
;
private static readonly String JSON_PART_DELIMITER = StringInvariant.COMMA + StringInvariant.NEW_LINE;
internal static void stringBuilderPartsAppendJsonRow(StringBuilder stringBuilder, params String[] partsToAppend) {
stringBuilderPartsAppendDelimitedRow(
JSON_PART_INDENTATION_TAG
,StringInvariant.EMPTY
,JSON_PART_DELIMITER
,JSON_ROW_BEFORE_TAG
,JSON_ROW_AFTER_TAG
,false
,false
,true
,stringBuilder
,partsToAppend
);
}
internal static String cleanNewLineAtTheEnd(String str) {
int length = str.Length;

if (length == 0)
return str;

if (str.EndsWith(StringInvariant.NEW_LINE))
return str.Substring(0, length - StringInvariant.NEW_LINE.Length);

return str;
}
/**
* Converts integer number to hex string (plain text)
Expand Down Expand Up @@ -540,5 +778,17 @@ public static String numberToAsciiString(long number) {
public static String numberToAsciiString(double number) {
return hexString2AsciiString(numberToHexString(number));
}
public static int countOccurrences(String str, String toFind) {
if (str == null || toFind == null) return -1;
int strLen = str.Length;
int toFindLen = toFind.Length;
if (strLen == 0 || toFindLen == 0 || toFindLen > strLen) return 0;
return (strLen - str.Replace(toFind, StringInvariant.EMPTY).Length) / toFindLen;
}
public static int countLines(String text) {
if (text == null) return -1;
if (text.Length == 0) return 0;
return countOccurrences(text, StringInvariant.NEW_LINE) + 1;
}
}
}
Loading

0 comments on commit 5ef30b9

Please sign in to comment.