<commit_before><?php

namespace Ker\Utils;

/**
 * Klasa ze statycznymi metodami użytkowymi służącymi celom debugowym.
 *
 * @author <NAME> <<EMAIL>>
 * @license MIT
 * @link https://github.com/keradus/Ker
 * @date 2013-09-15 19:46:30
 */
class Debug
{

    /**
     * Metoda wyświetlająca dumpa przekazanych elementów używając do tego metody print_r, owijając każdy z nich tagiem <pre>.
     *
     * @static
     * @public
     * @param list $... elementy do zdumpowania
     */
    public static function prePrint(/* list */)
    {<commit_msg>Utils\Debug - add dmp method, the main dumping method<commit_after><?php

namespace Ker\Utils;

/**
 * Klasa ze statycznymi metodami użytkowymi służącymi celom debugowym.
 *
 * @author <NAME> <<EMAIL>>
 * @license MIT
 * @link https://github.com/keradus/Ker
 * @date 2013-09-15 19:46:30
 */
class Debug
{

    /**
     * Metoda wyświetlajaca lub zwracająca (zależnie od przekazanych parametrów) rozbudowanego dumpa z przekazanych parametrów.
     * Dump jest przygotowywany tylko, gdy w \Ker\Config klucz "debug" jest ustawiona na wartosc true.
     *
     * @static
     * @public
     * @param array $_opts [opt = null] tablica opcji sterujacych dumpem:\n
     *  trace => (bool) [opt = true] czy uwzględnić stos wywołań
     *  memory => (bool) [opt = true] czy uwzględnić zużycie pamięci
     *  print => (bool) [opt = true] czy wyświetlić dumpa
     * @param list $... elementy do zdumpowania
     * @return string|null tekstowa reprezentacja dumpa, zwracana tylko gdy $_opts["print"] === false
     */
    public static function dmp(/* opts, list */)
    {
        if (!\Ker\Config::getOne("debug")) {
            return;
        }

        $args = func_get_args();
        $_opts = array_shift($args);

        ob_start();

        $callPlace = debug_backtrace();

        // zapewniamy, by w przypadku wywołania metody z wrappera dump - poprawie wyświetlić informacje o miejscu wywołania dmp/dump
        if ($callPlace[1]["class"] === "Ker\Utils\Debug" && $callPlace[1]["function"] === "dump") {
            $callPlace = "{$callPlace[1]["file"]} :: {$callPlace[1]["line"]}";
        } else {
            $callPlace = "{$callPlace[0]["file"]} :: {$callPlace[0]["line"]}";
        }

        echo "<div style='text-align: left; border: red solid; margin: 5px; padding: 5px;'>";
        echo "<span style='color: red; font-weight: bold;'>DEBUG: $callPlace :</span>";
        call_user_func_array(array("static", "preDump"), $args);

        if (!isset($_opts["trace"]) || $_opts["trace"]) {
            echo "<hr />";
            static::trace();
        }

        if (!isset($_opts["memory"]) || $_opts["memory"]) {
            echo "<hr />";
            echo "Memory: ";
            static::memory();
            echo " / ";
            static::memory(true);
            echo "<hr />";
            echo "MemoryMax: ";
            static::memoryMax();
            echo " / ";
            static::memoryMax(true);
        }

        echo "</div>";

        if (!isset($_opts["print"]) || $_opts["print"]) {
            ob_end_flush();

            return;
        }

        $content = ob_get_clean();
        $content = preg_replace("/\n/", "<br />", $content);

        return preg_replace("/(?<=\s)\s/", "&nbsp;", $content);
    }

    /**
     * Metoda wyświetlająca dumpa przekazanych elementów używając do tego metody print_r, owijając każdy z nich tagiem <pre>.
     *
     * @static
     * @public
     * @param list $... elementy do zdumpowania
     */
    public static function prePrint(/* list */)
    {
{'fraction_non_alphanumeric': 0.15667040358744394, 'fraction_numerical': 0.010089686098654708, 'mean_word_length': 2.3797348484848486, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2457866', 'n_tokens_mistral': 1244, 'n_tokens_neox': 1228, 'n_words': 291}