Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private StringMatch MatchString(string value, Dictionary<string, byte> keys)
- {
- value = value.Trim();
- StringMatch match = new StringMatch();
- match.appendedValues = new string[0];
- foreach (var opcode in keys)
- {
- int valueIndex = 0;
- bool requiredWhitespaceMet = false;
- bool matchFound = true;
- match.appendedValues = new string[0];
- for (int i = 0; i < opcode.Key.Length && valueIndex < value.Length; i++)
- {
- match.match = opcode.Key;
- match.value = opcode.Value;
- if (opcode.Key[i] == '_') // Required whitespace
- {
- if (value[valueIndex] == ' ' || value[valueIndex] == '\t')
- {
- requiredWhitespaceMet = true;
- i--;
- valueIndex++;
- }
- else
- {
- if (!requiredWhitespaceMet)
- {
- matchFound = false;
- break;
- }
- requiredWhitespaceMet = false;
- }
- }
- else if (opcode.Key[i] == '-') // Optional whitespace
- {
- if (value[valueIndex] == ' ' || value[valueIndex] == '\t')
- {
- i--;
- valueIndex++;
- }
- }
- else if (opcode.Key[i] == '%') // value, like A or POP
- {
- i++;
- char valID = opcode.Key[i];
- int valueStart = valueIndex;
- if (i == opcode.Key.Length - 1)
- {
- valueIndex = value.Length;
- }
- else
- {
- int delimiter = value.IndexOf(',', valueIndex);
- if (delimiter == -1)
- {
- matchFound = false;
- break;
- }
- else
- valueIndex = delimiter;
- }
- if (valID == 'a')
- match.valueA = value.Substring(valueStart, valueIndex - valueStart);
- else
- match.valueB = value.Substring(valueStart, valueIndex - valueStart);
- }
- else if (opcode.Key[i] == '$') // Literal
- {
- i++;
- char valID = opcode.Key[i];
- int valueStart = valueIndex;
- if (i == opcode.Key.Length - 1)
- {
- valueIndex = value.Length;
- }
- else
- {
- int delimiter = value.IndexOf(',', valueIndex);
- if (delimiter == -1 && opcode.Value != 0x1E)
- delimiter = value.IndexOf('+', valueIndex);
- if (delimiter == -1)
- delimiter = value.IndexOf(']', valueIndex);
- if (delimiter == -1)
- {
- matchFound = false;
- break;
- }
- else
- valueIndex = delimiter;
- }
- match.appendedValues = match.appendedValues.Concat(new string[] {
- value.Substring(valueStart, valueIndex - valueStart) }).ToArray();
- }
- else
- {
- if (value.ToUpper()[valueIndex] != opcode.Key.ToUpper()[i])
- {
- matchFound = false;
- break;
- }
- valueIndex++;
- }
- }
- if (matchFound)
- return match;
- }
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment