src/Support/finediff.php
public static function renderFromOpcodes($from, $opcodes, $callback)
    {
        if (!is_callable($callback)) {
            return;
        }
        $opcodes_len = strlen($opcodes);
        $from_offset = $opcodes_offset = 0;
        while ($opcodes_offset < $opcodes_len) {
            $opcode = substr($opcodes, $opcodes_offset, 1);
            $opcodes_offset++;
            $n = intval(substr($opcodes, $opcodes_offset));
            if ($n) {
                $opcodes_offset += strlen(strval($n));
            } else {
                $n = 1;
            }
            if ($opcode === 'c') { // copy n characters from source
                call_user_func($callback, 'c', $from, $from_offset, $n, '');
                $from_offset += $n;
            } else if ($opcode === 'd') { // delete n characters from source
                call_user_func($callback, 'd', $from, $from_offset, $n, '');
                $from_offset += $n;
            } else /* if ( $opcode === 'i' ) */ { // insert n characters from opcodes
                call_user_func($callback, 'i', $opcodes, $opcodes_offset + 1, $n);
                $opcodes_offset += 1 + $n;
            }
        }
    }
public static function renderFromOpcodes($from, $opcodes, $callback)
    {
        if (!is_callable($callback)) {
            return;
        }
        $opcodes_len = strlen($opcodes);
        $from_offset = $opcodes_offset = 0;
        while ($opcodes_offset < $opcodes_len) {
            $opcode = substr($opcodes, $opcodes_offset, 1);
            $opcodes_offset++;
            $n = intval(substr($opcodes, $opcodes_offset));
            if ($n) {
                $opcodes_offset += strlen(strval($n));
            } else {
                $n = 1;
            }
            if ($opcode === 'c') { // copy n characters from source
                call_user_func($callback, 'c', $from, $from_offset, $n, '');
                $from_offset += $n;
            } else if ($opcode === 'd') { // delete n characters from source
                call_user_func($callback, 'd', $from, $from_offset, $n, '');
                $from_offset += $n;
            } else /* if ( $opcode === 'i' ) */ { // insert n characters from opcodes
                call_user_func($callback, 'i', $opcodes, $opcodes_offset + 1, $n);
                $opcodes_offset += 1 + $n;
            }
        }
    }
public static function renderFromOpcodes ( $ from , $ opcodes , $ callback ) { if ( ! is_callable ( $ callback ) ) { return ; } $ opcodes_len = strlen ( $ opcodes ) ; $ from_offset = $ opcodes_offset = 0 ; while ( $ opcodes_offset < $ opcodes_len ) { $ opcode = substr ( $ opcodes , $ opcodes_offset , 1 ) ; $ opcodes_offset ++ ; $ n = intval ( substr ( $ opcodes , $ opcodes_offset ) ) ; if ( $ n ) { $ opcodes_offset += strlen ( strval ( $ n ) ) ; } else { $ n = 1 ; } if ( $ opcode === 'c' ) { // copy n characters from source call_user_func ( $ callback , 'c' , $ from , $ from_offset , $ n , '' ) ; $ from_offset += $ n ; } else if ( $ opcode === 'd' ) { // delete n characters from source call_user_func ( $ callback , 'd' , $ from , $ from_offset , $ n , '' ) ; $ from_offset += $ n ; } else /* if ( $opcode === 'i' ) */ { // insert n characters from opcodes call_user_func ( $ callback , 'i' , $ opcodes , $ opcodes_offset + 1 , $ n ) ; $ opcodes_offset += 1 + $ n ; } } }
------------------------------------------------------------------------
Generic opcodes parser, user must supply callback for handling
single opcode
------------------------------------------------------------------------ Generic opcodes parser user must supply callback for handling single opcode