Пример #1
0
        public virtual void Write(string format, params object[] arg)
        {
            Debug.Assert(format != null);

            Buf.SetFormat(format, arg);

            if (ResolveUidMacros && Globals?.Engine != null)
            {
                Buf01.Clear();

                var rc = Globals.Engine.ResolveUidMacros(Buf.ToString(), Buf01, true, true);

                Debug.Assert(Globals.Engine.IsSuccess(rc));

                Buf.SetFormat("{0}", Buf01);
            }

            if (PunctSpaceCode != PunctSpaceCode.None)
            {
                Buf.SetFormat("{0}", PunctSpaceCode == PunctSpaceCode.Single ? SingleSpaceRegex.Replace(Buf.ToString(), @"$1 $3") : DoubleSpaceRegex.Replace(Buf.ToString(), @"$1  $3"));
            }

            if (WordWrap && Globals?.Engine != null)
            {
                Globals.Engine.WordWrap(Buf.ToString(), Buf);
            }

            if (SuppressNewLines)
            {
                while (Buf.IndexOf(ThreeNewLines) >= 0)
                {
                    Buf.Replace(ThreeNewLines, TwoNewLines);
                }

                NumNewLines += (Buf.StartsWith(TwoNewLines) ? 2 : Buf.StartsWith(Environment.NewLine) ? 1 : 0);

                while (NumNewLines > 2 && Buf.StartsWith(Environment.NewLine))
                {
                    Buf.Remove(0, Environment.NewLine.Length);

                    NumNewLines--;
                }

                var s = Buf.ToString();

                if (Buf.Length > 0 && !string.Equals(s, Environment.NewLine) && !string.Equals(s, TwoNewLines))
                {
                    NumNewLines = Buf.EndsWith(TwoNewLines) ? 2 : Buf.EndsWith(Environment.NewLine) ? 1 : 0;
                }
            }

            if (EnableOutput)
            {
                try
                {
                    App.OutputBufMutex.WaitOne();

                    EnforceOutputBufMaxSize();

                    if (Stdout)
                    {
                        App.OutputBuf.Append(Buf);
                    }
                    else
                    {
                        App.OutputBuf.Append(Buf);
                    }

                    RefreshOutputText();
                }
                catch (Exception ex)
                {
                    // do something
                }
                finally
                {
                    App.OutputBufMutex.ReleaseMutex();
                }
            }
        }
Пример #2
0
        public virtual void Write(string format, params object[] arg)
        {
            Debug.Assert(format != null);

            Buf.SetFormat(format, arg);

            if (ResolveUidMacros && Globals?.Engine != null)
            {
                Buf01.Clear();

                var rc = Globals.Engine.ResolveUidMacros(Buf.ToString(), Buf01, true, true);

                Debug.Assert(Globals.Engine.IsSuccess(rc));

                Buf.SetFormat("{0}", Buf01);
            }

            if (PunctSpaceCode != PunctSpaceCode.None)
            {
                Buf.SetFormat("{0}", PunctSpaceCode == PunctSpaceCode.Single ? SingleSpaceRegex.Replace(Buf.ToString(), @"$1 $3") : DoubleSpaceRegex.Replace(Buf.ToString(), @"$1  $3"));
            }

            if (WordWrap && Globals?.Engine != null)
            {
                Globals.Engine.WordWrap(Buf.ToString(), Buf);
            }

            if (SuppressNewLines)
            {
                while (Buf.IndexOf(ThreeNewLines) >= 0)
                {
                    Buf.Replace(ThreeNewLines, TwoNewLines);
                }

                NumNewLines += (Buf.StartsWith(TwoNewLines) ? 2 : Buf.StartsWith(Environment.NewLine) ? 1 : 0);

                while (NumNewLines > 2 && Buf.StartsWith(Environment.NewLine))
                {
                    Buf.Remove(0, Environment.NewLine.Length);

                    NumNewLines--;
                }

                var s = Buf.ToString();

                if (Buf.Length > 0 && !s.Equals(Environment.NewLine) && !s.Equals(TwoNewLines))
                {
                    NumNewLines = Buf.EndsWith(TwoNewLines) ? 2 : Buf.EndsWith(Environment.NewLine) ? 1 : 0;
                }
            }

            if (EnableOutput)
            {
                if (Stdout)
                {
                    Console.Out.Write("{0}", Buf);
                }
                else
                {
                    Console.Error.Write("{0}", Buf);
                }
            }
        }