[LyX/master] Handle encoding error in layout file parsing more gracefully

Juergen Spitzmueller spitz at lyx.org
Thu Feb 13 06:56:27 UTC 2020


commit c4da8d38c9d235c6da85c554c391ad4a5b6d958e
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Thu Feb 13 08:13:22 2020 +0100

    Handle encoding error in layout file parsing more gracefully
    
    Issue a warning about non-decodable files, but do not break
    completely.
    
    Addresses #11736
---
 lib/configure.py |   43 ++++++++++++++++++++++++++-----------------
 1 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/lib/configure.py b/lib/configure.py
index 9b2fceb..83e2ce7 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -1402,25 +1402,34 @@ def checkLatexConfig(check_config, bool_docbook):
         classname = file.split(os.sep)[-1].split('.')[0]
         decline = ""
         catline = ""
-        for line in open(file, 'r', encoding='utf8').readlines():
-            if not empty.match(line) and line[0] != '#'[0]:
-                if decline == "":
-                    logger.warning("Failed to find valid \Declare line "
-                        "for layout file `%s'.\n\t=> Skipping this file!" % file)
-                    nodeclaration = True
-                # A class, but no category declaration. Just break.
+        try:
+            for line in open(file, 'r', encoding='utf8').readlines():
+                if not empty.match(line) and line[0] != '#'[0]:
+                    if decline == "":
+                        logger.warning("Failed to find valid \Declare line "
+                            "for layout file `%s'.\n\t=> Skipping this file!" % file)
+                        nodeclaration = True
+                    # A class, but no category declaration. Just break.
+                    break
+                if declare.match(line) != None:
+                    decline = "\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())
+                    testclasses.append(decline)
+                elif category.match(line) != None:
+                    catline = ("\\DeclareCategory{%s}{%s}"
+                               % (classname, category.match(line).groups()[0]))
+                    testclasses.append(catline)
+                if catline == "" or decline == "":
+                    continue
                 break
-            if declare.match(line) != None:
-                decline = "\\TestDocClass{%s}{%s}" % (classname, line[1:].strip())
-                testclasses.append(decline)
-            elif category.match(line) != None:
-                catline = ("\\DeclareCategory{%s}{%s}"
-                           % (classname, category.match(line).groups()[0]))
-                testclasses.append(catline)
-            if catline == "" or decline == "":
+            if nodeclaration:
                 continue
-            break
-        if nodeclaration:
+        except UnicodeDecodeError:
+            logger.warning("**************************************************\n"
+                           "Layout file '%s'\n"
+                           "cannot be decoded in utf-8.\n"
+                           "Please check if the file has the correct encoding.\n"
+                           "Skipping this file!\n"
+                           "**************************************************" % file)
             continue
     testclasses.sort()
     cl = open('chklayouts.tex', 'w', encoding='utf8')


More information about the lyx-cvs mailing list