Skip to content

Commit b91577e

Browse files
author
Viktor Chernev
committed
Work on features and bugs
1 parent e55d250 commit b91577e

File tree

7 files changed

+253
-24
lines changed

7 files changed

+253
-24
lines changed

DescribeTranspiler.CLI/Datnik.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ namespace DescribeTranspiler.Cli
99
{
1010
public class Datnik
1111
{
12+
/// <summary>
13+
/// Wether to censor items marked as "sensitive", "secret" or "hidden".
14+
/// </summary>
15+
public static bool isCensored;
16+
1217
/// <summary>
1318
/// Password to decrypt input files, if parseEncryptedFiles == true
1419
/// </summary>
@@ -119,6 +124,8 @@ public class Datnik
119124

120125
static Datnik()
121126
{
127+
isCensored = false;
128+
122129
inputPassword = null;
123130
outputPassword = null;
124131
parseEncryptedFiles = false;

DescribeTranspiler.CLI/Functions_Main.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ internal static bool Compile()
5252
Messages.ConsoleLog,
5353
Messages.ConsoleLogError,
5454
Messages.ConsoleLogInfo);
55+
(translator as HtmlBasicTranslator)!.IsCensored = Datnik.isCensored;
5556
}
5657
else if (Datnik.translatorName.ToLower().StartsWith("html_")
5758
|| Datnik.translatorName.ToLower() == "html")
@@ -60,6 +61,7 @@ internal static bool Compile()
6061
Messages.ConsoleLog,
6162
Messages.ConsoleLogError,
6263
Messages.ConsoleLogInfo);
64+
(translator as HtmlPageTranslator)!.IsCensored = Datnik.isCensored;
6365
}
6466
else if (Datnik.translatorName.ToLower().StartsWith("xml_")
6567
|| Datnik.translatorName.ToLower() == "xml")

DescribeTranspiler.CLI/Functions_Messages.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ public static void printHelpMessage(bool block = true)
413413
ConsoleLogInfo("Display this help message");
414414
ConsoleLog("");
415415
ConsoleLogInfo("-----------------------------------------------------------------");
416-
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> ]");
416+
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 ]");
417417
ConsoleLogInfo("TARGET_LANGUAGE - the desired output language: \"JSON\", \"HTML\", \"XML\", \"SQL\"");
418418
ConsoleLogInfo("TRANSLATOR_NAME - the name of the translator to be used : \"HTML_PLAIN\", \"HTML_PAGE\", \"XML_PLAIN\", \"SQL_FILEFILL\", \"JSON_BASIC\", \"JSON_LISTIARY\"");
419419
ConsoleLogInfo("PARSE_PATH - the path of the file to parse");
@@ -427,7 +427,7 @@ public static void printHelpMessage(bool block = true)
427427
ConsoleLogInfo("* theme - \"DBLUE\", \"LBLUE\", \"GREEN\", \"PASTEL\", \"EARTH\", \"CONTRAST\", \"DEFAULT\", \"VIOLET\", \"CYAN\"");
428428
ConsoleLog("");
429429
ConsoleLogInfo("-----------------------------------------------------------------");
430-
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> ]");
430+
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 ]");
431431
ConsoleLogInfo("TARGET_LANGUAGE - the desired output language: \"JSON\", \"HTML\", \"XML\", \"SQL\"");
432432
ConsoleLogInfo("TRANSLATOR_NAME - the name of the translator to be used : \"HTML_PLAIN\", \"HTML_PAGE\", \"XML_PLAIN\", \"SQL_FILEFILL\", \"JSON_BASIC\", \"JSON_LISTIARY\"");
433433
ConsoleLogInfo("PARSE_PATH - the path of the file to parse");

