Пример #1
0
    string MakeString(IEnumerable<Token> tokens)
    {
      var sb = new IndentingStringBuilder(IndentIncrement);

      foreach (var token in tokens)
      {
        MakeTokenString(token, sb);
      }

      return sb.ToString();
    }
Пример #2
0
        string MakeString(IEnumerable <Token> tokens)
        {
            var sb = new IndentingStringBuilder(IndentIncrement);

            foreach (var token in tokens)
            {
                MakeTokenString(token, sb);
            }

            return(sb.ToString());
        }
Пример #3
0
        string MakeString(List <Token> tokens, Dictionary <Reference, string> referencePaths)
        {
            var sb = new IndentingStringBuilder(IndentIncrement);

            for (int i = 0; i < tokens.Count; i++)
            {
                int skip = MakeStringFromToken(tokens, i, referencePaths, sb);
                i += skip;
            }

            return(sb.ToString());
        }
Пример #4
0
        void MakeTokenString(Token token, IndentingStringBuilder sb, Stack <string> endTags, Token previous)
        {
            string tagName = GetTagName(token);

            switch (token.Tokenkind)
            {
            case TokenType.StartScope:
                sb.Indent();
                endTags.Push(GetTagName(previous));
                break;

            case TokenType.EndScope:
                sb.DeIndent();
                sb.AppendFormatLine("</{0}>", endTags.Pop());
                break;

            case TokenType.StartEnumeration:
                sb.Indent();
                sb.AppendFormatLine("<Enumeration>");
                endTags.Push(GetTagName(previous));
                break;

            case TokenType.EndEnumeration:
                sb.AppendFormatLine("</Enumeration>");
                sb.DeIndent();
                sb.AppendFormatLine("</{0}>", endTags.Pop());
                break;

            case TokenType.SimpleFieldValue:
                sb.AppendFormatLine("<{0}>{1}</{0}>", tagName, token.Value);
                break;

            case TokenType.SeenBeforeWithReference:
                var seenBeforeReference = string.Format(" ref='{0}'", token.ReferenceNo.Number);
                sb.AppendFormatLine("<{0}{1} />", tagName, seenBeforeReference);
                break;

            case TokenType.FieldnameWithTypeAndReference:
                var optionReferenceInfo = token.ReferenceNo != null
                      ? string.Format(" ref='{0}'", token.ReferenceNo.Number)
                      : "";

                var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType)
                                .Replace('<', '(')
                                .Replace('>', ')');
                sb.AppendFormatLine("<{0} type='{1}'{2}>", tagName, fieldType, optionReferenceInfo);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #5
0
        string MakeString(IEnumerable <Token> tokens)
        {
            var sb = new IndentingStringBuilder(configuration);

            foreach (var token in tokens)
            {
                MakeTokenString(token, sb);
            }

            sb.TrimLast();

            return(sb.ToString());
        }
Пример #6
0
        string MakeString(IEnumerable<Token> tokens)
        {
            var sb = new IndentingStringBuilder(configuration);

            foreach (var token in tokens)
            {
                MakeTokenString(token, sb);
            }

            sb.TrimLast();

            return sb.ToString();
        }
Пример #7
0
        string MakeString(List <Token> tokens, Dictionary <Reference, string> referencePaths)
        {
            var sb = new IndentingStringBuilder(configuration.IndentIncrement, configuration.NewLineDefinition);

            for (int i = 0; i < tokens.Count; i++)
            {
                int skip = MakeStringFromToken(tokens, i, referencePaths, sb);
                i += skip;
            }

            sb.TrimLast();
            return(sb.ToString());
        }
Пример #8
0
    void MakeTokenString(Token token, IndentingStringBuilder sb, Stack<string> endTags, Token previous)
    {
      string tagName = GetTagName(token);

      switch (token.Tokenkind)
      {
        case TokenType.StartScope:
          sb.Indent();
          endTags.Push(GetTagName(previous));
          break;

        case TokenType.EndScope:
          sb.DeIndent();
          sb.AppendFormatLine("</{0}>", endTags.Pop());
          break;

        case TokenType.StartEnumeration:
          sb.Indent();
          sb.AppendFormatLine("<Enumeration>");
          endTags.Push(GetTagName(previous));
          break;

        case TokenType.EndEnumeration:
          sb.AppendFormatLine("</Enumeration>");
          sb.DeIndent();
          sb.AppendFormatLine("</{0}>", endTags.Pop());
          break;

        case TokenType.SimpleFieldValue:
          sb.AppendFormatLine("<{0}>{1}</{0}>", tagName, token.Value);
          break;

        case TokenType.SeenBeforeWithReference:
          var seenBeforeReference = string.Format(" ref='{0}'", token.ReferenceNo.Number);
          sb.AppendFormatLine("<{0}{1} />", tagName, seenBeforeReference);
          break;

        case TokenType.FieldnameWithTypeAndReference:
          var optionReferenceInfo = token.ReferenceNo != null
            ? string.Format(" ref='{0}'", token.ReferenceNo.Number)
            : "";
          var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType)
              .Replace('<', '(')
              .Replace('>', ')');
          sb.AppendFormatLine("<{0} type='{1}'{2}>", tagName, fieldType, optionReferenceInfo);
          break;

        default:
          throw new ArgumentOutOfRangeException();
      }
    }
