override public void AfterParentSet()
        {
            ClientTextbox textbox = this.ParentRecord as ClientTextbox;

            if (textbox == null)
            {
                TraceLogger.DebugInternal("Record of type StyleTextPropAtom doesn't have parent of type ClientTextbox: {0}", this);
                return;
            }

            // TODO: FindSiblingByType?
            TextAtom textAtom = textbox.FirstChildWithType <TextAtom>();

            /* This can legitimately happen... */
            if (textAtom == null)
            {
                this.Reader.Read(new char[this.BodySize], 0, (int)this.BodySize);
                return;
            }

            // TODO: Length in bytes? UTF-16 characters? Full width unicode characters?

            //TraceLogger.DebugInternal("New text style for text: {0}", Utils.StringInspect(textAtom.Text));

            uint seenLength = 0;

            while (seenLength < textAtom.Text.Length + 1)
            {
                long pos    = this.Reader.BaseStream.Position;
                uint length = this.Reader.ReadUInt32();

                ParagraphRun run = new ParagraphRun(this.Reader, false);
                run.Length = length;
                this.PRuns.Add(run);

                /*TraceLogger.DebugInternal("Read paragraph run. Before pos = {0}, after pos = {1} of {2}: {3}",
                 *  pos, this.Reader.BaseStream.Position, this.Reader.BaseStream.Length,
                 *  run);*/

                seenLength += length;
            }

            //TraceLogger.DebugInternal();

            seenLength = 0;
            while (seenLength < textAtom.Text.Length + 1)
            {
                uint length = this.Reader.ReadUInt32();

                CharacterRun run = new CharacterRun(this.Reader);
                run.Length = length;
                this.CRuns.Add(run);

                seenLength += length;
            }
        }
        override public void AfterTextHeaderSet()
        {
            TextAtom textAtom = this.TextHeaderAtom.TextAtom;

            /* This can legitimately happen... */
            if (textAtom == null)
            {
                this.Reader.BaseStream.Position = this.Reader.BaseStream.Length;
                return;
            }

            uint seenLength = 0;

            while (seenLength < textAtom.Text.Length + 1)
            {
                long pos    = this.Reader.BaseStream.Position;
                uint length = this.Reader.ReadUInt32();

                ParagraphRun run = new ParagraphRun(this.Reader, false);
                run.Length = length;
                this.PRuns.Add(run);

                /*TraceLogger.DebugInternal("Read paragraph run. Before pos = {0}, after pos = {1} of {2}: {3}",
                 *  pos, this.Reader.BaseStream.Position, this.Reader.BaseStream.Length,
                 *  run);*/

                seenLength += length;
            }

            //TraceLogger.DebugInternal();

            seenLength = 0;
            while (seenLength < textAtom.Text.Length + 1)
            {
                uint length = this.Reader.ReadUInt32();

                CharacterRun run = new CharacterRun(this.Reader);
                run.Length = length;
                this.CRuns.Add(run);

                seenLength += length;
            }

            this.VerifyReadToEnd();
        }
 public TextPFExceptionAtom(BinaryReader _reader, uint size, uint typeCode, uint version, uint instance)
     : base(_reader, size, typeCode, version, instance)
 {
     Reader.ReadInt16();
     run = new ParagraphRun(Reader, true);
 }