示例#1
0
        private void TerminateChunk(StringBuilder accumulator, MemFileState futureState, bool convertExample, bool noCheck)
        {
            string consumeAndTrim = accumulator.ConsumeAndTrimEndAndNewlines();

            if (consumeAndTrim.Length > 0)
            {
                switch (_currentState)
                {
                case MemFileState.Signatures:
                {
                    var sigs = consumeAndTrim.SplitLines();
                    foreach (var sig in sigs)
                    {
                        SignatureList.Add(sig);
                    }
                    break;
                }

                case MemFileState.Example:
                {
                    var oneExample = new ExampleBlock(consumeAndTrim)
                    {
                        IsNoCheck        = noCheck,
                        IsConvertExample = convertExample
                    };
                    TextBlocks.Add(oneExample);
                    break;
                }

                case MemFileState.Description:
                {
                    if (!_isSummaryFound)
                    {
                        var lines = consumeAndTrim.SplitLines();
                        Summary         = lines[0];
                        consumeAndTrim  = consumeAndTrim.Replace(Summary, "");
                        consumeAndTrim  = consumeAndTrim.TrimEndAndNewlines();
                        _isSummaryFound = true;
                        if (consumeAndTrim.Length == 0)
                        {
                            break;
                        }
                    }
                    var oneText = new DescriptionBlock(consumeAndTrim);
                    TextBlocks.Add(oneText);
                    break;
                }

                case MemFileState.Param:
                {
                    consumeAndTrim = consumeAndTrim.Replace("@param ", "");
                    int              index    = consumeAndTrim.IndexOfAny(new char[] { ' ', '\t' });
                    string           name     = consumeAndTrim.Substring(0, index).Trim();
                    string           doc      = consumeAndTrim.Substring(index + 1).Trim();
                    ParameterWithDoc paramDoc = GetOrCreateParameter(name);
                    paramDoc.Doc = doc;
                    break;
                }

                case MemFileState.Return:
                {
                    consumeAndTrim = consumeAndTrim.Replace("@returns ", "");
                    consumeAndTrim = consumeAndTrim.Replace("@return ", "");

                    GetOrCreateReturnDoc().Doc = consumeAndTrim;
                    break;
                }
                }
            }
            _currentState = futureState;
        }
示例#2
0
 private void TerminateChunk(StringBuilder accumulator, MemFileState futureState)
 {
     TerminateChunk(accumulator, futureState, false, false);
 }
