Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Re: Re: Compressing/Obfuscating a Javascript file

by tachyon (Chancellor)
on Oct 10, 2001 at 06:21 UTC ( [id://117916]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Compressing/Obfuscating a Javascript file
in thread Compressing/Obfuscating a Javascript file

I presume the problem is that it is splitting on the anon functions which you do not want. Either of these two should work better:

# alternative one - insist on "function name (" syntax or no split my @functions = split /(?=\bfunction\s+\w+\s*\()/, $data; # alternative two - functions always on line by themselves my @functions = split /^(?=function\s)/, $data;

Alternative 1 is the better option. cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: Re: Re: Compressing/Obfuscating a Javascript file
by Incognito (Pilgrim) on Oct 10, 2001 at 06:34 UTC
    Yes, Alternative 1 is the better option, but the only problem I can see now is if we have named functions in the function itself... And (to be a devil's advocate) what if those functions have functions?
    function InitializeTree (objBlah) { // Set up the event handling. with (objBlah) { test = function test2() { doSomethingHere(); }; } return (0); }

      Herein you strike the basic problem. To do this correctly you need a complete tokenisation/lexical analysis. As even Netscape and M$ do not agree on what constitutes valid code this is an interesting task. However I am not interested :-)

      If you are happy that a function definition will generally start on a line by itself then option 2 is the go. This will leave named nested functions alone which would not seem to be a major deal. You either make a compromise and be happy that you can parse a say 99% subset of all legal code with a simple rules based system or you get the sourcecode of a javascript interpretter, and hack into the guts of it.

      I once wrote some code to strip the comments out of Perl code and condense it down. It ended up about 70K and 1000 lines long, and will still fail in some specific *rare* cases (but it will strip the entire standard distro :-) It would have been quicker to hack to perl source I think. You can have a look to see how over the top it can get here

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

        Thanks for your wisdom, as I do find it honest and straightforward... You write some pretty nice code (I looked at your Perl parser)... and it makes me realize how much I do not know (and how much I've forgotten).

        I agree that it's best to just write a simpler parser, and make some basic rules/assumptions about the code, to satisfy the 99%... I do not feel like hacking into interpreters at this stage of my life.... :)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://117916]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (3)
As of 2024-04-25 21:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found