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)); } }
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 }