[LyX/2.3.x] Handle encoding error in layout file parsing more gracefully

Juergen Spitzmueller spitz at lyx.org
Fri Feb 14 06:47:28 UTC 2020


commit 457c568dbdd314b4d664f8304371f24717f3108a
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
    
    (cherry picked from commit c4da8d38c9d235c6da85c554c391ad4a5b6d958e)
---
 lib/configure.py |   43 ++++++++++++++++++++++++++-----------------
 status.23x       |    6 ++++--
 2 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/lib/configure.py b/lib/configure.py
index c115ac1..602e090 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -1417,25 +1417,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')
diff --git a/status.23x b/status.23x
index 147b17b..7b202f9 100644
--- a/status.23x
+++ b/status.23x
@@ -53,6 +53,7 @@ What's new
 
 - Correctly strike out deleted text after deleted display math (bug 11716).
 
+
 * USER INTERFACE
 
 - Fix backspace deletion of selected items with change tracking (bug 11630).
@@ -84,11 +85,12 @@ What's new
 
 
 
-
 * ADVANCED FIND AND REPLACE
 
 
 
-
 * BUILD/INSTALLATION
 
+- Do not break configuration if a layout file is not decodable. Rather than that, 
+  issue a warning and skip that file (bug 11736).
+


More information about the lyx-cvs mailing list