]> source.dussan.org Git - jquery.git/commitdiff
Landing pull request 523. Adds character frequency reporting tool, use: make freq...
authorRick Waldron <waldron.rick@gmail.com>
Sat, 1 Oct 2011 20:58:01 +0000 (16:58 -0400)
committertimmywil <timmywillisn@gmail.com>
Sat, 1 Oct 2011 20:58:01 +0000 (16:58 -0400)
More Details:
 - https://github.com/jquery/jquery/pull/523
 - http://bugs.jquery.com/ticket/10372

Makefile
build/freq.js [new file with mode: 0644]

index b91952f6065dd83265644fecdd0d78b2bef70db2..77219e3513cd41cc8ecd5af4251589334b6d467a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -83,6 +83,13 @@ size: jquery min
                echo "You must have NodeJS installed in order to size jQuery."; \
        fi
 
+freq: jquery min
+       @@if test ! -z ${JS_ENGINE}; then \
+               ${JS_ENGINE} ${BUILD_DIR}/freq.js; \
+       else \
+               echo "You must have NodeJS installed to report the character frequency of minified jQuery."; \
+       fi
+
 min: jquery ${JQ_MIN}
 
 ${JQ_MIN}: ${JQ}
diff --git a/build/freq.js b/build/freq.js
new file mode 100644 (file)
index 0000000..0549f6a
--- /dev/null
@@ -0,0 +1,79 @@
+#! /usr/bin/env node
+
+var fs = require( "fs" );
+
+function isEmptyObject( obj ) {
+       for ( var name in obj ) {
+               return false;
+       }
+       return true;
+}
+function extend( obj ) {
+       var dest = obj,
+       src = [].slice.call( arguments, 1 );
+
+       Object.keys( src ).forEach(function( key ) {
+               var copy = src[ key ];
+
+               for ( var prop in copy ) {
+                       dest[ prop ] = copy[ prop ];
+               }
+       });
+
+       return dest;
+};
+
+function charSort( obj, callback ) {
+
+       var ordered = [],
+               table = {},
+               copied;
+
+       copied = extend({}, obj );
+
+       (function order() {
+
+               var largest = 0,
+                               c;
+
+               for ( var i in obj ) {
+                       if ( obj[ i ] >= largest ) {
+                               largest = obj[ i ];
+                               c = i;
+                       }
+               }
+
+               ordered.push( c );
+               delete obj[ c ];
+
+               if ( !isEmptyObject( obj ) ) {
+                       order();
+               } else {
+                       ordered.forEach(function( val ) {
+                               table[ val ] = copied[ val ];
+                       });
+
+                       callback( table );
+               }
+
+       })();
+}
+function charFrequency( src, callback ) {
+       var obj = {};
+
+       src.replace(/[^\w]|\d/gi, "").split("").forEach(function( c ) {
+               obj[ c ] ? ++obj[ c ] : ( obj[ c ] = 1 );
+       });
+
+       return charSort( obj, callback );
+}
+
+
+charFrequency( fs.readFileSync( "dist/jquery.min.js", "utf8" ), function( obj ) {
+       var chr;
+
+       for ( chr in obj ) {
+               console.log( "  " + chr + "   " + obj[ chr ] );
+       }
+});
+