public static string DelimiterToString(DelimiterEnum delimiter) { switch (delimiter) { case DelimiterEnum.C: return(":"); case DelimiterEnum.CC: return("::"); case DelimiterEnum.CCC: return(":::"); case DelimiterEnum.E: return("="); case DelimiterEnum.EC: return("=:"); case DelimiterEnum.ECC: return("=::"); case DelimiterEnum.EE: return("=="); case DelimiterEnum.CE: return(":="); } return(""); }
private string GetValue(ICharStream input, DelimiterEnum delimiter, int valueQuotesType, Interval valueInterval, int valueIndent) { if (valueInterval == null) { if (delimiter == DelimiterEnum.E || delimiter == DelimiterEnum.EE) { return(string.Empty); } return(null); } if (valueInterval.Begin.Index == -1) { return(string.Empty); } if (valueQuotesType == (int)QuotesEnum.Single || valueQuotesType == (int)QuotesEnum.Double) { var c = ((ITextSource)input).GetChar(valueInterval.End.Index); var missingValueQuote = valueQuotesType == (int)QuotesEnum.Single && c != '\'' || valueQuotesType == (int)QuotesEnum.Double && c != '"'; if (!missingValueQuote) { return(GetValueFromValueInterval((ITextSource)input, delimiter, valueQuotesType, valueInterval.Begin.Index + 1, valueInterval.End.Index - 1, valueIndent)); } return(GetValueFromValueInterval((ITextSource)input, delimiter, valueQuotesType, valueInterval.Begin.Index + 1, valueInterval.End.Index, valueIndent)); } return(GetValueFromValueInterval((ITextSource)input, delimiter, valueQuotesType, valueInterval.Begin.Index, valueInterval.End.Index, valueIndent)); }
private void SetValueType(DOM.Mapped.IMappedPair pair, DelimiterEnum delimiter, string value, int valueQuotesType) { switch (delimiter) { case DelimiterEnum.CE: pair.ValueType = ValueType.PairValue; return; case DelimiterEnum.EC: pair.ValueType = ValueType.Concatenation; return; case DelimiterEnum.ECC: pair.ValueType = ValueType.LiteralChoice; return; case DelimiterEnum.C: case DelimiterEnum.CC: case DelimiterEnum.CCC: pair.ValueType = ValueType.Object; return; } if (value == null) { return; } if (valueQuotesType == 1) { pair.ValueType = ValueType.SingleQuotedString; return; } if (valueQuotesType == 2) { pair.ValueType = ValueType.DoubleQuotedString; return; } if (delimiter == DelimiterEnum.E) { pair.ValueType = GetJsonValueType(value, ValueType.FreeOpenString); return; } if (delimiter == DelimiterEnum.EE) { pair.ValueType = GetJsonValueType(value, ValueType.OpenString); return; } }
public Pair CreateMappedPair(ICharStream input, int nameQuotesType, Interval nameInterval, DelimiterEnum delimiter, Interval delimiterInterval, int valueQuotesType, Interval valueInterval, int valueIndent) { var name = GetName(input, nameQuotesType, nameInterval); if (nameQuotesType > 0) { return new Mapped.Element() { Name = name, NameQuotesType = nameQuotesType, NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("@")) { return new Mapped.Attribute { NsPrefix = null, Name = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("!$")) { return new Mapped.AliasDefinition { Name = name.Substring(2), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("!#")) { return new Mapped.NamespaceDefinition { Name = name.Substring(2), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("!%")) { return new Mapped.Parameter { Name = name.Substring(2), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("!")) { return new Mapped.Document { Name = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("$")) { return new Mapped.Alias() { Name = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("%")) { return new Mapped.Argument() { Name = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent } } ; if (name.StartsWith("#")) { return new Mapped.Scope { NsPrefix = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval } } ; var tuple = Mapped.Element.GetNameAndNs(name, nameQuotesType); return(new Mapped.Element() { NsPrefix = string.IsNullOrEmpty(tuple.Item1) ? null : tuple.Item1, Name = tuple.Item2, NameQuotesType = nameQuotesType, NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent), ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = null, ValueIndent = valueIndent }); }
public static string GetValueFromValueInterval(ITextSource charStream, DelimiterEnum delimiter, int valueQuotesType, int begin, int end, int valueIndent) { var sb = new StringBuilder(); //Splitting text. Getting array of text lines var lines = charStream.GetText(begin, end).Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); bool folded = lines.Length > 1 && delimiter == DelimiterEnum.EE && (valueQuotesType == (int)QuotesEnum.None || valueQuotesType == (int)QuotesEnum.Double); var first = true; var firstEmptyLine = true; //If true then previous line was not empty therefor newline shouldn't be added var checkIfFirstLineIsEmpty = true; foreach (var item in lines) { var line = TrimEndOfFoldedStringLine(item, folded); if (checkIfFirstLineIsEmpty) //ignoring first empty line for open strings { checkIfFirstLineIsEmpty = false; if (valueQuotesType == (int)QuotesEnum.None && line == string.Empty) { first = false; continue; } } if (first) { sb.Append(line); first = false; continue; } //adding first line without appending new line symbol if (line.Length <= valueIndent) //this is just empty line { if (folded) //Folded string { if (firstEmptyLine) { firstEmptyLine = false; continue; //Ignore first empty line for folded string } } sb.AppendLine(); continue; } var lineIndent = line.TakeWhile(c => c == ' ' || c == '\t').Count(); if (lineIndent < valueIndent) { line = line.Substring(lineIndent); //Removing indents if (line.TrimEnd() == "===") { sb.AppendLine(); } break; // this is multiline string terminator === } line = line.Substring(valueIndent); //Removing indents if (sb.Length == 0) // If it is first line to be added just add it. No new line or spacing needed. { sb.Append(line); continue; } if (folded && firstEmptyLine) { sb.Append(" "); } if (!folded || !firstEmptyLine) { sb.AppendLine(); } firstEmptyLine = true; //reseting the flag for folded string logic sb.Append(line); //Removing indents } return(sb.ToString()); }
public Pair CreateMappedPair(ICharStream input, int nameQuotesType, Interval nameInterval, DelimiterEnum delimiter, Interval delimiterInterval, int valueQuotesType, Interval valueInterval, int valueIndent) { Pair pair; var name = PairFactoryForXml.GetNameText(input, nameQuotesType, nameInterval); var value = PairFactoryForXml.GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent, _context, (Module)_module); if (nameQuotesType > 0) { if (delimiter == DelimiterEnum.None) { value = PairFactoryForXml.GetValue(input, delimiter, nameQuotesType, nameInterval, 0, _context, (Module)_module); valueQuotesType = nameQuotesType; } pair = new Element { Name = name, NameQuotesType = nameQuotesType, NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; SetValueType((Element)pair, delimiter, value.Item1, valueQuotesType); } else if (name.StartsWith("@")) { pair = new DOM.Mapped.Attribute() { Name = name.Substring(1), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("!$")) { pair = new DOM.Mapped.AliasDefinition { Name = VerifyName(name.Substring(2), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("!#")) { pair = new DOM.Mapped.NamespaceDefinition { Name = VerifyNsName(name.Substring(2), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("!%")) { pair = new DOM.Mapped.Parameter { Name = VerifyNsName(name.Substring(2), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("!")) { pair = new DOM.Mapped.Document { Name = VerifyName(name.Substring(1), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("$")) { pair = new DOM.Mapped.Alias() { Name = VerifyName(name.Substring(1), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; } else if (name.StartsWith("%")) { pair = new DOM.Mapped.Argument() { Name = VerifyName(name.Substring(1), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType); } else if (name.StartsWith("#")) { pair = new DOM.Mapped.Scope { NsPrefix = VerifyScopeName(name.Substring(1), nameInterval, _module), NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval }; SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType); } else { pair = new Element { Name = name, NameQuotesType = nameQuotesType, NameInterval = nameInterval, Delimiter = delimiter, DelimiterInterval = delimiterInterval, Value = value.Item1, ValueQuotesType = valueQuotesType, ValueInterval = valueInterval, InterpolationItems = value.Item2, ValueIndent = valueIndent }; if (delimiter == DelimiterEnum.None) { value = PairFactoryForXml.GetValue(input, delimiter, nameQuotesType, nameInterval, 0, _context, (Module)_module); valueQuotesType = nameQuotesType; } } SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType); return(pair); }