Пример #9
0
    string MakeString(IEnumerable<Token> tokens)
    {
      var sb = new IndentingStringBuilder(IndentIncrement);

      Token previous = null;
      var endTags = new Stack<string>();
      foreach (var token in tokens)
      {
        MakeTokenString(token, sb, endTags, previous);
        previous = token;
      }

      if(endTags.Any())
        throw new Exception("Internal logic error");

      return sb.ToString();
    }
Пример #10
0
        string MakeString(IEnumerable <Token> tokens)
        {
            var sb = new IndentingStringBuilder(IndentIncrement);

            Token previous = null;
            var   endTags  = new Stack <string>();

            foreach (var token in tokens)
            {
                MakeTokenString(token, sb, endTags, previous);
                previous = token;
            }

            if (endTags.Any())
            {
                throw new Exception("Internal logic error");
            }

            return(sb.ToString());
        }
Пример #11
0
        void MakeTokenString(Token token, IndentingStringBuilder sb)
        {
            switch (token.Tokenkind)
            {
            case TokenType.StartScope:
                sb.AppendFormatLine("{{");
                sb.Indent();
                break;

            case TokenType.EndScope:
                sb.DeIndent();
                sb.AppendFormatLine("}}");
                break;

            case TokenType.StartEnumeration:
            case TokenType.EndEnumeration:
                break;

            case TokenType.SimpleFieldValue:
                sb.AppendFormatLine("{0}{1}", MakeFieldnameAssign(token), token.Value);
                break;

            case TokenType.SeenBeforeWithReference:
                var seenBeforeReference = " -> " + token.ReferenceNo.Number;
                sb.AppendFormatLine("{0}{1}", MakeFieldnameAssign(token), seenBeforeReference);
                break;

            case TokenType.FieldnameWithTypeAndReference:
                var optionReferenceInfo = token.ReferenceNo == null
            ? ""
            : string.Format(", ref: {0}", token.ReferenceNo.Number);

                var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType);

                sb.AppendFormatLine("{0}new {1}(){2}", MakeFieldnameAssign(token), fieldType, optionReferenceInfo);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #12
0
    void MakeTokenString(Token token, IndentingStringBuilder sb)
    {
      switch (token.Tokenkind)
      {
        case TokenType.StartScope:
          sb.AppendFormatLine("{{");
          sb.Indent();
          break;

        case TokenType.EndScope:
          sb.DeIndent();
          sb.AppendFormatLine("}}");
          break;

        case TokenType.StartEnumeration:
        case TokenType.EndEnumeration:
          break;

        case TokenType.SimpleFieldValue:
          sb.AppendFormatLine("{0}{1}", MakeFieldnameAssign(token), token.Value);
          break;

        case TokenType.SeenBeforeWithReference:
          var seenBeforeReference = " -> " + token.ReferenceNo.Number;
          sb.AppendFormatLine("{0}{1}", MakeFieldnameAssign(token), seenBeforeReference);
          break;

        case TokenType.FieldnameWithTypeAndReference:
          var optionReferenceInfo = token.ReferenceNo == null
            ? ""
            : string.Format(", ref: {0}", token.ReferenceNo.Number);

          var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType);

          sb.AppendFormatLine("{0}new {1}(){2}", MakeFieldnameAssign(token), fieldType, optionReferenceInfo);
          break;

        default:
          throw new ArgumentOutOfRangeException();
      }
    }
