public function render()
    {
        /*
        $str = transliterator_transliterate(
            "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();",
            $this->str
        );
         */

        if (is_null($this->str_out)) {
            $str_prov = $this->str;

            if (count($this->arr_rules)) {
                $str_prov = strtr($str_prov, $this->arr_rules);
            }

            $str_prov = transliterator_transliterate(
                "Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC;  Lower();",
                $str_prov
            );
            $str = trim(preg_replace('/[^a-z0-9-]+/', '-', $str_prov), '-');

            if (!$this->use_history) {
                $this->str_out = $str;

                return $this->str_out;
            }

            if (!in_array($str, self::$arr_history)) {
                self::$arr_history[] = $str;
                $this->str_out = $str;
            } else {
                $int_start = 2;
                $str_prov = $str.'-'.$int_start;

                while (in_array($str_prov, self::$arr_history)) {
                    $str_prov = $str.'-'.$int_start;
                    $int_start++;
                }

                if (!in_array($str_prov, self::$arr_history)) {
                    self::$arr_history[] = $str_prov;
                    $this->str_out = $str_prov;
                }
            }

            return $this->str_out;
        }

        return $this->str_out;
    }