eric6/QScintilla/Exporters/ExporterTEX.py

changeset 7785
9978016560ec
parent 7781
607a6098cb44
child 7836
2f0d208b8137
--- a/eric6/QScintilla/Exporters/ExporterTEX.py	Tue Oct 13 19:02:26 2020 +0200
+++ b/eric6/QScintilla/Exporters/ExporterTEX.py	Wed Oct 14 17:50:39 2020 +0200
@@ -157,122 +157,124 @@
         
         try:
             with E5OverrideCursor():
-                f = open(filename, "w", encoding="utf-8")
-                
-                f.write("\\documentclass[a4paper]{article}\n")
-                f.write("\\usepackage[a4paper,margin=1.5cm]{geometry}\n")
-                f.write("\\usepackage[T1]{fontenc}\n")
-                f.write("\\usepackage{color}\n")
-                f.write("\\usepackage{alltt}\n")
-                f.write("\\usepackage{times}\n")
-                if self.editor.isUtf8():
-                    f.write("\\usepackage[utf8]{inputenc}\n")
-                else:
-                    f.write("\\usepackage[latin1]{inputenc}\n")
-                
-                if lex:
-                    istyle = 0
-                    while istyle <= QsciScintilla.STYLE_MAX:
-                        if (
-                            (istyle <= QsciScintilla.STYLE_DEFAULT or
-                             istyle > QsciScintilla.STYLE_LASTPREDEFINED) and
-                            styleIsUsed[istyle]
-                        ):
+                with open(filename, "w", encoding="utf-8") as f:
+                    
+                    f.write("\\documentclass[a4paper]{article}\n")
+                    f.write("\\usepackage[a4paper,margin=1.5cm]{geometry}\n")
+                    f.write("\\usepackage[T1]{fontenc}\n")
+                    f.write("\\usepackage{color}\n")
+                    f.write("\\usepackage{alltt}\n")
+                    f.write("\\usepackage{times}\n")
+                    if self.editor.isUtf8():
+                        f.write("\\usepackage[utf8]{inputenc}\n")
+                    else:
+                        f.write("\\usepackage[latin1]{inputenc}\n")
+                    
+                    if lex:
+                        istyle = 0
+                        while istyle <= QsciScintilla.STYLE_MAX:
                             if (
-                                lex.description(istyle) or
-                                istyle == QsciScintilla.STYLE_DEFAULT
+                                (istyle <= QsciScintilla.STYLE_DEFAULT or
+                                 istyle > QsciScintilla.STYLE_LASTPREDEFINED
+                                 ) and styleIsUsed[istyle]
                             ):
-                                font = lex.font(istyle)
-                                colour = lex.color(istyle)
-                                paper = lex.paper(istyle)
-                                
-                                self.__defineTexStyle(font, colour, paper, f,
-                                                      istyle)
-                        istyle += 1
-                else:
-                    colour = self.editor.color()
-                    paper = self.editor.paper()
-                    font = Preferences.getEditorOtherFonts("DefaultFont")
+                                if (
+                                    lex.description(istyle) or
+                                    istyle == QsciScintilla.STYLE_DEFAULT
+                                ):
+                                    font = lex.font(istyle)
+                                    colour = lex.color(istyle)
+                                    paper = lex.paper(istyle)
+                                    
+                                    self.__defineTexStyle(
+                                        font, colour, paper, f, istyle)
+                            istyle += 1
+                    else:
+                        colour = self.editor.color()
+                        paper = self.editor.paper()
+                        font = Preferences.getEditorOtherFonts("DefaultFont")
+                        
+                        self.__defineTexStyle(font, colour, paper, f, 0)
+                        self.__defineTexStyle(font, colour, paper, f,
+                                              QsciScintilla.STYLE_DEFAULT)
+                    
+                    f.write("\\begin{document}\n\n")
+                    if titleFullPath:
+                        title = self.editor.getFileName()
+                    else:
+                        title = os.path.basename(self.editor.getFileName())
+                    f.write(
+                        "Source File: {0}\n\n\\noindent\n\\tiny{{\n"
+                        .format(title))
+                    
+                    styleCurrent = self.editor.styleAt(0)
+                    f.write("\\eric{0}{{"
+                            .format(self.__texStyle(styleCurrent)))
                     
-                    self.__defineTexStyle(font, colour, paper, f, 0)
-                    self.__defineTexStyle(font, colour, paper, f,
-                                          QsciScintilla.STYLE_DEFAULT)
-                
-                f.write("\\begin{document}\n\n")
-                if titleFullPath:
-                    title = self.editor.getFileName()
-                else:
-                    title = os.path.basename(self.editor.getFileName())
-                f.write(
-                    "Source File: {0}\n\n\\noindent\n\\tiny{{\n".format(title))
-                
-                styleCurrent = self.editor.styleAt(0)
-                f.write("\\eric{0}{{".format(self.__texStyle(styleCurrent)))
-                
-                lineIdx = 0
-                pos = 0
-                utf8 = self.editor.isUtf8()
-                utf8Ch = b""
-                utf8Len = 0
-                
-                while pos < lengthDoc:
-                    ch = self.editor.byteAt(pos)
-                    style = self.editor.styleAt(pos)
-                    if style != styleCurrent:
-                        # new style
-                        f.write(
-                            "}}\n\\eric{0}{{".format(self.__texStyle(style)))
-                        styleCurrent = style
+                    lineIdx = 0
+                    pos = 0
+                    utf8 = self.editor.isUtf8()
+                    utf8Ch = b""
+                    utf8Len = 0
                     
