eric6/QScintilla/Exporters/ExporterHTML.py

Sat, 31 Aug 2019 12:58:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Aug 2019 12:58:11 +0200
branch
without_py2_and_pyqt4
changeset 7192
a22eee00b052
parent 6942
2602857055c5
child 7229
53054eb5b15a
permissions
-rw-r--r--

Started removing runtime support for Python2 and PyQt4.

0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6645
ad476851d7e0 Updated copyright for 2019.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6105
diff changeset
3 # Copyright (c) 2007 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing an exporter for HTML.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3145
a9de05d4a22f # __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3060
diff changeset
10 from __future__ import unicode_literals
2525
8b507a9a2d40 Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2302
diff changeset
11
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 # This code is a port of the C++ code found in SciTE 1.74
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 # Original code: Copyright 1998-2006 by Neil Hodgson <neilh@scintilla.org>
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import os
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
16 import sys
7192
a22eee00b052 Started removing runtime support for Python2 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
17 import io
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
3656
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
19 from PyQt5.QtCore import Qt
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
20 from PyQt5.QtGui import QCursor, QFontInfo
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
21 from PyQt5.QtWidgets import QApplication
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
22 from PyQt5.Qsci import QsciScintilla
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
537
72b32daeb8d6 Continued replacing QMessageBox methods with own methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 535
diff changeset
24 from E5Gui import E5MessageBox
72b32daeb8d6 Continued replacing QMessageBox methods with own methods.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 535
diff changeset
25
12
1d8dd9706f46 First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 0
diff changeset
26 from .ExporterBase import ExporterBase
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 import Preferences
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 import Utilities
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
31
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
32 class HTMLGenerator(object):
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
33 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
34 Class implementing an HTML generator for exporting source code.
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
35 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
36 def __init__(self, editor):
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
37 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
38 Constructor
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
39
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
40 @param editor reference to the editor object (QScintilla.Editor.Editor)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
41 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
42 self.editor = editor
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
43
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
44 def generate(self, tabSize=4, useTabs=False, wysiwyg=True, folding=False,
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
45 onlyStylesUsed=False, titleFullPath=False):
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
46 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
47 Public method to generate HTML for the source editor.
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
48
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
49 @keyparam tabSize size of tabs (integer)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
50 @keyparam useTabs flag indicating the use of tab characters (boolean)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
51 @keyparam wysiwyg flag indicating colorization (boolean)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
52 @keyparam folding flag indicating usage of fold markers
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
53 @keyparam onlyStylesUsed flag indicating to include only style
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
54 definitions for styles used in the source (boolean)
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
55 @keyparam titleFullPath flag indicating to include the full file path
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
56 in the title tag (boolean)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
57 @return generated HTML text (string)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
58 """
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
59 self.editor.recolor(0, -1)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
60
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
61 lengthDoc = self.editor.length()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
62 styleIsUsed = {}
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
63 if onlyStylesUsed:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
64 for index in range(QsciScintilla.STYLE_MAX + 1):
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
65 styleIsUsed[index] = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
66 # check the used styles
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
67 pos = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
68 while pos < lengthDoc:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
69 styleIsUsed[self.editor.styleAt(pos) & 0x7F] = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
70 pos += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
71 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
72 for index in range(QsciScintilla.STYLE_MAX + 1):
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
73 styleIsUsed[index] = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
74 styleIsUsed[QsciScintilla.STYLE_DEFAULT] = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
75
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
76 html = \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
77 '''<!DOCTYPE html PUBLIC "-//W3C//DTD''' \
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
78 ''' XHTML 1.0 Transitional//EN"\n''' \
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
79 ''' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
80 '''\n''' \
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
81 '''<html xmlns="http://www.w3.org/1999/xhtml">\n''' \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
82 '''<head>\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
83 if titleFullPath:
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
84 html += '''<title>{0}</title>\n'''.format(
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
85 self.editor.getFileName())
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
86 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
87 html += '''<title>{0}</title>\n'''.format(
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
88 os.path.basename(self.editor.getFileName()))
3670
f0cb7579c0b4 Finished renaming eric5 for PyQt5 to eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3656
diff changeset
89 html += '''<meta name="Generator" content="eric6" />\n''' \
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
90 '''<meta http-equiv="Content-Type" ''' \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
91 '''content="text/html; charset=utf-8" />\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
92 if folding:
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
93 html += \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
94 '''<script language="JavaScript" type="text/javascript">\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
95 '''<!--\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
96 '''function symbol(id, sym) {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
97 ''' if (id.textContent == undefined) {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
98 ''' id.innerText = sym;\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
99 ''' } else {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
100 ''' id.textContent = sym;\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
101 ''' }\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
102 '''}\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
103 '''function toggle(id) {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
104 ''' var thislayer = document.getElementById('ln' + id);\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
105 ''' id -= 1;\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
106 ''' var togline = document.getElementById('hd' + id);\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
107 ''' var togsym = document.getElementById('bt' + id);\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
108 ''' if (thislayer.style.display == 'none') {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
109 ''' thislayer.style.display = 'block';\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
110 ''' togline.style.textDecoration = 'none';\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
111 ''' symbol(togsym, '- ');\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
112 ''' } else {\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
113 ''' thislayer.style.display = 'none';\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
114 ''' togline.style.textDecoration = 'underline';\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
115 ''' symbol(togsym, '+ ');\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
116 ''' }\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
117 '''}\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
118 '''//-->\n''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
119 '''</script>\n'''
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
120
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
121 lex = self.editor.getLexer()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
122 if lex:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
123 bgColour = lex.paper(QsciScintilla.STYLE_DEFAULT).name()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
124 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
125 bgColour = self.editor.paper().name()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
126
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
127 html += '''<style type="text/css">\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
128 if lex:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
129 istyle = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
130 while istyle <= QsciScintilla.STYLE_MAX:
3034
7ce719013078 Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3011
diff changeset
131 if (istyle <= QsciScintilla.STYLE_DEFAULT or
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
132 istyle > QsciScintilla.STYLE_LASTPREDEFINED) and \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
133 styleIsUsed[istyle]:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
134 if lex.description(istyle) or \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
135 istyle == QsciScintilla.STYLE_DEFAULT:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
136 font = lex.font(istyle)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
137 colour = lex.color(istyle)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
138 paper = lex.paper(istyle)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
139 if istyle == QsciScintilla.STYLE_DEFAULT:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
140 html += '''span {\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
141 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
142 html += '''.S{0:d} {{\n'''.format(istyle)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
143 if font.italic():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
144 html += ''' font-style: italic;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
145 if font.bold():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
146 html += ''' font-weight: bold;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
147 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
148 html += ''' font-family: '{0}';\n'''.format(
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
149 font.family())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
150 html += ''' color: {0};\n'''.format(colour.name())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
151 if istyle != QsciScintilla.STYLE_DEFAULT and \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
152 bgColour != paper.name():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
153 html += ''' background: {0};\n'''.format(
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
154 paper.name())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
155 html += ''' text-decoration: inherit;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
156 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
157 html += ''' font-size: {0:d}pt;\n'''.format(
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
158 QFontInfo(font).pointSize())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
159 html += '''}\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
160 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
161 styleIsUsed[istyle] = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
162 istyle += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
163 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
164 colour = self.editor.color()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
165 paper = self.editor.paper()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
166 font = Preferences.getEditorOtherFonts("DefaultFont")
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
167 html += '''.S0 {\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
168 if font.italic():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
169 html += ''' font-style: italic;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
170 if font.bold():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
171 html += ''' font-weight: bold;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
172 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
173 html += ''' font-family: '{0}';\n'''.format(font.family())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
174 html += ''' color: {0};\n'''.format(colour.name())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
175 if bgColour != paper.name():
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
176 html += ''' background: {0};\n'''.format(paper.name())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
177 html += ''' text-decoration: inherit;\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
178 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
179 html += ''' font-size: {0:d}pt;\n'''.format(
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
180 QFontInfo(font).pointSize())
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
181 html += '''}\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
182 html += '''</style>\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
183 html += '''</head>\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
184
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
185 html += '''<body bgcolor="{0}">\n'''.format(bgColour)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
186 line = self.editor.lineAt(0)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
187 level = self.editor.foldLevelAt(line) - QsciScintilla.SC_FOLDLEVELBASE
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
188 levelStack = [level]
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
189 styleCurrent = self.editor.styleAt(0)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
190 inStyleSpan = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
191 inFoldSpan = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
192 # Global span for default attributes
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
193 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
194 html += '''<span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
195 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
196 html += '''<pre>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
197
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
198 if folding:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
199 if self.editor.foldFlagsAt(line) & \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
200 QsciScintilla.SC_FOLDLEVELHEADERFLAG:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
201 html += '''<span id="hd{0:d}" onclick="toggle('{1:d}')">'''\
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
202 .format(line, line + 1)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
203 html += '''<span id="bt{0:d}">- </span>'''.format(line)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
204 inFoldSpan = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
205 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
206 html += '''&nbsp; '''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
207
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
208 if styleIsUsed[styleCurrent]:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
209 html += '''<span class="S{0:0d}">'''.format(styleCurrent)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
210 inStyleSpan = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
211
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
212 column = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
213 pos = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
214 utf8 = self.editor.isUtf8()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
215 utf8Ch = b""
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
216 utf8Len = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
217
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
218 while pos < lengthDoc:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
219 ch = self.editor.byteAt(pos)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
220 style = self.editor.styleAt(pos)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
221 if style != styleCurrent:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
222 if inStyleSpan:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
223 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
224 inStyleSpan = False
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
225 if ch not in [b'\r', b'\n']: # no need of a span for the EOL
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
226 if styleIsUsed[style]:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
227 html += '''<span class="S{0:d}">'''.format(style)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
228 inStyleSpan = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
229 styleCurrent = style
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
230
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
231 if ch == b' ':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
232 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
233 prevCh = b''
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
234 if column == 0:
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
235 # at start of line, must put a &nbsp;
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
236 # because regular space will be collapsed
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
237 prevCh = b' '
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
238 while pos < lengthDoc and self.editor.byteAt(pos) == b' ':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
239 if prevCh != b' ':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
240 html += ' '
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
241 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
242 html += '''&nbsp;'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
243 prevCh = self.editor.byteAt(pos)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
244 pos += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
245 column += 1
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
246 pos -= 1
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
247 # the last incrementation will be done by the outer loop
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
248 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
249 html += ' '
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
250 column += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
251 elif ch == b'\t':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
252 ts = tabSize - (column % tabSize)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
253 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
254 html += '''&nbsp;''' * ts
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
255 column += ts
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
256 else:
1112
8a7d1b9d18db Improved code quality by getting rid of star imports. That way pyflakes can do its job. A few bugs fixed found by flakes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
257 if useTabs:
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
258 html += '\t'
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
259 column += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
260 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
261 html += ' ' * ts
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
262 column += ts
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
263 elif ch in [b'\r', b'\n']:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
264 if inStyleSpan:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
265 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
266 inStyleSpan = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
267 if inFoldSpan:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
268 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
269 inFoldSpan = False
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
270 if ch == b'\r' and self.editor.byteAt(pos + 1) == b'\n':
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
271 pos += 1 # CR+LF line ending, skip the "extra" EOL char
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
272 column = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
273 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
274 html += '''<br />'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
275
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
276 styleCurrent = self.editor.styleAt(pos + 1)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
277 if folding:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
278 line = self.editor.lineAt(pos + 1)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
279 newLevel = self.editor.foldLevelAt(line)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
280
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
281 if newLevel < level:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
282 while levelStack[-1] > newLevel:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
283 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
284 levelStack.pop()
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
285 html += '\n' # here to get clean code
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
286 if newLevel > level:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
287 html += '''<span id="ln{0:d}">'''.format(line)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
288 levelStack.append(newLevel)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
289 if self.editor.foldFlagsAt(line) & \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
290 QsciScintilla.SC_FOLDLEVELHEADERFLAG:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
291 html += \
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
292 '''<span id="hd{0:d}"''' \
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
293 ''' onclick="toggle('{1:d}')">''' \
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
294 .format(line, line + 1)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
295 html += '''<span id="bt{0:d}">- </span>'''.format(line)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
296 inFoldSpan = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
297 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
298 html += '''&nbsp; '''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
299 level = newLevel
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
300 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
301 html += '\n'
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
302
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
303 if styleIsUsed[styleCurrent] and \
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
304 self.editor.byteAt(pos + 1) not in [b'\r', b'\n']:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
305 # We know it's the correct next style,
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
306 # but no (empty) span for an empty line
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
307 html += '''<span class="S{0:0d}">'''.format(styleCurrent)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
308 inStyleSpan = True
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
309 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
310 if ch == b'<':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
311 html += '''&lt;'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
312 elif ch == b'>':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
313 html += '''&gt'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
314 elif ch == b'&':
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
315 html += '''&amp;'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
316 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
317 if ord(ch) > 127 and utf8:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
318 utf8Ch += ch
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
319 if utf8Len == 0:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
320 if (utf8Ch[0] & 0xF0) == 0xF0:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
321 utf8Len = 4
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
322 elif (utf8Ch[0] & 0xE0) == 0xE0:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
323 utf8Len = 3
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
324 elif (utf8Ch[0] & 0xC0) == 0xC0:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
325 utf8Len = 2
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
326 column -= 1 # will be incremented again later
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
327 elif len(utf8Ch) == utf8Len:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
328 ch = utf8Ch.decode('utf8')
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
329 html += Utilities.html_encode(ch)
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
330 utf8Ch = b""
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
331 utf8Len = 0
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
332 else:
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
333 column -= 1 # will be incremented again later
532
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
334 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
335 html += ch.decode()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
336 column += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
337
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
338 pos += 1
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
339
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
340 if inStyleSpan:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
341 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
342
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
343 if folding:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
344 while levelStack:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
345 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
346 levelStack.pop()
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
347
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
348 if wysiwyg:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
349 html += '''</span>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
350 else:
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
351 html += '''</pre>'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
352
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
353 html += '''</body>\n</html>\n'''
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
354
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
355 return html
a3c0f1e2594a Added a source code exporter for the Open Document Text (ODT) format.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 429
diff changeset
356
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
357
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 class ExporterHTML(ExporterBase):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 Class implementing an exporter for HTML.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
362 def __init__(self, editor, parent=None):
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 Constructor
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 @param editor reference to the editor object (QScintilla.Editor.Editor)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 @param parent parent object of the exporter (QObject)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 ExporterBase.__init__(self, editor, parent)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 def exportSource(self):
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 """
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 Public method performing the export.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 """
3190
a9a94491c4fd Changed the code to use QObject.tr() instead of QObject.trUtf8().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
375 filename = self._getFileName(self.tr("HTML Files (*.html)"))
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 if not filename:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 return
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 try:
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 QApplication.processEvents()
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
383 fn = self.editor.getFileName()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
384 if fn:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
385 extension = os.path.normcase(os.path.splitext(fn)[1][1:])
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
386 else:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
387 extension = ""
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
389 if extension in \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
390 Preferences.getEditor("PreviewMarkdownFileNameExtensions") or \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
391 self.editor.getLanguage().lower() == "markdown":
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
392 # export markdown to HTML
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
393 html = self.__generateFromMarkdown()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
394 elif extension in \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
395 Preferences.getEditor("PreviewRestFileNameExtensions") or \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
396 self.editor.getLanguage().lower() == "restructuredtext":
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
397 # export ReST to HTML
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
398 html = self.__generateFromReSTDocutils()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
399 else:
6105
cbd34d558bd9 Finished implementing support for EditorConfig for the IDE editor component and the standalone editor.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6048
diff changeset
400 tabSize = self.editor.getEditorConfig("TabWidth")
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
401 if tabSize == 0:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
402 tabSize = 4
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
403 wysiwyg = Preferences.getEditorExporter("HTML/WYSIWYG")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
404 folding = Preferences.getEditorExporter("HTML/Folding")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
405 onlyStylesUsed = Preferences.getEditorExporter(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
406 "HTML/OnlyStylesUsed")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
407 titleFullPath = Preferences.getEditorExporter(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
408 "HTML/FullPathAsTitle")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
409 tabs = Preferences.getEditorExporter("HTML/UseTabs")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
410
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
411 generator = HTMLGenerator(self.editor)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
412 html = generator.generate(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
413 tabSize=tabSize,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
414 useTabs=tabs,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
415 wysiwyg=wysiwyg,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
416 folding=folding,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
417 onlyStylesUsed=onlyStylesUsed,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
418 titleFullPath=titleFullPath
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
419 )
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
421 if html:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
422 try:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
423 f = open(filename, "w", encoding="utf-8")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
424 f.write(html)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
425 f.close()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
426 except IOError as err:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
427 QApplication.restoreOverrideCursor()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
428 E5MessageBox.critical(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
429 self.editor,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
430 self.tr("Export source"),
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
431 self.tr(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
432 """<p>The source could not be exported to"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
433 """ <b>{0}</b>.</p><p>Reason: {1}</p>""")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
434 .format(filename, str(err)))
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
435 else:
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 QApplication.restoreOverrideCursor()
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
437 E5MessageBox.critical(
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
438 self.editor,
3190
a9a94491c4fd Changed the code to use QObject.tr() instead of QObject.trUtf8().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
439 self.tr("Export source"),
a9a94491c4fd Changed the code to use QObject.tr() instead of QObject.trUtf8().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3160
diff changeset
440 self.tr(
3011
18292228c724 Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
441 """<p>The source could not be exported to"""
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
442 """ <b>{0}</b>.</p><p>Reason: No HTML code"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
443 """ generated.</p>""")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
444 .format(filename))
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 finally:
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
446 QApplication.restoreOverrideCursor()
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
447
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
448 def __generateFromReSTDocutils(self):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
449 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
450 Private method to convert ReST text into HTML using 'docutils'.
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
451
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
452 @return processed HTML (string)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
453 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
454 if 'sphinx' in sys.modules:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
455 # Make sure any Sphinx polution of docutils has been removed.
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
456 unloadKeys = [k for k in sys.modules.keys()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
457 if k.startswith(('docutils', 'sphinx'))]
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
458 for key in unloadKeys:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
459 sys.modules.pop(key)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
460
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
461 try:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
462 import docutils.core # __IGNORE_EXCEPTION__
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
463 except ImportError:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
464 E5MessageBox.critical(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
465 self.editor,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
466 self.tr("Export source"),
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
467 self.tr(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
468 """<p>ReStructuredText export requires the"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
469 """ <b>python-docutils</b> package.<br/>Install it with"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
470 """ your package manager, 'pip install docutils' or see"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
471 """ <a href="http://pypi.python.org/pypi/docutils">"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
472 """this page.</a></p>""")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
473 )
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
474 return ""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
475
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
476 htmlFormat = Preferences.getEditor(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
477 "PreviewRestDocutilsHTMLFormat").lower()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
478 # redirect sys.stderr because we are not interested in it here
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
479 origStderr = sys.stderr
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
480 sys.stderr = io.StringIO()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
481 html = docutils.core.publish_string(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
482 self.editor.text(), writer_name=htmlFormat).decode("utf-8")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
483 sys.stderr = origStderr
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
484 return html
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
485
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
486 def __generateFromMarkdown(self):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
487 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
488 Private method to convert Markdown text into HTML.
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
489
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
490 @return processed HTML
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
491 @rtype str
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
492 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
493 try:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
494 import markdown # __IGNORE_EXCEPTION__
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
495 except ImportError:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
496 E5MessageBox.critical(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
497 self.editor,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
498 self.tr("Export source"),
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
499 self.tr(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
500 """<p>Markdown export requires the <b>python-markdown"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
501 """</b> package.<br/>Install it with your package"""
5861
26250d8ff4e4 Fixed some typos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5837
diff changeset
502 """ manager, 'pip install docutils' or see """
5837
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
503 """<a href="http://pythonhosted.org/Markdown/install"""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
504 """.html"> installation instructions.</a></p>""")
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
505 )
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
506 return ""
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
507
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
508 try:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
509 import mdx_mathjax # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
510 except ImportError:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
511 # mathjax doesn't require import statement if installed as
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
512 # extension
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
513 pass
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
514
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
515 if Preferences.getEditor("PreviewMarkdownNLtoBR"):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
516 extensions = ['fenced_code', 'nl2br', 'extra']
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
517 else:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
518 extensions = ['fenced_code', 'extra']
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
519
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
520 # version 2.0 supports only extension names, not instances
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
521 if markdown.version_info[0] > 2 or \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
522 (markdown.version_info[0] == 2 and
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
523 markdown.version_info[1] > 0):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
524 class _StrikeThroughExtension(markdown.Extension):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
525 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
526 Class is placed here, because it depends on imported markdown,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
527 and markdown import is lazy.
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
528
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
529 (see http://achinghead.com/
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
530 python-markdown-adding-insert-delete.html this page for
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
531 details)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
532 """
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
533 DEL_RE = r'(~~)(.*?)~~'
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
534
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
535 def extendMarkdown(self, md, md_globals):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
536 # Create the del pattern
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
537 del_tag = markdown.inlinepatterns.SimpleTagPattern(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
538 self.DEL_RE, 'del')
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
539 # Insert del pattern into markdown parser
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
540 md.inlinePatterns.add('del', del_tag, '>not_strong')
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
541
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
542 extensions.append(_StrikeThroughExtension())
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
543
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
544 htmlFormat = Preferences.getEditor("PreviewMarkdownHTMLFormat").lower()
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
545 try:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
546 body = markdown.markdown(self.editor.text(),
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
547 extensions=extensions + ['mathjax'],
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
548 output_format=htmlFormat)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
549 except (ImportError, ValueError):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
550 # markdown raises ValueError or ImportError, depends on version
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
551 # It is not clear, how to distinguish missing mathjax from other
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
552 # errors. So keep going without mathjax.
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
553 body = markdown.markdown(self.editor.text(),
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
554 extensions=extensions,
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
555 output_format=htmlFormat)
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
556
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
557 if htmlFormat == "xhtml1":
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
558 head = \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
559 '''<!DOCTYPE html PUBLIC "-//W3C//DTD''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
560 ''' XHTML 1.0 Transitional//EN"\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
561 ''' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
562 '''.dtd">\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
563 '''<html xmlns="http://www.w3.org/1999/xhtml">\n'''
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
564 elif htmlFormat == "html5":
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
565 head = \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
566 '''<!DOCTYPE html>\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
567 '''<html lang="EN">\n'''
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
568 else:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
569 head = '<html lang="EN">\n'
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
570 head += '''<head>\n'''
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
571 if Preferences.getEditorExporter("HTML/FullPathAsTitle"):
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
572 head += '''<title>{0}</title>\n'''.format(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
573 self.editor.getFileName())
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
574 else:
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
575 head += '''<title>{0}</title>\n'''.format(
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
576 os.path.basename(self.editor.getFileName()))
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
577 head += '''<meta name="Generator" content="eric6" />\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
578 '''<meta http-equiv="Content-Type" ''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
579 '''content="text/html; charset=utf-8" />\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
580 '''</head>\n''' \
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
581 '''<body>\n'''
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
582
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
583 foot = '''\n</body>\n</html>\n'''
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
584
9ef6a28f1694 - Exporter
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
585 return head + body + foot

eric ide

mercurial