Merge pull request #175 from prculley/bug7565
bug 7565 and 9521; missing newline in table and illegal RTF
This commit is contained in:
commit
d13d2e70f7
@ -185,43 +185,53 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
# build paragraph information
|
# build paragraph information
|
||||||
|
|
||||||
if not self.in_table:
|
if not self.in_table:
|
||||||
self.file.write('\\pard')
|
para_type = '\n\\pard'
|
||||||
|
else:
|
||||||
|
para_type = '\n\\pard\\intbl'
|
||||||
if para.get_alignment() == PARA_ALIGN_RIGHT:
|
if para.get_alignment() == PARA_ALIGN_RIGHT:
|
||||||
self.file.write('\\qr')
|
para_type += '\\qr'
|
||||||
elif para.get_alignment() == PARA_ALIGN_CENTER:
|
elif para.get_alignment() == PARA_ALIGN_CENTER:
|
||||||
self.file.write('\\qc')
|
para_type += '\\qc'
|
||||||
self.file.write(
|
para_type += \
|
||||||
'\\ri%d' % twips(para.get_right_margin()) +
|
'\\ri%d' % twips(para.get_right_margin()) + \
|
||||||
'\\li%d' % twips(para.get_left_margin()) +
|
'\\li%d' % twips(para.get_left_margin()) + \
|
||||||
'\\fi%d' % twips(para.get_first_indent())
|
'\\fi%d' % twips(para.get_first_indent())
|
||||||
)
|
|
||||||
if para.get_alignment() == PARA_ALIGN_JUSTIFY:
|
if para.get_alignment() == PARA_ALIGN_JUSTIFY:
|
||||||
self.file.write('\\qj')
|
para_type += '\\qj'
|
||||||
if para.get_padding():
|
if para.get_padding():
|
||||||
self.file.write('\\sa%d' % twips(para.get_padding()/2.0))
|
para_type += '\\sa%d' % twips(para.get_padding()/2.0)
|
||||||
if para.get_top_border():
|
if para.get_top_border():
|
||||||
self.file.write('\\brdrt\\brdrs')
|
para_type += '\\brdrt\\brdrs'
|
||||||
if para.get_bottom_border():
|
if para.get_bottom_border():
|
||||||
self.file.write('\\brdrb\\brdrs')
|
para_type += '\\brdrb\\brdrs'
|
||||||
if para.get_left_border():
|
if para.get_left_border():
|
||||||
self.file.write('\\brdrl\\brdrs')
|
para_type += '\\brdrl\\brdrs'
|
||||||
if para.get_right_border():
|
if para.get_right_border():
|
||||||
self.file.write('\\brdrr\\brdrs')
|
para_type += '\\brdrr\\brdrs'
|
||||||
if para.get_first_indent():
|
if para.get_first_indent():
|
||||||
self.file.write('\\fi%d' % twips(para.get_first_indent()))
|
para_type += '\\fi%d' % twips(para.get_first_indent())
|
||||||
if para.get_left_margin():
|
if para.get_left_margin():
|
||||||
self.file.write('\\li%d' % twips(para.get_left_margin()))
|
para_type += '\\li%d' % twips(para.get_left_margin())
|
||||||
if para.get_right_margin():
|
if para.get_right_margin():
|
||||||
self.file.write('\\ri%d' % twips(para.get_right_margin()))
|
para_type += '\\ri%d' % twips(para.get_right_margin())
|
||||||
|
|
||||||
|
# the deferred newline while in table cell
|
||||||
|
if self.in_table and self.need_nl:
|
||||||
|
self.text += '\n\\line}'
|
||||||
|
self.need_nl = False
|
||||||
|
|
||||||
|
self.text += para_type
|
||||||
|
|
||||||
if leader:
|
if leader:
|
||||||
self.opened = 1
|
self.opened = 1
|
||||||
self.file.write('\\tx%d' % twips(para.get_left_margin()))
|
self.text += '\\tx%d' % twips(para.get_left_margin())
|
||||||
self.file.write('{%s ' % self.font_type)
|
self.text += '{%s ' % self.font_type
|
||||||
self.write_text(leader)
|
self.text += leader
|
||||||
self.file.write(self.text)
|
# self.write_text(leader)
|
||||||
self.text = ""
|
# self.file.write(self.text)
|
||||||
self.file.write('\\tab}')
|
# self.text = ""
|
||||||
|
self.text += '\\tab}'
|
||||||
self.opened = 0
|
self.opened = 0
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
@ -233,13 +243,9 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
#
|
#
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
def end_paragraph(self):
|
def end_paragraph(self):
|
||||||
# FIXME: I don't understand why no end paragraph marker is output when
|
# To deal with newlines in the table cell, we defer them till the
|
||||||
# we are inside a table. Since at least version 3.2.2, this seems to
|
# beginning of the next paragraph. This is so that we don't get
|
||||||
# mean that there is no new paragraph after the first line of a table
|
# an excessive space at the end of a table.
|
||||||
# entry.
|
|
||||||
# For example in the birth cell, the first paragraph should be the
|
|
||||||
# description (21 Jan 1900 in London); if there is a note following
|
|
||||||
# this, there is no newline between the description and the note.
|
|
||||||
if not self.in_table:
|
if not self.in_table:
|
||||||
self.file.write(self.text)
|
self.file.write(self.text)
|
||||||
LOG.debug("end_paragraph: opened: %d write: %s",
|
LOG.debug("end_paragraph: opened: %d write: %s",
|
||||||
@ -253,7 +259,7 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
else:
|
else:
|
||||||
if self.text == "":
|
if self.text == "":
|
||||||
self.write_text(" ")
|
self.write_text(" ")
|
||||||
self.text += '}'
|
self.need_nl = True
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -330,6 +336,7 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
self.cell = 0
|
self.cell = 0
|
||||||
self.prev = 0
|
self.prev = 0
|
||||||
self.cell_percent = 0.0
|
self.cell_percent = 0.0
|
||||||
|
self.text = ""
|
||||||
self.file.write('\\trowd\n')
|
self.file.write('\\trowd\n')
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
@ -343,7 +350,7 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
for line in self.contents:
|
for line in self.contents:
|
||||||
self.file.write(line)
|
self.file.write(line)
|
||||||
self.file.write('\\cell ')
|
self.file.write('\\cell ')
|
||||||
self.file.write('}\\pard\\intbl\\row\n')
|
self.file.write('}\\row\n')
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -370,7 +377,8 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
for cell in range(self.cell, self.cell+span):
|
for cell in range(self.cell, self.cell+span):
|
||||||
self.cell_percent += float(self.tbl_style.get_column_width(cell))
|
self.cell_percent += float(self.tbl_style.get_column_width(cell))
|
||||||
cell_width = twips((table_width * self.cell_percent)/100.0)
|
cell_width = twips((table_width * self.cell_percent)/100.0)
|
||||||
self.file.write('\\cellx%d\\pard\intbl\n' % cell_width)
|
self.need_nl = False
|
||||||
|
self.file.write('\\cellx%d\n' % cell_width)
|
||||||
self.cell += 1
|
self.cell += 1
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
@ -380,6 +388,9 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
#
|
#
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
def end_cell(self):
|
def end_cell(self):
|
||||||
|
if self.opened == 1: # We defered paragraph end and now need it.
|
||||||
|
self.text += '}'
|
||||||
|
self.opened = 0
|
||||||
self.contents.append(self.text)
|
self.contents.append(self.text)
|
||||||
self.text = ""
|
self.text = ""
|
||||||
|
|
||||||
@ -410,15 +421,26 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
act_width = size[0]
|
act_width = size[0]
|
||||||
act_height = size[1]
|
act_height = size[1]
|
||||||
|
|
||||||
self.file.write('{\*\shppict{\\pict\\jpegblip')
|
if self.in_table:
|
||||||
self.file.write('\\picwgoal%d\\pichgoal%d\n' % (act_width, act_height))
|
self.text += '{\*\shppict{\\pict\\jpegblip'
|
||||||
index = 1
|
self.text += '\\picwgoal%d\\pichgoal%d\n' % (act_width, act_height)
|
||||||
for i in buf:
|
index = 1
|
||||||
self.file.write('%02x' % i)
|
for i in buf:
|
||||||
if index%32 == 0:
|
self.text += '%02x' % i
|
||||||
self.file.write('\n')
|
if index % 32 == 0:
|
||||||
index = index+1
|
self.text += '\n'
|
||||||
self.file.write('}}\\par\n')
|
index = index+1
|
||||||
|
self.text += '}}\\par\n'
|
||||||
|
else:
|
||||||
|
self.file.write('{\*\shppict{\\pict\\jpegblip')
|
||||||
|
self.file.write('\\picwgoal%d\\pichgoal%d\n' % (act_width, act_height))
|
||||||
|
index = 1
|
||||||
|
for i in buf:
|
||||||
|
self.file.write('%02x' % i)
|
||||||
|
if index % 32 == 0:
|
||||||
|
self.file.write('\n')
|
||||||
|
index = index+1
|
||||||
|
self.file.write('}}\\par\n')
|
||||||
|
|
||||||
if len(alt):
|
if len(alt):
|
||||||
self.file.write('%s\n\\par\n' % '\\par'.join(alt))
|
self.file.write('%s\n\\par\n' % '\\par'.join(alt))
|
||||||
@ -450,7 +472,7 @@ class RTFDoc(BaseDoc, TextDoc):
|
|||||||
linenb = 1
|
linenb = 1
|
||||||
else:
|
else:
|
||||||
if linenb > 1:
|
if linenb > 1:
|
||||||
self.write_text('\\line ')
|
self.write_text('\n')
|
||||||
self.write_text(line, links=links)
|
self.write_text(line, links=links)
|
||||||
linenb += 1
|
linenb += 1
|
||||||
# FIXME: I don't understand why these newlines are necessary.
|
# FIXME: I don't understand why these newlines are necessary.
|
||||||
|
Loading…
Reference in New Issue
Block a user