protected abstract void ProcessLineBreak(XmlElement block, CharacterRun characterRun);
protected int TryDeadField(HWPFDocumentCore wordDocument, Range range, int currentTableLevel, int beginMark, XmlElement currentBlock) { int separatorMark = -1; int endMark = -1; for (int c = beginMark + 1; c < range.NumCharacterRuns; c++) { CharacterRun characterRun = range.GetCharacterRun(c); String text = characterRun.Text; byte[] textByte = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(text); if (textByte.Length == 0) { //if (text.getBytes().length == 0) continue; } if (textByte[0] == FIELD_BEGIN_MARK) { // nested? Field possibleField = ProcessDeadField(wordDocument, range, currentTableLevel, characterRun.StartOffset, currentBlock); if (possibleField != null) { c = possibleField.GetFieldEndOffset(); } else { continue; } } if (textByte[0] == FIELD_SEPARATOR_MARK) { if (separatorMark != -1) { // double; return(beginMark); } separatorMark = c; continue; } if (textByte[0] == FIELD_END_MARK) { if (endMark != -1) { // double; return(beginMark); } endMark = c; break; } } if (separatorMark == -1 || endMark == -1) { return(beginMark); } ProcessDeadField(wordDocument, currentBlock, range, currentTableLevel, beginMark, separatorMark, endMark); return(endMark); }
protected abstract void ProcessDrawnObject(HWPFDocument doc, CharacterRun characterRun, OfficeDrawing officeDrawing, String path, XmlElement block);
protected void ProcessField(HWPFDocument wordDocument, Range parentRange, int currentTableLevel, Field field, XmlElement currentBlock) { switch (field.Type) { case 37: // page reference { Range firstSubrange = field.FirstSubrange(parentRange); if (firstSubrange != null) { String formula = firstSubrange.Text; Regex pagerefPattern = new Regex("[ \\t\\r\\n]*PAGEREF ([^ ]*)[ \\t\\r\\n]*\\\\h[ \\t\\r\\n]*"); Match match = pagerefPattern.Match(formula); if (match.Success) { String pageref = match.Groups[1].Value; ProcessPageref(wordDocument, currentBlock, field.SecondSubrange(parentRange), currentTableLevel, pageref); return; } //Pattern pagerefPattern = Pattern // .compile("[ \\t\\r\\n]*PAGEREF ([^ ]*)[ \\t\\r\\n]*\\\\h[ \\t\\r\\n]*"); //Matcher matcher = pagerefPattern.matcher(formula); //if (matcher.find()) //{ // String pageref = matcher.group(1); // processPageref(wordDocument, currentBlock, // field.secondSubrange(parentRange), // currentTableLevel, pageref); // return; //} } break; } case 58: // Embedded Object { if (!field.HasSeparator()) { logger.Log(POILogger.WARN, parentRange + " contains " + field + " with 'Embedded Object' but without separator mark"); return; } CharacterRun separator = field.GetMarkSeparatorCharacterRun(parentRange); if (separator.IsOle2()) { // the only supported so far bool processed = ProcessOle2(wordDocument, separator, currentBlock); // if we didn't output OLE - output field value if (!processed) { ProcessCharacters(wordDocument, currentTableLevel, field.SecondSubrange(parentRange), currentBlock); } return; } break; } case 88: // hyperlink { Range firstSubrange = field.FirstSubrange(parentRange); if (firstSubrange != null) { String formula = firstSubrange.Text; Regex hyperlinkPattern = new Regex("[ \\t\\r\\n]*HYPERLINK \"(.*)\"[ \\t\\r\\n]*"); Match match = hyperlinkPattern.Match(formula); if (match.Success) { String hyperlink = match.Groups[1].Value; ProcessHyperlink(wordDocument, currentBlock, field.SecondSubrange(parentRange), currentTableLevel, hyperlink); return; } //Pattern hyperlinkPattern = Pattern // .compile("[ \\t\\r\\n]*HYPERLINK \"(.*)\"[ \\t\\r\\n]*"); //Matcher matcher = hyperlinkPattern.matcher(formula); //if (matcher.find()) //{ // String hyperlink = matcher.group(1); // processHyperlink(wordDocument, currentBlock, // field.secondSubrange(parentRange), // currentTableLevel, hyperlink); // return; //} } break; } } logger.Log(POILogger.WARN, parentRange + " contains " + field + " with unsupported type or format"); ProcessCharacters(wordDocument, currentTableLevel, field.SecondSubrange(parentRange), currentBlock); }
protected override void ProcessLineBreak(XmlElement block, CharacterRun characterRun) { block.AppendChild(htmlDocumentFacade.CreateLineBreak()); }
protected override void ProcessLineBreak(XmlElement block, CharacterRun characterRun) { block.AppendChild(textDocumentFacade.CreateText("\n")); }
public void writeSolidFill(RegularContainer slide, CharacterRun run, ref string lastColor) { _writer.WriteStartElement("a", "solidFill", OpenXmlNamespaces.DrawingML); if (run.Color.IsSchemeColor) //TODO: to be fully implemented { //_writer.WriteStartElement("a", "schemeClr", OpenXmlNamespaces.DrawingML); if (slide == null) { ////TODO: what shall be used in this case (happens for default text style in presentation.xml) //_writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); //_writer.WriteAttributeString("val", "000000"); //_writer.WriteEndElement(); _writer.WriteStartElement("a", "schemeClr", OpenXmlNamespaces.DrawingML); switch (run.Color.Index) { case 0x00: _writer.WriteAttributeString("val", "bg1"); //background break; case 0x01: _writer.WriteAttributeString("val", "tx1"); //text break; case 0x02: _writer.WriteAttributeString("val", "dk1"); //shadow break; case 0x03: _writer.WriteAttributeString("val", "tx1"); //title text break; case 0x04: _writer.WriteAttributeString("val", "bg2"); //fill break; case 0x05: _writer.WriteAttributeString("val", "accent1"); //accent1 break; case 0x06: _writer.WriteAttributeString("val", "accent2"); //accent2 break; case 0x07: _writer.WriteAttributeString("val", "accent3"); //accent3 break; case 0xFE: //sRGB lastColor = run.Color.Red.ToString("X").PadLeft(2, '0') + run.Color.Green.ToString("X").PadLeft(2, '0') + run.Color.Blue.ToString("X").PadLeft(2, '0'); _writer.WriteAttributeString("val", lastColor); break; case 0xFF: //undefined break; } _writer.WriteEndElement(); } else { ColorSchemeAtom MasterScheme = null; SlideAtom ato = slide.FirstChildWithType <SlideAtom>(); List <ColorSchemeAtom> colors; if (ato != null && Tools.Utils.BitmaskToBool(ato.Flags, 0x1 << 1) && ato.MasterId != 0) { colors = _ctx.Ppt.FindMasterRecordById(ato.MasterId).AllChildrenWithType <ColorSchemeAtom>(); } else { colors = slide.AllChildrenWithType <ColorSchemeAtom>(); } foreach (ColorSchemeAtom color in colors) { if (color.Instance == 1) { MasterScheme = color; } } _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); switch (run.Color.Index) { case 0x00: //background lastColor = new RGBColor(MasterScheme.Background, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x01: //text lastColor = new RGBColor(MasterScheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x02: //shadow lastColor = new RGBColor(MasterScheme.Shadows, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x03: //title lastColor = new RGBColor(MasterScheme.TitleText, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x04: //fill lastColor = new RGBColor(MasterScheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x05: //accent1 lastColor = new RGBColor(MasterScheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x06: //accent2 lastColor = new RGBColor(MasterScheme.AccentAndHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0x07: //accent3 lastColor = new RGBColor(MasterScheme.AccentAndFollowedHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; _writer.WriteAttributeString("val", lastColor); break; case 0xFE: //sRGB lastColor = run.Color.Red.ToString("X").PadLeft(2, '0') + run.Color.Green.ToString("X").PadLeft(2, '0') + run.Color.Blue.ToString("X").PadLeft(2, '0'); _writer.WriteAttributeString("val", lastColor); break; case 0xFF: //undefined break; } _writer.WriteEndElement(); //_writer.WriteEndElement(); } } else { _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); lastColor = run.Color.Red.ToString("X").PadLeft(2, '0') + run.Color.Green.ToString("X").PadLeft(2, '0') + run.Color.Blue.ToString("X").PadLeft(2, '0'); _writer.WriteAttributeString("val", lastColor); _writer.WriteEndElement(); } _writer.WriteEndElement(); }
protected abstract void OutputCharacters(XmlElement block, CharacterRun characterRun, String text);
public void writepPr(CharacterRun cr, ParagraphRun pr, ParagraphRun9 pr9, int IndentLevel, bool isTitle, bool isDefault) { //TextMasterStyleAtom defaultStyle = _ctx.Ppt.DocumentRecord.FirstChildWithType<DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType<TextMasterStyleAtom>(); _writer.WriteStartElement("a", "lvl" + (IndentLevel + 1).ToString() + "pPr", OpenXmlNamespaces.DrawingML); //marL if (pr.LeftMarginPresent && !isDefault) { _writer.WriteAttributeString("marL", Utils.MasterCoordToEMU((int)pr.LeftMargin).ToString()); } //marR //lvl if (pr.IndentLevel > 0) { _writer.WriteAttributeString("lvl", pr.IndentLevel.ToString()); } //indent if (pr.IndentPresent && !isDefault) { _writer.WriteAttributeString("indent", (-1 * (Utils.MasterCoordToEMU((int)(pr.LeftMargin - pr.Indent)))).ToString()); } //algn if (pr.AlignmentPresent) { switch (pr.Alignment) { case 0x0000: //Left _writer.WriteAttributeString("algn", "l"); break; case 0x0001: //Center _writer.WriteAttributeString("algn", "ctr"); break; case 0x0002: //Right _writer.WriteAttributeString("algn", "r"); break; case 0x0003: //Justify _writer.WriteAttributeString("algn", "just"); break; case 0x0004: //Distributed _writer.WriteAttributeString("algn", "dist"); break; case 0x0005: //ThaiDistributed _writer.WriteAttributeString("algn", "thaiDist"); break; case 0x0006: //JustifyLow _writer.WriteAttributeString("algn", "justLow"); break; } } //defTabSz if (pr.DefaultTabSizePresent) { _writer.WriteAttributeString("defTabSz", Utils.MasterCoordToEMU((int)pr.DefaultTabSize).ToString()); } //rtl if (pr.TextDirectionPresent) { switch (pr.TextDirection) { case 0x0000: _writer.WriteAttributeString("rtl", "0"); break; case 0x0001: _writer.WriteAttributeString("rtl", "1"); break; } } else { _writer.WriteAttributeString("rtl", "0"); } //eaLnkBrk //fontAlgn if (pr.FontAlignPresent) { switch (pr.FontAlign) { case 0x0000: //Roman _writer.WriteAttributeString("fontAlgn", "base"); break; case 0x0001: //Hanging _writer.WriteAttributeString("fontAlgn", "t"); break; case 0x0002: //Center _writer.WriteAttributeString("fontAlgn", "ctr"); break; case 0x0003: //UpholdFixed _writer.WriteAttributeString("fontAlgn", "b"); break; } } //latinLnBrk //hangingPunct //lnSpc //spcBef if (pr.SpaceBeforePresent) { _writer.WriteStartElement("a", "spcBef", OpenXmlNamespaces.DrawingML); if (pr.SpaceBefore < 0) { _writer.WriteStartElement("a", "spcPts", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (-1 * 12 * pr.SpaceBefore).ToString()); //TODO: the 12 is wrong _writer.WriteEndElement(); //spcPct } else { _writer.WriteStartElement("a", "spcPct", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (1000 * pr.SpaceBefore).ToString()); _writer.WriteEndElement(); //spcPct } _writer.WriteEndElement(); //spcBef lastSpaceBefore = (int)pr.SpaceBefore; } else { if (lastSpaceBefore != 0) { _writer.WriteStartElement("a", "spcBef", OpenXmlNamespaces.DrawingML); if (lastSpaceBefore < 0) { _writer.WriteStartElement("a", "spcPts", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (-1 * 12 * lastSpaceBefore).ToString()); //TODO: the 12 is wrong _writer.WriteEndElement(); //spcPct } else { _writer.WriteStartElement("a", "spcPct", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (1000 * lastSpaceBefore).ToString()); _writer.WriteEndElement(); //spcPct } _writer.WriteEndElement(); //spcBef } } //spcAft if (pr.SpaceAfterPresent) { _writer.WriteStartElement("a", "spcAft", OpenXmlNamespaces.DrawingML); if (pr.SpaceAfter < 0) { _writer.WriteStartElement("a", "spcPts", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (-1 * pr.SpaceAfter).ToString()); //TODO: this has to be verified! _writer.WriteEndElement(); //spcPct } else { _writer.WriteStartElement("a", "spcPct", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", pr.SpaceAfter.ToString()); _writer.WriteEndElement(); //spcPct } _writer.WriteEndElement(); //spcAft } //EG_TextBulletColor //EG_TextBulletSize //EG_TextBulletTypeFace //EG_TextBullet bool bulletwritten = false; if (pr9 != null) { if (pr9.BulletBlipReferencePresent) { foreach (ProgTags progtags in _ctx.Ppt.DocumentRecord.FirstChildWithType <List>().AllChildrenWithType <ProgTags>()) { foreach (ProgBinaryTag bintags in progtags.AllChildrenWithType <ProgBinaryTag>()) { foreach (ProgBinaryTagDataBlob data in bintags.AllChildrenWithType <ProgBinaryTagDataBlob>()) { foreach (BlipCollection9Container blips in data.AllChildrenWithType <BlipCollection9Container>()) { if (blips.Children.Count > pr9.bulletblipref & pr9.bulletblipref > -1) { ImagePart imgPart = null; BitmapBlip b = ((BlipEntityAtom)blips.Children[pr9.bulletblipref]).blip; if (b == null) { MetafilePictBlip mb = ((BlipEntityAtom)blips.Children[pr9.bulletblipref]).mblip; imgPart = _parentSlideMapping.targetPart.AddImagePart(ShapeTreeMapping.getImageType(mb.TypeCode)); imgPart.TargetDirectory = "..\\media"; System.IO.Stream outStream = imgPart.GetStream(); byte[] decompressed = mb.Decrompress(); outStream.Write(decompressed, 0, decompressed.Length); //outStream.Write(mb.m_pvBits, 0, mb.m_pvBits.Length); } else { imgPart = _parentSlideMapping.targetPart.AddImagePart(ShapeTreeMapping.getImageType(b.TypeCode)); imgPart.TargetDirectory = "..\\media"; System.IO.Stream outStream = imgPart.GetStream(); outStream.Write(b.m_pvBits, 0, b.m_pvBits.Length); } _writer.WriteStartElement("a", "buBlip", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "blip", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("r", "embed", OpenXmlNamespaces.Relationships, imgPart.RelIdToString); _writer.WriteEndElement(); //blip _writer.WriteEndElement(); //buBlip bulletwritten = true; } } } } } } } if (!bulletwritten & !isTitle) { if (pr.BulletFlagsFieldPresent & (pr.BulletFlags & (ushort)ParagraphMask.HasBullet) == 0) { _writer.WriteElementString("a", "buNone", OpenXmlNamespaces.DrawingML, ""); } else { if (pr.BulletColorPresent && (!(pr.BulletFlagsFieldPresent && (pr.BulletFlags & 1 << 2) == 0))) { writeBuClr((RegularContainer)this._Master, pr.BulletColor, ref lastBulletColor); } else if (lastBulletColor.Length > 0) { _writer.WriteStartElement("a", "buClr", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", lastBulletColor); _writer.WriteEndElement(); _writer.WriteEndElement(); //buClr } if (pr.BulletSizePresent) { if (pr.BulletSize > 0 && pr.BulletSize != 100) { _writer.WriteStartElement("a", "buSzPct", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", (pr.BulletSize * 1000).ToString()); _writer.WriteEndElement(); //buSzPct } else { //TODO } } if (pr.BulletFontPresent) { _writer.WriteStartElement("a", "buFont", OpenXmlNamespaces.DrawingML); FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)pr.BulletTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); } _writer.WriteEndElement(); //buChar lastBulletFont = entity.TypeFace; } else if (lastBulletFont.Length > 0) { _writer.WriteStartElement("a", "buFont", OpenXmlNamespaces.DrawingML); if (lastBulletFont.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", lastBulletFont.Substring(0, lastBulletFont.IndexOf('\0'))); } else { _writer.WriteAttributeString("typeface", lastBulletFont); } _writer.WriteEndElement(); //buChar } if (pr.BulletCharPresent) { _writer.WriteStartElement("a", "buChar", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("char", pr.BulletChar.ToString()); _writer.WriteEndElement(); //buChar lastBulletChar = pr.BulletChar.ToString(); } else if (lastBulletChar.Length > 0) { _writer.WriteStartElement("a", "buChar", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("char", lastBulletChar); _writer.WriteEndElement(); //buChar } } } //tabLst //defRPr //extLst new CharacterRunPropsMapping(_ctx, _writer).Apply(cr, "defRPr", (RegularContainer)_Master, ref lastColor, ref lastSize, ref lastTypeface, "", "", null, IndentLevel, null, null, 0, false); _writer.WriteEndElement(); //lvlXpPr }
public void Apply(CharacterRun run, string startElement, RegularContainer slide, ref string lastColor, ref string lastSize, ref string lastTypeface, string lang, string altLang, TextMasterStyleAtom defaultStyle, int lvl, List <MouseClickInteractiveInfoContainer> mciics, ShapeTreeMapping parentShapeTreeMapping, uint position, bool insideTable) { _writer.WriteStartElement("a", startElement, OpenXmlNamespaces.DrawingML); if (lang.Length == 0) { TextSIExceptionAtom siea = _ctx.Ppt.DocumentRecord.FirstDescendantWithType <TextSIExceptionAtom>(); if (siea != null) { if (siea.si.lang) { switch (siea.si.lid) { case 0x0: // no language break; case 0x13: //Any Dutch language is preferred over non-Dutch languages when proofing the text break; case 0x400: //no proofing break; default: try { lang = System.Globalization.CultureInfo.GetCultureInfo(siea.si.lid).IetfLanguageTag; } catch (Exception) { //ignore } break; } } } } if (altLang.Length == 0) { TextSIExceptionAtom siea = _ctx.Ppt.DocumentRecord.FirstDescendantWithType <TextSIExceptionAtom>(); if (siea != null) { if (siea.si.altLang) { switch (siea.si.altLid) { case 0x0: // no language break; case 0x13: //Any Dutch language is preferred over non-Dutch languages when proofing the text break; case 0x400: //no proofing break; default: try { altLang = System.Globalization.CultureInfo.GetCultureInfo(siea.si.altLid).IetfLanguageTag; } catch (Exception) { //ignore } break; } } } } if (lang.Length > 0) { _writer.WriteAttributeString("lang", lang); } if (altLang.Length > 0) { _writer.WriteAttributeString("altLang", altLang); } bool runExists = run != null; if (runExists && run.SizePresent) { if (run.Size > 0) { _writer.WriteAttributeString("sz", (run.Size * 100).ToString()); lastSize = (run.Size * 100).ToString(); } } else if (lastSize.Length > 0) { _writer.WriteAttributeString("sz", lastSize); } else if (defaultStyle != null) { if (defaultStyle.CRuns[lvl].SizePresent) { _writer.WriteAttributeString("sz", (defaultStyle.CRuns[lvl].Size * 100).ToString()); } } if (runExists && run.StyleFlagsFieldPresent) { if ((run.Style & StyleMask.IsBold) == StyleMask.IsBold) { _writer.WriteAttributeString("b", "1"); } if ((run.Style & StyleMask.IsItalic) == StyleMask.IsItalic) { _writer.WriteAttributeString("i", "1"); } if ((run.Style & StyleMask.IsUnderlined) == StyleMask.IsUnderlined) { _writer.WriteAttributeString("u", "sng"); } } else if (defaultStyle != null && defaultStyle.CRuns[lvl].StyleFlagsFieldPresent) { if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsBold) == StyleMask.IsBold) { _writer.WriteAttributeString("b", "1"); } if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsItalic) == StyleMask.IsItalic) { _writer.WriteAttributeString("i", "1"); } if ((defaultStyle.CRuns[lvl].Style & StyleMask.IsUnderlined) == StyleMask.IsUnderlined) { _writer.WriteAttributeString("u", "sng"); } } if (runExists && run.ColorPresent) { writeSolidFill(slide, run, ref lastColor); } else if (lastColor.Length > 0) { _writer.WriteStartElement("a", "solidFill", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", lastColor); _writer.WriteEndElement(); _writer.WriteEndElement(); } else if (defaultStyle != null) { if (defaultStyle.CRuns[lvl].ColorPresent) { writeSolidFill((RegularContainer)defaultStyle.ParentRecord, defaultStyle.CRuns[lvl], ref lastColor); } } if (runExists && run.StyleFlagsFieldPresent) { if ((run.Style & StyleMask.HasShadow) == StyleMask.HasShadow) { //TODO: these values are default and have to be replaced _writer.WriteStartElement("a", "effectLst", OpenXmlNamespaces.DrawingML); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("blurRad", "38100"); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "2700000"); _writer.WriteAttributeString("algn", "tl"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "C0C0C0"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); } if ((run.Style & StyleMask.IsEmbossed) == StyleMask.IsEmbossed) { //TODO: these values are default and have to be replaced _writer.WriteStartElement("a", "effectDag", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "cont", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("type", "tree"); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "13500000"); _writer.WriteAttributeString("algn", "br"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "FFFFFF"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteStartElement("a", "cont", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("type", "tree"); _writer.WriteAttributeString("name", ""); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteStartElement("a", "outerShdw", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("dist", "38100"); _writer.WriteAttributeString("dir", "2700000"); _writer.WriteAttributeString("algn", "tl"); _writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("val", "999999"); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.WriteStartElement("a", "effect", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("ref", "fillLine"); _writer.WriteEndElement(); _writer.WriteEndElement(); } //TODOS //HasAsianSmartQuotes //HasHorizonNumRendering //ExtensionNibble } //TODOs: //run.ANSITypefacePresent //run.FEOldTypefacePresent //run.PositionPresent //run.SymbolTypefacePresent //run.TypefacePresent if (runExists && run.TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } else if (lastTypeface.Length > 0) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", lastTypeface); _writer.WriteEndElement(); } else if (defaultStyle != null && defaultStyle.CRuns[lvl].TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)defaultStyle.CRuns[lvl].TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } else { if (insideTable) { if (slide.FirstChildWithType <SlideAtom>() != null && _ctx.Ppt.FindMasterRecordById(slide.FirstChildWithType <SlideAtom>().MasterId) != null) { foreach (TextMasterStyleAtom item in _ctx.Ppt.FindMasterRecordById(slide.FirstChildWithType <SlideAtom>().MasterId).AllChildrenWithType <TextMasterStyleAtom>()) { if (item.Instance == 1) { if (item.CRuns.Count > 0 && item.CRuns[0].TypefacePresent) { _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)item.CRuns[0].TypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); lastTypeface = entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0')); } else { _writer.WriteAttributeString("typeface", entity.TypeFace); lastTypeface = entity.TypeFace; } //_writer.WriteAttributeString("charset", "0"); } catch (Exception ex) { throw; } _writer.WriteEndElement(); } } } } } // try // { // CharacterRun cr = _ctx.Ppt.DocumentRecord.FirstChildWithType<PptFileFormat.Environment>().FirstChildWithType<TextMasterStyleAtom>().CRuns[0]; // if (cr.TypefacePresent) // { // FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType<DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType<FontCollection>(); // FontEntityAtom entity = fonts.entities[(int)cr.TypefaceIdx]; // if (entity.TypeFace.IndexOf('\0') > 0) // { // _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); // _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); // _writer.WriteEndElement(); // } // else // { // _writer.WriteStartElement("a", "latin", OpenXmlNamespaces.DrawingML); // _writer.WriteAttributeString("typeface", entity.TypeFace); // _writer.WriteEndElement(); // } // } // } // catch (Exception ex) // { // //throw; // } } if (runExists && run.FEOldTypefacePresent) { try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.FEOldTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } catch (Exception ex) { //throw; } } else { try { CharacterRun cr = _ctx.Ppt.DocumentRecord.FirstChildWithType <PptFileFormat.Environment>().FirstChildWithType <TextMasterStyleAtom>().CRuns[0]; if (cr.FEOldTypefacePresent) { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)cr.FEOldTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "ea", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } } catch (Exception ex) { //throw; } } if (runExists && run.SymbolTypefacePresent) { try { FontCollection fonts = _ctx.Ppt.DocumentRecord.FirstChildWithType <DIaLOGIKa.b2xtranslator.PptFileFormat.Environment>().FirstChildWithType <FontCollection>(); FontEntityAtom entity = fonts.entities[(int)run.SymbolTypefaceIdx]; if (entity.TypeFace.IndexOf('\0') > 0) { _writer.WriteStartElement("a", "sym", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace.Substring(0, entity.TypeFace.IndexOf('\0'))); _writer.WriteEndElement(); } else { _writer.WriteStartElement("a", "sym", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("typeface", entity.TypeFace); _writer.WriteEndElement(); } } catch (Exception ex) { //throw; } } if (mciics != null && mciics.Count > 0) { foreach (MouseClickInteractiveInfoContainer mciic in mciics) { InteractiveInfoAtom iia = mciic.FirstChildWithType <InteractiveInfoAtom>(); MouseClickTextInteractiveInfoAtom tiia = mciic.Range; if (tiia.begin <= position && tiia.end > position) { if (iia != null) { if (iia.action == InteractiveInfoActionEnum.Hyperlink) { foreach (ExHyperlinkContainer c in _ctx.Ppt.DocumentRecord.FirstDescendantWithType <ExObjListContainer>().AllChildrenWithType <ExHyperlinkContainer>()) { ExHyperlinkAtom a = c.FirstChildWithType <ExHyperlinkAtom>(); if (a.exHyperlinkId == iia.exHyperlinkIdRef) { CStringAtom s = c.FirstChildWithType <CStringAtom>(); ExternalRelationship er = parentShapeTreeMapping.parentSlideMapping.targetPart.AddExternalRelationship(OpenXmlRelationshipTypes.HyperLink, s.Text); _writer.WriteStartElement("a", "hlinkClick", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("r", "id", OpenXmlNamespaces.Relationships, er.Id.ToString()); _writer.WriteEndElement(); } } } } } } } _writer.WriteEndElement(); }
public void writepPr(CharacterRun cr, ParagraphRun pr, ParagraphRun9 pr9, int IndentLevel, bool isTitle) { writepPr(cr, pr, pr9, IndentLevel, isTitle, false); }
private void Start() { runner1 = RaceManager.Instance.GetRunner(0); runner2 = RaceManager.Instance.GetRunner(1); }
public void TestUnicodeStyling() { Range r = u.GetRange(); String[] p1_parts = u_page_1.Split('\r'); Paragraph p1 = r.GetParagraph(0); Paragraph p7 = r.GetParagraph(6); // Line ending in its own run each time! Assert.AreEqual(2, p1.NumCharacterRuns); Assert.AreEqual(2, p7.NumCharacterRuns); CharacterRun c1a = p1.GetCharacterRun(0); CharacterRun c1b = p1.GetCharacterRun(1); CharacterRun c7a = p7.GetCharacterRun(0); CharacterRun c7b = p7.GetCharacterRun(1); Assert.AreEqual("Times New Roman", c1a.GetFontName()); // No Calibri Assert.AreEqual(22, c1a.GetFontSize()); Assert.AreEqual("Times New Roman", c1b.GetFontName()); // No Calibri Assert.AreEqual(22, c1b.GetFontSize()); Assert.AreEqual("Times New Roman", c7a.GetFontName()); Assert.AreEqual(48, c7a.GetFontSize()); Assert.AreEqual("Times New Roman", c7b.GetFontName()); Assert.AreEqual(48, c7b.GetFontSize()); // Now check where they crop up Assert.AreEqual( 0, c1a.StartOffset ); Assert.AreEqual( p1_parts[0].Length, c1a.EndOffset ); Assert.AreEqual( p1_parts[0].Length, c1b.StartOffset ); Assert.AreEqual( p1_parts[0].Length + 1, c1b.EndOffset ); Assert.AreEqual( p1_parts[0].Length + 1 + p1_parts[1].Length + 1 + p1_parts[2].Length + 1 + p1_parts[3].Length + 1 + p1_parts[4].Length + 1 + p1_parts[5].Length + 1, c7a.StartOffset ); Assert.AreEqual( p1_parts[0].Length + 1 + p1_parts[1].Length + 1 + p1_parts[2].Length + 1 + p1_parts[3].Length + 1 + p1_parts[4].Length + 1 + p1_parts[5].Length + 1 + 1, c7a.EndOffset ); Assert.AreEqual( p1_parts[0].Length + 1 + p1_parts[1].Length + 1 + p1_parts[2].Length + 1 + p1_parts[3].Length + 1 + p1_parts[4].Length + 1 + p1_parts[5].Length + 1 + 1, c7b.StartOffset ); Assert.AreEqual( p1_parts[0].Length + 1 + p1_parts[1].Length + 1 + p1_parts[2].Length + 1 + p1_parts[3].Length + 1 + p1_parts[4].Length + 1 + p1_parts[5].Length + 1 + p1_parts[6].Length + 1, c7b.EndOffset ); // This document has 15 styles Assert.AreEqual(15, a.GetStyleSheet().NumStyles()); // Ensure none of the paragraphs refer to one that isn't there, // and none of their character Runs either for (int i = 0; i < a.GetRange().NumParagraphs; i++) { Paragraph p = a.GetRange().GetParagraph(i); Assert.IsTrue(p.GetStyleIndex() < 15); } }
public ParagraphWith2003(CharacterRun characterRun) { this._characterRun = characterRun; }
protected override void OutputCharacters(XmlElement block, CharacterRun characterRun, String text) { block.AppendChild(textDocumentFacade.CreateText(text)); }
public void Test() { HWPFDocument doc = HWPFTestDataSamples.OpenSampleFile("Bug49919.doc"); range = doc.GetRange(); Paragraph par = FindParagraph("Paragraph normal\r"); Assert.AreEqual(0, par.GetLeftBorder().BorderType); Assert.AreEqual(0, par.GetRightBorder().BorderType); Assert.AreEqual(0, par.GetTopBorder().BorderType); Assert.AreEqual(0, par.GetBottomBorder().BorderType); par = FindParagraph("Paragraph with border\r"); Assert.AreEqual(18, par.GetLeftBorder().BorderType); Assert.AreEqual(17, par.GetRightBorder().BorderType); Assert.AreEqual(18, par.GetTopBorder().BorderType); Assert.AreEqual(17, par.GetBottomBorder().BorderType); Assert.AreEqual(15, par.GetLeftBorder().Color); par = FindParagraph("Paragraph with red border\r"); Assert.AreEqual(1, par.GetLeftBorder().BorderType); Assert.AreEqual(1, par.GetRightBorder().BorderType); Assert.AreEqual(1, par.GetTopBorder().BorderType); Assert.AreEqual(1, par.GetBottomBorder().BorderType); Assert.AreEqual(6, par.GetLeftBorder().Color); par = FindParagraph("Paragraph with bordered words.\r"); Assert.AreEqual(0, par.GetLeftBorder().BorderType); Assert.AreEqual(0, par.GetRightBorder().BorderType); Assert.AreEqual(0, par.GetTopBorder().BorderType); Assert.AreEqual(0, par.GetBottomBorder().BorderType); Assert.AreEqual(3, par.NumCharacterRuns); CharacterRun chr = par.GetCharacterRun(0); Assert.AreEqual(0, chr.GetBorder().BorderType); chr = par.GetCharacterRun(1); Assert.AreEqual(1, chr.GetBorder().BorderType); Assert.AreEqual(0, chr.GetBorder().Color); chr = par.GetCharacterRun(2); Assert.AreEqual(0, chr.GetBorder().BorderType); while (pos < range.NumParagraphs - 1) { par = range.GetParagraph(pos++); if (par.IsInTable()) { break; } } Assert.AreEqual(true, par.IsInTable()); Table tab = range.GetTable(par); // Border could be defined for the entire row, or for each cell, with the same visual appearance. Assert.AreEqual(2, tab.NumRows); TableRow row = tab.GetRow(0); Assert.AreEqual(1, row.GetLeftBorder().BorderType); Assert.AreEqual(1, row.GetRightBorder().BorderType); Assert.AreEqual(1, row.GetTopBorder().BorderType); Assert.AreEqual(1, row.GetBottomBorder().BorderType); Assert.AreEqual(2, row.NumCells()); TableCell cell = row.GetCell(1); Assert.AreEqual(3, cell.GetBrcTop().BorderType); row = tab.GetRow(1); cell = row.GetCell(0); // 255 Clears border inherited from row Assert.AreEqual(255, cell.GetBrcBottom().BorderType); }
protected override void ProcessDrawnObject(HWPFDocument doc, CharacterRun characterRun, OfficeDrawing officeDrawing, String path, XmlElement block) { // ignore }
protected bool ProcessCharacters(HWPFDocumentCore wordDocument, int currentTableLevel, Range range, XmlElement block) { if (range == null) { return(false); } bool haveAnyText = false; /* * In text there can be fields, bookmarks, may be other structures (code * below allows extension). Those structures can overlaps, so either we * should process char-by-char (slow) or find a correct way to * reconstruct the structure of range -- sergey */ IList <Structure> structures = new List <Structure>(); if (wordDocument is HWPFDocument) { HWPFDocument doc = (HWPFDocument)wordDocument; Dictionary <int, List <Bookmark> > rangeBookmarks = doc.GetBookmarks() .GetBookmarksStartedBetween(range.StartOffset, range.EndOffset); if (rangeBookmarks != null) { foreach (KeyValuePair <int, List <Bookmark> > kv in rangeBookmarks) { List <Bookmark> lists = kv.Value; foreach (Bookmark bookmark in lists) { if (!bookmarkStack.Contains(bookmark)) { AddToStructures(structures, new Structure(bookmark)); } } } } // TODO: dead fields? for (int c = 0; c < range.NumCharacterRuns; c++) { CharacterRun characterRun = range.GetCharacterRun(c); if (characterRun == null) { throw new NullReferenceException(); } Field aliveField = ((HWPFDocument)wordDocument).GetFields() .GetFieldByStartOffset(FieldsDocumentPart.MAIN, characterRun.StartOffset); if (aliveField != null) { AddToStructures(structures, new Structure(aliveField)); } } } //structures = new ArrayList<Structure>( structures ); //Collections.sort( structures ); SortedList <Structure, Structure> sl = new SortedList <Structure, Structure>(); foreach (Structure s in structures) { sl.Add(s, s); } structures.Clear(); ((List <Structure>)structures).AddRange(sl.Values); int previous = range.StartOffset; foreach (Structure structure in structures) { if (structure.Start != previous) { Range subrange = new Range(previous, structure.Start, range); //{ // public String toString() // { // return "BetweenStructuresSubrange " + super.ToString(); // } //}; ProcessCharacters(wordDocument, currentTableLevel, subrange, block); } if (structure.StructureObject is Bookmark) { // other bookmarks with same boundaries IList <Bookmark> bookmarks = new List <Bookmark>(); IEnumerator <List <Bookmark> > iterator = ((HWPFDocument)wordDocument).GetBookmarks().GetBookmarksStartedBetween(structure.Start, structure.Start + 1).Values.GetEnumerator(); iterator.MoveNext(); foreach (Bookmark bookmark in iterator.Current) { if (bookmark.Start == structure.Start && bookmark.End == structure.End) { bookmarks.Add(bookmark); } } bookmarkStack.AddRange(bookmarks); try { int end = Math.Min(range.EndOffset, structure.End); Range subrange = new Range(structure.Start, end, range); /*{ * public String toString() * { * return "BookmarksSubrange " + super.ToString(); * } * };*/ ProcessBookmarks(wordDocument, block, subrange, currentTableLevel, bookmarks); } finally { bookmarkStack.RemoveAll((e) => { return(bookmarks.Contains(e)); }); } } else if (structure.StructureObject is Field) { Field field = (Field)structure.StructureObject; ProcessField((HWPFDocument)wordDocument, range, currentTableLevel, field, block); } else { throw new NotSupportedException("NYI: " + structure.StructureObject.GetType().ToString()); } previous = Math.Min(range.EndOffset, structure.End); } if (previous != range.StartOffset) { if (previous > range.EndOffset) { logger.Log(POILogger.WARN, "Latest structure in ", range, " ended at #" + previous, " after range boundaries [", range.StartOffset + "; " + range.EndOffset, ")"); return(true); } if (previous < range.EndOffset) { Range subrange = new Range(previous, range.EndOffset, range); /*{ * @Override * public String toString() * { * return "AfterStructureSubrange " + super.ToString(); * } * };*/ ProcessCharacters(wordDocument, currentTableLevel, subrange, block); } return(true); } for (int c = 0; c < range.NumCharacterRuns; c++) { CharacterRun characterRun = range.GetCharacterRun(c); if (characterRun == null) { throw new NullReferenceException(); } if (wordDocument is HWPFDocument && ((HWPFDocument)wordDocument).GetPicturesTable().HasPicture(characterRun)) { HWPFDocument newFormat = (HWPFDocument)wordDocument; Picture picture = newFormat.GetPicturesTable().ExtractPicture(characterRun, true); ProcessImage(block, characterRun.Text[0] == 0x01, picture); continue; } string text = characterRun.Text; byte[] textByte = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(text); //if ( text.getBytes().length == 0 ) if (textByte.Length == 0) { continue; } if (characterRun.IsSpecialCharacter()) { if (text[0] == SPECCHAR_AUTONUMBERED_FOOTNOTE_REFERENCE && (wordDocument is HWPFDocument)) { HWPFDocument doc = (HWPFDocument)wordDocument; ProcessNoteAnchor(doc, characterRun, block); continue; } if (text[0] == SPECCHAR_DRAWN_OBJECT && (wordDocument is HWPFDocument)) { HWPFDocument doc = (HWPFDocument)wordDocument; ProcessDrawnObject(doc, characterRun, block); continue; } if (characterRun.IsOle2() && (wordDocument is HWPFDocument)) { HWPFDocument doc = (HWPFDocument)wordDocument; ProcessOle2(doc, characterRun, block); continue; } } if (textByte[0] == FIELD_BEGIN_MARK) //if ( text.getBytes()[0] == FIELD_BEGIN_MARK ) { if (wordDocument is HWPFDocument) { Field aliveField = ((HWPFDocument)wordDocument).GetFields().GetFieldByStartOffset( FieldsDocumentPart.MAIN, characterRun.StartOffset); if (aliveField != null) { ProcessField(((HWPFDocument)wordDocument), range, currentTableLevel, aliveField, block); int continueAfter = aliveField.GetFieldEndOffset(); while (c < range.NumCharacterRuns && range.GetCharacterRun(c).EndOffset <= continueAfter) { c++; } if (c < range.NumCharacterRuns) { c--; } continue; } } int skipTo = TryDeadField(wordDocument, range, currentTableLevel, c, block); if (skipTo != c) { c = skipTo; continue; } continue; } if (textByte[0] == FIELD_SEPARATOR_MARK) { // shall not appear without FIELD_BEGIN_MARK continue; } if (textByte[0] == FIELD_END_MARK) { // shall not appear without FIELD_BEGIN_MARK continue; } if (characterRun.IsSpecialCharacter() || characterRun.IsObj() || characterRun.IsOle2()) { continue; } if (text.EndsWith("\r") || (text[text.Length - 1] == BEL_MARK && currentTableLevel != int.MinValue)) { text = text.Substring(0, text.Length - 1); } { // line breaks StringBuilder stringBuilder = new StringBuilder(); foreach (char charChar in text.ToCharArray()) { if (charChar == 11) { if (stringBuilder.Length > 0) { OutputCharacters(block, characterRun, stringBuilder.ToString()); stringBuilder.Length = 0; } ProcessLineBreak(block, characterRun); } else if (charChar == 30) { // Non-breaking hyphens are stored as ASCII 30 stringBuilder.Append(UNICODECHAR_NONBREAKING_HYPHEN); } else if (charChar == 31) { // Non-required hyphens to zero-width space stringBuilder.Append(UNICODECHAR_ZERO_WIDTH_SPACE); } else if (charChar >= 0x20 || charChar == 0x09 || charChar == 0x0A || charChar == 0x0D) { stringBuilder.Append(charChar); } } if (stringBuilder.Length > 0) { OutputCharacters(block, characterRun, stringBuilder.ToString()); stringBuilder.Length = 0; } } haveAnyText |= text.Trim().Length != 0; } return(haveAnyText); }
protected override void ProcessDrawnObject(HWPFDocument doc, CharacterRun characterRun, OfficeDrawing officeDrawing, string path, XmlElement block) { XmlElement img = htmlDocumentFacade.CreateImage(path); block.AppendChild(img); }