Inserting the 0x02 placeholder as the first entry in the line
interferes with the aesthetic tab code. lcl_text
has code to ignore that placeholder, but lcl_utext
doesn't. Ignoring at lcl_utext has the same affect as
not processing it at all. Only .docx adds 0x02, so
it should be fairly safe to avoid the 0x02 completely.
Nothing was detected missing by skipping the placeholder.
All of the code was inherited from OOo.
Change-Id: Ie8840e5946fec89f270fef5523c88ee5051ca8ef
Reviewed-on: https://gerrit.libreoffice.org/51912
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
This anchored object handling is just there to be bug-compatible with
Word, it's not needed for the case when there is a single shape in the
paragraph.
Change-Id: I5e3dc4ba9a4a6f459ec6217e8974ebc2d7303bcc
Reviewed-on: https://gerrit.libreoffice.org/51922
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Tabs are inserted when LO exports to MS formats in an attempt to
emulate its "magical" spacing which uses the paragraph margin.
By default, the Footnote paragraph style has a paragraph margin of
0.60cm. A hanging indent places the footnote character before the
margin, and thus a tab advances to the margin. So the emulation
works well.
The previous comment was misleading because it suggests that this
was a Microsoft convention, but actually this is an OOo innovation.
Change-Id: Ie8708998457bcb3363bbc760086cf2b41d3eb104
Reviewed-on: https://gerrit.libreoffice.org/51753
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
This is the same mechanism that was added in commit
1be0a3fa9e (n#825305: writerfilter RTF
import: override style properties like Word, 2014-06-17), except that
here the reference is a list definition, not a paragraph style.
Also, this commit only implements the part that inserts explicit
defaults for not repeated properties, not the actual deduplication, as
that already works at a dmapper level.
(Saving the bugdoc as DOCX, it's visible in document.xml that DOCX marks
these defaults explicitly:
<w:ind w:left="0" w:right="-6" w:firstLine="0"/>
but RTF does not, so the right place to fix this is in the tokenizer.)
Change-Id: Iec88d9bf1032d1d89194bd272500d6780c3c2224
Reviewed-on: https://gerrit.libreoffice.org/51589
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Since commit fe6da2feb5, "auto" color is
supported in OOXML import.
Since ODF doesn't support "auto" color as border color, just convert
"auto" border color to black on import, like is done in GetLineIndex
in ww8par6.cxx.
Incidentally, this also fixes a problem in RTF import, where we used to
import black borders ("\red0\green0\blue0;" entries in color table) as
0x000001 ("\red0\green0\blue1;") - see fixed tests in rtfexport2.cxx.
Change-Id: I4f5e720d215b51c8a43dc7c58f338741bd608efc
Reviewed-on: https://gerrit.libreoffice.org/51519
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
DOCX part was done in fb959e581c.
This commit fixes DOC part. Line width wasn't taken into account on
import; and export was done only with "from text" distance, which
gave poor interoperability with Word, where the borders were close
to page edge.
The common code is moved to editeng/source/items/frmitems.cxx and
include/editeng/boxitem.hxx.
Change-Id: I3d1d1312cb9dc9a9e00d9847ec11234cd787df60
Reviewed-on: https://gerrit.libreoffice.org/51366
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
https://wiki.openoffice.org/wiki/Writer/MSInteroperability/PageBorder
discusses implementation differences between ODF model and MS formats
wrt dealing with page margins and distances to borders.
This patch corrects import from DOCX, so that the border distance and
width doesn't add to the margin size imported from file anymore. It
takes care to preserve size from page edge to text (the most important
size that affects document layout). When borders go outside of range
valid for ODF, the margin is set to keep text area intact, and the
border is placed as close to intended position as possible.
Export code now also properly handles border width. Also, an improved
heuristic implemented to better export cases unsupported by Word, so
that the result would look closer to ODF original. We still write
correct sizes to OOXML, so that when reopened by LO, the borders will
be in correct places; but as Word cannot handle sizes more than 31 pt,
it will show borders shifted.
This prevents from adding border widths and distances to page margins
at each opening of DOCX, saving back the changed value, increasing
the margins each time.
Change-Id: Ia978ab119dd661949d6c321aea91397f28d205b0
Reviewed-on: https://gerrit.libreoffice.org/51267
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
In docx a colour value is represented as a 6-digit hex RGB value, or
alternatively the word "auto" to represent automatic colour.
- Add support for reading the value "auto" as COL_AUTO. Previously
this would be read as if it were a hex value, stopping at the
letter 'u' which is not a valid hex digit, resulting in the colour
0x00000A - a very dark blue, which looks close enough to black that
it went unnoticed for a long time :-)
- Remove code which tried to handle this wrong 0x00000A value,
including the constant OOXML_COLOR_AUTO, as it is no longer needed
and will cause surprises for anyone who really wanted this exact
shade of dark blue
- Fix unit tests that were checking for 0x00000A
Change-Id: I6000070341931147ff9341ad6281cd3b53c02b46
Reviewed-on: https://gerrit.libreoffice.org/50995
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
This is preparing to change how GraphicManager works where it
won't base itself around GraphicObject anymore but Graphic. No
functional or cosmetic change was made to the classes, only
changes that were needed because of the move and rename.
The only thing that wasn't moved is the GraphicRenderer as it
is not needed in vcl for now (but makes sense to move it in the
future to keep graphic stuff together).
grfmgr was renamed to GraphicObject as the GraphicManager will be
changed a lot and most likely moved out, so the name grfmgr won't
make any sense anymore.
All the UNO implementations were renamed with a prefix Uno and
used the same name as the class name. This is made to be more
specific which are the Uno objects (for example graphic.cxx
contained the implementation of XGraphic, which is similar to
graph.cxx contains Graphic).
Change-Id: I54a2fa6c7e997469aaa7770db05244adb9f64137
Reviewed-on: https://gerrit.libreoffice.org/51068
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
This moves BackGraphicURL, HeaderGraphicURL, FooterGraphicURL and
ParaBackGraphicURL properties to BackGraphic, HeaderBackGraphic,
FooterBackGraphic and ParaBackGraphic. With this the property type
changes from String to XGraphic.
This change also fixes a bunch of test failures, changes the tests
to use the new properties and the correct type, changes the import
and export filters like xmloff and oox, to make the tests happy.
Change-Id: Ie66097514203c6dc36ab27420faf265322e9279e
Reviewed-on: https://gerrit.libreoffice.org/50760
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Discarding header/footer is necessary when the document or section
settings request to ignore first or even headers/footers. In the bugdoc
case settings.xml didn't opt-in for different even/odd footers, but
there was an even footer to be ignored.
Handle this state at two more places, so we don't end up in a situation
where we ignore the footer but not its "remove last (empty) paragraph at
the end of the footer" action.
Also make the debug dumper for text ranges more robust to have a working
token dump when we try to get the string for a table.
Change-Id: I6395f37aa40c42304e2c918d87dadecb21e9d378
Reviewed-on: https://gerrit.libreoffice.org/50786
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
The only reason the DOCX equivalent of the bugdoc was imported correctly
is that these default zero margins are simply missing from the DOCX
markup, suggesting Word ignores them. We now do the same, this way
the stripped down document's 3 paragraphs all have different margins as
expected.
(Also rework the testTdf112211_2 testcase to test the original problem
better: I verified that the layout is unchanged before/after this
patch.)
Change-Id: I88d56c27c19e070e983c3392f99bca96597cd56e
Reviewed-on: https://gerrit.libreoffice.org/50391
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
getPropertyValue("Surround") for a non-inserted frame can throw, but
hasPropertyValue("Surround") still returns true. So fix the regression
by just catching the exception, assuming that in that case no increased
spacing is needed.
Change-Id: I49a78ce8d41b4e1cc7d23721d5dc70f7550c94af
Reviewed-on: https://gerrit.libreoffice.org/50175
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Commit 17e51f427b (DOCX import: first page
header should always set default headers as well, 2014-11-21) turned on
header/footer of follow page styles of first page styles when the first
page style had the header/footer turned on, but failed to consider if
<w:titlePg> is present or not. When it's not present, the first page
header/footer should be ignored.
An additional problem is that by the time
DomainMapper_Impl::PushPageHeaderFooter() is called, <w:titlePg> is not
parsed yet, so we can't act accordingly.
Fix the problem by moving the check to
SectionPropertyMap::PrepareHeaderFooterProperties(), which runs at the
end of the section properties, where all required info is available,
there we can just check for m_bTitlePage.
This allows reverting the two changes to existing testcases in
CppunitTest_sw_ooxmlexport6 from the original commit as a side-effect.
Change-Id: Ic628adab99a4b148fcfd66ca39d0cf81eb7dd9f1
Reviewed-on: https://gerrit.libreoffice.org/50014
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
... like Word 2013 does, when the version string indicates that the new
layout is wanted.
An alternative to this change would be to add a new sw layout
compatibility flag and handle this at a layout level (somewhere in
SwAnchoredObject::GetObjRectWithSpaces()). The downside of that approach
is that once a layout flag is added, it's not preferred to tweak its
behavior, while doing the same at import time is not a problem.
Also it's better to have a flag for something which has clear behavior
in some spec / implementer notes, which is not the case for this
problem. (I've mailed dochelp@microsoft, no answer so far.)
Change-Id: Ibad28d27e4bcbe1991a3be1c686064e18e9ffa4d
Reviewed-on: https://gerrit.libreoffice.org/49733
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Commit c761df1e42 (tdf#84678 DOCX import:
fix handling of textbox margins, 2016-10-25) uncovered a previously
harder to notice problem that single-paragraph shapes have an incorrect
upper paragraph margin for the first paragraph. Now that the shape
margins are correct this problematic paragraph margin causes crop of the
shape text.
Fix the problem by adapting the DOCX import to the WW8 import's
SwWW8ImplReader::AppendTextNode() (the "If this is the first paragraph
in the document" part), where it seems the first paragraph is not only
the literally first paragraph in the document, but also the first
paragraph of shapes as well.
Change-Id: I9d99b9cfabae2c9a7c33eefefb5a9f008669e93d
Reviewed-on: https://gerrit.libreoffice.org/49617
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
1. Allow ooxml / rtf import the ruby aligned on the right side
( rightVertical or jc=5 ) as css::text::RubyPosition::INTER_CHARACTER.
2. Allow rtf / ww8 export of css::text::RubyPosition::INTER_CHARACTER
as jc=5.
Though rtf filter can save and load the new ruby position,
character format seems lost. The reset of the MSO formats have
other issues that they can't make roundtrip yet.
Change-Id: Idb77423842f43abc375a1282a52b0bc6f20049e4
Reviewed-on: https://gerrit.libreoffice.org/49177
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mark Hung <marklh9@gmail.com>
So that paragraph properties inherited from numbering properties can be
properly overwritten with direct formatting, even when we have to take
style deduplication into account.
The OOXML tokenizer already did this,
writerfilter::dmapper::DomainMapper::sprmWithProps()'s
NS_ooxml::LN_CT_NumPr_numId depends on this, so adapt the RTF tokenizer
accordingly.
Change-Id: Iec6026d146f08a9d06266763d01ed626a2d1f3d1
Reviewed-on: https://gerrit.libreoffice.org/49247
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
This fixes loads of warnings like this one:
warn:legacy.osl:22335:22335:writerfilter/source/dmapper/StyleSheetTable.cxx:1611: Exception in StyleSheetTable::getOrCreateCharStyle - Style::setPropertyValue
during import. They are harmless as we catch the exception, but they are
just noise. It seems the code that transforms grab-bag pseudo-props into
real props was added in commit 4c3ba3a413
(fdo#75757: Remove inheritance from std::map., 2014-07-26), which is
supposed to be a pure refactoring, so just remove this problematic
transformation.
Change-Id: Ibf45bfedc661f9e065405c47623516c4026148a4
Reviewed-on: https://gerrit.libreoffice.org/49105
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
During inserting of the text from the external document
we should not change original default styles in
currently opened document.
Added unit test.
Change-Id: Ida754a0da5efaaa043464cd807c0b52cfb0d5670
Reviewed-on: https://gerrit.libreoffice.org/48826
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
This used to work in the past only because the left indent was also
imported as a direct paragraph formatting, but that is not the case
since left margin of lists is deduplicated during import after commit
c9dee880d8 (tdf#104016 RTF import:
deduplicate before text indent from numbering, 2017-12-05).
Change-Id: I1c9be30700c51ef97fb274e8781d6008db3121d8
Reviewed-on: https://gerrit.libreoffice.org/48855
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>