in src/common/details/named_values/parsers/named_value_token_parser.cs [111:200]
private bool ParseValues(INamedValueTokens tokens, INamedValues values, int count, int skipNameTokens)
{
bool parsed = false;
var peekToken1 = tokens.PeekNextToken(skipNameTokens + 0);
var peekToken2 = tokens.PeekNextToken(skipNameTokens + 1);
var peekToken1Value = tokens.ValueFromToken(peekToken1, values);
var peekToken2Value = tokens.ValueFromToken(peekToken2, values);
if (PinnedValueKey == null && PinnedValue == null)
{
if (count == 0)
{
tokens.SkipTokens(skipNameTokens);
parsed = true;
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, true))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextTokenValue(values)!);
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, false))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextToken()!.TrimStart('='));
}
else if (count == 2 && ValueMatchesValidValue(peekToken1, peekToken1Value) && peekToken2Value != null)
{
tokens.SkipTokens(skipNameTokens);
var value = tokens.PopNextTokenValue(values);
value += "=" + tokens.PopNextTokenValue(values);
parsed = AddValue(values, ValueKey, value);
}
}
else if (PinnedValueKey == null && PinnedValue != null)
{
if (count == 0)
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, PinnedValue);
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, true))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextTokenValue(values)!);
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, false))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextToken()!.TrimStart('='));
}
}
else // if (PinnedValueKey != null && PinnedValue != null)
{
if (count == 0)
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, PinnedValueKey!, PinnedValue!);
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, true))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextTokenValue(values)!);
parsed = parsed && AddValue(values, PinnedValueKey!, PinnedValue!);
}
else if (count == 1 && ValueMatchesValidValue(peekToken1, peekToken1Value, false))
{
tokens.SkipTokens(skipNameTokens);
parsed = AddValue(values, ValueKey, tokens.PopNextToken()!.TrimStart('='));
parsed = parsed && AddValue(values, PinnedValueKey!, PinnedValue!);
}
else if (count == 2 && ValueMatchesValidValue(peekToken1, peekToken1Value) && peekToken2Value != null)
{
tokens.SkipTokens(skipNameTokens);
var value = tokens.PopNextTokenValue(values);
value += "=" + tokens.PopNextTokenValue(values);
parsed = AddValue(values, ValueKey, value.TrimStart('='));
parsed = parsed && AddValue(values, PinnedValueKey!, PinnedValue!);
}
}
return parsed;
}