コード例 #1
0
        private static Dictionary <int, (int indent, TamlValue value)> ReadLines(StreamReader reader)
        {
            var lines             = new Dictionary <int, (int indent, TamlValue value)>();
            int currentLineNumber = 0;

            while (!reader.EndOfStream)
            {
                var rawLine            = reader.ReadLine();
                var indent             = CountIntendedTabs(rawLine);
                var line               = rawLine.Trim();
                TamlKeyValuePair?value = null;

                if (string.IsNullOrEmpty(line))
                {
                    // empty line we ignore
                    currentLineNumber--;                     // we don't count empty lines
                    continue;
                }
                else if (line.Contains('\t'))
                {
                    // this is a KeyValuePair
                    var match = _KeyValuePair.Matches(line)[0].Groups;

                    value = new TamlKeyValuePair(match["key"].Value, new TamlValue(match["value"].Value));
                }
                else
                {
                    // this is a single value
                    value = new TamlKeyValuePair(line, null);
                }
                lines.Add(currentLineNumber, (indent, value));
                currentLineNumber++;
            }
            return(lines);
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: TGrannen/TAML
        private static ParsedDocument ReadLines(StreamReader reader)
        {
            var directives        = new List <TamlKeyValuePair>();
            var lines             = new Dictionary <int, (int indent, TamlKeyValuePair value)>();
            int currentLineNumber = 0;

            while (!reader.EndOfStream)
            {
                var rawLine = reader.ReadLine();

                // Handle comments - ignore and read next line
                if (rawLine?[0] == '#')
                {
                    continue;
                }

                var indent             = CountIntendedTabs(rawLine);
                var line               = rawLine.Trim();
                TamlKeyValuePair?value = null;

                if (string.IsNullOrEmpty(line))
                {
                    // empty line we ignore
                    currentLineNumber--;                     // we don't count empty lines
                    continue;
                }
                else if (line.Contains('\t'))
                {
                    // this is a KeyValuePair
                    var match = _KeyValuePair.Matches(line)[0].Groups;

                    value = new TamlKeyValuePair(match["key"].Value, new TamlValue(match["value"].Value));
                }
                else
                {
                    // this is a single value
                    value = new TamlKeyValuePair(line, null);
                }

                if (rawLine?[0] == '!')                 // This is a processor directive
                {
                    value.Key = value.Key.TrimStart('!', ' ');
                    directives.Add(value);
                }
                else
                {
                    lines.Add(currentLineNumber, (indent, value));
                    currentLineNumber++;
                }
            }

            return(new ParsedDocument(lines, directives));
        }
コード例 #3
0
ファイル: Parser.cs プロジェクト: TGrannen/TAML
 private static TamlValue GetPairIfNoValue(TamlKeyValuePair currentPair)
 {
     return(currentPair.HasValue && !string.IsNullOrEmpty(currentPair.Value) ? currentPair : new TamlKeyValuePair(currentPair !.Key, null));
 }