function zip_compress_block()

in themes/docsy/static/js/deflate.js [1516:1560]


    function zip_compress_block(
        ltree,	// literal tree
        dtree) {	// distance tree
        var dist;		// distance of matched string
        var lc;		// match length or unmatched char (if dist == 0)
        var lx = 0;		// running index in l_buf
        var dx = 0;		// running index in d_buf
        var fx = 0;		// running index in flag_buf
        var flag = 0;	// current flags
        var code;		// the code to send
        var extra;		// number of extra bits to send

        if (zip_last_lit != 0) do {
            if ((lx & 7) == 0)
                flag = zip_flag_buf[fx++];
            lc = zip_l_buf[lx++] & 0xff;
            if ((flag & 1) == 0) {
                zip_SEND_CODE(lc, ltree); /* send a literal byte */
                //	Tracecv(isgraph(lc), (stderr," '%c' ", lc));
            } else {
                // Here, lc is the match length - MIN_MATCH
                code = zip_length_code[lc];
                zip_SEND_CODE(code + zip_LITERALS + 1, ltree); // send the length code
                extra = zip_extra_lbits[code];
                if (extra != 0) {
                    lc -= zip_base_length[code];
                    zip_send_bits(lc, extra); // send the extra length bits
                }
                dist = zip_d_buf[dx++];
                // Here, dist is the match distance - 1
                code = zip_D_CODE(dist);
                //	Assert (code < D_CODES, "bad d_code");

                zip_SEND_CODE(code, dtree);	  // send the distance code
                extra = zip_extra_dbits[code];
                if (extra != 0) {
                    dist -= zip_base_dist[code];
                    zip_send_bits(dist, extra);   // send the extra distance bits
                }
            } // literal or match pair ?
            flag >>= 1;
        } while (lx < zip_last_lit);

        zip_SEND_CODE(zip_END_BLOCK, ltree);
    }