QR Code renderer

- Will output QR Code as SVG
- Temporarily removed Base64 feature
- Changed install.sh to focus on platform
- Makefile can now build and package for macOS or Linux separately
This commit is contained in:
Tony Bark 2025-05-07 11:40:52 -04:00
parent 09b52a4f28
commit 66d4cbc9ec
12 changed files with 318 additions and 37 deletions

50
BuildCommand.cs Normal file
View file

@ -0,0 +1,50 @@
namespace Glyph;
[Command("build", Description = "Build Glyph program.")]
public class BuildCommand : ICommand
{
[CommandParameter(0, Name = "file", Description = "Path to the Glyph source file.")]
public string FilePath { get; set; }
[CommandOption("dry", 'd', Description = "Dry run.")]
public bool DryRun { get; set; }
[CommandOption("verbose", 'v', Description = "Enable verbose output.")]
public bool Verbose { get; set; }
public async ValueTask ExecuteAsync(IConsole console)
{
var file = new FileInfo(FilePath);
if (!File.Exists(FilePath))
{
await console.Error.WriteLineAsync($"Error: File not found: {FilePath}");
return;
}
var lines = await File.ReadAllLinesAsync(FilePath);
var source = ScriptHelper.LinesToString(lines);
if (Verbose)
{
await console.Output.WriteLineAsync($"Compiling: {FilePath}");
}
var counter = ScriptHelper.CharacterCounter(1259, source);
if (counter.checker)
await console.Output.WriteAsync(counter.output);
if (DryRun)
return;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(source, QRCodeGenerator.ECCLevel.H);
var qrCode = new SvgQRCode(qrCodeData);
var qrCodeAsSvg = qrCode.GetGraphic(57);
var path = Path.GetDirectoryName(FilePath);
var srcName = Path.GetFileNameWithoutExtension(file.Name);
File.WriteAllText(Path.Combine(path, $"{srcName}.svg"), qrCodeAsSvg);
}
}

View file

@ -1,32 +0,0 @@
namespace Glyph;
[Command("build", Description = "Build Glyph program.")]
public class CompileCommand : ICommand
{
[CommandParameter(0, Name = "file", Description = "Path to the Glyph source file.")]
public string FilePath { get; set; }
[CommandOption("verbose", 'v', Description = "Enable verbose output.")]
public bool Verbose { get; set; }
public async ValueTask ExecuteAsync(IConsole console)
{
if (!System.IO.File.Exists(FilePath))
{
await console.Error.WriteLineAsync($"Error: File not found: {FilePath}");
return;
}
var lines = await System.IO.File.ReadAllLinesAsync(FilePath);
var source = ScriptHelper.LinesToString(lines);
if (Verbose)
{
await console.Output.WriteLineAsync($"Compiling: {FilePath}");
}
var binary = ScriptHelper.EncodeTo64(source);
File.WriteAllText(Path.Combine(Path.GetDirectoryName(FilePath), "output.glyb"), binary);
}
}

View file

@ -1,4 +1,5 @@
global using Glyph;
global using QRCoder;
global using CliFx;
global using CliFx.Attributes;
global using CliFx.Infrastructure;

View file

@ -6,12 +6,13 @@
<ImplicitUsings>enable</ImplicitUsings>
<AssemblyName>glyph</AssemblyName>
<Nullable>enable</Nullable>
<Version>0.1.106</Version>
<Version>0.2.100</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CliFx" Version="2.3.5" />
<PackageReference Include="DynamicExpresso.Core" Version="2.19.0" />
<PackageReference Include="QRCoder" Version="1.6.0" />
</ItemGroup>
</Project>

View file

@ -11,6 +11,10 @@ APPIMAGE_DIR = ./AppDir
all: build-linux build-mac package-linux package-mac
linux: build-linux package-linux
mac: build-mac package-mac
clean:
rm -rf bin obj $(OUTPUT_DIR)

View file

