Tokenize dialogue with colour tag
This commit is contained in:
@@ -160,6 +160,7 @@ class NWBuildDocument:
|
||||
elif bFormat in (nwBuildFmt.HTML, nwBuildFmt.J_HTML):
|
||||
makeObj = ToHtml(self._project)
|
||||
filtered = self._setupBuild(makeObj)
|
||||
makeObj.initDocument()
|
||||
|
||||
yield from self._iterBuild(makeObj, filtered)
|
||||
|
||||
|
||||
@@ -86,12 +86,8 @@ class TextFmt(IntEnum):
|
||||
SUB_E = 14 # End subscript
|
||||
COL_B = 15 # Begin colour
|
||||
COL_E = 16 # End colour
|
||||
DL_B = 17 # Begin dialogue
|
||||
DL_E = 18 # End dialogue
|
||||
ADL_B = 19 # Begin alt dialogue
|
||||
ADL_E = 20 # End alt dialogue
|
||||
FNOTE = 21 # Footnote marker
|
||||
STRIP = 22 # Strip the format code
|
||||
FNOTE = 17 # Footnote marker
|
||||
STRIP = 18 # Strip the format code
|
||||
|
||||
|
||||
class BlockTyp(IntEnum):
|
||||
|
||||
@@ -96,8 +96,6 @@ X_MRK = 0x010 # Marked format
|
||||
X_SUP = 0x020 # Superscript
|
||||
X_SUB = 0x040 # Subscript
|
||||
X_COL = 0x080 # Coloured text
|
||||
X_DLG = 0x100 # Dialogue
|
||||
X_DLA = 0x200 # Alt. Dialogue
|
||||
|
||||
# Formatting Masks
|
||||
M_BLD = ~X_BLD
|
||||
@@ -108,8 +106,6 @@ M_MRK = ~X_MRK
|
||||
M_SUP = ~X_SUP
|
||||
M_SUB = ~X_SUB
|
||||
M_COL = ~X_COL
|
||||
M_DLG = ~X_DLG
|
||||
M_DLA = ~X_DLA
|
||||
|
||||
# DocX Styles
|
||||
S_NORM = "Normal"
|
||||
@@ -292,7 +288,7 @@ class ToDocX(Tokenizer):
|
||||
elif tType == BlockTyp.SKIP:
|
||||
self._processFragments(par, S_NORM, "")
|
||||
|
||||
elif tType in self.L_NOTES:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
self._processFragments(par, S_META, tText, tFormat)
|
||||
|
||||
elif tType == BlockTyp.KEYWORD and self._doKeywords:
|
||||
@@ -441,14 +437,6 @@ class ToDocX(Tokenizer):
|
||||
elif fFmt == TextFmt.COL_E:
|
||||
xFmt &= M_COL
|
||||
fClass = ""
|
||||
elif fFmt == TextFmt.DL_B:
|
||||
xFmt |= X_DLG
|
||||
elif fFmt == TextFmt.DL_E:
|
||||
xFmt &= M_DLG
|
||||
elif fFmt == TextFmt.ADL_B:
|
||||
xFmt |= X_DLA
|
||||
elif fFmt == TextFmt.ADL_E:
|
||||
xFmt &= M_DLA
|
||||
elif fFmt == TextFmt.FNOTE:
|
||||
xNode = self._generateFootnote(fData)
|
||||
elif fFmt == TextFmt.STRIP:
|
||||
@@ -487,10 +475,6 @@ class ToDocX(Tokenizer):
|
||||
xmlSubElem(rPr, _wTag("vertAlign"), attrib={_wTag("val"): "subscript"})
|
||||
if fmt & X_COL and (color := self._classes.get(fClass)):
|
||||
xmlSubElem(rPr, _wTag("color"), attrib={_wTag("val"): _docXCol(color)})
|
||||
if fmt & X_DLG:
|
||||
xmlSubElem(rPr, _wTag("color"), attrib={_wTag("val"): COL_DIALOG_M})
|
||||
if fmt & X_DLA:
|
||||
xmlSubElem(rPr, _wTag("color"), attrib={_wTag("val"): COL_DIALOG_A})
|
||||
|
||||
for segment in RX_TEXT.split(text):
|
||||
if segment == "\n":
|
||||
|
||||
@@ -47,8 +47,7 @@ HTML_OPENER: dict[int, tuple[int, str]] = {
|
||||
TextFmt.M_B: (TextFmt.M_E, "<mark>"),
|
||||
TextFmt.SUP_B: (TextFmt.SUP_E, "<sup>"),
|
||||
TextFmt.SUB_B: (TextFmt.SUB_E, "<sub>"),
|
||||
TextFmt.DL_B: (TextFmt.DL_E, "<span class='dialog'>"),
|
||||
TextFmt.ADL_B: (TextFmt.ADL_E, "<span class='altdialog'>"),
|
||||
TextFmt.COL_B: (TextFmt.COL_E, "<span style='color: {0}'>"),
|
||||
}
|
||||
|
||||
# Each closer tag, with the id of its corresponding opener and tag format
|
||||
@@ -60,8 +59,7 @@ HTML_CLOSER: dict[int, tuple[int, str]] = {
|
||||
TextFmt.M_E: (TextFmt.M_B, "</mark>"),
|
||||
TextFmt.SUP_E: (TextFmt.SUP_B, "</sup>"),
|
||||
TextFmt.SUB_E: (TextFmt.SUB_B, "</sub>"),
|
||||
TextFmt.DL_E: (TextFmt.DL_B, "</span>"),
|
||||
TextFmt.ADL_E: (TextFmt.ADL_B, "</span>"),
|
||||
TextFmt.COL_E: (TextFmt.COL_B, "</span>"),
|
||||
}
|
||||
|
||||
# Empty HTML tag record
|
||||
@@ -251,10 +249,7 @@ class ToHtml(Tokenizer):
|
||||
elif tType == BlockTyp.SKIP:
|
||||
lines.append(f"<p class='skip'{hStyle}> </p>\n")
|
||||
|
||||
elif tType == BlockTyp.SUMMARY:
|
||||
lines.append(f"<p class='synopsis'>{self._formatText(tText, tFormat)}</p>\n")
|
||||
|
||||
elif tType == BlockTyp.COMMENT and self._doComments:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
lines.append(f"<p class='comment'>{self._formatText(tText, tFormat)}</p>\n")
|
||||
|
||||
elif tType == BlockTyp.KEYWORD and self._doKeywords:
|
||||
@@ -439,11 +434,6 @@ class ToHtml(Tokenizer):
|
||||
styles.append("a {color: rgb(66, 113, 174);}")
|
||||
styles.append("mark {background: rgb(255, 255, 166);}")
|
||||
styles.append(".keyword {color: rgb(245, 135, 31); font-weight: bold;}")
|
||||
styles.append(".break {text-align: left;}")
|
||||
styles.append(".synopsis {font-style: italic;}")
|
||||
styles.append(".comment {font-style: italic; color: rgb(100, 100, 100);}")
|
||||
styles.append(".dialog {color: rgb(66, 113, 174);}")
|
||||
styles.append(".altdialog {color: rgb(129, 55, 9);}")
|
||||
|
||||
return styles
|
||||
|
||||
@@ -463,7 +453,10 @@ class ToHtml(Tokenizer):
|
||||
for pos, fmt, data in tFmt:
|
||||
if m := HTML_OPENER.get(fmt):
|
||||
if not state.get(fmt, True):
|
||||
tags.append((pos, m[1]))
|
||||
if fmt == TextFmt.COL_B and (color := self._classes.get(data)):
|
||||
tags.append((pos, m[1].format(color.name(QtHexRgb))))
|
||||
else:
|
||||
tags.append((pos, m[1]))
|
||||
state[fmt] = True
|
||||
elif m := HTML_CLOSER.get(fmt):
|
||||
if state.get(m[0], False):
|
||||
|
||||
@@ -58,18 +58,17 @@ class ComStyle(NamedTuple):
|
||||
label: str = ""
|
||||
labelClass: str = ""
|
||||
textClass: str = ""
|
||||
blockType: BlockTyp = BlockTyp.TEXT
|
||||
|
||||
|
||||
COMMENT_STYLE = {
|
||||
nwComment.PLAIN: ComStyle("Comment", "comment", "comment", BlockTyp.COMMENT),
|
||||
nwComment.PLAIN: ComStyle("Comment", "comment", "comment"),
|
||||
nwComment.IGNORE: ComStyle(),
|
||||
nwComment.SYNOPSIS: ComStyle("Synopsis", "modifier", "synopsis", BlockTyp.SUMMARY),
|
||||
nwComment.SHORT: ComStyle("Short Description", "modifier", "synopsis", BlockTyp.SUMMARY),
|
||||
nwComment.NOTE: ComStyle("Note", "modifier", "note", BlockTyp.NOTE),
|
||||
nwComment.SYNOPSIS: ComStyle("Synopsis", "modifier", "synopsis"),
|
||||
nwComment.SHORT: ComStyle("Short Description", "modifier", "synopsis"),
|
||||
nwComment.NOTE: ComStyle("Note", "modifier", "note"),
|
||||
nwComment.FOOTNOTE: ComStyle("", "modifier", "note"),
|
||||
nwComment.COMMENT: ComStyle(),
|
||||
nwComment.STORY: ComStyle("", "modifier", "note", BlockTyp.NOTE),
|
||||
nwComment.STORY: ComStyle("", "modifier", "note"),
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +92,6 @@ class Tokenizer(ABC):
|
||||
BlockTyp.TITLE, BlockTyp.HEAD1, BlockTyp.HEAD2, BlockTyp.HEAD2, BlockTyp.HEAD3,
|
||||
BlockTyp.HEAD4, BlockTyp.SEP, BlockTyp.SKIP,
|
||||
]
|
||||
L_NOTES = [BlockTyp.SUMMARY, BlockTyp.NOTE, BlockTyp.COMMENT]
|
||||
|
||||
def __init__(self, project: NWProject) -> None:
|
||||
|
||||
@@ -208,7 +206,7 @@ class Tokenizer(ABC):
|
||||
nwShortcode.FOOTNOTE_B: TextFmt.FNOTE,
|
||||
}
|
||||
|
||||
self._rxDialogue: list[tuple[re.Pattern, int, int]] = []
|
||||
self._rxDialogue: list[tuple[re.Pattern, tuple[int, str], tuple[int, str]]] = []
|
||||
|
||||
return
|
||||
|
||||
@@ -352,19 +350,23 @@ class Tokenizer(ABC):
|
||||
if state:
|
||||
if CONFIG.dialogStyle > 0:
|
||||
self._rxDialogue.append((
|
||||
REGEX_PATTERNS.dialogStyle, TextFmt.DL_B, TextFmt.DL_E
|
||||
REGEX_PATTERNS.dialogStyle,
|
||||
(TextFmt.COL_B, "dialog"), (TextFmt.COL_E, ""),
|
||||
))
|
||||
if CONFIG.dialogLine:
|
||||
self._rxDialogue.append((
|
||||
REGEX_PATTERNS.dialogLine, TextFmt.DL_B, TextFmt.DL_E
|
||||
REGEX_PATTERNS.dialogLine,
|
||||
(TextFmt.COL_B, "dialog"), (TextFmt.COL_E, ""),
|
||||
))
|
||||
if CONFIG.narratorBreak:
|
||||
self._rxDialogue.append((
|
||||
REGEX_PATTERNS.narratorBreak, TextFmt.DL_E, TextFmt.DL_B
|
||||
REGEX_PATTERNS.narratorBreak,
|
||||
(TextFmt.COL_E, ""), (TextFmt.COL_B, "dialog"),
|
||||
))
|
||||
if CONFIG.altDialogOpen and CONFIG.altDialogClose:
|
||||
self._rxDialogue.append((
|
||||
REGEX_PATTERNS.altDialogStyle, TextFmt.ADL_B, TextFmt.ADL_E
|
||||
REGEX_PATTERNS.altDialogStyle,
|
||||
(TextFmt.COL_B, "altdialog"), (TextFmt.COL_E, ""),
|
||||
))
|
||||
return
|
||||
|
||||
@@ -460,6 +462,8 @@ class Tokenizer(ABC):
|
||||
self._classes["modifier"] = self._theme.modifier
|
||||
self._classes["synopsis"] = self._theme.note
|
||||
self._classes["comment"] = self._theme.comment
|
||||
self._classes["dialog"] = self._theme.dialog
|
||||
self._classes["altdialog"] = self._theme.altdialog
|
||||
return
|
||||
|
||||
def addRootHeading(self, tHandle: str) -> None:
|
||||
@@ -610,7 +614,7 @@ class Tokenizer(ABC):
|
||||
if cStyle in (nwComment.SYNOPSIS, nwComment.SHORT, nwComment.PLAIN):
|
||||
bStyle = COMMENT_STYLE[cStyle]
|
||||
tLine, tFmt = self._formatNote(bStyle, cKey, cText)
|
||||
blocks.append((bStyle.blockType, nHead, tLine, tFmt, sAlign))
|
||||
blocks.append((BlockTyp.COMMENT, nHead, tLine, tFmt, sAlign))
|
||||
if self._keepRaw:
|
||||
tmpMarkdown.append(f"{aLine}\n")
|
||||
|
||||
@@ -619,8 +623,6 @@ class Tokenizer(ABC):
|
||||
self._footnotes[f"{tHandle}:{cKey}"] = (tLine, tFmt)
|
||||
if self._keepRaw:
|
||||
tmpMarkdown.append(f"{aLine}\n")
|
||||
else:
|
||||
continue
|
||||
|
||||
elif aLine.startswith("@"):
|
||||
# Keywords
|
||||
@@ -1014,7 +1016,7 @@ class Tokenizer(ABC):
|
||||
allChars += nChars
|
||||
allWordChars += nWChars
|
||||
|
||||
elif tType in self.L_NOTES:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
words = tText.split()
|
||||
allWords += len(words)
|
||||
allChars += len(tText)
|
||||
@@ -1130,10 +1132,10 @@ class Tokenizer(ABC):
|
||||
|
||||
# Match Dialogue
|
||||
if self._rxDialogue and hDialog:
|
||||
for regEx, fmtB, fmtE in self._rxDialogue:
|
||||
for regEx, (fmtB, clsB), (fmtE, clsE) in self._rxDialogue:
|
||||
for res in regEx.finditer(text):
|
||||
temp.append((res.start(0), 0, fmtB, ""))
|
||||
temp.append((res.end(0), 0, fmtE, ""))
|
||||
temp.append((res.start(0), 0, fmtB, clsB))
|
||||
temp.append((res.end(0), 0, fmtE, clsE))
|
||||
|
||||
# Post-process text and format
|
||||
result = text
|
||||
|
||||
@@ -150,7 +150,7 @@ class ToMarkdown(Tokenizer):
|
||||
elif tType == BlockTyp.SKIP:
|
||||
lines.append(f"{cSkip}\n\n")
|
||||
|
||||
elif tType in self.L_NOTES:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
lines.append(f"{self._formatText(tText, tFormat, mTags)}\n\n")
|
||||
|
||||
elif tType == BlockTyp.KEYWORD and self._doKeywords:
|
||||
|
||||
@@ -91,8 +91,6 @@ X_MRK = 0x010 # Marked format
|
||||
X_SUP = 0x020 # Superscript
|
||||
X_SUB = 0x040 # Subscript
|
||||
X_COL = 0x080 # Coloured text
|
||||
X_DLG = 0x100 # Dialogue
|
||||
X_DLA = 0x200 # Alt. Dialogue
|
||||
|
||||
# Formatting Masks
|
||||
M_BLD = ~X_BLD
|
||||
@@ -103,8 +101,6 @@ M_MRK = ~X_MRK
|
||||
M_SUP = ~X_SUP
|
||||
M_SUB = ~X_SUB
|
||||
M_COL = ~X_COL
|
||||
M_DLG = ~X_DLG
|
||||
M_DLA = ~X_DLA
|
||||
|
||||
# ODT Styles
|
||||
S_TITLE = "Title"
|
||||
@@ -484,7 +480,7 @@ class ToOdt(Tokenizer):
|
||||
elif tType == BlockTyp.SKIP:
|
||||
self._addTextPar(xText, S_TEXT, oStyle, "")
|
||||
|
||||
elif tType in self.L_NOTES:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
self._addTextPar(xText, S_META, oStyle, tText, tFmt=tFormat)
|
||||
|
||||
elif tType == BlockTyp.KEYWORD and self._doKeywords:
|
||||
@@ -657,14 +653,6 @@ class ToOdt(Tokenizer):
|
||||
elif fFmt == TextFmt.COL_E:
|
||||
xFmt &= M_COL
|
||||
fClass = ""
|
||||
elif fFmt == TextFmt.DL_B:
|
||||
xFmt |= X_DLG
|
||||
elif fFmt == TextFmt.DL_E:
|
||||
xFmt &= M_DLG
|
||||
elif fFmt == TextFmt.ADL_B:
|
||||
xFmt |= X_DLA
|
||||
elif fFmt == TextFmt.ADL_E:
|
||||
xFmt &= M_DLA
|
||||
elif fFmt == TextFmt.FNOTE:
|
||||
xNode = self._generateFootnote(fData)
|
||||
elif fFmt == TextFmt.STRIP:
|
||||
|
||||
@@ -240,7 +240,7 @@ class ToQTextDocument(Tokenizer):
|
||||
newBlock(cursor, bFmt)
|
||||
cursor.insertText(nwUnicode.U_NBSP, self._cText)
|
||||
|
||||
elif tType in self.L_NOTES:
|
||||
elif tType == BlockTyp.COMMENT:
|
||||
newBlock(cursor, bFmt)
|
||||
self._insertFragments(tText, tFormat, cursor, self._cText)
|
||||
|
||||
@@ -337,23 +337,11 @@ class ToQTextDocument(Tokenizer):
|
||||
cFmt.setVerticalAlignment(QtVAlignSub)
|
||||
elif fmt == TextFmt.SUB_E:
|
||||
cFmt.setVerticalAlignment(QtVAlignNormal)
|
||||
elif fmt == TextFmt.SUB_B:
|
||||
cFmt.setVerticalAlignment(QtVAlignSub)
|
||||
elif fmt == TextFmt.SUB_E:
|
||||
cFmt.setVerticalAlignment(QtVAlignNormal)
|
||||
elif fmt == TextFmt.COL_B:
|
||||
if color := self._classes.get(data):
|
||||
cFmt.setForeground(color)
|
||||
elif fmt == TextFmt.COL_E:
|
||||
cFmt.setForeground(self._theme.text)
|
||||
elif fmt == TextFmt.DL_B:
|
||||
cFmt.setForeground(self._theme.dialog)
|
||||
elif fmt == TextFmt.DL_E:
|
||||
cFmt.setForeground(self._theme.text)
|
||||
elif fmt == TextFmt.ADL_B:
|
||||
cFmt.setForeground(self._theme.altdialog)
|
||||
elif fmt == TextFmt.ADL_E:
|
||||
cFmt.setForeground(self._theme.text)
|
||||
elif fmt == TextFmt.FNOTE:
|
||||
xFmt = QTextCharFormat(self._cCode)
|
||||
xFmt.setVerticalAlignment(QtVAlignSuper)
|
||||
|
||||
@@ -16,11 +16,6 @@ h4 {color: #4271ae; page-break-after: avoid; margin-top: 1.53em; margin-bottom:
|
||||
a {color: rgb(66, 113, 174);}
|
||||
mark {background: rgb(255, 255, 166);}
|
||||
.keyword {color: rgb(245, 135, 31); font-weight: bold;}
|
||||
.break {text-align: left;}
|
||||
.synopsis {font-style: italic;}
|
||||
.comment {font-style: italic; color: rgb(100, 100, 100);}
|
||||
.dialog {color: rgb(66, 113, 174);}
|
||||
.altdialog {color: rgb(129, 55, 9);}
|
||||
</style>
|
||||
<body>
|
||||
<article>
|
||||
@@ -28,11 +23,11 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p style='text-align: center;'><strong>By lipsum.com</strong></p>
|
||||
<p style='text-align: center;'>“Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit…”</p>
|
||||
<p style='text-align: center;'>“There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain…”</p>
|
||||
<p class='comment'><strong>Comment:</strong> Exctracted from the lipsum.com website.</p>
|
||||
<p class='comment'><strong><span style='color: #646464'>Comment:</strong></span> <span style='color: #646464'>Exctracted from the lipsum.com website.</span></p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of “de Finibus Bonorum et Malorum” (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, “Lorem ipsum dolor sit amet..”, comes from a line in section 1.10.32.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from “de Finibus Bonorum et Malorum” by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.</p>
|
||||
<h1 style='page-break-before: always;'>Prologue</h1>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Explanation from the lipsum.com website.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Explanation from the lipsum.com website.</span></p>
|
||||
<p style='text-align: justify;'><em>Lorem Ipsum</em> is simply dummy text<sup><a href='#footnote_1'>1</a></sup> of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
|
||||
<h1 class='title' style='text-align: center; page-break-before: always;'>Part: Act One</h1>
|
||||
<p style='text-align: center;'>“Fusce maximus felis libero”</p>
|
||||
@@ -40,13 +35,13 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam.</span></p>
|
||||
<p style='text-align: justify;'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Praesent magna nunc, lacinia sit amet quam eget, aliquet ultrices justo. Morbi ornare enim et lorem rutrum finibus ut eu dolor. Aliquam a orci odio. Ut ultrices sem quis massa placerat, eget mollis nisl cursus. Cras vel sagittis justo. Ut non ultricies leo. Maecenas rutrum velit in est varius, et egestas massa pulvinar.</p>
|
||||
<h2>Scene: Scene One</h2>
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur.</span></p>
|
||||
<p style='text-align: justify;'>Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur. Donec quis ante nunc. Mauris ut leo ipsum. Vestibulum est neque, hendrerit nec neque a, ullamcorper lobortis tellus. Fusce sollicitudin purus quis congue bibendum. Aliquam condimentum ipsum tristique blandit tristique. Donec pulvinar neque ac suscipit malesuada.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Aliquam ut nisl arcu. Ut ultricies, lorem dignissim rutrum convallis, risus orci tempus lectus, congue feugiat sem lectus vitae odio. Duis sit amet justo finibus, hendrerit nulla at, ullamcorper enim. Praesent vel tellus sit amet tellus vulputate bibendum. Morbi eleifend sagittis sem, ac volutpat ante congue non. In hac habitasse platea dictumst. Morbi lobortis fermentum elit, dignissim sagittis ligula volutpat lacinia. Vestibulum eu interdum odio. Integer ac purus commodo metus congue tempor non at urna. Sed eget tortor vel quam viverra egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec non convallis mauris, ac feugiat ex.</p>
|
||||
<h3>Section: Scene One, Section Two</h3>
|
||||
@@ -56,7 +51,7 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci.</span></p>
|
||||
<p style='text-align: justify;'>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci. Vestibulum facilisis bibendum aliquam. Aliquam posuere, turpis ac bibendum varius, sem tellus venenatis risus, in elementum massa enim ac lorem. Integer in sem ac diam blandit ultricies ut in nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet erat est. Curabitur vitae cursus justo, sit amet placerat dolor. Vivamus eu felis hendrerit, tincidunt massa rutrum, maximus arcu. Pellentesque commodo justo odio, vel rutrum nulla tincidunt eu. Integer non neque condimentum, convallis diam non, varius ligula. Aliquam eget sapien mauris. Aenean pharetra nunc nisi, vel maximus ante tristique sit amet. Aliquam risus metus, interdum non odio eu, consectetur lacinia sapien.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Proin vitae gravida nisl. Integer viverra orci turpis, sit amet pretium ligula facilisis consequat. Nulla interdum commodo metus, mollis consequat dui tincidunt et. Proin consequat bibendum justo id commodo. Fusce fermentum nunc turpis, eu vestibulum risus feugiat ut. Sed scelerisque vel ligula ut interdum. Suspendisse ac blandit ligula, sagittis fringilla dolor. In tincidunt convallis diam et ornare. Aenean id dignissim est, ut rhoncus quam. Donec vitae nisl velit. In convallis nibh ut augue dignissim, eu elementum quam cursus. Phasellus in lectus lorem. Curabitur in pellentesque nisi, at gravida sapien. Sed cursus justo volutpat lacus placerat, sit amet dignissim turpis commodo. Aliquam vitae orci eget nulla posuere condimentum in ut felis.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Nulla accumsan ante in pulvinar efficitur. Nulla non velit quis urna hendrerit bibendum. Suspendisse ultrices ante eu justo malesuada, sed fermentum enim rutrum. Nunc fermentum pharetra felis, vitae sollicitudin quam rutrum porta. Aliquam fringilla velit a mi laoreet, et luctus est rutrum. In gravida non ipsum sit amet tempus. Curabitur et eleifend purus. Nulla facilisi.</p>
|
||||
@@ -65,7 +60,7 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Vivamus ut venenatis lectus. Phasellus nec elit id sem dictum ornare. Quisque feugiat, diam eget sagittis ultricies, orci turpis efficitur nisi, et fringilla justo odio nec nibh. In hac habitasse platea dictumst. Sed tempus bibendum feugiat. Etiam luctus mauris arcu, non interdum ipsum ultrices id. Vivamus blandit urna sit amet scelerisque vulputate. Quisque in metus eget massa rutrum dictum sit amet sed nulla. Vivamus vel efficitur dolor.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Ut et consequat enim, quis ornare nibh. In lectus neque, mollis et suscipit et, vestibulum vitae augue. Praesent id ante sit amet odio venenatis placerat a at erat. Sed sed metus sed nisi dictum varius. Integer tincidunt fermentum purus ac porta. Fusce porttitor non risus eget tristique. Donec augue nunc, maximus at fermentum vel, varius et neque. Ut sed consectetur mauris. Quisque ipsum enim, porttitor vitae imperdiet sit amet, tempor et mauris. Aliquam malesuada tincidunt lectus quis blandit. Sed commodo orci felis, quis ultrices tellus facilisis sed. Nunc vel varius est. Duis ullamcorper eu metus in pulvinar. Morbi at sapien dictum, rutrum mauris eget, interdum tellus.</p>
|
||||
<h1 style='page-break-before: always;'>Why do we use it?</h1>
|
||||
<p class='comment'><strong>Comment:</strong> Exctracted from the lipsum.com website.</p>
|
||||
<p class='comment'><strong><span style='color: #646464'>Comment:</strong></span> <span style='color: #646464'>Exctracted from the lipsum.com website.</span></p>
|
||||
<p style='text-align: justify;'> It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'> The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'> Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).</p>
|
||||
@@ -73,13 +68,13 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue.</span></p>
|
||||
<p style='text-align: justify;'>Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Vestibulum pharetra fermentum leo, sed faucibus eros placerat quis. In hac habitasse platea dictumst. Donec metus massa, rutrum quis consequat et, tincidunt ac felis. Duis mollis metus ac nunc tincidunt blandit. Ut aliquet velit eu odio pharetra condimentum. Integer rutrum lacus orci, id venenatis libero accumsan at.</p>
|
||||
<h2>Scene: Scene Three</h2>
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</span></p>
|
||||
<p style='text-align: justify;'>Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean tincidunt lacus vitae nibh elementum eleifend. Sed rutrum condimentum sem quis blandit. Duis imperdiet libero metus, quis convallis quam faucibus a. Nulla ligula est, semper quis sollicitudin et, pretium id justo. Curabitur pharetra risus eget consectetur commodo. Duis mattis arcu non est condimentum, id venenatis risus volutpat. Pellentesque aliquet mauris non mauris porttitor ultrices. Phasellus ut vestibulum mi. Suspendisse malesuada metus lorem, a malesuada orci rhoncus a. Praesent euismod convallis ante, lacinia tincidunt ex egestas id. Praesent sit amet efficitur sapien. Morbi tincidunt volutpat nunc sed dictum. Aliquam ultrices metus id fermentum lobortis.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Pellentesque id sagittis dui. Praesent ut nisi sit amet libero euismod ornare. Vestibulum vehicula, lorem eget aliquet imperdiet, eros nulla iaculis mi, vel bibendum est dui sed orci. Nullam vitae lorem rutrum, euismod lacus id, ullamcorper lectus. Duis nec commodo mi, a fringilla diam. Vestibulum molestie nibh tristique, viverra augue non, aliquet metus. Phasellus a tellus ac nisl tempor aliquet. Nulla vitae sapien rutrum augue ornare ultrices a quis nisi. Sed pulvinar tincidunt ex. Fusce vel sem vitae ante pellentesque lobortis.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Maecenas ullamcorper lacus nec turpis finibus aliquet eget rutrum augue. Integer lorem erat, faucibus non lacus lacinia, pulvinar egestas felis. Proin rutrum nunc eget nulla varius, id blandit mauris tincidunt. Donec sit amet ullamcorper nisi, ut efficitur mi. Aliquam aliquet, nulla eget rhoncus tristique, justo lorem consectetur dui, id ornare leo odio sed tellus. Curabitur interdum velit a turpis condimentum venenatis. Nunc rhoncus sem ac augue auctor, nec malesuada ex fringilla. Vestibulum egestas diam sed leo consectetur vulputate quis eget enim. Nam tincidunt metus sit amet maximus ullamcorper. Sed placerat velit vitae massa efficitur viverra. Etiam eleifend dignissim ante, sed luctus nisl tristique a. In vestibulum pharetra dolor in molestie. Vivamus auctor massa ac magna imperdiet, sit amet iaculis turpis finibus.</p>
|
||||
@@ -88,7 +83,7 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo.</span></p>
|
||||
<p style='text-align: justify;'>Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo. Nullam viverra dui et auctor pretium. Ut ullamcorper velit urna, sed imperdiet massa convallis a. Suspendisse efficitur, ipsum nec cursus pulvinar, eros urna posuere diam, nec elementum mi felis vitae sapien.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Duis efficitur metus pulvinar, molestie magna eget, feugiat dui. Fusce convallis vehicula ipsum convallis blandit. Duis eros risus, malesuada eu imperdiet in, hendrerit ac metus. Vestibulum id justo gravida, dignissim nibh non, iaculis diam. Fusce accumsan est ut massa porta ultricies. Nulla vitae justo in tortor laoreet mollis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eu libero justo. Vivamus aliquet placerat est, et auctor eros posuere venenatis. Nunc quam diam, tincidunt ac aliquet in, fermentum sit amet lectus. Proin commodo tincidunt blandit. Quisque erat arcu, semper nec dui non, consectetur gravida ipsum. Nullam pretium consectetur elit at condimentum.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Etiam sagittis, erat vitae accumsan tempor, neque augue scelerisque nulla, ut ultrices justo urna sit amet augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean at pulvinar tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras vel porta quam. Nullam eu mauris mollis, vehicula justo vel, placerat sapien. Phasellus viverra elit et vestibulum pharetra. Vestibulum commodo fermentum leo, eu porta nisi aliquam eget. Nulla tempus porttitor nisi nec mollis. Nam non mollis turpis. Nam finibus leo a bibendum tincidunt. Donec commodo velit magna, ac semper sapien mattis id. Proin sem velit, lobortis quis ultricies id, pharetra et lectus. Vestibulum condimentum neque vitae mi dapibus mollis. Mauris luctus vel sapien vitae hendrerit.</p>
|
||||
@@ -99,7 +94,7 @@ mark {background: rgb(255, 255, 166);}
|
||||
<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>
|
||||
<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>
|
||||
<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>
|
||||
<p class='synopsis'><strong>Synopsis:</strong> Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
|
||||
<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</span></p>
|
||||
<p style='text-align: justify;'>Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sed felis auctor, rhoncus dui ac, consequat dolor. Integer volutpat libero sed nisl aliquet varius. Suspendisse et lorem sapien. Proin id ultrices nibh, ac suscipit diam. Suspendisse placerat varius porttitor. Curabitur elementum sed enim ultrices imperdiet.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>In ut lobortis lacus, nec luctus arcu. Vivamus condimentum sapien a ipsum malesuada sodales. Donec et vestibulum risus. Integer dictum euismod eros id tincidunt. Aliquam sagittis leo vitae consequat fermentum. Donec maximus ex eu ex iaculis porta. Praesent pharetra lacinia risus, et eleifend diam commodo non. Sed feugiat ipsum ut orci sagittis, quis faucibus lectus blandit. Sed tellus quam, gravida vitae laoreet quis, tempus lobortis dui. Vivamus semper accumsan ullamcorper. Praesent tempus pretium eros, non elementum risus. Pellentesque odio quam, auctor quis ex non, vulputate egestas dolor. Nunc luctus enim ut justo sodales consectetur. Sed aliquet a mauris vel posuere.</p>
|
||||
<p style='text-align: justify; text-indent: 1.40em;'>Donec luctus lectus efficitur, blandit nisi vitae, dignissim tellus. Pellentesque euismod pharetra augue gravida hendrerit. Quisque nisi mi, mattis ac nisi non, maximus malesuada ante. Nulla lobortis, diam eu ornare ornare, tellus enim feugiat arcu, non vestibulum tortor nunc eu justo. Integer blandit felis justo, eu semper est scelerisque vel. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam ultricies, nisi vel elementum commodo, nisl dolor tincidunt magna, sed varius est nunc at lectus. Aliquam dolor tortor, sodales placerat ultricies quis, sodales quis sapien. Duis ullamcorper sollicitudin risus at mattis. Integer consequat et nunc at condimentum. Pellentesque cursus congue augue, non suscipit lectus sodales ut. Nam a mi bibendum, blandit nisl eu, accumsan nunc. Aliquam a ex mauris. Sed nec sem quis arcu dignissim tempus eget et turpis. Ut sed ex nec ipsum ultrices lobortis.</p>
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"meta": {
|
||||
"projectName": "Lorem Ipsum",
|
||||
"novelAuthor": "lipsum.com",
|
||||
"buildTime": 1729590078,
|
||||
"buildTimeStr": "2024-10-22 11:41:18"
|
||||
"buildTime": 1729614520,
|
||||
"buildTimeStr": "2024-10-22 18:28:40"
|
||||
},
|
||||
"text": {
|
||||
"css": [
|
||||
@@ -17,12 +17,7 @@
|
||||
".sep, .skip {text-align: center; margin-top: 1.30em; margin-bottom: 1.30em;}",
|
||||
"a {color: rgb(66, 113, 174);}",
|
||||
"mark {background: rgb(255, 255, 166);}",
|
||||
".keyword {color: rgb(245, 135, 31); font-weight: bold;}",
|
||||
".break {text-align: left;}",
|
||||
".synopsis {font-style: italic;}",
|
||||
".comment {font-style: italic; color: rgb(100, 100, 100);}",
|
||||
".dialog {color: rgb(66, 113, 174);}",
|
||||
".altdialog {color: rgb(129, 55, 9);}"
|
||||
".keyword {color: rgb(245, 135, 31); font-weight: bold;}"
|
||||
],
|
||||
"html": [
|
||||
[
|
||||
@@ -32,13 +27,13 @@
|
||||
"<p style='text-align: center;'>\u201cThere is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain\u2026\u201d</p>"
|
||||
],
|
||||
[
|
||||
"<p class='comment'><strong>Comment:</strong> Exctracted from the lipsum.com website.</p>",
|
||||
"<p class='comment'><strong><span style='color: #646464'>Comment:</strong></span> <span style='color: #646464'>Exctracted from the lipsum.com website.</span></p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of \u201cde Finibus Bonorum et Malorum\u201d (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, \u201cLorem ipsum dolor sit amet..\u201d, comes from a line in section 1.10.32.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from \u201cde Finibus Bonorum et Malorum\u201d by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.</p>"
|
||||
],
|
||||
[
|
||||
"<h1 style='page-break-before: always;'>Prologue</h1>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Explanation from the lipsum.com website.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Explanation from the lipsum.com website.</span></p>",
|
||||
"<p style='text-align: justify;'><em>Lorem Ipsum</em> is simply dummy text<sup><a href='#footnote_1'>1</a></sup> of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>"
|
||||
],
|
||||
[
|
||||
@@ -50,7 +45,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam.</span></p>",
|
||||
"<p style='text-align: justify;'>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at aliquam quam. Praesent magna nunc, lacinia sit amet quam eget, aliquet ultrices justo. Morbi ornare enim et lorem rutrum finibus ut eu dolor. Aliquam a orci odio. Ut ultrices sem quis massa placerat, eget mollis nisl cursus. Cras vel sagittis justo. Ut non ultricies leo. Maecenas rutrum velit in est varius, et egestas massa pulvinar.</p>"
|
||||
],
|
||||
[
|
||||
@@ -58,7 +53,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur.</span></p>",
|
||||
"<p style='text-align: justify;'>Aenean ut placerat velit. Etiam laoreet ullamcorper risus, eget lobortis enim scelerisque non. Suspendisse id maximus nunc, et mollis sapien. Curabitur vel semper sapien, non pulvinar dolor. Etiam finibus nisi vel mi molestie consectetur. Donec quis ante nunc. Mauris ut leo ipsum. Vestibulum est neque, hendrerit nec neque a, ullamcorper lobortis tellus. Fusce sollicitudin purus quis congue bibendum. Aliquam condimentum ipsum tristique blandit tristique. Donec pulvinar neque ac suscipit malesuada.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Aliquam ut nisl arcu. Ut ultricies, lorem dignissim rutrum convallis, risus orci tempus lectus, congue feugiat sem lectus vitae odio. Duis sit amet justo finibus, hendrerit nulla at, ullamcorper enim. Praesent vel tellus sit amet tellus vulputate bibendum. Morbi eleifend sagittis sem, ac volutpat ante congue non. In hac habitasse platea dictumst. Morbi lobortis fermentum elit, dignissim sagittis ligula volutpat lacinia. Vestibulum eu interdum odio. Integer ac purus commodo metus congue tempor non at urna. Sed eget tortor vel quam viverra egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec non convallis mauris, ac feugiat ex.</p>",
|
||||
"<h3>Section: Scene One, Section Two</h3>",
|
||||
@@ -70,7 +65,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci.</span></p>",
|
||||
"<p style='text-align: justify;'>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer sapien nulla, dictum at lacus a, dignissim consectetur dolor. Nunc vel eleifend lacus, eu dapibus orci. Vestibulum facilisis bibendum aliquam. Aliquam posuere, turpis ac bibendum varius, sem tellus venenatis risus, in elementum massa enim ac lorem. Integer in sem ac diam blandit ultricies ut in nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet erat est. Curabitur vitae cursus justo, sit amet placerat dolor. Vivamus eu felis hendrerit, tincidunt massa rutrum, maximus arcu. Pellentesque commodo justo odio, vel rutrum nulla tincidunt eu. Integer non neque condimentum, convallis diam non, varius ligula. Aliquam eget sapien mauris. Aenean pharetra nunc nisi, vel maximus ante tristique sit amet. Aliquam risus metus, interdum non odio eu, consectetur lacinia sapien.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Proin vitae gravida nisl. Integer viverra orci turpis, sit amet pretium ligula facilisis consequat. Nulla interdum commodo metus, mollis consequat dui tincidunt et. Proin consequat bibendum justo id commodo. Fusce fermentum nunc turpis, eu vestibulum risus feugiat ut. Sed scelerisque vel ligula ut interdum. Suspendisse ac blandit ligula, sagittis fringilla dolor. In tincidunt convallis diam et ornare. Aenean id dignissim est, ut rhoncus quam. Donec vitae nisl velit. In convallis nibh ut augue dignissim, eu elementum quam cursus. Phasellus in lectus lorem. Curabitur in pellentesque nisi, at gravida sapien. Sed cursus justo volutpat lacus placerat, sit amet dignissim turpis commodo. Aliquam vitae orci eget nulla posuere condimentum in ut felis.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Nulla accumsan ante in pulvinar efficitur. Nulla non velit quis urna hendrerit bibendum. Suspendisse ultrices ante eu justo malesuada, sed fermentum enim rutrum. Nunc fermentum pharetra felis, vitae sollicitudin quam rutrum porta. Aliquam fringilla velit a mi laoreet, et luctus est rutrum. In gravida non ipsum sit amet tempus. Curabitur et eleifend purus. Nulla facilisi.</p>",
|
||||
@@ -81,7 +76,7 @@
|
||||
],
|
||||
[
|
||||
"<h1 style='page-break-before: always;'>Why do we use it?</h1>",
|
||||
"<p class='comment'><strong>Comment:</strong> Exctracted from the lipsum.com website.</p>",
|
||||
"<p class='comment'><strong><span style='color: #646464'>Comment:</strong></span> <span style='color: #646464'>Exctracted from the lipsum.com website.</span></p>",
|
||||
"<p style='text-align: justify;'> It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'> The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'> Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).</p>"
|
||||
@@ -91,7 +86,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue.</span></p>",
|
||||
"<p style='text-align: justify;'>Curabitur a elit posuere, varius ex et, convallis neque. Phasellus sagittis pharetra sem vitae dapibus. Curabitur varius lorem non pulvinar congue. Vestibulum pharetra fermentum leo, sed faucibus eros placerat quis. In hac habitasse platea dictumst. Donec metus massa, rutrum quis consequat et, tincidunt ac felis. Duis mollis metus ac nunc tincidunt blandit. Ut aliquet velit eu odio pharetra condimentum. Integer rutrum lacus orci, id venenatis libero accumsan at.</p>"
|
||||
],
|
||||
[
|
||||
@@ -99,7 +94,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</span></p>",
|
||||
"<p style='text-align: justify;'>Aenean ut libero ut lectus porttitor rhoncus vel et massa. Nam pretium, nibh et varius vehicula, urna metus blandit eros, euismod pharetra diam diam et libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean tincidunt lacus vitae nibh elementum eleifend. Sed rutrum condimentum sem quis blandit. Duis imperdiet libero metus, quis convallis quam faucibus a. Nulla ligula est, semper quis sollicitudin et, pretium id justo. Curabitur pharetra risus eget consectetur commodo. Duis mattis arcu non est condimentum, id venenatis risus volutpat. Pellentesque aliquet mauris non mauris porttitor ultrices. Phasellus ut vestibulum mi. Suspendisse malesuada metus lorem, a malesuada orci rhoncus a. Praesent euismod convallis ante, lacinia tincidunt ex egestas id. Praesent sit amet efficitur sapien. Morbi tincidunt volutpat nunc sed dictum. Aliquam ultrices metus id fermentum lobortis.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Pellentesque id sagittis dui. Praesent ut nisi sit amet libero euismod ornare. Vestibulum vehicula, lorem eget aliquet imperdiet, eros nulla iaculis mi, vel bibendum est dui sed orci. Nullam vitae lorem rutrum, euismod lacus id, ullamcorper lectus. Duis nec commodo mi, a fringilla diam. Vestibulum molestie nibh tristique, viverra augue non, aliquet metus. Phasellus a tellus ac nisl tempor aliquet. Nulla vitae sapien rutrum augue ornare ultrices a quis nisi. Sed pulvinar tincidunt ex. Fusce vel sem vitae ante pellentesque lobortis.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Maecenas ullamcorper lacus nec turpis finibus aliquet eget rutrum augue. Integer lorem erat, faucibus non lacus lacinia, pulvinar egestas felis. Proin rutrum nunc eget nulla varius, id blandit mauris tincidunt. Donec sit amet ullamcorper nisi, ut efficitur mi. Aliquam aliquet, nulla eget rhoncus tristique, justo lorem consectetur dui, id ornare leo odio sed tellus. Curabitur interdum velit a turpis condimentum venenatis. Nunc rhoncus sem ac augue auctor, nec malesuada ex fringilla. Vestibulum egestas diam sed leo consectetur vulputate quis eget enim. Nam tincidunt metus sit amet maximus ullamcorper. Sed placerat velit vitae massa efficitur viverra. Etiam eleifend dignissim ante, sed luctus nisl tristique a. In vestibulum pharetra dolor in molestie. Vivamus auctor massa ac magna imperdiet, sit amet iaculis turpis finibus.</p>",
|
||||
@@ -110,7 +105,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo.</span></p>",
|
||||
"<p style='text-align: justify;'>Nam tempor blandit magna laoreet aliquet. Vestibulum auctor posuere leo, ac gravida nisi rhoncus varius. Aenean posuere dolor vitae condimentum volutpat. Donec egestas volutpat risus, quis luctus justo. Nullam viverra dui et auctor pretium. Ut ullamcorper velit urna, sed imperdiet massa convallis a. Suspendisse efficitur, ipsum nec cursus pulvinar, eros urna posuere diam, nec elementum mi felis vitae sapien.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Duis efficitur metus pulvinar, molestie magna eget, feugiat dui. Fusce convallis vehicula ipsum convallis blandit. Duis eros risus, malesuada eu imperdiet in, hendrerit ac metus. Vestibulum id justo gravida, dignissim nibh non, iaculis diam. Fusce accumsan est ut massa porta ultricies. Nulla vitae justo in tortor laoreet mollis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin eu libero justo. Vivamus aliquet placerat est, et auctor eros posuere venenatis. Nunc quam diam, tincidunt ac aliquet in, fermentum sit amet lectus. Proin commodo tincidunt blandit. Quisque erat arcu, semper nec dui non, consectetur gravida ipsum. Nullam pretium consectetur elit at condimentum.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Etiam sagittis, erat vitae accumsan tempor, neque augue scelerisque nulla, ut ultrices justo urna sit amet augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean at pulvinar tortor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras vel porta quam. Nullam eu mauris mollis, vehicula justo vel, placerat sapien. Phasellus viverra elit et vestibulum pharetra. Vestibulum commodo fermentum leo, eu porta nisi aliquam eget. Nulla tempus porttitor nisi nec mollis. Nam non mollis turpis. Nam finibus leo a bibendum tincidunt. Donec commodo velit magna, ac semper sapien mattis id. Proin sem velit, lobortis quis ultricies id, pharetra et lectus. Vestibulum condimentum neque vitae mi dapibus mollis. Mauris luctus vel sapien vitae hendrerit.</p>",
|
||||
@@ -123,7 +118,7 @@
|
||||
"<p class='meta meta-pov' style='margin-bottom: 0;'><span class='keyword'>Point of View:</span> <a class='tag' href='#tag_Bod'>Bod</a></p>",
|
||||
"<p class='meta meta-plot' style='margin-bottom: 0; margin-top: 0;'><span class='keyword'>Plot:</span> <a class='tag' href='#tag_Main'>Main</a></p>",
|
||||
"<p class='meta meta-location' style='margin-top: 0;'><span class='keyword'>Locations:</span> <a class='tag' href='#tag_Europe'>Europe</a></p>",
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>",
|
||||
"<p class='comment'><strong><span style='color: #813709'>Synopsis:</strong></span> <span style='color: #813709'>Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</span></p>",
|
||||
"<p style='text-align: justify;'>Praesent eget est porta, dictum ante in, egestas risus. Mauris risus mauris, consequat aliquam mauris et, feugiat iaculis ipsum. Aliquam arcu ipsum, fermentum ut arcu sed, lobortis euismod sem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sed felis auctor, rhoncus dui ac, consequat dolor. Integer volutpat libero sed nisl aliquet varius. Suspendisse et lorem sapien. Proin id ultrices nibh, ac suscipit diam. Suspendisse placerat varius porttitor. Curabitur elementum sed enim ultrices imperdiet.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>In ut lobortis lacus, nec luctus arcu. Vivamus condimentum sapien a ipsum malesuada sodales. Donec et vestibulum risus. Integer dictum euismod eros id tincidunt. Aliquam sagittis leo vitae consequat fermentum. Donec maximus ex eu ex iaculis porta. Praesent pharetra lacinia risus, et eleifend diam commodo non. Sed feugiat ipsum ut orci sagittis, quis faucibus lectus blandit. Sed tellus quam, gravida vitae laoreet quis, tempus lobortis dui. Vivamus semper accumsan ullamcorper. Praesent tempus pretium eros, non elementum risus. Pellentesque odio quam, auctor quis ex non, vulputate egestas dolor. Nunc luctus enim ut justo sodales consectetur. Sed aliquet a mauris vel posuere.</p>",
|
||||
"<p style='text-align: justify; text-indent: 1.40em;'>Donec luctus lectus efficitur, blandit nisi vitae, dignissim tellus. Pellentesque euismod pharetra augue gravida hendrerit. Quisque nisi mi, mattis ac nisi non, maximus malesuada ante. Nulla lobortis, diam eu ornare ornare, tellus enim feugiat arcu, non vestibulum tortor nunc eu justo. Integer blandit felis justo, eu semper est scelerisque vel. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam ultricies, nisi vel elementum commodo, nisl dolor tincidunt magna, sed varius est nunc at lectus. Aliquam dolor tortor, sodales placerat ultricies quis, sodales quis sapien. Duis ullamcorper sollicitudin risus at mattis. Integer consequat et nunc at condimentum. Pellentesque cursus congue augue, non suscipit lectus sodales ut. Nam a mi bibendum, blandit nisl eu, accumsan nunc. Aliquam a ex mauris. Sed nec sem quis arcu dignissim tempus eget et turpis. Ut sed ex nec ipsum ultrices lobortis.</p>",
|
||||
|
||||
@@ -35,6 +35,7 @@ def testFmtToHtml_ConvertHeaders(mockGUI):
|
||||
"""Test header formats in the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
# Novel Files Headers
|
||||
# ===================
|
||||
@@ -137,6 +138,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
"""Test paragraph formats in the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
html._isNovel = True
|
||||
html._isFirst = True
|
||||
@@ -185,7 +187,10 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
html.tokenizeText()
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<p class='synopsis'><strong>Synopsis:</strong> The synopsis ...</p>\n"
|
||||
"<p class='comment'>"
|
||||
"<strong><span style='color: #813709'>Synopsis:</strong></span> "
|
||||
"<span style='color: #813709'>The synopsis ...</span>"
|
||||
"</p>\n"
|
||||
)
|
||||
|
||||
html.setSynopsis(True)
|
||||
@@ -193,7 +198,10 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
html.tokenizeText()
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<p class='synopsis'><strong>Short Description:</strong> A short description ...</p>\n"
|
||||
"<p class='comment'>"
|
||||
"<strong><span style='color: #813709'>Short Description:</strong></span> "
|
||||
"<span style='color: #813709'>A short description ...</span>"
|
||||
"</p>\n"
|
||||
)
|
||||
|
||||
# Comment
|
||||
@@ -207,7 +215,10 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
html.tokenizeText()
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<p class='comment'><strong>Comment:</strong> A comment ...</p>\n"
|
||||
"<p class='comment'>"
|
||||
"<strong><span style='color: #646464'>Comment:</strong></span> "
|
||||
"<span style='color: #646464'>A comment ...</span>"
|
||||
"</p>\n"
|
||||
)
|
||||
|
||||
# Keywords
|
||||
@@ -269,7 +280,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<h1 style='page-break-before: always;'>Chapter</h1>\n"
|
||||
"<p>This text <span class='dialog'>\u201chas dialogue\u201d</span> in it.</p>\n"
|
||||
"<p>This text <span style='color: #4271ae'>“has dialogue”</span> in it.</p>\n"
|
||||
)
|
||||
|
||||
# Alt. Dialogue
|
||||
@@ -281,7 +292,7 @@ def testFmtToHtml_ConvertParagraphs(mockGUI):
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<h1 style='page-break-before: always;'>Chapter</h1>\n"
|
||||
"<p>This text <span class='altdialog'>::has alt dialogue::</span> in it.</p>\n"
|
||||
"<p>This text <span style='color: #813709'>::has alt dialogue::</span> in it.</p>\n"
|
||||
)
|
||||
|
||||
# Footnotes
|
||||
@@ -314,6 +325,7 @@ def testFmtToHtml_CloseTags(mockGUI):
|
||||
"""Test automatic closing of HTML tags for shortcodes."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
html._isNovel = True
|
||||
html._isFirst = True
|
||||
@@ -350,6 +362,7 @@ def testFmtToHtml_ConvertDirect(mockGUI):
|
||||
"""Test the converter directly using the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
html._isNovel = True
|
||||
html._handle = "0000000000000"
|
||||
@@ -497,6 +510,7 @@ def testFmtToHtml_SpecialCases(mockGUI):
|
||||
"""Test some special cases that have caused errors in the past."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
html._isNovel = True
|
||||
|
||||
# Greater/Lesser than symbols
|
||||
@@ -540,7 +554,9 @@ def testFmtToHtml_SpecialCases(mockGUI):
|
||||
html.doConvert()
|
||||
assert html.result == (
|
||||
"<p class='comment'>"
|
||||
"<strong>Comment:</strong> Test > text <em><<strong>bold</strong>></em> and more."
|
||||
"<strong><span style='color: #646464'>Comment:</strong></span> "
|
||||
"<span style='color: #646464'>Test > text <em><<strong>bold</strong>></em> "
|
||||
"and more.</span>"
|
||||
"</p>\n"
|
||||
)
|
||||
|
||||
@@ -569,6 +585,7 @@ def testFmtToHtml_Save(mockGUI, fncPath):
|
||||
"""Test the save method of the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
html._isNovel = True
|
||||
|
||||
# Build Project
|
||||
@@ -665,6 +682,7 @@ def testFmtToHtml_Methods(mockGUI):
|
||||
"""Test all the other methods of the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
# Auto-Replace, keep Unicode
|
||||
docText = "Text with <brackets> & short–dash, long—dash …\n"
|
||||
@@ -707,6 +725,7 @@ def testFmtToHtml_Format(mockGUI):
|
||||
"""Test all the formatters for the ToHtml class."""
|
||||
project = NWProject()
|
||||
html = ToHtml(project)
|
||||
html.initDocument()
|
||||
|
||||
assert html._formatKeywords("") == ("", "")
|
||||
assert html._formatKeywords("tag: Jane") == (
|
||||
|
||||
@@ -736,7 +736,7 @@ def testFmtToken_MetaFormat(mockGUI):
|
||||
tokens._text = "% synopsis: The synopsis\n"
|
||||
tokens.tokenizeText()
|
||||
assert tokens._blocks == [(
|
||||
BlockTyp.SUMMARY, 0, "Synopsis: The synopsis", [
|
||||
BlockTyp.COMMENT, 0, "Synopsis: The synopsis", [
|
||||
(0, TextFmt.B_B, ""), (0, TextFmt.COL_B, "modifier"), (9, TextFmt.B_E, ""),
|
||||
(9, TextFmt.COL_E, ""), (10, TextFmt.COL_B, "synopsis"), (22, TextFmt.COL_E, "")
|
||||
], BlockFmt.NONE
|
||||
@@ -754,7 +754,7 @@ def testFmtToken_MetaFormat(mockGUI):
|
||||
tokens._text = "% short: A short description\n"
|
||||
tokens.tokenizeText()
|
||||
assert tokens._blocks == [(
|
||||
BlockTyp.SUMMARY, 0, "Short Description: A short description", [
|
||||
BlockTyp.COMMENT, 0, "Short Description: A short description", [
|
||||
(0, TextFmt.B_B, ""), (0, TextFmt.COL_B, "modifier"), (18, TextFmt.B_E, ""),
|
||||
(18, TextFmt.COL_E, ""), (19, TextFmt.COL_B, "synopsis"), (38, TextFmt.COL_E, ""),
|
||||
], BlockFmt.NONE
|
||||
@@ -1129,10 +1129,10 @@ def testFmtToken_Dialogue(mockGUI):
|
||||
BlockTyp.TEXT, 0,
|
||||
"Text with \u2018dialogue one,\u2019 and \u2018dialogue two.\u2019",
|
||||
[
|
||||
(10, TextFmt.DL_B, ""),
|
||||
(25, TextFmt.DL_E, ""),
|
||||
(30, TextFmt.DL_B, ""),
|
||||
(45, TextFmt.DL_E, ""),
|
||||
(10, TextFmt.COL_B, "dialog"),
|
||||
(25, TextFmt.COL_E, ""),
|
||||
(30, TextFmt.COL_B, "dialog"),
|
||||
(45, TextFmt.COL_E, ""),
|
||||
],
|
||||
BlockFmt.NONE
|
||||
)]
|
||||
@@ -1144,10 +1144,10 @@ def testFmtToken_Dialogue(mockGUI):
|
||||
BlockTyp.TEXT, 0,
|
||||
"Text with \u201cdialogue one,\u201d and \u201cdialogue two.\u201d",
|
||||
[
|
||||
(10, TextFmt.DL_B, ""),
|
||||
(25, TextFmt.DL_E, ""),
|
||||
(30, TextFmt.DL_B, ""),
|
||||
(45, TextFmt.DL_E, ""),
|
||||
(10, TextFmt.COL_B, "dialog"),
|
||||
(25, TextFmt.COL_E, ""),
|
||||
(30, TextFmt.COL_B, "dialog"),
|
||||
(45, TextFmt.COL_E, ""),
|
||||
],
|
||||
BlockFmt.NONE
|
||||
)]
|
||||
@@ -1159,10 +1159,10 @@ def testFmtToken_Dialogue(mockGUI):
|
||||
BlockTyp.TEXT, 0,
|
||||
"Text with ::dialogue one,:: and ::dialogue two.::",
|
||||
[
|
||||
(10, TextFmt.ADL_B, ""),
|
||||
(27, TextFmt.ADL_E, ""),
|
||||
(32, TextFmt.ADL_B, ""),
|
||||
(49, TextFmt.ADL_E, ""),
|
||||
(10, TextFmt.COL_B, "altdialog"),
|
||||
(27, TextFmt.COL_E, ""),
|
||||
(32, TextFmt.COL_B, "altdialog"),
|
||||
(49, TextFmt.COL_E, ""),
|
||||
],
|
||||
BlockFmt.NONE
|
||||
)]
|
||||
@@ -1174,10 +1174,10 @@ def testFmtToken_Dialogue(mockGUI):
|
||||
BlockTyp.TEXT, 0,
|
||||
"\u2013 Dialogue with a narrator break, \u2013he said,\u2013 see?",
|
||||
[
|
||||
(0, TextFmt.DL_B, ""),
|
||||
(34, TextFmt.DL_E, ""),
|
||||
(44, TextFmt.DL_B, ""),
|
||||
(49, TextFmt.DL_E, ""),
|
||||
(0, TextFmt.COL_B, "dialog"),
|
||||
(34, TextFmt.COL_E, ""),
|
||||
(44, TextFmt.COL_B, "dialog"),
|
||||
(49, TextFmt.COL_E, ""),
|
||||
],
|
||||
BlockFmt.NONE
|
||||
)]
|
||||
@@ -1193,9 +1193,9 @@ def testFmtToken_Dialogue(mockGUI):
|
||||
"\u201cDialogue text.\u201d",
|
||||
[
|
||||
(0, TextFmt.I_B, ""),
|
||||
(0, TextFmt.DL_B, ""),
|
||||
(0, TextFmt.COL_B, "dialog"),
|
||||
(16, TextFmt.I_E, ""),
|
||||
(16, TextFmt.DL_E, ""),
|
||||
(16, TextFmt.COL_E, ""),
|
||||
],
|
||||
BlockFmt.NONE
|
||||
)]
|
||||
@@ -1407,8 +1407,8 @@ def testFmtToken_TextIndent(mockGUI):
|
||||
(9, TextFmt.COL_E, ""), (10, TextFmt.COL_B, "synopsis"), (24, TextFmt.COL_E, ""),
|
||||
]
|
||||
assert tokens._blocks == [
|
||||
(BlockTyp.HEAD3, 1, "Scene Two", [], BlockFmt.NONE),
|
||||
(BlockTyp.SUMMARY, 1, "Synopsis: Stuff happens.", tFmt, BlockFmt.NONE),
|
||||
(BlockTyp.HEAD3, 1, "Scene Two", [], BlockFmt.NONE),
|
||||
(BlockTyp.COMMENT, 1, "Synopsis: Stuff happens.", tFmt, BlockFmt.NONE),
|
||||
]
|
||||
assert tokens._noIndent is True
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@ def testFmtToOdt_DialogueFormatting(mockGUI):
|
||||
|
||||
# Regular dialogue
|
||||
text = "Text with 'dialogue in it.'"
|
||||
fmt = [(10, TextFmt.DL_B, ""), (27, TextFmt.DL_E, "")]
|
||||
fmt = [(10, TextFmt.COL_B, "dialog"), (27, TextFmt.COL_E, "")]
|
||||
xTest = ET.Element(_mkTag("office", "text"))
|
||||
odt._addTextPar(xTest, "Standard", oStyle, text, tFmt=fmt)
|
||||
assert odt.errData == []
|
||||
@@ -261,7 +261,7 @@ def testFmtToOdt_DialogueFormatting(mockGUI):
|
||||
|
||||
# Alternative dialogue
|
||||
text = "Text with ::dialogue in it.::"
|
||||
fmt = [(10, TextFmt.ADL_B, ""), (29, TextFmt.ADL_E, "")]
|
||||
fmt = [(10, TextFmt.COL_B, "altdialog"), (29, TextFmt.COL_E, "")]
|
||||
xTest = ET.Element(_mkTag("office", "text"))
|
||||
odt._addTextPar(xTest, "Standard", oStyle, text, tFmt=fmt)
|
||||
assert odt.errData == []
|
||||
|
||||
Reference in New Issue
Block a user