SirCmpwn

Untitled

Apr 26th, 2012
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.63 KB | None | 0 0
  1.         private StringMatch MatchString(string value, Dictionary<string, byte> keys)
  2.         {
  3.             value = value.Trim();
  4.             StringMatch match = new StringMatch();
  5.             match.appendedValues = new string[0];
  6.             foreach (var opcode in keys)
  7.             {
  8.                 int valueIndex = 0;
  9.                 bool requiredWhitespaceMet = false;
  10.                 bool matchFound = true;
  11.                 match.appendedValues = new string[0];
  12.                 for (int i = 0; i < opcode.Key.Length && valueIndex < value.Length; i++)
  13.                 {
  14.                     match.match = opcode.Key;
  15.                     match.value = opcode.Value;
  16.                     if (opcode.Key[i] == '_') // Required whitespace
  17.                     {
  18.                         if (value[valueIndex] == ' ' || value[valueIndex] == '\t')
  19.                         {
  20.                             requiredWhitespaceMet = true;
  21.                             i--;
  22.                             valueIndex++;
  23.                         }
  24.                         else
  25.                         {
  26.                             if (!requiredWhitespaceMet)
  27.                             {
  28.                                 matchFound = false;
  29.                                 break;
  30.                             }
  31.                             requiredWhitespaceMet = false;
  32.                         }
  33.                     }
  34.                     else if (opcode.Key[i] == '-') // Optional whitespace
  35.                     {
  36.                         if (value[valueIndex] == ' ' || value[valueIndex] == '\t')
  37.                         {
  38.                             i--;
  39.                             valueIndex++;
  40.                         }
  41.                     }
  42.                     else if (opcode.Key[i] == '%') // value, like A or POP
  43.                     {
  44.                         i++;
  45.                         char valID = opcode.Key[i];
  46.                         int valueStart = valueIndex;
  47.                         if (i == opcode.Key.Length - 1)
  48.                         {
  49.                             valueIndex = value.Length;
  50.                         }
  51.                         else
  52.                         {
  53.                             int delimiter = value.IndexOf(',', valueIndex);
  54.                             if (delimiter == -1)
  55.                             {
  56.                                 matchFound = false;
  57.                                 break;
  58.                             }
  59.                             else
  60.                                 valueIndex = delimiter;
  61.                         }
  62.                         if (valID == 'a')
  63.                             match.valueA = value.Substring(valueStart, valueIndex - valueStart);
  64.                         else
  65.                             match.valueB = value.Substring(valueStart, valueIndex - valueStart);
  66.                     }
  67.                     else if (opcode.Key[i] == '$') // Literal
  68.                     {
  69.                         i++;
  70.                         char valID = opcode.Key[i];
  71.                         int valueStart = valueIndex;
  72.                         if (i == opcode.Key.Length - 1)
  73.                         {
  74.                             valueIndex = value.Length;
  75.                         }
  76.                         else
  77.                         {
  78.                             int delimiter = value.IndexOf(',', valueIndex);
  79.                             if (delimiter == -1 && opcode.Value != 0x1E)
  80.                                 delimiter = value.IndexOf('+', valueIndex);
  81.                             if (delimiter == -1)
  82.                                 delimiter = value.IndexOf(']', valueIndex);
  83.                             if (delimiter == -1)
  84.                             {
  85.                                 matchFound = false;
  86.                                 break;
  87.                             }
  88.                             else
  89.                                 valueIndex = delimiter;
  90.                         }
  91.                         match.appendedValues = match.appendedValues.Concat(new string[] {
  92.                             value.Substring(valueStart, valueIndex - valueStart) }).ToArray();
  93.                     }
  94.                     else
  95.                     {
  96.                         if (value.ToUpper()[valueIndex] != opcode.Key.ToUpper()[i])
  97.                         {
  98.                             matchFound = false;
  99.                             break;
  100.                         }
  101.                         valueIndex++;
  102.                     }
  103.                 }
  104.                 if (matchFound)                    
  105.                     return match;
  106.             }
  107.             return null;
  108.         }
Advertisement
Add Comment
Please, Sign In to add comment