示例#3
0
        internal void ProcessOneMeaningfulBlock(ref List <string> remainingLines)
        {
            var accumulator = new StringBuilder();

            bool convertExample = false;
            bool noCheck        = false;
            bool firstSignatureBlockProcessed = false;
            bool foundNextSignatureBlock      = false;

            _currentState = DefaultMemFileState;

            while (remainingLines.Any() && !foundNextSignatureBlock)
            {
                var line      = remainingLines.First();
                var shortLine = line.TrimStart();

                if (shortLine.StartsWith(SignatureOpen))
                {
                    if (firstSignatureBlockProcessed)
                    {
                        foundNextSignatureBlock = true;
                        continue;
                    }
                    remainingLines.RemoveAt(0);
                    TerminateChunk(accumulator, MemFileState.Signatures);
                    continue;
                }
                remainingLines.RemoveAt(0);

                if (shortLine.StartsWith(SignatureClose))
                {
                    Assert.AreEqual(MemFileState.Signatures, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState);
                    firstSignatureBlockProcessed = true;
                    continue;
                }
                if (shortLine.StartsWith("CONVERTEXAMPLE") || shortLine.StartsWith("NOCHECK"))
                {
                    convertExample = shortLine.StartsWith("CONVERTEXAMPLE");
                    noCheck        = shortLine.StartsWith("NOCHECK");
                    Assert.IsFalse(convertExample && noCheck);
                    if (_currentState != MemFileState.Example)
                    {
                        TerminateChunk(accumulator, MemFileState.ExampleMarkup, convertExample, noCheck);
                    }
                    continue;
                }

                if (shortLine.StartsWith("BEGIN EX"))
                {
                    if (shortLine.Contains("NOCHECK"))
                    {
                        noCheck = true;
                    }
                    //Assert.AreNotEqual(MemFileState.Example, m_CurrentState);
                    if (_currentState == MemFileState.ExampleMarkup)
                    {
                        _currentState = MemFileState.Example;
                    }
                    TerminateChunk(accumulator, MemFileState.Example);
                    continue;
                }
                if (shortLine.StartsWith("END EX"))
                {
                    Assert.AreEqual(MemFileState.Example, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState, convertExample, noCheck);
                    convertExample = noCheck = false;
                    continue;
                }
                if (shortLine.StartsWith("@param"))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Param);
                }
                if (shortLine.StartsWith("@return"))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Return);
                }

                accumulator.AppendUnixLine(line);
            }

            //make sure we're not in the middle of an example when we reached EOF or next signature marker
            Assert.AreNotEqual(MemFileState.Example, _currentState);

            TerminateChunk(accumulator, DefaultMemFileState);
        }
        private void TerminateChunk(StringBuilder accumulator, MemFileState futureState, bool convertExample = false, bool noCheck = false)
        {
            string consumeAndTrim = accumulator.ConsumeAndTrimEndAndNewlines();
            if (consumeAndTrim.Length > 0)
            {
                switch (_currentState)
                {
                    case MemFileState.Signatures:
                        {
                            var sigs = consumeAndTrim.SplitLines();
                            foreach (var sig in sigs)
                                SignatureList.Add(sig);
                            break;
                        }
                    case MemFileState.Example:
                        {
                            var oneExample = new ExampleBlock(consumeAndTrim)
                                                 {
                                                     IsNoCheck = noCheck,
                                                     IsConvertExample = convertExample
                                                 };
                            TextBlocks.Add(oneExample);
                            break;
                        }

                    case MemFileState.Description:
                        {
                            if (!_isSummaryFound)
                            {
                                var lines = consumeAndTrim.SplitLines();
                                Summary = lines[0];
                                consumeAndTrim = consumeAndTrim.Replace(Summary, "");
                                consumeAndTrim = consumeAndTrim.TrimEndAndNewlines();
                                _isSummaryFound = true;
                                if (consumeAndTrim.Length == 0)
                                    break;
                            }
                            var oneText = new DescriptionBlock(consumeAndTrim);
                            TextBlocks.Add(oneText);
                            break;
                        }
                    case MemFileState.Param:
                        {
                            consumeAndTrim = consumeAndTrim.Replace("@param ", "");
                            int index = consumeAndTrim.IndexOfAny(new char[] {' ', '\t'});
                            string name = consumeAndTrim.Substring(0, index).Trim ();
                            string doc = consumeAndTrim.Substring(index + 1).Trim ();
                            ParameterWithDoc paramDoc = GetOrCreateParameter (name);
                            paramDoc.Doc = doc;
                            break;
                        }
                    case MemFileState.Return:
                        {
                            consumeAndTrim = consumeAndTrim.Replace("@returns ", "");
                            consumeAndTrim = consumeAndTrim.Replace("@return ", "");

                            GetOrCreateReturnDoc ().Doc = consumeAndTrim;
                            break;
                        }
                }
            }
            _currentState = futureState;
        }
        public void ProcessOneMeaningfulBlock(ref List<string> remainingLines)
        {
            var accumulator = new StringBuilder();

            bool convertExample = false;
            bool noCheck = false;
            int nSigBlocksFound = 0;
            _currentState = DefaultMemFileState;

            while (remainingLines.Any() && nSigBlocksFound < 2)
            {
                var line = remainingLines.First();
                var shortLine = line.TrimStart();

                if (shortLine.StartsWith(ParserToken.SignatureOpen))
                {
                    nSigBlocksFound++;

                    //if we detect a second SignatureOpen token, this is the beginning of a new block,
                    //so we don't consume this line
                    if (nSigBlocksFound == 2)
                        continue;

                    remainingLines.RemoveAt(0);
                    TerminateChunk(accumulator, MemFileState.Signatures);
                    continue;
                }
                remainingLines.RemoveAt(0);

                if (shortLine.StartsWith(ParserToken.SignatureClose))
                {
                    Assert.AreEqual(MemFileState.Signatures, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState);
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.ConvertExample) || shortLine.StartsWith(ParserToken.NoCheck))
                {
                    convertExample = shortLine.StartsWith(ParserToken.ConvertExample);
                    noCheck = shortLine.StartsWith(ParserToken.NoCheck);
                    Assert.IsFalse(convertExample && noCheck);
                    if (_currentState != MemFileState.Example)
                        TerminateChunk(accumulator, MemFileState.ExampleMarkup, convertExample, noCheck);
                    continue;
                }

                if (shortLine.StartsWith(ParserToken.BeginEx))
                {
                    if (shortLine.Contains(ParserToken.NoCheck))
                        noCheck = true;
                    //Assert.AreNotEqual(MemFileState.Example, m_CurrentState);
                    if (_currentState == MemFileState.ExampleMarkup)
                        _currentState = MemFileState.Example;
                    TerminateChunk(accumulator, MemFileState.Example);
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.EndEx))
                {
                    Assert.AreEqual(MemFileState.Example, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState, convertExample, noCheck);
                    convertExample = noCheck = false;
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.Param))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Param);
                }
                if (shortLine.StartsWith(ParserToken.Return))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Return);
                }

                accumulator.AppendUnixLine(line);
            }

            //make sure we're not in the middle of an example when we reached EOF or next signature marker
            Assert.AreNotEqual(MemFileState.Example, _currentState);

            TerminateChunk(accumulator, DefaultMemFileState);
        }
