mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-09-30 01:07:24 +13:00
2aa65fc815
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
107 lines
2.7 KiB
Python
107 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
# --!-- coding: utf8 --!--
|
|
|
|
from enum import Enum, unique
|
|
from manuskript.data.goal import Goal
|
|
|
|
|
|
@unique
|
|
class TemplateKind(Enum):
|
|
FICTION = 0
|
|
NONFICTION = 1
|
|
DEMO = 2
|
|
|
|
@classmethod
|
|
def fromValue(cls, value: int):
|
|
return None if (value < 0) or (value > 2) else TemplateKind(value)
|
|
|
|
@classmethod
|
|
def asValue(cls, kind):
|
|
return 0 if kind is None else kind.value
|
|
|
|
|
|
class TemplateLevel:
|
|
|
|
def __init__(self, size: int = 10, name: str = None):
|
|
self.size = max(size, 1)
|
|
self.name = name
|
|
|
|
|
|
class Template:
|
|
|
|
def __init__(self, name: str, kind: TemplateKind, goal: Goal = None, levels: list = None, levelNames: list = None):
|
|
self.name = name
|
|
self.kind = kind
|
|
self.goal = goal
|
|
|
|
if levels is None:
|
|
levels = list()
|
|
|
|
self.levels = levels
|
|
|
|
if levelNames is None:
|
|
levelNames = list()
|
|
|
|
if not ("Text" in levelNames):
|
|
levelNames.append("Text")
|
|
|
|
self.levelNames = levelNames
|
|
|
|
def addLevel(self):
|
|
index = min(len(self.levels), len(self.levelNames) - 1)
|
|
|
|
if index < 0:
|
|
return
|
|
|
|
self.levels.append(TemplateLevel(name=self.levelNames[index]))
|
|
|
|
def addGoal(self, value: int = 500):
|
|
if self.goal is not None:
|
|
return
|
|
|
|
self.goal = Goal(value)
|
|
|
|
def getGoalString(self):
|
|
if self.goal is None:
|
|
return "?"
|
|
|
|
value = self.goal.value
|
|
for level in self.levels:
|
|
value = value * level.size
|
|
|
|
return Goal(value, self.goal.kind).prettyString()
|
|
|
|
@classmethod
|
|
def getDefaultTemplates(cls):
|
|
templates = list()
|
|
|
|
templates.append(Template("Empty fiction", TemplateKind.FICTION))
|
|
|
|
templates.append(Template("Novel", TemplateKind.FICTION, Goal(500), [
|
|
TemplateLevel(20, "Chapter"),
|
|
TemplateLevel(5, "Scene")
|
|
]))
|
|
|
|
templates.append(Template("Novella", TemplateKind.FICTION, Goal(500), [
|
|
TemplateLevel(10, "Chapter"),
|
|
TemplateLevel(5, "Scene")
|
|
]))
|
|
|
|
templates.append(Template("Short Story", TemplateKind.FICTION, Goal(1000), [
|
|
TemplateLevel(10, "Scene")
|
|
]))
|
|
|
|
templates.append(Template("Trilogy", TemplateKind.FICTION, Goal(500), [
|
|
TemplateLevel(3, "Book"),
|
|
TemplateLevel(3, "Section"),
|
|
TemplateLevel(10, "Chapter"),
|
|
TemplateLevel(5, "Scene")
|
|
]))
|
|
|
|
templates.append(Template("Empty non-fiction", TemplateKind.NONFICTION))
|
|
|
|
templates.append(Template("Research paper", TemplateKind.NONFICTION, Goal(1000), [
|
|
TemplateLevel(3, "Section")
|
|
]))
|
|
|
|
return templates
|