@@ -67,7 +67,8 @@ class ToHtml(Tokenizer):
|
|||||||
|
|
||||||
if tType == self.T_EMPTY:
|
if tType == self.T_EMPTY:
|
||||||
if len(thisPar) > 0:
|
if len(thisPar) > 0:
|
||||||
self.theResult += "<p%s>%s</p>\n" % (hStyle," ".join(thisPar))
|
tTemp = "".join(thisPar)
|
||||||
|
self.theResult += "<p%s>%s</p>\n" % (hStyle,tTemp.rstrip())
|
||||||
thisPar = []
|
thisPar = []
|
||||||
|
|
||||||
elif tType == self.T_HEAD1:
|
elif tType == self.T_HEAD1:
|
||||||
@@ -92,7 +93,10 @@ class ToHtml(Tokenizer):
|
|||||||
tTemp = tText
|
tTemp = tText
|
||||||
for xPos, xLen, xFmt in reversed(tFormat):
|
for xPos, xLen, xFmt in reversed(tFormat):
|
||||||
tTemp = tTemp[:xPos]+htmlTags[xFmt]+tTemp[xPos+xLen:]
|
tTemp = tTemp[:xPos]+htmlTags[xFmt]+tTemp[xPos+xLen:]
|
||||||
thisPar.append(tTemp)
|
if tText.endswith(" "):
|
||||||
|
thisPar.append(tTemp.rstrip()+"<br/>")
|
||||||
|
else:
|
||||||
|
thisPar.append(tTemp.rstrip()+" ")
|
||||||
|
|
||||||
elif tType == self.T_COMMENT and self.doComments:
|
elif tType == self.T_COMMENT and self.doComments:
|
||||||
self.theResult += "<div class='comment'>%s</div>\n" % tText
|
self.theResult += "<div class='comment'>%s</div>\n" % tText
|
||||||
|
|||||||
@@ -95,7 +95,10 @@ class ToLaTeX(Tokenizer):
|
|||||||
self.theResult += "\\bigskip\n\n"
|
self.theResult += "\\bigskip\n\n"
|
||||||
|
|
||||||
elif tType == self.T_TEXT:
|
elif tType == self.T_TEXT:
|
||||||
thisPar.append(self._escapeUnicode(tText))
|
if tText.endswith(" "):
|
||||||
|
thisPar.append(self._escapeUnicode(tText.rstrip())+"\\newline")
|
||||||
|
else:
|
||||||
|
thisPar.append(self._escapeUnicode(tText.rstrip()))
|
||||||
|
|
||||||
elif tType == self.T_PBREAK:
|
elif tType == self.T_PBREAK:
|
||||||
self.theResult += "\\newpage\n\n"
|
self.theResult += "\\newpage\n\n"
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ class ToText(Tokenizer):
|
|||||||
# indicating a new paragraph.
|
# indicating a new paragraph.
|
||||||
if tType == self.T_EMPTY:
|
if tType == self.T_EMPTY:
|
||||||
if len(thisPar) > 0:
|
if len(thisPar) > 0:
|
||||||
self.theResult += "%s\n\n" % " ".join(thisPar)
|
tTemp = " ".join(thisPar)
|
||||||
|
self.theResult += "%s\n\n" % tTemp.rstrip()
|
||||||
thisPar = []
|
thisPar = []
|
||||||
|
|
||||||
elif tType == self.T_HEAD1:
|
elif tType == self.T_HEAD1:
|
||||||
|
|||||||
@@ -171,10 +171,9 @@ class Tokenizer():
|
|||||||
|
|
||||||
self.theTokens = []
|
self.theTokens = []
|
||||||
for aLine in self.theText.splitlines():
|
for aLine in self.theText.splitlines():
|
||||||
aLine = aLine.strip()
|
|
||||||
|
|
||||||
# Tag lines starting with specific characters
|
# Tag lines starting with specific characters
|
||||||
if len(aLine) == 0:
|
if len(aLine.strip()) == 0:
|
||||||
self.theTokens.append((self.T_EMPTY,"",None,self.A_LEFT))
|
self.theTokens.append((self.T_EMPTY,"",None,self.A_LEFT))
|
||||||
elif aLine[0] == "%":
|
elif aLine[0] == "%":
|
||||||
self.theTokens.append((self.T_COMMENT,aLine[1:].strip(),None,self.A_LEFT))
|
self.theTokens.append((self.T_COMMENT,aLine[1:].strip(),None,self.A_LEFT))
|
||||||
|
|||||||
+9
-1
@@ -81,6 +81,8 @@ class GuiDocEditor(QTextEdit):
|
|||||||
|
|
||||||
# Custom Shortcuts
|
# Custom Shortcuts
|
||||||
QShortcut(QKeySequence("Ctrl+."), self, context=Qt.WidgetShortcut, activated=self._openSpellContext)
|
QShortcut(QKeySequence("Ctrl+."), self, context=Qt.WidgetShortcut, activated=self._openSpellContext)
|
||||||
|
QShortcut(Qt.Key_Return | Qt.ControlModifier, self, context=Qt.WidgetShortcut, activated=self._insertHardBreak)
|
||||||
|
QShortcut(Qt.Key_Enter | Qt.ControlModifier, self, context=Qt.WidgetShortcut, activated=self._insertHardBreak)
|
||||||
|
|
||||||
# Set Up Word Count Thread and Timer
|
# Set Up Word Count Thread and Timer
|
||||||
self.wcInterval = self.mainConf.wordCountTimer
|
self.wcInterval = self.mainConf.wordCountTimer
|
||||||
@@ -323,6 +325,13 @@ class GuiDocEditor(QTextEdit):
|
|||||||
# Internal Functions
|
# Internal Functions
|
||||||
##
|
##
|
||||||
|
|
||||||
|
def _insertHardBreak(self):
|
||||||
|
theCursor = self.textCursor()
|
||||||
|
theCursor.beginEditBlock()
|
||||||
|
theCursor.insertText(" \n")
|
||||||
|
theCursor.endEditBlock()
|
||||||
|
return
|
||||||
|
|
||||||
def _openSpellContext(self):
|
def _openSpellContext(self):
|
||||||
self._openContextMenu(self.cursorRect().center())
|
self._openContextMenu(self.cursorRect().center())
|
||||||
return
|
return
|
||||||
@@ -388,7 +397,6 @@ class GuiDocEditor(QTextEdit):
|
|||||||
self.wcTimer.start()
|
self.wcTimer.start()
|
||||||
if self.mainConf.doReplace and not self.hasSelection:
|
if self.mainConf.doReplace and not self.hasSelection:
|
||||||
self._docAutoReplace(self.qDocument.findBlock(thePos))
|
self._docAutoReplace(self.qDocument.findBlock(thePos))
|
||||||
# logger.verbose("Doc change signal took %.3f µs" % ((time()-self.lastEdit)*1e6))
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def _docAutoReplace(self, theBlock):
|
def _docAutoReplace(self, theBlock):
|
||||||
|
|||||||
+13
-2
@@ -13,8 +13,8 @@
|
|||||||
import logging
|
import logging
|
||||||
import nw
|
import nw
|
||||||
|
|
||||||
from PyQt5.QtCore import QRegularExpression
|
from PyQt5.QtCore import Qt, QRegularExpression
|
||||||
from PyQt5.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter
|
from PyQt5.QtGui import QColor, QTextCharFormat, QFont, QSyntaxHighlighter, QBrush
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -71,6 +71,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
|
|||||||
self.colSpell = QColor(*self.theTheme.colSpell)
|
self.colSpell = QColor(*self.theTheme.colSpell)
|
||||||
self.colTagErr = QColor(*self.theTheme.colTagErr)
|
self.colTagErr = QColor(*self.theTheme.colTagErr)
|
||||||
self.colRepTag = QColor(*self.theTheme.colRepTag)
|
self.colRepTag = QColor(*self.theTheme.colRepTag)
|
||||||
|
self.colTrail = QColor(*self.theTheme.colEmph,64)
|
||||||
|
|
||||||
self.hStyles = {
|
self.hStyles = {
|
||||||
"header1" : self._makeFormat(self.colHead, "bold",1.8),
|
"header1" : self._makeFormat(self.colHead, "bold",1.8),
|
||||||
@@ -85,6 +86,7 @@ class GuiDocHighlighter(QSyntaxHighlighter):
|
|||||||
"italic" : self._makeFormat(self.colEmph, "italic"),
|
"italic" : self._makeFormat(self.colEmph, "italic"),
|
||||||
"strike" : self._makeFormat(self.colEmph, "strike"),
|
"strike" : self._makeFormat(self.colEmph, "strike"),
|
||||||
"underline" : self._makeFormat(self.colEmph, "underline"),
|
"underline" : self._makeFormat(self.colEmph, "underline"),
|
||||||
|
"trailing" : self._makeFormat(self.colTrail,"background"),
|
||||||
"dialogue1" : self._makeFormat(self.colDialN),
|
"dialogue1" : self._makeFormat(self.colDialN),
|
||||||
"dialogue2" : self._makeFormat(self.colDialD),
|
"dialogue2" : self._makeFormat(self.colDialD),
|
||||||
"dialogue3" : self._makeFormat(self.colDialS),
|
"dialogue3" : self._makeFormat(self.colDialS),
|
||||||
@@ -136,6 +138,13 @@ class GuiDocHighlighter(QSyntaxHighlighter):
|
|||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
|
# Trailing Spaces, 2+
|
||||||
|
self.hRules.append((
|
||||||
|
r"[ ]{2,}$", {
|
||||||
|
0 : self.hStyles["trailing"],
|
||||||
|
}
|
||||||
|
))
|
||||||
|
|
||||||
# Markdown
|
# Markdown
|
||||||
self.hRules.append((
|
self.hRules.append((
|
||||||
r"(?<![\w|\\])([\*]{2})(?!\s)(?m:(.+?))(?<![\s|\\])(\1)(?!\w)", {
|
r"(?<![\w|\\])([\*]{2})(?!\s)(?m:(.+?))(?<![\s|\\])(\1)(?!\w)", {
|
||||||
@@ -283,6 +292,8 @@ class GuiDocHighlighter(QSyntaxHighlighter):
|
|||||||
theFormat.setFontStrikeOut(True)
|
theFormat.setFontStrikeOut(True)
|
||||||
if "underline" in fmtStyle:
|
if "underline" in fmtStyle:
|
||||||
theFormat.setFontUnderline(True)
|
theFormat.setFontUnderline(True)
|
||||||
|
if "background" in fmtStyle:
|
||||||
|
theFormat.setBackground(QBrush(fmtCol,Qt.SolidPattern))
|
||||||
|
|
||||||
if fmtSize is not None:
|
if fmtSize is not None:
|
||||||
theFormat.setFontPointSize(round(fmtSize*self.mainConf.textSize))
|
theFormat.setFontPointSize(round(fmtSize*self.mainConf.textSize))
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
## Interlude
|
## Interlude
|
||||||
|
|
||||||
I am the very model of a modern Major-General
|
I am the very model of a modern Major-General
|
||||||
I've information vegetable, animal, and mineral
|
I've information vegetable, animal, and mineral
|
||||||
I know the kings of England, and I quote the fights historical
|
I know the kings of England, and I quote the fights historical
|
||||||
From Marathon to Waterloo, in order categorical
|
From Marathon to Waterloo, in order categorical
|
||||||
|
|
||||||
I'm very well acquainted, too, with matters mathematical
|
I'm very well acquainted, too, with matters mathematical
|
||||||
I understand equations, both the simple and quadratical
|
I understand equations, both the simple and quadratical
|
||||||
About binomial theorem I'm teeming with a lot o’ news
|
About binomial theorem I'm teeming with a lot o’ news
|
||||||
With many cheerful facts about the square of the hypotenuse
|
With many cheerful facts about the square of the hypotenuse
|
||||||
|
|
||||||
With many cheerful facts about the square of the hypotenuse
|
With many cheerful facts about the square of the hypotenuse
|
||||||
With many cheerful facts about the square of the hypotenuse
|
With many cheerful facts about the square of the hypotenuse
|
||||||
With many cheerful facts about the square of the hypotepotenuse
|
With many cheerful facts about the square of the hypotepotenuse
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<novelWriterXML appVersion="0.3.1" fileVersion="1.0" timeStamp="2019-10-23 21:21:02">
|
<novelWriterXML appVersion="0.3.2" fileVersion="1.0" timeStamp="2019-10-28 21:42:26">
|
||||||
<project>
|
<project>
|
||||||
<name>Sample Project</name>
|
<name>Sample Project</name>
|
||||||
<title>Sample Project</title>
|
<title>Sample Project</title>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<settings>
|
<settings>
|
||||||
<spellCheck>True</spellCheck>
|
<spellCheck>True</spellCheck>
|
||||||
<lastEdited>ba8a28a246524</lastEdited>
|
<lastEdited>ba8a28a246524</lastEdited>
|
||||||
<lastViewed>636b6aa9b697b</lastViewed>
|
<lastViewed>ba8a28a246524</lastViewed>
|
||||||
<lastWordCount>859</lastWordCount>
|
<lastWordCount>859</lastWordCount>
|
||||||
<autoReplace>
|
<autoReplace>
|
||||||
<A>B</A>
|
<A>B</A>
|
||||||
@@ -103,10 +103,10 @@
|
|||||||
<status>Finished</status>
|
<status>Finished</status>
|
||||||
<expanded>False</expanded>
|
<expanded>False</expanded>
|
||||||
<layout>UNNUMBERED</layout>
|
<layout>UNNUMBERED</layout>
|
||||||
<charCount>614</charCount>
|
<charCount>626</charCount>
|
||||||
<wordCount>101</wordCount>
|
<wordCount>101</wordCount>
|
||||||
<paraCount>3</paraCount>
|
<paraCount>3</paraCount>
|
||||||
<cursorPos>633</cursorPos>
|
<cursorPos>583</cursorPos>
|
||||||
</item>
|
</item>
|
||||||
<item handle="96b68994dfa3d" order="4" parent="e7ded148d6e4a">
|
<item handle="96b68994dfa3d" order="4" parent="e7ded148d6e4a">
|
||||||
<name>A Note on Ipsums</name>
|
<name>A Note on Ipsums</name>
|
||||||
|
|||||||
Reference in New Issue
Block a user