DescribeTranspiler.CLI/Program.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ static void Main(string[] args)
5252
//DescribeCompilerCLI parse-file PARSE_PATH RESULT_PATH
5353
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
5454
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
55-
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
55+
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
5656
else if (args[0].ToLower() == "parse-file")
5757
{
5858
parseFile(args);
@@ -62,7 +62,7 @@ static void Main(string[] args)
6262
//[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]
6363
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
6464
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
65-
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
65+
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
6666
else if (args[0].ToLower() == "parse-folder")
6767
{
6868
parseFolder(args);
@@ -72,7 +72,7 @@ static void Main(string[] args)
7272
//[ dsonly=<verb> ][ toponly=<verb> ][ onerror= ( stop | ignore )]
7373
//[ input-password=PASSWORD ][ output-password=PASSWORD ][ log-password=PASSWORD ]
7474
//[ language-version=<verb> | lang-ver=<verb> ][ translator = ( TARGET_LANGUAGE | TRANSLATOR_NAME )] [ beautify=<verb> ]
75-
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ]
75+
//[ verbosity=<verb> | log-verbosity=<verb> ][ logfile=LOG_PATH | log-file=LOG_PATH ] [ theme=<verb> ] [ censor ]
7676
else if (args[0].ToLower() == "parse-many")
7777
{
7878
Messages.printParseManyNotImplemented();
@@ -364,6 +364,10 @@ static void parseFile(string[] args)
364364
{
365365
if (Arguments.readBeautifyArgument(cur, i) == false) return;
366366
}
367+
else if (cur.ToLower() == "censor")
368+
{
369+
Datnik.isCensored = true;
370+
}
367371
else if (cur.StartsWith("verbosity=") && cur.Length > "verbosity=".Length)
368372
{
369373
if (Arguments.readVerbosityArgument(cur, i) == false) return;
@@ -473,6 +477,10 @@ static void parseFolder(string[] args)
473477
{
474478
if (Arguments.readBeautifyArgument(cur, i) == false) return;
475479
}
480+
else if (cur.ToLower() == "censor")
481+
{
482+
Datnik.isCensored = true;
483+
}
476484
else if (cur.StartsWith("verbosity=") && cur.Length > "verbosity=".Length)
477485
{
478486
if (Arguments.readVerbosityArgument(cur, i) == false) return;

DescribeTranspiler.CLI/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"DescribeTranspiler.CLI": {
44
"commandName": "Project",
5-
"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"
5+
"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"
66
}
77
}
88
}

DescribeTranspiler/Translators/Translators/Html/HtmlBasicTranslator.cs

Lines changed: 114 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
using DescribeParser.Unfold;
33
using System;
44
using System.Collections.Generic;
5+
using System.Text;
6+
using System.Text.RegularExpressions;
57
using System.Web;
8+
using static Org.BouncyCastle.Asn1.Cmp.Challenge;
69

710

811
namespace DescribeTranspiler.Translators
@@ -12,6 +15,7 @@ namespace DescribeTranspiler.Translators
1215
/// </summary>
1316
public class HtmlBasicTranslator : DescribeUnfoldTranslator
1417
{
18+
public bool IsCensored = false;
1519
public override bool IsInitialized
1620
{
1721
get;
@@ -302,25 +306,50 @@ string TranslateProduction(DescribeUnfold u, string id)
302306
}
303307

304308
//replace in template
309+
string? colval = null;
305310
if (u.Decorators.ContainsKey(id))
306311
{
307312
List<DescribeDecorator> decorators = u.Decorators[id];
308313
foreach (DescribeDecorator decorator in decorators)
309314
{
310315
if (decorator.Name == "color")
311316
{
312-
string res = coloredProductionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
313-
res = res.Replace("{LINKS}", linkage);
314-
res = res.Replace("{COLOR}", decorator.Value);
315-
res = res.Replace("{ITEMS}", items);
316-
return res;
317+
colval = decorator.Value;
318+
}
319+
else if (decorator.Name == "sensitive" && IsCensored)
320+
{
321+
string text = u.Translations[id];
322+
string censored = Regex.Replace(text, @"\S", "?");
323+
u.Translations[id] = censored;
324+
}
325+
else if (decorator.Name == "secret" && IsCensored)
326+
{
327+
string mask = GenerateRandomDarkSquares(random.Next(10, 30));
328+
u.Translations[id] = mask;
329+
}
330+
else if (decorator.Name == "hidden" && IsCensored)
331+
{
332+
string mask = GenerateRandomGreekText(random.Next(40, 100));
333+
u.Translations[id] = mask;
317334
}
318335
}
319336
}
320-
string pt = productionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
321-
pt = pt.Replace("{LINKS}", linkage);
322-
pt = pt.Replace("{ITEMS}", items);
323-
return pt;
337+
338+
if (colval == null)
339+
{
340+
string pt = productionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
341+
pt = pt.Replace("{LINKS}", linkage);
342+
pt = pt.Replace("{ITEMS}", items);
343+
return pt;
344+
}
345+
else
346+
{
347+
string res = coloredProductionTemplate!.Replace("{TITLE}", HttpUtility.HtmlEncode(u.Translations[id]));
348+
res = res.Replace("{LINKS}", linkage);
349+
res = res.Replace("{COLOR}", colval);
350+
res = res.Replace("{ITEMS}", items);
351+
return res;
352+
}
324353
}
325354
string TranslateItem(DescribeUnfold u, string id)
326355
{
@@ -395,11 +424,87 @@ string TranslateItem(DescribeUnfold u, string id)
395424
{
396425
res = "<span style='text-decoration-line:line-through;'>" + res + "</span>";
397426
}
427+
else if (decorator.Name == "sensitive" && IsCensored)
428+
{
429+
string text = u.Translations[id];
430+
string censored = Regex.Replace(text, @"\S", "?");
431+
432+
// possible bug here - this is bad way of doing things
433+
// that is hacked into place. Should be refactored
434+
res = res.Replace(u.Translations[id], censored);
435+
u.Translations[id] = censored;
436+
}
437+
else if (decorator.Name == "secret" && IsCensored)
438+
{
439+
// possible bug here - this is bad way of doing things
440+
// that is hacked into place. Should be refactored
441+
string mask = GenerateRandomDarkSquares(random.Next(10, 30));
442+
res = res.Replace(u.Translations[id], mask);
443+
u.Translations[id] = mask;
444+
}
445+
else if (decorator.Name == "hidden" && IsCensored)
446+
{
447+
// possible bug here - this is bad way of doing things
448+
// that is hacked into place. Should be refactored
449+
string mask = GenerateRandomGreekText(random.Next(40, 100));
450+
res = res.Replace(u.Translations[id], mask);
451+
u.Translations[id] = mask;
452+
}
398453
}
399454
}
400455
return before + res + after;
401456
}
402457