Пример #13
0
        string MakeString(List<Token> tokens)
        {
            var sb = new IndentingStringBuilder(configuration);

            Token previous = null;
            var endTags = new Stack<string>();
            int pos = 0;
            for (int i = 0; i < tokens.Count; i++)
            {
                var token = tokens[i];
                int skip = MakeTokenString(tokens, pos++, sb, endTags, previous);
                previous = token;
                i += skip;
            }

            if (endTags.Any())
                throw new Exception("Internal logic error");

            sb.TrimLast();
            return sb.ToString();
        }
Пример #14
0
        string MakeString(List <Token> tokens)
        {
            var sb = new IndentingStringBuilder(configuration);

            Token previous = null;
            var   endTags  = new Stack <string>();
            int   pos      = 0;

            for (int i = 0; i < tokens.Count; i++)
            {
                var token = tokens[i];
                int skip  = MakeTokenString(tokens, pos++, sb, endTags, previous);
                previous = token;
                i       += skip;
            }

            if (endTags.Any())
            {
                throw new Exception("Internal logic error");
            }

            sb.TrimLast();
            return(sb.ToString());
        }
Пример #15
0
    int MakeStringFromToken(List<Token> tokens, int pos, Dictionary<Reference, string> referencePaths, IndentingStringBuilder sb)
    {
      var token = tokens[pos];

      int skip = 0;

      string fieldnameColon = null;
      switch (token.Tokenkind)
      {
        case TokenType.StartScope:
          sb.AppendFormatLine("{{");
          sb.Indent();
          break;

        case TokenType.EndScope:
          sb.DeIndent();
          sb.AppendFormatLine("}}");
          break;

        case TokenType.StartEnumeration:
          sb.AppendFormatLine("[");
          sb.Indent();
          break;

        case TokenType.EndEnumeration:
          sb.DeIndent();
          sb.AppendFormatLine("]{0}", OptionalComma(tokens, pos));
          break;

        case TokenType.SimpleFieldValue:
          {
            // fieldname is empty if the ROOT-element-name has not been supplied
            fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" : ");

            var optinalComma = OptionalComma(tokens, pos);
            sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, token.Value, optinalComma);
            break;
          }

        case TokenType.SeenBeforeWithReference:
          {
            // fieldname is empty if the ROOT-element-name has not been supplied
            fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" : ");

            var seenBeforeReference = " " + referencePaths[token.ReferenceNo];
            sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, seenBeforeReference, OptionalComma(tokens, pos));
            break;
          }

        case TokenType.FieldnameWithTypeAndReference:
          // if we are part of an idex, do not print the field name as it has alreadty been printed
          if (token.Field.SimpleKeyInArrayOrDictionary == null)
          {
            // fieldname is empty if the ROOT-element-name has not been supplied
            fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" :");

            // inline-print empty collections
            string optionalValue = "";
            bool isNextEmptyEnumeration = pos + 2 < tokens.Count // TODO optimize by introducing a variable holding "count-2"
                    && tokens[pos + 1].Tokenkind == TokenType.StartEnumeration
                    && tokens[pos + 2].Tokenkind == TokenType.EndEnumeration;
            if (isNextEmptyEnumeration)
            {
              skip += 2;
              optionalValue = (fieldnameColon == "" ? "" : " ") + "[]";
            }

            sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, optionalValue, OptionalComma(tokens, pos+skip));
          }
          break;

        default:
          throw new ArgumentOutOfRangeException();
      }

      return skip;
    }
Пример #16
0
    string MakeString(List<Token> tokens, Dictionary<Reference, string> referencePaths)
    {
      var sb = new IndentingStringBuilder(IndentIncrement);

      for (int i = 0; i < tokens.Count; i++)
      {
        int skip = MakeStringFromToken(tokens, i, referencePaths, sb);
        i += skip;
      }

      return sb.ToString();
    }
