Skip to content

Commit

Permalink
Work on features and bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Viktor Chernev committed Oct 29, 2024
1 parent e55d250 commit b91577e
Show file tree
Hide file tree
Showing 7 changed files with 253 additions and 24 deletions.
7 changes: 7 additions & 0 deletions DescribeTranspiler.CLI/Datnik.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ namespace DescribeTranspiler.Cli
{
public class Datnik
{
/// <summary>
/// Wether to censor items marked as "sensitive", "secret" or "hidden".
/// </summary>
public static bool isCensored;

/// <summary>
/// Password to decrypt input files, if parseEncryptedFiles == true
/// </summary>
Expand Down Expand Up @@ -119,6 +124,8 @@ public class Datnik

static Datnik()
{
isCensored = false;

inputPassword = null;
outputPassword = null;
parseEncryptedFiles = false;
Expand Down
2 changes: 2 additions & 0 deletions DescribeTranspiler.CLI/Functions_Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ internal static bool Compile()
Messages.ConsoleLog,
Messages.ConsoleLogError,
Messages.ConsoleLogInfo);
(translator as HtmlBasicTranslator)!.IsCensored = Datnik.isCensored;
}
else if (Datnik.translatorName.ToLower().StartsWith("html_")
|| Datnik.translatorName.ToLower() == "html")
Expand All @@ -60,6 +61,7 @@ internal static bool Compile()
Messages.ConsoleLog,
Messages.ConsoleLogError,
Messages.ConsoleLogInfo);
(translator as HtmlPageTranslator)!.IsCensored = Datnik.isCensored;
}
else if (Datnik.translatorName.ToLower().StartsWith("xml_")
|| Datnik.translatorName.ToLower() == "xml")
Expand Down
4 changes: 2 additions & 2 deletions DescribeTranspiler.CLI/Functions_Messages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ public static void printHelpMessage(bool block = true)
ConsoleLogInfo("Display this help message");
ConsoleLog("");
ConsoleLogInfo("-----------------------------------------------------------------");
ConsoleLog("usage: " + thisName + " parse-file PARSE_PATH RESULT_PATH\n[ input-password=INPUT_PASSWORD ][ output-password=OUTPUT_PASSWORD ][ log-password=LOG_PASSWORD ]\n[ language-version=<verb> | lang-ver=<verb> ][ translator=(TARGET_LANGUAGE|TRANSLATOR_NAME) ]\n[ beautify=<verb> ][ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ][ theme=<verb> ]");
ConsoleLog("usage: " + thisName + " parse-file PARSE_PATH RESULT_PATH\n[ input-password=INPUT_PASSWORD ][ output-password=OUTPUT_PASSWORD ][ log-password=LOG_PASSWORD ]\n[ language-version=<verb> | lang-ver=<verb> ][ translator=(TARGET_LANGUAGE|TRANSLATOR_NAME) ]\n[ beautify=<verb> ][ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ][ theme=<verb> ][ censor ]");
ConsoleLogInfo("TARGET_LANGUAGE - the desired output language: \"JSON\", \"HTML\", \"XML\", \"SQL\"");
ConsoleLogInfo("TRANSLATOR_NAME - the name of the translator to be used : \"HTML_PLAIN\", \"HTML_PAGE\", \"XML_PLAIN\", \"SQL_FILEFILL\", \"JSON_BASIC\", \"JSON_LISTIARY\"");
ConsoleLogInfo("PARSE_PATH - the path of the file to parse");
Expand All @@ -427,7 +427,7 @@ public static void printHelpMessage(bool block = true)
ConsoleLogInfo("* theme - \"DBLUE\", \"LBLUE\", \"GREEN\", \"PASTEL\", \"EARTH\", \"CONTRAST\", \"DEFAULT\", \"VIOLET\", \"CYAN\"");
ConsoleLog("");
ConsoleLogInfo("-----------------------------------------------------------------");
ConsoleLog("usage: " + thisName + " parse-folder PARSE_PATH RESULT_PATH\n[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]\n[ input-password=INPUT_PASSWORD ][ output-password=OUTPUT_PASSWORD ][ log-password=LOG_PASSWORD ]\n[ language-version=<verb> | lang-ver=<verb> ][ translator=(TARGET_LANGUAGE | TRANSLATOR_NAME) ]\n[ beautify=<verb> ][ verbosity=<verb> | log-verbosity=<verb> ]\n[ logfile=LOG_PATH | log-file=LOG_PATH ][ theme=<verb> ]");
ConsoleLog("usage: " + thisName + " parse-folder PARSE_PATH RESULT_PATH\n[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]\n[ input-password=INPUT_PASSWORD ][ output-password=OUTPUT_PASSWORD ][ log-password=LOG_PASSWORD ]\n[ language-version=<verb> | lang-ver=<verb> ][ translator=(TARGET_LANGUAGE | TRANSLATOR_NAME) ]\n[ beautify=<verb> ][ verbosity=<verb> | log-verbosity=<verb> ]\n[ logfile=LOG_PATH | log-file=LOG_PATH ][ theme=<verb> ][ censor ]");
ConsoleLogInfo("TARGET_LANGUAGE - the desired output language: \"JSON\", \"HTML\", \"XML\", \"SQL\"");
ConsoleLogInfo("TRANSLATOR_NAME - the name of the translator to be used : \"HTML_PLAIN\", \"HTML_PAGE\", \"XML_PLAIN\", \"SQL_FILEFILL\", \"JSON_BASIC\", \"JSON_LISTIARY\"");
ConsoleLogInfo("PARSE_PATH - the path of the file to parse");
Expand Down
14 changes: 11 additions & 3 deletions DescribeTranspiler.CLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ static void Main(string[] args)
//DescribeCompilerCLI parse-file PARSE_PATH RESULT_PATH
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
else if (args[0].ToLower() == "parse-file")
{
parseFile(args);
Expand All @@ -62,7 +62,7 @@ static void Main(string[] args)
//[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
else if (args[0].ToLower() == "parse-folder")
{
parseFolder(args);
Expand All @@ -72,7 +72,7 @@ static void Main(string[] args)
//[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
else if (args[0].ToLower() == "parse-many")
{
Messages.printParseManyNotImplemented();
Expand Down Expand Up @@ -364,6 +364,10 @@ static void parseFile(string[] args)
{
if (Arguments.readBeautifyArgument(cur, i) == false) return;
}
else if (cur.ToLower() == "censor")
{
Datnik.isCensored = true;
}
else if (cur.StartsWith("verbosity=") && cur.Length > "verbosity=".Length)
{
if (Arguments.readVerbosityArgument(cur, i) == false) return;
Expand Down Expand Up @@ -473,6 +477,10 @@ static void parseFolder(string[] args)
{
if (Arguments.readBeautifyArgument(cur, i) == false) return;
}
else if (cur.ToLower() == "censor")
{
Datnik.isCensored = true;
}
else if (cur.StartsWith("verbosity=") && cur.Length > "verbosity=".Length)
{
if (Arguments.readVerbosityArgument(cur, i) == false) return;
Expand Down
2 changes: 1 addition & 1 deletion DescribeTranspiler.CLI/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"profiles": {
"DescribeTranspiler.CLI": {
"commandName": "Project",
"commandLineArgs": "parse-folder \"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\MyData\\Videos\" \"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\Videos.html\" translator=html_page beautify=true verbosity=low logfile=\"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\Videos.log\" dsonly=false toponly=false onerror=ignore"
"commandLineArgs": "parse-folder \"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\MyData\\Videos\" \"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\Videos.html\" translator=html_page beautify=true verbosity=low logfile=\"C:\\Users\\Viktor Chernev\\Desktop\\Lists-Cli\\Videos.log\" dsonly=false toponly=false onerror=ignore censor"
}
}
}
123 changes: 114 additions & 9 deletions DescribeTranspiler/Translators/Translators/Html/HtmlBasicTranslator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
using DescribeParser.Unfold;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using static Org.BouncyCastle.Asn1.Cmp.Challenge;


namespace DescribeTranspiler.Translators
Expand All @@ -12,6 +15,7 @@ namespace DescribeTranspiler.Translators
/// </summary>
public class HtmlBasicTranslator : DescribeUnfoldTranslator
{
public bool IsCensored = false;
public override bool IsInitialized
{
get;
Expand Down Expand Up @@ -302,25 +306,50 @@ string TranslateProduction(DescribeUnfold u, string id)
}

//replace in template
string? colval = null;
if (u.Decorators.ContainsKey(id))
{
List<DescribeDecorator> decorators = u.Decorators[id];
foreach (DescribeDecorator decorator in decorators)
{
if (decorator.Name == "color")
{
string res = coloredProductionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
res = res.Replace("{LINKS}", linkage);
res = res.Replace("{COLOR}", decorator.Value);
res = res.Replace("{ITEMS}", items);
return res;
colval = decorator.Value;
}
else if (decorator.Name == "sensitive" && IsCensored)
{
string text = u.Translations[id];
string censored = Regex.Replace(text, @"\S", "?");
u.Translations[id] = censored;
}
else if (decorator.Name == "secret" && IsCensored)
{
string mask = GenerateRandomDarkSquares(random.Next(10, 30));
u.Translations[id] = mask;
}
else if (decorator.Name == "hidden" && IsCensored)
{
string mask = GenerateRandomGreekText(random.Next(40, 100));
u.Translations[id] = mask;
}
}
}
string pt = productionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
pt = pt.Replace("{LINKS}", linkage);
pt = pt.Replace("{ITEMS}", items);
return pt;

if (colval == null)
{
string pt = productionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
pt = pt.Replace("{LINKS}", linkage);
pt = pt.Replace("{ITEMS}", items);
return pt;
}
else
{
string res = coloredProductionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
res = res.Replace("{LINKS}", linkage);
res = res.Replace("{COLOR}", colval);
res = res.Replace("{ITEMS}", items);
return res;
}
}
string TranslateItem(DescribeUnfold u, string id)
{
Expand Down Expand Up @@ -395,11 +424,87 @@ string TranslateItem(DescribeUnfold u, string id)
{
res = "<span style='text-decoration-line:line-through;'>" + res + "</span>";
}
else if (decorator.Name == "sensitive" && IsCensored)
{
string text = u.Translations[id];
string censored = Regex.Replace(text, @"\S", "?");

// possible bug here - this is bad way of doing things
// that is hacked into place. Should be refactored
res = res.Replace(u.Translations[id], censored);
u.Translations[id] = censored;
}
else if (decorator.Name == "secret" && IsCensored)
{
// possible bug here - this is bad way of doing things
// that is hacked into place. Should be refactored
string mask = GenerateRandomDarkSquares(random.Next(10, 30));
res = res.Replace(u.Translations[id], mask);
u.Translations[id] = mask;
}
else if (decorator.Name == "hidden" && IsCensored)
{
// possible bug here - this is bad way of doing things
// that is hacked into place. Should be refactored
string mask = GenerateRandomGreekText(random.Next(40, 100));
res = res.Replace(u.Translations[id], mask);
u.Translations[id] = mask;
}
}
}
return before + res + after;
}

//more
Random random = new Random();
string GenerateRandomGreekText(int length)
{
// Define a pool of Greek characters and spaces
string pool = "α βγδ εζη θικ λμν ξοπ ρστ υφχ ψω άέή ίόύ ώ ";

StringBuilder sb = new StringBuilder();

// Generate random characters from the pool
for (int i = 0; i < length; i++)
{
char randomChar = pool[random.Next(pool.Length)];
sb.Append(randomChar);
}

return sb.ToString();
}
string GenerateRandomMathText(int length)
{
// Define a pool of Greek characters and spaces
string pool = "+ - × ÷ = ≠ < > ≤ ≥ ∞ π ∑ ∫ √ ∆ ∇ ∝ ⊕ ⊗ ⊥ ⎰";

StringBuilder sb = new StringBuilder();

// Generate random characters from the pool
for (int i = 0; i < length; i++)
{
char randomChar = pool[random.Next(pool.Length)];
sb.Append(randomChar);
}

return sb.ToString();
}
string GenerateRandomDarkSquares(int length)
{
// Define a pool of Greek characters and spaces
string pool = "▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇";

StringBuilder sb = new StringBuilder();

// Generate random characters from the pool
for (int i = 0; i < length; i++)
{
char randomChar = pool[random.Next(pool.Length)];
sb.Append(randomChar);
}

return sb.ToString();
}


//log
Expand Down
Loading

0 comments on commit b91577e

Please sign in to comment.