示例#6
0
        public void ProcessOneMeaningfulBlock(ref List <string> remainingLines)
        {
            var accumulator = new StringBuilder();

            bool convertExample  = false;
            bool noCheck         = false;
            int  nSigBlocksFound = 0;

            _currentState = DefaultMemFileState;

            while (remainingLines.Any() && nSigBlocksFound < 2)
            {
                var line      = remainingLines.First();
                var shortLine = line.TrimStart();

                if (shortLine.StartsWith(ParserToken.SignatureOpen))
                {
                    nSigBlocksFound++;

                    //if we detect a second SignatureOpen token, this is the beginning of a new block,
                    //so we don't consume this line
                    if (nSigBlocksFound == 2)
                    {
                        continue;
                    }

                    remainingLines.RemoveAt(0);
                    TerminateChunk(accumulator, MemFileState.Signatures);
                    continue;
                }
                remainingLines.RemoveAt(0);

                if (shortLine.StartsWith(ParserToken.SignatureClose))
                {
                    Assert.AreEqual(MemFileState.Signatures, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState);
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.ConvertExample) || shortLine.StartsWith(ParserToken.NoCheck))
                {
                    convertExample = shortLine.StartsWith(ParserToken.ConvertExample);
                    noCheck        = shortLine.StartsWith(ParserToken.NoCheck);
                    Assert.IsFalse(convertExample && noCheck);
                    if (_currentState != MemFileState.Example)
                    {
                        TerminateChunk(accumulator, MemFileState.ExampleMarkup, convertExample, noCheck);
                    }
                    continue;
                }

                if (shortLine.StartsWith(ParserToken.BeginEx))
                {
                    if (shortLine.Contains(ParserToken.NoCheck))
                    {
                        noCheck = true;
                    }
                    //Assert.AreNotEqual(MemFileState.Example, m_CurrentState);
                    if (_currentState == MemFileState.ExampleMarkup)
                    {
                        _currentState = MemFileState.Example;
                    }
                    TerminateChunk(accumulator, MemFileState.Example);
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.EndEx))
                {
                    Assert.AreEqual(MemFileState.Example, _currentState);
                    TerminateChunk(accumulator, DefaultMemFileState, convertExample, noCheck);
                    convertExample = noCheck = false;
                    continue;
                }
                if (shortLine.StartsWith(ParserToken.Param))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Param);
                }
                if (shortLine.StartsWith(ParserToken.Return))
                {
                    Assert.AreNotEqual(MemFileState.ExampleMarkup, _currentState);
                    TerminateChunk(accumulator, MemFileState.Return);
                }

                accumulator.AppendUnixLine(line);
            }

            //make sure we're not in the middle of an example when we reached EOF or next signature marker
            Assert.AreNotEqual(MemFileState.Example, _currentState);

            TerminateChunk(accumulator, DefaultMemFileState);
        }