-                    if ch == b'\t':
-                        ts = tabSize - (lineIdx % tabSize)
-                        lineIdx += ts - 1
-                        f.write("\\hspace*{{{0:d}em}}".format(ts))
-                    elif ch == b'\\':
-                        f.write("{\\textbackslash}")
-                    elif ch in [b'>', b'<', b'@']:
-                        f.write("${0}$".format(ch[0]))
-                    elif ch in [b'{', b'}', b'^', b'_', b'&', b'$', b'#',
-                                b'%', b'~']:
-                        f.write("\\{0}".format(ch[0]))
-                    elif ch in [b'\r', b'\n']:
-                        lineIdx = -1    # because incremented below
-                        if (
-                            ch == b'\r' and
-                            self.editor.byteAt(pos + 1) == b'\n'
-                        ):
-                            pos += 1    # skip the LF
-                        styleCurrent = self.editor.styleAt(pos + 1)
-                        f.write("}} \\\\\n\\eric{0}{{".format(
-                                self.__texStyle(styleCurrent)))
-                    elif ch == b' ':
-                        if self.editor.byteAt(pos + 1) == b' ':
-                            f.write("{\\hspace*{1em}}")
+                    while pos < lengthDoc:
+                        ch = self.editor.byteAt(pos)
+                        style = self.editor.styleAt(pos)
+                        if style != styleCurrent:
+                            # new style
+                            f.write(
+                                "}}\n\\eric{0}{{".format(
+                                    self.__texStyle(style)))
+                            styleCurrent = style
+                        
+                        if ch == b'\t':
+                            ts = tabSize - (lineIdx % tabSize)
+                            lineIdx += ts - 1
+                            f.write("\\hspace*{{{0:d}em}}".format(ts))
+                        elif ch == b'\\':
+                            f.write("{\\textbackslash}")
+                        elif ch in [b'>', b'<', b'@']:
+                            f.write("${0}$".format(ch[0]))
+                        elif ch in [b'{', b'}', b'^', b'_', b'&', b'$', b'#',
+                                    b'%', b'~']:
+                            f.write("\\{0}".format(ch[0]))
+                        elif ch in [b'\r', b'\n']:
+                            lineIdx = -1    # because incremented below
+                            if (
+                                ch == b'\r' and
+                                self.editor.byteAt(pos + 1) == b'\n'
+                            ):
+                                pos += 1    # skip the LF
+                            styleCurrent = self.editor.styleAt(pos + 1)
+                            f.write("}} \\\\\n\\eric{0}{{".format(
+                                    self.__texStyle(styleCurrent)))
+                        elif ch == b' ':
+                            if self.editor.byteAt(pos + 1) == b' ':
+                                f.write("{\\hspace*{1em}}")
+                            else:
+                                f.write(' ')
                         else:
-                            f.write(' ')
-                    else:
-                        if ord(ch) > 127 and utf8:
-                            utf8Ch += ch
-                            if utf8Len == 0:
-                                if (utf8Ch[0] & 0xF0) == 0xF0:
-                                    utf8Len = 4
-                                elif (utf8Ch[0] & 0xE0) == 0xE0:
-                                    utf8Len = 3
-                                elif (utf8Ch[0] & 0xC0) == 0xC0:
-                                    utf8Len = 2
-                            elif len(utf8Ch) == utf8Len:
-                                ch = utf8Ch.decode('utf8')
-                                f.write(ch)
-                                utf8Ch = b""
-                                utf8Len = 0
-                        else:
-                            f.write(ch.decode())
-                    lineIdx += 1
-                    pos += 1
-                
-                # close last empty style macros and document too
-                f.write("}\n} %end tiny\n\n\\end{document}\n")
-                f.close()
+                            if ord(ch) > 127 and utf8:
+                                utf8Ch += ch
+                                if utf8Len == 0:
+                                    if (utf8Ch[0] & 0xF0) == 0xF0:
+                                        utf8Len = 4
+                                    elif (utf8Ch[0] & 0xE0) == 0xE0:
+                                        utf8Len = 3
+                                    elif (utf8Ch[0] & 0xC0) == 0xC0:
+                                        utf8Len = 2
+                                elif len(utf8Ch) == utf8Len:
+                                    ch = utf8Ch.decode('utf8')
+                                    f.write(ch)
+                                    utf8Ch = b""
+                                    utf8Len = 0
+                            else:
+                                f.write(ch.decode())
+                        lineIdx += 1
+                        pos += 1
+                    
+                    # close last empty style macros and document too
+                    f.write("}\n} %end tiny\n\n\\end{document}\n")
         except IOError as err:
             E5MessageBox.critical(
                 self.editor,

eric ide

mercurial