initial logic

This commit is contained in:
Booklordofthedings 2025-04-24 16:49:33 +02:00
commit ba98da2b17
8 changed files with 138 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
# ---> Beef
build/
recovery/
BeefSpace_User.toml

5
BeefProj.toml Normal file
View file

@ -0,0 +1,5 @@
FileVersion = 1
[Project]
Name = "Writer"
StartupObject = "Writer.Program"

5
BeefSpace.toml Normal file
View file

@ -0,0 +1,5 @@
FileVersion = 1
Projects = {Writer = {Path = "."}}
[Workspace]
StartupProject = "Writer"

14
src/Program.bf Normal file
View file

@ -0,0 +1,14 @@
namespace Writer;
class Program
{
public static void Main()
{
Writer w = scope .();
w.AddHeading(1, "Doing things better");
w.AddParagraph();
w.Output("index.html");
}
}

8
src/Section.bf Normal file
View file

@ -0,0 +1,8 @@
namespace Writer;
using System;
abstract class Section
{
public abstract void Compute(String input);
}

20
src/Sections/Heading.bf Normal file
View file

@ -0,0 +1,20 @@
namespace Writer.Sections;
using System;
class Heading : Section
{
public uint8 Level = 1;
public String Name = new .() ~ delete _;
public this(uint8 level, StringView name)
{
Level = level;
Name.Set(name);
}
public override void Compute(String input)
{
input.Append(scope $"<h{Level}>{Name}</h{Level}>");
}
}

17
src/Sections/Paragraph.bf Normal file
View file

@ -0,0 +1,17 @@
namespace Writer.Sections;
using System;
class Paragraph : Section
{
public override void Compute(System.String input)
{
String ipsum = """
Lorem ipsum dolor sit amet consectetur adipiscing elit. Semper vel class aptent taciti sociosqu ad litora. Blandit quis suspendisse aliquet nisi sodales consequat magna. Cras eleifend turpis fames primis vulputate ornare sagittis. Sem placerat in id cursus mi pretium tellus. Orci varius natoque penatibus et magnis dis parturient. Finibus facilisis dapibus etiam interdum tortor ligula congue. Proin libero feugiat tristique accumsan maecenas potenti ultricies. Sed diam urna tempor pulvinar vivamus fringilla lacus. Eros lobortis nulla molestie mattis scelerisque maximus eget. Porta elementum a enim euismod quam justo lectus. Curabitur facilisi cubilia curae hac habitasse platea dictumst. Nisl malesuada lacinia integer nunc posuere ut hendrerit. Efficitur laoreet mauris pharetra vestibulum fusce dictum risus. Imperdiet mollis nullam volutpat porttitor ullamcorper rutrum gravida. Adipiscing elit quisque faucibus ex sapien vitae pellentesque. Ad litora torquent per conubia nostra inceptos himenaeos. Consequat magna ante condimentum neque at luctus nibh. Ornare sagittis vehicula praesent dui felis venenatis ultrices. Pretium tellus duis convallis tempus leo eu aenean. Dis parturient montes nascetur ridiculus mus donec rhoncus. Ligula congue sollicitudin erat viverra ac tincidunt nam. Potenti ultricies habitant morbi senectus netus suscipit auctor. Fringilla lacus nec metus bibendum egestas iaculis massa. Maximus eget fermentum odio phasellus non purus est. Justo lectus commodo augue arcu dignissim velit aliquam. Platea dictumst lorem ipsum dolor sit amet consectetur. Ut hendrerit semper vel class aptent taciti sociosqu. Dictum risus blandit quis suspendisse aliquet nisi sodales. Rutrum gravida cras eleifend turpis fames primis vulputate. Vitae pellentesque sem placerat in id cursus mi. Inceptos himenaeos orci varius natoque penatibus et magnis. Luctus nibh finibus facilisis dapibus etiam interdum tortor. Venenatis ultrices proin libero feugiat tristique accumsan maecenas. Eu aenean sed diam urna tempor pulvinar vivamus. Donec rhoncus eros lobortis nulla molestie mattis scelerisque. Tincidunt nam porta elementum a enim euismod quam. Suscipit auctor curabitur facilisi cubilia curae hac habitasse. Iaculis massa nisl malesuada lacinia integer nunc posuere. Purus est efficitur laoreet mauris pharetra vestibulum fusce. Velit aliquam imperdiet mollis nullam volutpat porttitor ullamcorper. Amet consectetur adipiscing elit quisque faucibus ex sapien. Taciti sociosqu ad litora torquent per conubia nostra. Nisi sodales consequat magna ante condimentum neque at. Primis vulputate ornare sagittis vehicula praesent dui felis. Cursus mi pretium tellus duis convallis tempus leo. Et magnis dis parturient montes nascetur ridiculus mus. Interdum tortor ligula congue sollicitudin erat viverra ac. Accumsan maecenas potenti ultricies habitant morbi senectus netus. Pulvinar vivamus fringilla lacus nec metus bibendum egestas.
""";
input.Append(scope $"""
<p>{ipsum}</p>
""");
}
}

65
src/Writer.bf Normal file
View file

@ -0,0 +1,65 @@
namespace Writer;
using System;
using System.IO;
using System.Collections;
class Writer
{
private List<Section> _sections = new .() ~ DeleteContainerAndItems!(_);
public String Title = new .("Writer page") ~ delete _;
public String Style = new .("""
@page {
size:A4;
margin-left:4cm;
margin-right:2cm;
margin-top:1.27cm;
margin-bottom:2.5cm;
}
body {
margin:0px;
padding:0px;
line-height:150%;
font-family:arial;
font-size:12pt;
}
h1, h2, h3, h4, h5, h6 {
border-bottom:1px solid black;
padding-bottom:5px;
}
""") ~ delete _;
public void Output(StringView location)
{
String sections = new .();
defer delete sections;
File.WriteAllText(location, scope $"""
<!DOCTYPE html>
<html>
<head>
<title>{Title}</title>
<style>{Style}</style>
</head>
<body>
{this._ComputeSections(.. sections)}
</footer>
</body>
</html>
""");
}
private void _ComputeSections(String buffer)
{
for (var i in _sections)
i.Compute(buffer);
}
public void AddHeading(uint8 size, StringView content) => _sections.Add(new Writer.Sections.Heading(size, content));
public void AddParagraph() => _sections.Add(new Writer.Sections.Paragraph());
}