+ testpackages.append("\\TestPackage{%s}" % pkg)
+ cm = open('chkmodules.tex', 'a', encoding='utf8')
+ for line in testpackages:
+ cm.write(line + '\n')
+ cm.close()
+
+ local = "true"
+ if (file.startswith(srcdir)):
+ local = "false"
+ return ('"%s" "%s" "%s" "%s" "%s" "%s" "%s" "%s"\n'
+ % (modname, filename, desc, pkgs, req, excl, catgy, local))
+
+
+def checkCiteEnginesConfig():
+ removeFiles(['lyxciteengines.lst', 'chkciteengines.tex'])
+
+ logger.info('+checking list of cite engines... ')
+ tx = open('lyxciteengines.lst', 'w', encoding='utf8')
+ tx.write('''## This file declares cite engines and their associated definition files.
+## It has been automatically generated by configure
+## Use "Options/Reconfigure" if you need to update it after a
+## configuration change.
+## "CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
+''')
+
+ # build the list of available modules
+ seen = []
+ # note that this searches the local directory first, then the
+ # system directory. that way, we pick up the user's version first.
+ for file in glob.glob( os.path.join('citeengines', '*.citeengine') ) + \
+ glob.glob( os.path.join(srcdir, 'citeengines', '*.citeengine' ) ) :
+ # valid file?
+ logger.info(file)
+ if not os.path.isfile(file):
+ continue
+
+ filename = file.split(os.sep)[-1]
+ filename = filename[:-11]
+ if seen.count(filename):
+ continue
+
+ seen.append(filename)
+ retval = processCiteEngineFile(file, filename, bool_docbook)
+ if retval:
+ tx.write(retval)
+ tx.close()
+ logger.info('\tdone')
+
+
+def processCiteEngineFile(file, filename, bool_docbook):
+ ''' process cite engines file and get a line of result
+
+ The top of a cite engine file should look like this:
+ #\DeclareLyXCiteEngine[LaTeX Packages]{CiteEngineName}
+ #DescriptionBegin
+ #...body of description...
+ #DescriptionEnd
+ We expect output:
+ "CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
+ '''
+ remods = re.compile('\s*#\s*\\\\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}')
+ redbeg = re.compile('\s*#+\s*DescriptionBegin\s*$')
+ redend = re.compile('\s*#+\s*DescriptionEnd\s*$')
+ recet = re.compile('\s*CiteEngineType\s*(.*)')
+ redb = re.compile('\s*DefaultBiblio\s*(.*)')
+ resfm = re.compile('\s*CiteFramework\s*(.*)')
+
+ modname = desc = pkgs = cet = db = cfm = ""
+ readingDescription = False
+ descLines = []
+
+ for line in open(file, 'r', encoding='utf8').readlines():
+ if readingDescription:
+ res = redend.match(line)
+ if res != None:
+ readingDescription = False
+ desc = " ".join(descLines)
+ # Escape quotes.
+ desc = desc.replace('"', '\\"')
+ continue
+ descLines.append(line[1:].strip())
+ continue
+ res = redbeg.match(line)
+ if res != None:
+ readingDescription = True
+ continue
+ res = remods.match(line)
+ if res != None:
+ (pkgs, modname) = res.groups()
+ if pkgs == None:
+ pkgs = ""
+ else:
+ tmp = [s.strip() for s in pkgs.split(",")]
+ pkgs = ",".join(tmp)
+ continue
+ res = recet.match(line)
+ if res != None:
+ cet = res.group(1)
+ continue
+ res = redb.match(line)
+ if res != None:
+ db = res.group(1)
+ continue
+ res = resfm.match(line)
+ if res != None:
+ cfm = res.group(1)
+ continue
+
+ if modname == "":
+ logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ")
+ return ""
+
+ if pkgs:
+ # this cite engine has some latex dependencies:
+ # append the dependencies to chkciteengines.tex,
+ # which is \input'ed by chkconfig.ltx
+ testpackages = list()
+ for pkg in pkgs.split(","):
+ if "->" in pkg:
+ # this is a converter dependency: skip
+ continue
+ if pkg.endswith(".sty"):
+ pkg = pkg[:-4]
+ testpackages.append("\\TestPackage{%s}" % pkg)
+ cm = open('chkciteengines.tex', 'a', encoding='utf8')