Exemplo n.º 1
0
        private static void ProcessAttr(TBaseParsedToken Token, TFormulaStack ParsedStack)
        {
            TAttrSpaceToken SpaceToken = Token as TAttrSpaceToken;

            if (SpaceToken != null)
            {
                switch (SpaceToken.SpaceType)
                {
                case FormulaAttr.bitFSpace: ParsedStack.FmSpaces += new String(' ', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFEnter: ParsedStack.FmSpaces += new String('\u000D', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFPreSpace: ParsedStack.FmPreSpaces += new String(' ', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFPreEnter: ParsedStack.FmPreSpaces += new String('\u000D', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFPostSpace: ParsedStack.FmPostSpaces += new String(' ', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFPostEnter: ParsedStack.FmPostSpaces += new String('\u000D', SpaceToken.SpaceCount); break;

                case FormulaAttr.bitFPreFmlaSpace: break;    //not handled;
                } //case
            }

            if (Token is TAttrSumToken)
            {
                string s = ParsedStack.Pop();
                ParsedStack.Push(ParsedStack.FmSpaces + TXlsFunction.GetData(4).Name + fts(TFormulaToken.fmOpenParen) + ParsedStack.FmPreSpaces + s + ParsedStack.FmPostSpaces + fts(TFormulaToken.fmCloseParen));
            }
        }
Exemplo n.º 2
0
        private static void WriteAttr(Stream Data, TBaseParsedToken Token, TTokenOffset StreamPos, int TokenPos)
        {
            if (Token is TAttrVolatileToken)
            {
                Data.WriteByte(0x01);
                WriteWord(Data, 0);
                return;
            }

            if (Token is TAttrSumToken)
            {
                Data.WriteByte(0x10);
                WriteWord(Data, 0);
                return;
            }

            if (Token is TAttrSpaceToken)
            {
                int             Id = 0x40;
                TAttrSpaceToken sp = (TAttrSpaceToken)Token;
                if (sp.Volatile)
                {
                    Id |= 0x01;
                }

                Data.WriteByte((byte)Id);
                Data.WriteByte((byte)sp.SpaceType);
                Data.WriteByte((byte)sp.SpaceCount);
                return;
            }

            TAttrOptIfToken oiftk = Token as TAttrOptIfToken;

            if (oiftk != null)
            {
                Data.WriteByte(0x02);
                StreamPos.Add((int)Data.Position, TokenPos);
                WriteWord(Data, 0);
                return;
            }

            TAttrOptChooseToken ctk = Token as TAttrOptChooseToken;

            if (ctk != null)
            {
                Data.WriteByte(0x04);
                WriteWord(Data, ctk.PositionOfNextPtg.Length - 1);
                StreamPos.Add((int)Data.Position, TokenPos);
                for (int i = 0; i < ctk.PositionOfNextPtg.Length; i++)
                {
                    WriteWord(Data, 0);
                }

                return;
            }

            TAttrGotoToken gtk = Token as TAttrGotoToken;

            if (gtk != null)
            {
                Data.WriteByte(0x08);
                StreamPos.Add((int)Data.Position, TokenPos);
                WriteWord(Data, 0);
                return;
            }

            XlsMessages.ThrowException(XlsErr.ErrInternal); //All tokens here should exist
        }