Kaydet (Commit) 178b361c authored tarafından Samuel Mehrbrodt's avatar Samuel Mehrbrodt Kaydeden (comit) Miklos Vajna

tdf#107723 Import font name from text portions in shapes

Change-Id: Ib9b73b5c05ec2e6846ea3adc950ccab5d1c0a9b0
Reviewed-on: https://gerrit.libreoffice.org/40439Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst 13e57e42
...@@ -49,6 +49,8 @@ struct TextParagraphModel ...@@ -49,6 +49,8 @@ struct TextParagraphModel
struct OOX_DLLPUBLIC TextFontModel struct OOX_DLLPUBLIC TextFontModel
{ {
OptValue< OUString > moName; ///< Font name. OptValue< OUString > moName; ///< Font name.
OptValue< OUString > moNameAsian; ///< Asian font name.
OptValue< OUString > moNameComplex; ///< Complex font name.
OptValue< OUString > moColor; ///< Font color, HTML encoded, sort of. OptValue< OUString > moColor; ///< Font color, HTML encoded, sort of.
OptValue< sal_Int32 > monSize; ///< Font size in twips. OptValue< sal_Int32 > monSize; ///< Font size in twips.
OptValue< sal_Int32 > monUnderline; ///< Single or double underline. OptValue< sal_Int32 > monUnderline; ///< Single or double underline.
......
...@@ -82,6 +82,20 @@ void TextBox::convert(const uno::Reference<drawing::XShape>& xShape) const ...@@ -82,6 +82,20 @@ void TextBox::convert(const uno::Reference<drawing::XShape>& xShape) const
std::vector<beans::PropertyValue> aPropVec; std::vector<beans::PropertyValue> aPropVec;
const TextParagraphModel& rParagraph = aIt->maParagraph; const TextParagraphModel& rParagraph = aIt->maParagraph;
const TextFontModel& rFont = aIt->maFont; const TextFontModel& rFont = aIt->maFont;
if (rFont.moName.has())
{
aPropertyValue.Name = "CharFontName";
aPropertyValue.Value <<= rFont.moName.get();
aPropVec.push_back(aPropertyValue);
aPropertyValue.Name = "CharFontNameAsian";
aPropertyValue.Value <<= rFont.moNameAsian.get();
aPropVec.push_back(aPropertyValue);
aPropertyValue.Name = "CharFontNameComplex";
aPropertyValue.Value <<= rFont.moNameComplex.get();
aPropVec.push_back(aPropertyValue);
}
if (rFont.mobBold.has()) if (rFont.mobBold.has())
{ {
aPropertyValue.Name = "CharWeight"; aPropertyValue.Name = "CharWeight";
......
...@@ -139,6 +139,12 @@ void TextPortionContext::onStartElement(const AttributeList& rAttribs) ...@@ -139,6 +139,12 @@ void TextPortionContext::onStartElement(const AttributeList& rAttribs)
case W_TOKEN(rPr): case W_TOKEN(rPr):
case W_TOKEN(t): case W_TOKEN(t):
break; break;
case W_TOKEN(rFonts):
// See https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.runfonts(v=office.14).aspx
maFont.moName = rAttribs.getString(W_TOKEN(ascii));
maFont.moNameAsian = rAttribs.getString(W_TOKEN(eastAsia));
maFont.moNameComplex = rAttribs.getString(W_TOKEN(cs));
break;
default: default:
SAL_INFO("oox", "unhandled: 0x" << std::hex<< getCurrentElement()); SAL_INFO("oox", "unhandled: 0x" << std::hex<< getCurrentElement());
break; break;
......
...@@ -1430,6 +1430,17 @@ DECLARE_OOXMLIMPORT_TEST(testTdf109524, "tdf109524.docx") ...@@ -1430,6 +1430,17 @@ DECLARE_OOXMLIMPORT_TEST(testTdf109524, "tdf109524.docx")
CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty<sal_Int16>(xTables->getByIndex(0), "RelativeWidth")); CPPUNIT_ASSERT_EQUAL(sal_Int16(100), getProperty<sal_Int16>(xTables->getByIndex(0), "RelativeWidth"));
} }
DECLARE_OOXMLIMPORT_TEST(testGroupShapeFontName, "groupshape-fontname.docx")
{
// Font names inside a group shape were not imported
uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY);
uno::Reference<text::XText> xText = uno::Reference<text::XTextRange>(xGroup->getByIndex(1), uno::UNO_QUERY)->getText();
CPPUNIT_ASSERT_EQUAL(OUString("Calibri"), getProperty<OUString>(getRun(getParagraphOfText(1, xText), 1), "CharFontName"));
CPPUNIT_ASSERT_EQUAL(OUString("Calibri"), getProperty<OUString>(getRun(getParagraphOfText(1, xText), 1), "CharFontNameComplex"));
CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(getRun(getParagraphOfText(1, xText), 1), "CharFontNameAsian"));
}
// tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment