diff --git a/grawlix.py b/grawlix.py index b117282..94706b1 100644 --- a/grawlix.py +++ b/grawlix.py @@ -3,15 +3,18 @@ from collections import defaultdict import random import yaml import chevron +import sys class GrawlixCodex(): - def __init__(self, width=30, height=10, wordcount=50000): + def __init__(self, width=30, height=10, wordcount=50000, chaplength=4000): self.width = width self.height = height self.smallest = 1 self.longest = 6 self.wordcount = wordcount + self.chapleast = int(chaplength * 0.8) + self.chapmost = int(chaplength * 1.2) def config(self, cffile): @@ -37,38 +40,69 @@ class GrawlixCodex(): self.tags = [ t for t in self.groups.keys() if not t == "blank" ] self.blank = list(self.groups["blank"])[0] - def text(self): - for w in range(self.wordcount): - l = random.randint(self.smallest, self.longest) - for g in range(l): - yield random.choice(list(self.groups["glyph"])) - if random.randint(1, 10) > 8: - yield random.choice(list(self.groups["colour"])) - yield(self.blank) + def word(self): + l = random.randint(self.smallest, self.longest) + for g in range(l): + yield random.choice(list(self.groups["glyph"])) - def write(self): + def text(self): + for w in range(self.wordcount): + if w % 1000 == 0: + print(f"{w} words", file=sys.stderr) + for g in self.word(): + yield g + if random.randint(1, 10) > 8: + yield random.choice(list(self.groups["colour"])) + yield(self.blank) + + + def line(self, gs, cls): + glyphs = [ f'' for g in gs ] + return ''.join(glyphs) + "
\n" + + def chap_title(self): + title = [] + for w in range(1, random.randint(1, 5)): + for g in self.word(): + title.append(g) + title.append(self.blank) + title = title[:-1] + title.append(random.choice(list(self.groups["colour"]))) + return title + + + def chapters(self): + chap_length = random.randint(self.chapleast, self.chapmost) + n = 0 row = [] + html = "" for g in self.text(): row.append(g) if len(row) == self.width: - glyphs = [ f' ' for g in row ] - print(''.join(glyphs)) - print('
') + html += self.line(row, "gl") row = [] + n += 1 + if n > chap_length: + chap_length = random.randint(self.chapleast, self.chapmost) + n = 0 + yield { + "title": self.line(self.chap_title(), "ct"), + "text": html + } -gc = GrawlixCodex(wordcount=500) +gc = GrawlixCodex(wordcount=50000, chaplength=10000) gc.config("./config.yml") gc.load_emojos() -content = { - "front_matter": "Title page", - "chapters": [ - { "title": "One", "text": "blah blah" }, - { "title": "Two", "text": "foo foo" }, - ] -} +n = 1; + +for chapter in gc.chapters(): + with open("template.html", "r") as tf: + with open(f"output/chapter_{n}.html", "w") as cf: + print(chevron.render(tf, chapter), file=cf) + print(f"Chapter {n}", file=sys.stderr) + n += 1 + -with open("template.html", "r") as tf: - print(chevron.render(tf, content))