@ -1,6 +1,6 @@
await new CliApplicationBuilder()
.AddCommand<RunCommand>()
.AddCommand<CompileCommand>()
.AddCommand<BuildCommand>()
.SetExecutableName("Glyph")
.Build()
.RunAsync();

View file

@ -12,9 +12,9 @@ Glyph is a human-readable esoteric programming language that is designed to fit
- [ ] Compiler
- [ ] QR Code
- [x] QR Code
- [x] Base64
- [ ] Base64
## 🧾 Program Structure
@ -48,6 +48,8 @@ verb subject object [modifier]
- .NET 8.0
- Dynamic Expresso for interpreter
- CILx for command line
- QRCoder for renderer
## 🗓️ Update Cycle

View file

@ -33,6 +33,7 @@ public class RunCommand : ICommand
}
lines = await System.IO.File.ReadAllLinesAsync(FilePath);
var source = ScriptHelper.LinesToString(lines);
if (!string.IsNullOrEmpty(InputPath))
{
@ -46,6 +47,9 @@ public class RunCommand : ICommand
await console.Output.WriteLineAsync($"Executing: {FilePath}");
}
if (source.Length >= 1187)
await console.Output.WriteAsync("Warning over 1,187 characters.");
Runner.Interpret(lines);
}
}

View file

@ -25,4 +25,11 @@ public static class ScriptHelper
/// <returns>The resulting string.</returns>
static public string LinesToString(string[] lines) => string.Join(Environment.NewLine, lines);
static public (bool checker, string output) CharacterCounter(int limit, string text)
{
if (text.Length >= limit)
return (true, $"Warning source is over {limit:n} characters");
return (false, string.Empty);
}
}

View file

@ -5,7 +5,8 @@
set -e
SOURCE_BIN="$1"
PLATFORM="$1"
SOURCE_BIN="./dist/glyph-$PLATFORM/glyph"
INSTALL_DIR="$HOME/.local/bin"
TARGET="$INSTALL_DIR/glyph"

View file

@ -1,4 +1,6 @@
set x 5
mul x 2
say x
inp y
say y
end

241
sample.svg Normal file
View file

