On Wednesday 30 July 2003 18:55, Angus Leeming wrote: ... Ok, I admire your coding style. And since this will be the best documented function for lyx2lxy I filled the details. ;-)
The following patch should work. I tested it only with your example but it should work. -- José Abílio LyX and docbook, a perfect match. :-)
Index: lyxconvert_224.py =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/lib/lyx2lyx/lyxconvert_224.py,v retrieving revision 1.4 diff -u -p -r1.4 lyxconvert_224.py --- lyxconvert_224.py 28 Jul 2003 22:30:48 -0000 1.4 +++ lyxconvert_224.py 30 Jul 2003 18:52:04 -0000 @@ -17,7 +17,8 @@ from parser_tools import find_token, find_tokens from sys import stderr -from string import replace, split +from string import replace, split, strip +import re def add_end_layout(lines): i = find_token(lines, '\\layout', 0) @@ -84,11 +85,77 @@ def end_document(lines): lines.append("\\end_document") return lines[i] = "\\end_document" - + +def convert_bibtex(lines): + bibtex_header = "\\begin_inset LatexCommand \\bibtex" + i = 0 + while 1: + i = find_token(lines, bibtex_header, i) + if i == -1: + break + # We've found a bibtex inset. + # I'd like to strip bibtex_header from the front of lines[i] + lines[i] = replace(lines[i], bibtex_header, "") + + #trim any space at extremes + lines[i] = strip(lines[i]) + + # Does the thing have an opt arg? + optarg_rexp = re.compile(r'\[([^]]*)\].*') + optarg = optarg_rexp.search(lines[i]) + optarg_contents = '' + if optarg: + optarg_contents = optarg.group(1) + # strip [<optarg_contents>] from the front of lines[i] + lines[i] = replace (lines[i], '[' + optarg.group(0) + ']', '') + + # lines[i] should now contain "{<list of databases>}" + mainarg_rexp = re.compile(r'{([^}]*)}') + mainarg = mainarg_rexp.search(lines[i]) + mainarg_contents = '' + if mainarg: + mainarg_contents = mainarg.group(1) + else: + # complain about a mal-formed lyx file. + stderr.write("Bad formed bibitem\n") + + # optarg will contain either + # "bibtotoc,<style>" + # or + # "<style>" + # so those are a comma-separated list of arguments. + optarg_list = split( optarg_contents, ',') + if len(optarg_list) == 0: + bibtoc, style = '','' + elif len(optarg_list) == 1: + bibtoc, style = '',optarg_list[0] + else: + bibtoc, style = optarg_list[:2] + + # mainarg will contain a comma-separated list of files. + mainarg_list = split( mainarg_contents, ',') + + new_syntax = ['\\begin_inset Bibtex'] + for file in mainarg_list: + new_syntax.append('\t' + 'filename ' + file) + + if style: + new_syntax.append('\t' + 'style ' + style) + + if bibtoc == 'true': + new_syntax.append('\t' + 'bibtoc ' + bibtoc) + + #replace old with new syntax + lines[i:i+1] = new_syntax + + i = i + len(new_syntax) + 1 + + def convert(header, body): add_end_layout(body) layout2begin_layout(body) end_document(body) + convert_bibtex(body) if __name__ == "__main__": pass