private string encodeSpecialChars(string script) { ParseMaster parser = new ParseMaster(); parser.Add("((\\$+)([a-zA-Z\\$_]+))(\\d*)", new ParseMaster.MatchGroupEvaluator(encodeLocalVars)); // replace: $name -> n, $$name -> na Regex regex = new Regex("\\b_[A-Za-z\\d]\\w*"); // replace: _name -> _0, double-underscore (__name) is ignored encodingLookup = analyze(script, regex, new EncodeMethod(encodePrivate)); // build the word list parser.Add("\\b_[A-Za-z\\d]\\w*", new ParseMaster.MatchGroupEvaluator(encodeWithLookup)); script = parser.Exec(script); return(script); }
private string encodeKeywords(string script) { if (Encoding == PackerEncoding.HighAscii) { script = escape95(script); // escape high-ascii values already in the script (i.e. in strings) } ParseMaster parser = new ParseMaster(); // create the parser EncodeMethod encode = getEncoder(Encoding); Regex regex = new Regex((Encoding == PackerEncoding.HighAscii) ? "\\w\\w+" : "\\w+"); // for high-ascii, don't encode single character low-ascii encodingLookup = analyze(script, regex, encode); // build the word list parser.Add((Encoding == PackerEncoding.HighAscii) ? "\\w\\w+" : "\\w+", new ParseMaster.MatchGroupEvaluator(encodeWithLookup)); // encode return((script == string.Empty) ? "" : bootStrap(parser.Exec(script), encodingLookup)); // if encoded, wrap the script in a decoding function }
// нулевое кодирование - просто удаление пробелов и комментариев private string basicCompression(string script) { ParseMaster parser = new ParseMaster(); parser.EscapeChar = '\\'; // сделать безопасным parser.Add("'[^'\\n\\r]*'", IGNORE); // защитить строки parser.Add("\"[^\"\\n\\r]*\"", IGNORE); parser.Add("\\/\\/[^\\n\\r]*[\\n\\r]"); // удалить комментарии parser.Add("\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/"); parser.Add("\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)", "$2"); // защитить регулярные выражения parser.Add("[^\\w\\$\\/'\"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?", IGNORE); // Удалить: ;;; сделай что-нибудь(); if (specialChars) { parser.Add(";;[^\\n\\r]+[\\n\\r]"); } parser.Add(";+\\s*([};])", "$2"); // удалить лишние точки с запятой parser.Add("(\\b|\\$)\\s+(\\b|\\$)", "$2 $3"); // удалить пробел parser.Add("([+\\-])\\s+([+\\-])", "$2 $3"); parser.Add("\\s+"); return(parser.Exec(script)); // сделанный }