int LookBackwards(AufzaehlungParser.Token[] tokens, int position, int minPosition, out bool foundSomething)
        {
            var relativPosition = 0;
            foundSomething = false;

            for (int i = position - 1; i > Math.Max(position - 1 - MaxSteps, 0); i--, relativPosition++)
            {
                var symbol = tokens[i].Symbol;

                if (relativPosition == 0 && symbol == AufzaehlungParser.Token.KnownSymbols.NonImportant)
                    continue;

                if (symbol == AufzaehlungParser.Token.KnownSymbols.Block)
                    break;

                if (symbol == AufzaehlungParser.Token.KnownSymbols.Substantiv)
                    foundSomething = true;

                if (symbol == AufzaehlungParser.Token.KnownSymbols.Substantiv && i > minPosition)
                    continue;

                return tokens[i + 1].Start;
            }

            return tokens[position - relativPosition].Start;
        }
        int FindNextSeperator(AufzaehlungParser.Token[] tokens, int start)
        {
            for (int i = start; i < tokens.Length; i++)
            {
                if (tokens[i].Symbol == AufzaehlungParser.Token.KnownSymbols.Seperator)
                    return i;
            }

            return -1;
        }
        Tuple<int, int> FindEnumerationSurround(AufzaehlungParser.Token[] tokens, int position, int minPosition, out int endPosition)
        {
            // finde das nächste nicht Substantiv vor dem zeichen
            // Substantiv = "Wort wo erster Buchstabe gross oder Zahl"

            var lookBackwards = false;
            var lookForewards = false;

            var startPos = LookBackwards(tokens, position, minPosition, out lookBackwards);
            var endPos = LookForward(tokens, position, out endPosition, out lookForewards);

            if (!lookBackwards || !lookForewards)
                return null;

            return Tuple.Create(startPos, endPos);
        }
        int LookForward(AufzaehlungParser.Token[] tokens, int position, out int endPosition, out bool foundSomething)
        {
            var relativPosition = 0;
            foundSomething = false;

            for (int i = position + 1; i < Math.Min(position + 1 + MaxSteps, tokens.Count()); i++, relativPosition++)
            {
                var symbol = tokens[i].Symbol;

                if (relativPosition == 0 && symbol == AufzaehlungParser.Token.KnownSymbols.NonImportant)
                    continue;

                if (symbol == AufzaehlungParser.Token.KnownSymbols.Substantiv)
                    foundSomething = true;

                if (symbol == AufzaehlungParser.Token.KnownSymbols.Substantiv && relativPosition <= MaxSteps)
                    continue;

                endPosition = position + relativPosition;
                return tokens[endPosition].End;
            }

            endPosition = position + relativPosition;
            return tokens[endPosition].End;
        }