From 457c568dbdd314b4d664f8304371f24717f3108a Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Thu, 13 Feb 2020 08:13:22 +0100 Subject: [PATCH] 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 c115ac15aa..602e090af5 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 147b17bad7..7b202f9da9 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). +