private void onBehindName(char c)
 {
     if (c == '=' && result.Name.Length > 0)
     {
         state        = IN_VALUE;
         result.Value = stringElementParser.Parse();
     }
     else if (!ParserUtil.IsNewLineOrWhitespace(c))
     {
         throw new InvalidCharException("Invalid char behind param name", Data);
     }
 }
 private void onInitial(char c)
 {
     if (ParserUtil.IsNewLineOrWhitespace(c))
     {
         // Ignorieren
     }
     else if (ParserUtil.IsValidNameChar(c))
     {
         state        = IN_NAME;
         result.Name += c;
     }
     else
     {
         throw new InvalidCharException($"Invalid char {c} before param name", Data);
     }
 }
 private void onInName(char c)
 {
     if (c == '=' && result.Name.Length > 0)
     {
         state        = IN_VALUE;
         result.Value = stringElementParser.Parse();
     }
     else if (ParserUtil.IsNewLineOrWhitespace(c) && result.Name.Length > 0)
     {
         state = BEHIND_NAME;
     }
     else if (ParserUtil.IsValidNameChar(c))
     {
         result.Name += c;
     }
     else
     {
         throw new InvalidCharException("Invalid char in param name", Data);
     }
 }
        public override TmpNamedParameter Parse(string nothing)
        {
            state  = INITIAL;
            result = new TmpNamedParameter();

            while (Data.HasNext())
            {
                char c = Data.Next();
                switch (state)
                {
                case INITIAL:
                    onInitial(c);
                    break;

                case IN_NAME:
                    onInName(c);
                    break;

                case BEHIND_NAME:
                    onBehindName(c);
                    break;

                case IN_VALUE:
                    Data.Back(1);
                    return(result);

                default:
                    throw new InvalidOperationException("Unreachable state reached in StringElementParser!");
                }
            }

            if (state == IN_VALUE)
            {
                // Wenn das das letzte Zeichen in Data war und der Parameter abgeschlossen ist...
                return(result);
            }
            else
            {
                return(null);
            }
        }