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; }
private void TerminateChunk(StringBuilder accumulator, MemFileState futureState) { TerminateChunk(accumulator, futureState, false, false); }
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); }
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); }