Пример #17
0
        int MakeTokenString(List<Token> tokens, int pos, IndentingStringBuilder sb, Stack<string> endTags, Token previous)
        {
            int skip = 0;
            Token token = tokens[pos];
            string tagName = GetTagName(token);

            switch (token.Tokenkind)
            {
                case TokenType.StartScope:
                    sb.Indent();
                    endTags.Push(GetTagName(previous));
                    break;

                case TokenType.EndScope:
                    sb.DeIndent();
                    sb.AppendFormatLine("</{0}>", endTags.Pop());
                    break;

                case TokenType.StartEnumeration:
                    if (pos + 1 < tokens.Count)
                    {
                        var nextToken = tokens[pos + 1];

                        if (nextToken.Tokenkind == TokenType.EndEnumeration)
                        {
                            sb.AppendFormatLine("<Enumeration></Enumeration>");
                            skip++;
                            break;
                        }

                        if (nextToken.Tokenkind == TokenType.SimpleFieldValue
                            && nextToken.Field.SimpleKeyInArrayOrDictionary != null)
                        {
                            tagName = GetTagName(nextToken);
                            endTags.Push(tagName);
                            sb.AppendFormatLine("<{0}>", tagName);
                            sb.Indent();
                            sb.AppendFormatLine("<Enumeration>");
                            break;
                        }
                    }

                    endTags.Push(previous == null ? null : GetTagName(previous));
                    sb.Indent();
                    sb.AppendFormatLine("<Enumeration>");
                    break;

                case TokenType.EndEnumeration:
                    sb.AppendFormatLine("</Enumeration>");
                    sb.DeIndent();
                    var endtag = endTags.Pop();
                    if(endtag != null)
                       sb.AppendFormatLine("</{0}>", endtag);
                    break;

                case TokenType.SimpleFieldValue:
                    if (token.Field.SimpleKeyInArrayOrDictionary != null)
                    {
                        sb.AppendFormatLine(
                            "<key>{0}</key><value>{1}</value>",
                            token.Field.SimpleKeyInArrayOrDictionary,
                            token.Value);
                    }
                    else
                    {
                        sb.AppendFormatLine("<{0}>{1}</{0}>", tagName, token.Value);
                    }
                    break;

                case TokenType.SeenBeforeWithReference:
                    var seenBeforeReference = string.Format(" ref='{0}'", token.ReferenceNo.Number);
                    sb.AppendFormatLine("<{0}{1} />", tagName, seenBeforeReference);
                    break;

                case TokenType.FieldnameWithTypeAndReference:
                    var optionReferenceInfo = token.ReferenceNo != null
                      ? string.Format(" ref='{0}'", token.ReferenceNo.Number)
                      : "";
                    var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType)
                        .Replace('<', '(')
                        .Replace('>', ')');
                    sb.AppendFormatLine("<{0} type='{1}'{2}>", tagName, fieldType, optionReferenceInfo);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
            }

            return skip;
        }
