From 0e62745995763c4493ac1f5053b1076e29124634 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 2 Sep 2015 14:29:06 +0200 Subject: [PATCH] Fix parsing of class and category declaration line in layout files * Omit commented-out lines * Properly escape backslash * Do not allow non-space chars after delaration * Allow blanks before # comment character Fixes: #9746 --- lib/configure.py | 8 ++++---- src/LayoutFile.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/configure.py b/lib/configure.py index 91f5593169..db947b81e3 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -1163,8 +1163,8 @@ def processLayoutFile(file, bool_docbook): return x.strip() classname = file.split(os.sep)[-1].split('.')[0] # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article} - p = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - q = re.compile(r'\DeclareCategory{(.*)}') + p = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + q = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') classdeclaration = "" categorydeclaration = '""' for line in open(file).readlines(): @@ -1259,8 +1259,8 @@ def checkLatexConfig(check_config, bool_docbook): # Construct the list of classes to test for. # build the list of available layout files and convert it to commands # for chkconfig.ltx - declare = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - category = re.compile(r'\DeclareCategory{(.*)}') + declare = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + category = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') empty = re.compile(r'^\s*$') testclasses = list() for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ diff --git a/src/LayoutFile.cpp b/src/LayoutFile.cpp index d0fc248ee9..8cca663c4b 100644 --- a/src/LayoutFile.cpp +++ b/src/LayoutFile.cpp @@ -301,9 +301,9 @@ LayoutFileIndex LayoutFileList::addLocalLayout( // which uses the following regex // \Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)} ifstream ifs(layout_file.toFilesystemEncoding().c_str()); - static regex const reg("^#\\s*\\\\Declare(LaTeX|DocBook)Class\\s*" + static regex const reg("^\\s*#\\s*\\\\Declare(LaTeX|DocBook)Class\\s*" "(?:\\[([^,]*)(?:,.*)*\\])*\\s*\\{(.*)\\}\\s*"); - static regex const catreg("^#\\s*\\\\DeclareCategory\\{(.*)\\}"); + static regex const catreg("^\\s*#\\s*\\\\DeclareCategory\\{(.*)\\}\\s*"); string line; string class_name; string class_prereq; -- 2.39.2