git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1722479 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_14_FINAL
@@ -680,10 +680,16 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText | |||
* Fetch the value of the given Paragraph related TextProp. Returns null if | |||
* that TextProp isn't present. If the TextProp isn't present, the value | |||
* from the appropriate Master Sheet will apply. | |||
* | |||
* The propName can be a comma-separated list, in case multiple equivalent values | |||
* are queried | |||
*/ | |||
protected static TextProp getPropVal(TextPropCollection props, String propName, HSLFTextParagraph paragraph) { | |||
TextProp prop = props.findByName(propName); | |||
if (prop != null) return prop; | |||
String propNames[] = propName.split(","); | |||
for (String pn : propNames) { | |||
TextProp prop = props.findByName(pn); | |||
if (prop != null) return prop; | |||
} | |||
BitMaskTextProp maskProp = (BitMaskTextProp) props.findByName(ParagraphFlagsTextProp.NAME); | |||
boolean hardAttribute = (maskProp != null && maskProp.getValue() == 0); | |||
@@ -698,7 +704,13 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText | |||
} | |||
boolean isChar = props.getTextPropType() == TextPropType.character; | |||
return master.getStyleAttribute(txtype, paragraph.getIndentLevel(), propName, isChar); | |||
for (String pn : propNames) { | |||
TextProp prop = master.getStyleAttribute(txtype, paragraph.getIndentLevel(), pn, isChar); | |||
if (prop != null) return prop; | |||
} | |||
return null; | |||
} | |||
/** |
@@ -319,7 +319,7 @@ public final class HSLFTextRun implements TextRun { | |||
if (sheet == null || slideShow == null) { | |||
return _fontFamily; | |||
} | |||
TextProp tp = getPropVal(characterStyle, "font.index", parentParagraph); | |||
TextProp tp = getPropVal(characterStyle, "font.index,asian.font.index,ansi.font.index,symbol.font.index", parentParagraph); | |||
if (tp == null) { return null; } | |||
return slideShow.getFontCollection().getFontWithId(tp.getValue()); | |||
} |
@@ -43,9 +43,7 @@ import org.apache.poi.hslf.exceptions.OldPowerPointFormatException; | |||
import org.apache.poi.hslf.extractor.PowerPointExtractor; | |||
import org.apache.poi.hslf.model.HeadersFooters; | |||
import org.apache.poi.hslf.record.Document; | |||
import org.apache.poi.hslf.record.OEPlaceholderAtom; | |||
import org.apache.poi.hslf.record.Record; | |||
import org.apache.poi.hslf.record.RoundTripHFPlaceholder12; | |||
import org.apache.poi.hslf.record.SlideListWithText; | |||
import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; | |||
import org.apache.poi.hslf.record.TextHeaderAtom; | |||
@@ -783,8 +781,7 @@ public final class TestBugs { | |||
@Test | |||
public void bug58159() throws IOException { | |||
File sample = HSLFTestDataSamples.getSampleFile("bug58159_headers-and-footers.ppt"); | |||
HSLFSlideShow ppt = (HSLFSlideShow)SlideShowFactory.create(sample); | |||
HSLFSlideShow ppt = open("bug58159_headers-and-footers.ppt"); | |||
HeadersFooters hf = ppt.getSlideHeadersFooters(); | |||
assertNull(hf.getHeaderText()); | |||
assertEquals("Slide footer", hf.getFooterText()); | |||
@@ -806,6 +803,25 @@ public final class TestBugs { | |||
} | |||
ppt.close(); | |||
} | |||
@Test | |||
public void bug55030() throws IOException { | |||
HSLFSlideShow ppt = open("bug55030.ppt"); | |||
String expFamily = "\u96b6\u4e66"; | |||
HSLFSlide sl = ppt.getSlides().get(0); | |||
for (List<HSLFTextParagraph> paraList : sl.getTextParagraphs()) { | |||
for (HSLFTextParagraph htp : paraList) { | |||
for (HSLFTextRun htr : htp) { | |||
String actFamily = htr.getFontFamily(); | |||
assertEquals(expFamily, actFamily); | |||
} | |||
} | |||
} | |||
ppt.close(); | |||
} | |||
private static HSLFSlideShow open(String fileName) throws IOException { | |||
File sample = HSLFTestDataSamples.getSampleFile(fileName); |