lines.insert(i, '<Features rotate="%s" islongtable="%s" endhead="%s" endfirsthead="%s" endfoot="%s" endlastfoot="%s">' % (head[2],head[3],head[4],head[5],head[6],head[7]))
i = i +1
-
+
row_info = []
+ cont_row = []
for j in range(rows):
row_info.append(string.split(lines[i]))
+ if string.split(lines[i])[2] == '1':
+ cont_row.append(j)
del lines[i]
+
column_info = []
+ col_info_re = re.compile(r'(\d) (\d) (\d) (".*") (".*")')
for j in range(columns):
- column_info.append(string.split(lines[i]))
+ column_info.append(col_info_re.match(lines[i]).groups())
del lines[i]
cell_info = []
+ cell_col = []
ncells = 0
- cont_row = []
+ cell_re = re.compile(r'(\d) (\d) (\d) (\d) (\d) (\d) (\d) (".*") (".*")')
for j in range(rows):
- c_row = 0
for k in range(columns):
- cell_info.append(string.split(lines[i]))
- if cell_info[len(cell_info)-1][6] == '1':
- c_row = 1
+ #add column location to read properties
+ cell_info.append(cell_re.match(lines[i]).groups())
+ cell_col.append(k)
if lines[i][0] != "2":
ncells = ncells + 1
del lines[i]
- if c_row:
- cont_row.append(j+1)
lines[tabular_line] = '<LyXTabular version="1" rows="%s" columns="%s">' % (rows-len(cont_row),columns)
del lines[i]
if not lines[i]:
del lines[i]
-
+
+ # Read cells
+ l = 0
+ cell_content = []
+ for j in range(rows):
+ cell_content.append([])
+
+ for j in range(rows):
+ for k in range(columns):
+ cell_content[j].append([])
+
+ for j in range(rows):
+ for k in range(columns):
+ m = j*columns + k
+ if cell_info[m][0] == '2':
+ continue
+
+ if l == ncells -1:
+ # the end variable refers to cell end, not to file end.
+ end = find_tokens(lines, ['\\layout','\\the_end','\\end_deeper','\\end_float'], i)
+ else:
+ end = find_token(lines, '\\newline', i)
+
+ if end == -1:
+ sys.stderr.write("Malformed lyx file\n")
+ sys.exit(1)
+
+ end = end - i
+ while end > 0:
+ cell_content[j][k].append(lines[i])
+ del lines[i]
+ end = end -1
+
+ if string.find(lines[i],'\\newline') != -1:
+ del lines[i]
+ l = l + 1
+
tmp = []
tmp.append("")
- l = 0
for j in range(rows):
- tmp.append('<Row topline="%s" bottomline="%s" newpage="%s">' % (row_info[j][0],row_info[j][1],row_info[j][2]))
+ if j in cont_row:
+ continue
+ tmp.append('<Row topline="%s" bottomline="%s" newpage="%s">' % (row_info[j][0],row_info[j][1],row_info[j][3]))
for k in range(columns):
if j:
n = m + 1
while n < rows * columns - 1 and cell_info[n][0] == '2':
n = n + 1
- rightline = int(column_info[k][2])
+ rightline = int(column_info[cell_col[n-1]][2])
else:
# not a multicolumn main cell
- # rightline = int(cell_info[m][5]) or int(column_info[k][2])
rightline = int(column_info[k][2])
tmp.append('<Cell multicolumn="%s" alignment="%s" valignment="0" topline="%s" bottomline="%s" leftline="%d" rightline="%d" rotate="%s" usebox="%s" width=%s special=%s>' % (cell_info[m][0],cell_info[m][1],cell_info[m][2],cell_info[m][3],leftline,rightline,cell_info[m][5],cell_info[m][6],cell_info[m][7],cell_info[m][8]))
tmp.append('\\layout Standard')
tmp.append('')
- if cell_info[m][0] == '2':
- tmp.append('\\end_inset ')
- tmp.append('</Cell>')
- tmp.append('</Column>')
- continue
-
- if l == ncells -1:
- end = find_tokens(lines, ['\\layout','\\the_end','\\end_deeper','\\end_float'], i)
- if end == -1:
- sys.stderr.write("Malformed lyx file\n")
- else:
- end = end - i
- paragraph = []
- while end > 0:
- paragraph.append(lines[i])
- del lines[i]
- end = end -1
- tmp.extend(set_paragraph_properties(paragraph, prop_dict))
- else:
+ if cell_info[m][0] != '2':
paragraph = []
- while lines[i] != '\\newline ':
- paragraph.append(lines[i])
- del lines[i]
- del lines[i]
- tmp.extend(set_paragraph_properties(paragraph, prop_dict))
-
+ if cell_info[m][4] == '1':
+ l = j
+ paragraph = paragraph + cell_content[j][k]
+ while cell_info[m][4] == '1':
+ m = m + columns
+ l = l + 1
+ paragraph = paragraph + cell_content[l][k]
+ else:
+ paragraph = cell_content[j][k]
+ tmp = tmp + set_paragraph_properties(paragraph, prop_dict)
+
tmp.append('\\end_inset ')
tmp.append('</Cell>')
tmp.append('</Column>')
- l = l + 1
tmp.append('</Row>')
tmp.append('</LyXTabular>')
tmp.append('\\end_inset ')
tmp.append('')
tmp.append('')
- tail = lines[i:]
- lines[i:] = []
- lines.extend(tmp)
- lines.extend(tail)
+ lines[i:i] = tmp
i = i + len(tmp)
# remove final char properties
n = len(lines)
+ changed_prop = []
+
while n:
n = n - 1
if not lines[n]:
result = prop_exp.match(lines[n])
prop = result.group(1)
if prop in properties:
+ changed_prop.append(prop)
prop_dict[prop] = result.group(2)
del lines[n]
continue
lines.append('')
break
- #debug_list('*' * 10 + ' begin ' + '*' * 10, lines[start:])
+ for line in lines[end:]:
+ if line[:1] == '\\':
+ result = prop_exp.match(line)
+ prop = result.group(1)
+ if prop in properties and prop not in changed_prop:
+ prop_dict[prop] = result.group(2)
+
if not lines[start:] and not lines[end:]:
return []
-
+
result = lines[:start] + aux[:] + lines[end:]
if insert and result[0] != '':
return [''] + result[:]
return result[:]
-def debug_list(title, list):
- sys.stderr.write(title+'\n')
- for line in list:
- sys.stderr.write(line+'\n')
-
def update_language(header):
i = find_token(header, "\\language", 0)
if i == -1:
# no language, should emit a warning
header.append('\\language english')
return
- # FIXME: find the document default language in user preferences
- header[i] = '\\language english'
+ # This is the lyx behaviour: defaults to english
+ if string.split(header[i])[1] == 'default':
+ header[i] = '\\language english'
return
def convert(header,body):
- sys.stderr.write("%d\n" % len(body))
update_tabular(body)
- sys.stderr.write("%d\n" % len(body))
update_language(header)
if __name__ == "__main__":