private string encodeKeywords(string script) { // escape high-ascii values already in the script (i.e. in strings) if (Encoding == PackerEncoding.HighAscii) { script = escape95(script); } // create the parser ParseMaster parser = new ParseMaster(); EncodeMethod encode = getEncoder(Encoding); // for high-ascii, don't encode single character low-ascii Regex regex = new Regex( (Encoding == PackerEncoding.HighAscii) ? "\\w\\w+" : "\\w+" ); // build the word list encodingLookup = analyze(script, regex, encode); // encode parser.Add((Encoding == PackerEncoding.HighAscii) ? "\\w\\w+" : "\\w+", new ParseMaster.MatchGroupEvaluator(encodeWithLookup)); // if encoded, wrap the script in a decoding function return((script == string.Empty) ? "" : bootStrap(parser.Exec(script), encodingLookup)); }
/// <summary> /// 零编码-只是删除空白和注释 zero encoding - just removal of whitespace and comments /// </summary> /// <param name="script"></param> /// <returns></returns> public string basicCompression(string script) { var parser = new ParseMaster(); // make safe parser.EscapeChar = '\\'; // protect strings parser.Add("'[^'\\n\\r]*'", IGNORE); parser.Add("\"[^\"\\n\\r]*\"", IGNORE); // remove comments parser.Add("\\/\\/[^\\n\\r]*[\\n\\r]"); parser.Add("\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/"); // protect regular expressions parser.Add("\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)", "$2"); parser.Add("[^\\w\\$\\/'\"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?", IGNORE); // remove: ;;; doSomething(); if (specialChars) { parser.Add(";;[^\\n\\r]+[\\n\\r]"); } // remove redundant semi-colons parser.Add(";+\\s*([};])", "$2"); // remove white-space parser.Add("(\\b|\\$)\\s+(\\b|\\$)", "$2 $3"); parser.Add("([+\\-])\\s+([+\\-])", "$2 $3"); parser.Add("\\s+"); // done return(parser.Exec(script)); }
private string encodeSpecialChars(string script) { ParseMaster parser = new ParseMaster(); // replace: $name -> n, $$name -> na parser.Add("((\\$+)([a-zA-Z\\$_]+))(\\d*)", new ParseMaster.MatchGroupEvaluator(encodeLocalVars)); // replace: _name -> _0, double-underscore (__name) is ignored Regex regex = new Regex("\\b_[A-Za-z\\d]\\w*"); // build the word list encodingLookup = analyze(script, regex, new EncodeMethod(encodePrivate)); parser.Add("\\b_[A-Za-z\\d]\\w*", new ParseMaster.MatchGroupEvaluator(encodeWithLookup)); script = parser.Exec(script); return(script); }