Пример #18
0
        int  MakeTokenString(List <Token> tokens, int pos, IndentingStringBuilder sb, Stack <string> endTags, Token previous)
        {
            int    skip    = 0;
            Token  token   = tokens[pos];
            string tagName = GetTagName(token);

            switch (token.Tokenkind)
            {
            case TokenType.StartScope:
                sb.Indent();
                endTags.Push(GetTagName(previous));
                break;

            case TokenType.EndScope:
                sb.DeIndent();
                sb.AppendFormatLine("</{0}>", endTags.Pop());
                break;

            case TokenType.StartEnumeration:
                if (pos + 1 < tokens.Count)
                {
                    var nextToken = tokens[pos + 1];

                    if (nextToken.Tokenkind == TokenType.EndEnumeration)
                    {
                        sb.AppendFormatLine("<Enumeration></Enumeration>");
                        skip++;
                        break;
                    }

                    if (nextToken.Tokenkind == TokenType.SimpleFieldValue &&
                        nextToken.Field.SimpleKeyInArrayOrDictionary != null)
                    {
                        tagName = GetTagName(nextToken);
                        endTags.Push(tagName);
                        sb.AppendFormatLine("<{0}>", tagName);
                        sb.Indent();
                        sb.AppendFormatLine("<Enumeration>");
                        break;
                    }
                }

                endTags.Push(previous == null ? null : GetTagName(previous));
                sb.Indent();
                sb.AppendFormatLine("<Enumeration>");
                break;

            case TokenType.EndEnumeration:
                sb.AppendFormatLine("</Enumeration>");
                sb.DeIndent();
                var endtag = endTags.Pop();
                if (endtag != null)
                {
                    sb.AppendFormatLine("</{0}>", endtag);
                }
                break;

            case TokenType.SimpleFieldValue:
                if (token.Field.SimpleKeyInArrayOrDictionary != null)
                {
                    sb.AppendFormatLine(
                        "<key>{0}</key><value>{1}</value>",
                        token.Field.SimpleKeyInArrayOrDictionary,
                        token.Value);
                }
                else
                {
                    sb.AppendFormatLine("<{0}>{1}</{0}>", tagName, token.Value);
                }
                break;

            case TokenType.SeenBeforeWithReference:
                var seenBeforeReference = string.Format(" ref='{0}'", token.ReferenceNo.Number);
                sb.AppendFormatLine("<{0}{1} />", tagName, seenBeforeReference);
                break;

            case TokenType.FieldnameWithTypeAndReference:
                var optionReferenceInfo = token.ReferenceNo != null
                      ? string.Format(" ref='{0}'", token.ReferenceNo.Number)
                      : "";

                var fieldType = OutputFormatterHelpers.MakeReadable(token.FieldType)
                                .Replace('<', '(')
                                .Replace('>', ')');
                sb.AppendFormatLine("<{0} type='{1}'{2}>", tagName, fieldType, optionReferenceInfo);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(skip);
        }
Пример #19
0
        int MakeStringFromToken(List <Token> tokens, int pos, Dictionary <Reference, string> referencePaths, IndentingStringBuilder sb)
        {
            var token = tokens[pos];

            int skip = 0;

            string fieldnameColon = null;

            switch (token.Tokenkind)
            {
            case TokenType.StartScope:
                sb.AppendFormatLine("{{");
                sb.Indent();
                break;

            case TokenType.EndScope:
                sb.DeIndent();
                sb.AppendFormatLine("}}");
                break;

            case TokenType.StartEnumeration:
            {
                fieldnameColon = "";
                if (pos + 1 < tokens.Count)
                {
                    var nextToken = tokens[pos + 1];

                    if (nextToken.Tokenkind == TokenType.EndEnumeration)
                    {
                        sb.AppendFormatLine("[]");
                        skip++;
                        break;
                    }

                    if (nextToken.Tokenkind == TokenType.SimpleFieldValue &&
                        nextToken.Field.SimpleKeyInArrayOrDictionary != null &&
                        nextToken.Field.Name != null)
                    {
                        fieldnameColon = string.Format("\"{0}\" : ", nextToken.Field.Name);
                    }
                }
                sb.AppendFormatLine("{0}[", fieldnameColon);
                sb.Indent();
            }
            break;

            case TokenType.EndEnumeration:
                sb.DeIndent();
                sb.AppendFormatLine("]{0}", OptionalComma(tokens, pos));
                break;

            case TokenType.SimpleFieldValue:
            {
                if (token.Field.SimpleKeyInArrayOrDictionary == null)
                {
                    // fieldname is empty if the ROOT-element-name has not been supplied
                    fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" : ");
                    var optinalComma = OptionalComma(tokens, pos);
                    sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, token.Value, optinalComma);
                }
                else
                {
                    fieldnameColon = "";
                    var keyval = string.Format("{{ {0} : {1} }}", token.Field.SimpleKeyInArrayOrDictionary, token.Value);

                    sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, keyval, OptionalComma(tokens, pos + skip));
                }

                break;
            }

            case TokenType.SeenBeforeWithReference:
            {
                // fieldname is empty if the ROOT-element-name has not been supplied
                fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" : ");

                var seenBeforeReference = " " + referencePaths[token.ReferenceNo];
                sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, seenBeforeReference, OptionalComma(tokens, pos));
                break;
            }

            case TokenType.FieldnameWithTypeAndReference:
                // if we are part of an idex, do not print the field name as it has alreadty been printed
                if (token.Field.SimpleKeyInArrayOrDictionary == null)
                {
                    // fieldname is empty if the ROOT-element-name has not been supplied
                    fieldnameColon = GetEmptyOrFieldname(token, "\"{0}\" :");

                    // inline-print empty collections
                    string optionalValue          = "";
                    bool   isNextEmptyEnumeration = pos + 2 < tokens.Count && // TODO optimize by introducing a variable holding "count-2"
                                                    tokens[pos + 1].Tokenkind == TokenType.StartEnumeration &&
                                                    tokens[pos + 2].Tokenkind == TokenType.EndEnumeration;
                    if (isNextEmptyEnumeration)
                    {
                        skip         += 2;
                        optionalValue = (fieldnameColon == "" ? "" : " ") + "[]";
                    }

                    sb.AppendFormatLine("{0}{1}{2}", fieldnameColon, optionalValue, OptionalComma(tokens, pos + skip));
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(skip);
        }