458+
//more
459+
Random random = new Random();
460+
string GenerateRandomGreekText(int length)
461+
{
462+
// Define a pool of Greek characters and spaces
463+
string pool = "α βγδ εζη θικ λμν ξοπ ρστ υφχ ψω άέή ίόύ ώ ";
464+
465+
StringBuilder sb = new StringBuilder();
466+
467+
// Generate random characters from the pool
468+
for (int i = 0; i < length; i++)
469+
{
470+
char randomChar = pool[random.Next(pool.Length)];
471+
sb.Append(randomChar);
472+
}
473+
474+
return sb.ToString();
475+
}
476+
string GenerateRandomMathText(int length)
477+
{
478+
// Define a pool of Greek characters and spaces
479+
string pool = "+ - × ÷ = ≠ < > ≤ ≥ ∞ π ∑ ∫ √ ∆ ∇ ∝ ⊕ ⊗ ⊥ ⎰";
480+
481+
StringBuilder sb = new StringBuilder();
482+
483+
// Generate random characters from the pool
484+
for (int i = 0; i < length; i++)
485+
{
486+
char randomChar = pool[random.Next(pool.Length)];
487+
sb.Append(randomChar);
488+
}
489+
490+
return sb.ToString();
491+
}
492+
string GenerateRandomDarkSquares(int length)
493+
{
494+
// Define a pool of Greek characters and spaces
495+
string pool = "▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇";
496+
497+
StringBuilder sb = new StringBuilder();
498+
499+
// Generate random characters from the pool
500+
for (int i = 0; i < length; i++)
501+
{
502+
char randomChar = pool[random.Next(pool.Length)];
503+
sb.Append(randomChar);
504+
}
505+
506+
return sb.ToString();
507+
}
403508

404509

405510
//log

0 commit comments

Comments
 (0)