@ -0,0 +1,241 @@
<svg version="1.1" baseProfile="full" shape-rendering="crispEdges" width="2337" height="2337" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><rect x="0" y="0" width="2337" height="2337" fill="#FFFFFF" />
<rect x="228" y="228" width="399" height="57" fill="#000000" />
<rect x="741" y="228" width="57" height="57" fill="#000000" />
<rect x="855" y="228" width="114" height="57" fill="#000000" />
<rect x="1083" y="228" width="456" height="57" fill="#000000" />
<rect x="1596" y="228" width="57" height="171" fill="#000000" />
<rect x="1710" y="228" width="399" height="57" fill="#000000" />
<rect x="228" y="285" width="57" height="285" fill="#000000" />
<rect x="570" y="285" width="57" height="285" fill="#000000" />
<rect x="684" y="285" width="114" height="57" fill="#000000" />
<rect x="969" y="285" width="57" height="57" fill="#000000" />
<rect x="1083" y="285" width="57" height="57" fill="#000000" />
<rect x="1254" y="285" width="171" height="57" fill="#000000" />
<rect x="1482" y="285" width="57" height="57" fill="#000000" />
<rect x="1710" y="285" width="57" height="285" fill="#000000" />
<rect x="2052" y="285" width="57" height="285" fill="#000000" />
<rect x="342" y="342" width="171" height="171" fill="#000000" />
<rect x="798" y="342" width="57" height="57" fill="#000000" />
<rect x="1083" y="342" width="114" height="57" fill="#000000" />
<rect x="1311" y="342" width="57" height="57" fill="#000000" />
<rect x="1425" y="342" width="114" height="57" fill="#000000" />
<rect x="1824" y="342" width="171" height="171" fill="#000000" />
<rect x="684" y="399" width="171" height="114" fill="#000000" />
<rect x="969" y="399" width="57" height="57" fill="#000000" />
<rect x="1254" y="399" width="171" height="57" fill="#000000" />
<rect x="1482" y="399" width="171" height="57" fill="#000000" />
<rect x="1083" y="456" width="114" height="57" fill="#000000" />
<rect x="1425" y="456" width="57" height="57" fill="#000000" />
<rect x="855" y="513" width="114" height="57" fill="#000000" />
<rect x="1083" y="513" width="57" height="57" fill="#000000" />
<rect x="1254" y="513" width="114" height="57" fill="#000000" />
<rect x="1482" y="513" width="171" height="57" fill="#000000" />
<rect x="228" y="570" width="399" height="57" fill="#000000" />
<rect x="684" y="570" width="57" height="57" fill="#000000" />
<rect x="798" y="570" width="57" height="57" fill="#000000" />
<rect x="912" y="570" width="57" height="57" fill="#000000" />
<rect x="1026" y="570" width="57" height="57" fill="#000000" />
<rect x="1140" y="570" width="57" height="114" fill="#000000" />
<rect x="1254" y="570" width="57" height="114" fill="#000000" />
<rect x="1368" y="570" width="57" height="57" fill="#000000" />
<rect x="1482" y="570" width="57" height="57" fill="#000000" />
<rect x="1596" y="570" width="57" height="57" fill="#000000" />
<rect x="1710" y="570" width="399" height="57" fill="#000000" />
<rect x="684" y="627" width="114" height="171" fill="#000000" />
<rect x="912" y="627" width="114" height="57" fill="#000000" />
<rect x="1539" y="627" width="57" height="57" fill="#000000" />
<rect x="285" y="684" width="57" height="114" fill="#000000" />
<rect x="399" y="684" width="228" height="57" fill="#000000" />
<rect x="969" y="684" width="57" height="57" fill="#000000" />
<rect x="1083" y="684" width="171" height="57" fill="#000000" />
<rect x="1368" y="684" width="57" height="57" fill="#000000" />
<rect x="1482" y="684" width="114" height="57" fill="#000000" />
<rect x="1653" y="684" width="114" height="57" fill="#000000" />
<rect x="1824" y="684" width="114" height="57" fill="#000000" />
<rect x="1995" y="684" width="57" height="57" fill="#000000" />
<rect x="399" y="741" width="57" height="57" fill="#000000" />
<rect x="513" y="741" width="57" height="57" fill="#000000" />
<rect x="855" y="741" width="57" height="114" fill="#000000" />
<rect x="1026" y="741" width="57" height="57" fill="#000000" />
<rect x="1140" y="741" width="228" height="57" fill="#000000" />
<rect x="1425" y="741" width="57" height="57" fill="#000000" />
<rect x="1539" y="741" width="57" height="57" fill="#000000" />
<rect x="1710" y="741" width="57" height="57" fill="#000000" />
<rect x="1824" y="741" width="171" height="57" fill="#000000" />
<rect x="342" y="798" width="57" height="57" fill="#000000" />
<rect x="456" y="798" width="57" height="114" fill="#000000" />
<rect x="570" y="798" width="171" height="57" fill="#000000" />
<rect x="1140" y="798" width="57" height="57" fill="#000000" />
<rect x="1368" y="798" width="57" height="57" fill="#000000" />
<rect x="1482" y="798" width="171" height="57" fill="#000000" />
<rect x="1938" y="798" width="57" height="114" fill="#000000" />
<rect x="2052" y="798" width="57" height="57" fill="#000000" />
<rect x="285" y="855" width="114" height="57" fill="#000000" />
<rect x="684" y="855" width="57" height="57" fill="#000000" />
<rect x="855" y="855" width="114" height="57" fill="#000000" />
<rect x="1083" y="855" width="57" height="57" fill="#000000" />
<rect x="1254" y="855" width="57" height="57" fill="#000000" />
<rect x="1425" y="855" width="285" height="57" fill="#000000" />
<rect x="1767" y="855" width="114" height="57" fill="#000000" />
<rect x="342" y="912" width="114" height="57" fill="#000000" />
<rect x="513" y="912" width="114" height="57" fill="#000000" />
<rect x="684" y="912" width="171" height="57" fill="#000000" />
<rect x="969" y="912" width="57" height="57" fill="#000000" />
<rect x="1140" y="912" width="114" height="57" fill="#000000" />
<rect x="1311" y="912" width="57" height="57" fill="#000000" />
<rect x="1425" y="912" width="57" height="57" fill="#000000" />
<rect x="1539" y="912" width="228" height="57" fill="#000000" />
<rect x="1995" y="912" width="114" height="57" fill="#000000" />
<rect x="228" y="969" width="114" height="57" fill="#000000" />
<rect x="513" y="969" width="57" height="57" fill="#000000" />
<rect x="627" y="969" width="57" height="57" fill="#000000" />
<rect x="855" y="969" width="228" height="57" fill="#000000" />
<rect x="1197" y="969" width="228" height="57" fill="#000000" />
<rect x="1539" y="969" width="57" height="57" fill="#000000" />
<rect x="1653" y="969" width="57" height="57" fill="#000000" />
<rect x="1767" y="969" width="57" height="57" fill="#000000" />
<rect x="1938" y="969" width="114" height="57" fill="#000000" />
<rect x="228" y="1026" width="57" height="114" fill="#000000" />
<rect x="399" y="1026" width="114" height="57" fill="#000000" />
<rect x="570" y="1026" width="57" height="57" fill="#000000" />
<rect x="741" y="1026" width="57" height="114" fill="#000000" />
<rect x="912" y="1026" width="57" height="57" fill="#000000" />
<rect x="1026" y="1026" width="171" height="57" fill="#000000" />
<rect x="1311" y="1026" width="114" height="57" fill="#000000" />
<rect x="1482" y="1026" width="57" height="114" fill="#000000" />
<rect x="1653" y="1026" width="114" height="57" fill="#000000" />
<rect x="1824" y="1026" width="57" height="57" fill="#000000" />
<rect x="1938" y="1026" width="57" height="57" fill="#000000" />
<rect x="399" y="1083" width="57" height="57" fill="#000000" />
<rect x="513" y="1083" width="57" height="57" fill="#000000" />
<rect x="969" y="1083" width="171" height="57" fill="#000000" />
<rect x="1197" y="1083" width="57" height="57" fill="#000000" />
<rect x="1368" y="1083" width="57" height="57" fill="#000000" />
<rect x="1824" y="1083" width="228" height="57" fill="#000000" />
<rect x="342" y="1140" width="285" height="57" fill="#000000" />
<rect x="798" y="1140" width="114" height="57" fill="#000000" />
<rect x="969" y="1140" width="114" height="57" fill="#000000" />
<rect x="1140" y="1140" width="171" height="57" fill="#000000" />
<rect x="1368" y="1140" width="114" height="57" fill="#000000" />
<rect x="1539" y="1140" width="228" height="57" fill="#000000" />
<rect x="1824" y="1140" width="57" height="114" fill="#000000" />
<rect x="2052" y="1140" width="57" height="57" fill="#000000" />
<rect x="342" y="1197" width="57" height="57" fill="#000000" />
<rect x="513" y="1197" width="57" height="57" fill="#000000" />
<rect x="684" y="1197" width="171" height="57" fill="#000000" />
<rect x="912" y="1197" width="57" height="57" fill="#000000" />
<rect x="1026" y="1197" width="57" height="57" fill="#000000" />
<rect x="1254" y="1197" width="114" height="57" fill="#000000" />
<rect x="1482" y="1197" width="57" height="57" fill="#000000" />
<rect x="1596" y="1197" width="57" height="57" fill="#000000" />
<rect x="1710" y="1197" width="57" height="57" fill="#000000" />
<rect x="1938" y="1197" width="171" height="57" fill="#000000" />
<rect x="399" y="1254" width="285" height="57" fill="#000000" />
<rect x="741" y="1254" width="57" height="57" fill="#000000" />
<rect x="855" y="1254" width="114" height="114" fill="#000000" />
<rect x="1197" y="1254" width="57" height="57" fill="#000000" />
<rect x="1311" y="1254" width="57" height="57" fill="#000000" />
<rect x="1425" y="1254" width="570" height="57" fill="#000000" />
<rect x="2052" y="1254" width="57" height="57" fill="#000000" />
<rect x="285" y="1311" width="57" height="57" fill="#000000" />
<rect x="456" y="1311" width="57" height="57" fill="#000000" />
<rect x="627" y="1311" width="57" height="57" fill="#000000" />
<rect x="1083" y="1311" width="57" height="57" fill="#000000" />
<rect x="1197" y="1311" width="228" height="57" fill="#000000" />
<rect x="1482" y="1311" width="57" height="57" fill="#000000" />
<rect x="1653" y="1311" width="114" height="57" fill="#000000" />
<rect x="1938" y="1311" width="114" height="57" fill="#000000" />
<rect x="342" y="1368" width="114" height="57" fill="#000000" />
<rect x="513" y="1368" width="114" height="57" fill="#000000" />
<rect x="855" y="1368" width="57" height="57" fill="#000000" />
<rect x="969" y="1368" width="57" height="57" fill="#000000" />
<rect x="1140" y="1368" width="171" height="57" fill="#000000" />
<rect x="1425" y="1368" width="228" height="57" fill="#000000" />
<rect x="1767" y="1368" width="57" height="57" fill="#000000" />
<rect x="2052" y="1368" width="57" height="57" fill="#000000" />
<rect x="228" y="1425" width="57" height="171" fill="#000000" />
<rect x="342" y="1425" width="171" height="57" fill="#000000" />
<rect x="627" y="1425" width="114" height="57" fill="#000000" />
<rect x="1026" y="1425" width="228" height="57" fill="#000000" />
<rect x="1425" y="1425" width="57" height="57" fill="#000000" />
<rect x="1539" y="1425" width="57" height="57" fill="#000000" />
<rect x="1653" y="1425" width="57" height="57" fill="#000000" />
<rect x="1767" y="1425" width="114" height="57" fill="#000000" />
<rect x="1995" y="1425" width="57" height="57" fill="#000000" />
<rect x="342" y="1482" width="114" height="57" fill="#000000" />
<rect x="570" y="1482" width="114" height="57" fill="#000000" />
<rect x="741" y="1482" width="114" height="114" fill="#000000" />
<rect x="1083" y="1482" width="57" height="57" fill="#000000" />
<rect x="1311" y="1482" width="114" height="57" fill="#000000" />
<rect x="1539" y="1482" width="171" height="57" fill="#000000" />
<rect x="1824" y="1482" width="57" height="57" fill="#000000" />
<rect x="1938" y="1482" width="171" height="57" fill="#000000" />
<rect x="342" y="1539" width="57" height="57" fill="#000000" />
<rect x="513" y="1539" width="57" height="57" fill="#000000" />
<rect x="627" y="1539" width="57" height="57" fill="#000000" />
<rect x="969" y="1539" width="57" height="57" fill="#000000" />
<rect x="1083" y="1539" width="114" height="57" fill="#000000" />
<rect x="1254" y="1539" width="171" height="57" fill="#000000" />
<rect x="1482" y="1539" width="57" height="57" fill="#000000" />
<rect x="1596" y="1539" width="114" height="57" fill="#000000" />
<rect x="1824" y="1539" width="228" height="57" fill="#000000" />
<rect x="228" y="1596" width="114" height="57" fill="#000000" />
<rect x="399" y="1596" width="57" height="57" fill="#000000" />
<rect x="513" y="1596" width="114" height="57" fill="#000000" />
<rect x="684" y="1596" width="285" height="57" fill="#000000" />
<rect x="1026" y="1596" width="114" height="57" fill="#000000" />
<rect x="1197" y="1596" width="57" height="57" fill="#000000" />
<rect x="1596" y="1596" width="399" height="57" fill="#000000" />
<rect x="2052" y="1596" width="57" height="57" fill="#000000" />
<rect x="684" y="1653" width="171" height="57" fill="#000000" />
<rect x="912" y="1653" width="57" height="57" fill="#000000" />
<rect x="1140" y="1653" width="171" height="57" fill="#000000" />
<rect x="1425" y="1653" width="114" height="57" fill="#000000" />
<rect x="1596" y="1653" width="57" height="57" fill="#000000" />
<rect x="1824" y="1653" width="57" height="114" fill="#000000" />
<rect x="1938" y="1653" width="114" height="57" fill="#000000" />
<rect x="228" y="1710" width="399" height="57" fill="#000000" />
<rect x="741" y="1710" width="114" height="57" fill="#000000" />
<rect x="912" y="1710" width="114" height="57" fill="#000000" />
<rect x="1083" y="1710" width="171" height="114" fill="#000000" />
<rect x="1311" y="1710" width="114" height="57" fill="#000000" />
<rect x="1539" y="1710" width="114" height="57" fill="#000000" />
<rect x="1710" y="1710" width="57" height="57" fill="#000000" />
<rect x="1938" y="1710" width="57" height="57" fill="#000000" />
<rect x="228" y="1767" width="57" height="285" fill="#000000" />
<rect x="570" y="1767" width="57" height="285" fill="#000000" />
<rect x="684" y="1767" width="57" height="114" fill="#000000" />
<rect x="798" y="1767" width="57" height="57" fill="#000000" />
<rect x="1368" y="1767" width="285" height="57" fill="#000000" />
<rect x="1824" y="1767" width="285" height="57" fill="#000000" />
<rect x="342" y="1824" width="171" height="171" fill="#000000" />
<rect x="1254" y="1824" width="57" height="57" fill="#000000" />
<rect x="1425" y="1824" width="456" height="57" fill="#000000" />
<rect x="684" y="1881" width="114" height="57" fill="#000000" />
<rect x="855" y="1881" width="57" height="57" fill="#000000" />
<rect x="969" y="1881" width="285" height="57" fill="#000000" />
<rect x="1482" y="1881" width="57" height="171" fill="#000000" />
<rect x="1596" y="1881" width="114" height="57" fill="#000000" />
<rect x="1881" y="1881" width="57" height="57" fill="#000000" />
<rect x="2052" y="1881" width="57" height="57" fill="#000000" />
<rect x="798" y="1938" width="114" height="57" fill="#000000" />
<rect x="1026" y="1938" width="57" height="57" fill="#000000" />
<rect x="1197" y="1938" width="171" height="57" fill="#000000" />
<rect x="1596" y="1938" width="57" height="57" fill="#000000" />
<rect x="1767" y="1938" width="171" height="57" fill="#000000" />
<rect x="1995" y="1938" width="114" height="57" fill="#000000" />
<rect x="684" y="1995" width="57" height="57" fill="#000000" />
<rect x="855" y="1995" width="171" height="57" fill="#000000" />
<rect x="1140" y="1995" width="57" height="57" fill="#000000" />
<rect x="1254" y="1995" width="171" height="57" fill="#000000" />
<rect x="1596" y="1995" width="114" height="57" fill="#000000" />
<rect x="1881" y="1995" width="228" height="57" fill="#000000" />
<rect x="228" y="2052" width="399" height="57" fill="#000000" />
<rect x="741" y="2052" width="57" height="57" fill="#000000" />
<rect x="912" y="2052" width="57" height="57" fill="#000000" />
<rect x="1026" y="2052" width="57" height="57" fill="#000000" />
<rect x="1311" y="2052" width="57" height="57" fill="#000000" />
<rect x="1596" y="2052" width="57" height="57" fill="#000000" />
<rect x="1767" y="2052" width="57" height="57" fill="#000000" />
<rect x="1881" y="2052" width="57" height="57" fill="#000000" />
</svg>

After

Width:  |  Height:  |  Size: 15 KiB