示例#1
0
 protected abstract void ProcessLineBreak(XmlElement block,
                                          CharacterRun characterRun);
示例#2
0
        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);
        }
示例#3
0
 protected abstract void ProcessDrawnObject(HWPFDocument doc,
                                            CharacterRun characterRun, OfficeDrawing officeDrawing,
                                            String path, XmlElement block);
示例#4
0
        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);
        }
示例#5
0
 protected override void ProcessLineBreak(XmlElement block, CharacterRun characterRun)
 {
     block.AppendChild(htmlDocumentFacade.CreateLineBreak());
 }
示例#6
0
 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();
        }
示例#8
0
 protected abstract void OutputCharacters(XmlElement block,
                                          CharacterRun characterRun, String text);
示例#9
0
        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();
        }
示例#11
0
 public void writepPr(CharacterRun cr, ParagraphRun pr, ParagraphRun9 pr9, int IndentLevel, bool isTitle)
 {
     writepPr(cr, pr, pr9, IndentLevel, isTitle, false);
 }
示例#12
0
 private void Start()
 {
     runner1 = RaceManager.Instance.GetRunner(0);
     runner2 = RaceManager.Instance.GetRunner(1);
 }
示例#13
0
        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);
            }
        }
示例#14
0
 public ParagraphWith2003(CharacterRun characterRun)
 {
     this._characterRun = characterRun;
 }
示例#15
0
 protected override void OutputCharacters(XmlElement block, CharacterRun characterRun,
                                          String text)
 {
     block.AppendChild(textDocumentFacade.CreateText(text));
 }
示例#16
0
        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);
        }
示例#17
0
 protected override void ProcessDrawnObject(HWPFDocument doc,
                                            CharacterRun characterRun, OfficeDrawing officeDrawing,
                                            String path, XmlElement block)
 {
     // ignore
 }
示例#18
0
        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);
        }
示例#19
0
        protected override void ProcessDrawnObject(HWPFDocument doc, CharacterRun characterRun, OfficeDrawing officeDrawing, string path, XmlElement block)
        {
            XmlElement img = htmlDocumentFacade.CreateImage(path);

            block.AppendChild(img);
        }