2024-07-08 04:37:36 +02:00
|
|
|
function string_to_array(str) {
|
2022-12-21 02:30:23 +01:00
|
|
|
var amo = string_length(str);
|
|
|
|
var arr = array_create(amo);
|
|
|
|
for( var i = 0; i < amo; i++ )
|
|
|
|
arr[i] = string_char_at(str, i + 1);
|
|
|
|
return arr;
|
2024-07-08 04:37:36 +02:00
|
|
|
}
|
2023-02-14 11:40:24 +01:00
|
|
|
|
2024-07-08 04:37:36 +02:00
|
|
|
function string_real(val, digMax = 999, decMin = 5) {
|
2023-02-17 04:48:54 +01:00
|
|
|
if(is_string(val)) return val;
|
2023-02-17 11:31:33 +01:00
|
|
|
if(is_struct(val)) return string(val);
|
|
|
|
|
2023-02-17 04:48:54 +01:00
|
|
|
if(is_array(val)) {
|
|
|
|
var s = "[";
|
2024-04-16 10:34:05 +02:00
|
|
|
var i = 0, n = array_length(val);
|
|
|
|
repeat( n ) { s += (i? ", " : "") + string_real(val[i]); i++; }
|
2023-02-17 04:48:54 +01:00
|
|
|
return s + "]";
|
|
|
|
}
|
|
|
|
|
2024-05-17 10:05:24 +02:00
|
|
|
if(val == 0 || is_handle(val) || !is_numeric(val)) return "0";
|
2023-02-28 09:43:01 +01:00
|
|
|
|
|
|
|
var pres, p = 1;
|
2024-01-23 11:01:19 +01:00
|
|
|
var presMax = min(decMin, digMax - ceil(log10(ceil(abs(val)))));
|
2023-02-28 09:43:01 +01:00
|
|
|
for( pres = 0; pres < presMax; pres++ ) {
|
|
|
|
if(frac(val * p) == 0)
|
2023-02-17 04:48:54 +01:00
|
|
|
break;
|
2023-02-28 09:43:01 +01:00
|
|
|
p *= 10;
|
2023-02-17 04:48:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return string_format(val, -1, pres);
|
2024-07-08 04:37:36 +02:00
|
|
|
}
|
2023-02-23 07:02:19 +01:00
|
|
|
|
2024-07-08 04:37:36 +02:00
|
|
|
function string_char_last(str, shift = 0) {
|
2023-11-08 08:38:04 +01:00
|
|
|
INLINE
|
2023-09-17 13:23:24 +02:00
|
|
|
return string_char_at(str, string_length(str) - shift);
|
2024-07-08 04:37:36 +02:00
|
|
|
}
|
2023-09-17 13:23:24 +02:00
|
|
|
|
2024-07-08 04:37:36 +02:00
|
|
|
function filename_name_only(name) {
|
2023-02-23 07:02:19 +01:00
|
|
|
name = filename_name(name);
|
|
|
|
return string_replace(name, filename_ext(name), "")
|
2024-07-08 04:37:36 +02:00
|
|
|
}
|
2023-10-12 14:14:08 +02:00
|
|
|
|
2024-08-13 13:17:45 +02:00
|
|
|
function string_to_var(str) { INLINE return string_replace_all(string_replace_all(string_lower(str), " ", "_"), "/", "_"); }
|
|
|
|
function string_to_var2(context, name) { INLINE return string_to_var(context == ""? name : $"{context} {name}"); }
|
|
|
|
function string_quote(str) { INLINE return $"\"{str}\""; }
|
2024-06-03 09:34:59 +02:00
|
|
|
|
2024-08-14 05:28:46 +02:00
|
|
|
function string_compare(s1, s2) {
|
|
|
|
var l1 = string_length(s1);
|
|
|
|
var l2 = string_length(s2);
|
|
|
|
|
|
|
|
var i = 0;
|
|
|
|
var c1, c2;
|
|
|
|
|
|
|
|
repeat(min(l1, l2)) {
|
|
|
|
c1 = string_lower(string_char_at(s1, i));
|
|
|
|
c2 = string_lower(string_char_at(s2, i));
|
|
|
|
|
|
|
|
if(c1 == c2) {
|
|
|
|
i++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ord(c1) - ord(c2);
|
|
|
|
}
|
|
|
|
|
|
|
|
return l1 - l2;
|
|
|
|
}
|
|
|
|
|
2024-06-03 09:34:59 +02:00
|
|
|
function array_to_string(arr) {
|
|
|
|
if(!is_array(arr)) return string(arr);
|
|
|
|
if(array_empty(arr)) return "[]";
|
|
|
|
|
|
|
|
var s = "[";
|
|
|
|
|
|
|
|
for (var i = 0, n = array_length(arr); i < n - 1; i++)
|
|
|
|
s += array_to_string(arr[i]) + ", ";
|
|
|
|
s += array_to_string(arr[i])
|
|
|
|
|
|
|
|
return s + "]";
|
2024-07-08 04:37:36 +02:00
|
|
|
}
|
|
|
|
|
2024-07-12 10:35:01 +02:00
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2024-07-08 04:37:36 +02:00
|
|
|
function string_partial_match(str, key) {
|
2024-07-08 11:44:21 +02:00
|
|
|
if(str == key) return 9999;
|
|
|
|
|
2024-07-08 04:37:36 +02:00
|
|
|
var amo = string_length(str);
|
|
|
|
var run = 1;
|
|
|
|
var consec = 0;
|
|
|
|
var conMax = 0;
|
|
|
|
var misMatch = 0;
|
|
|
|
var kchr = string_char_at(key, run);
|
|
|
|
var ch;
|
|
|
|
var stArr = [];
|
|
|
|
|
|
|
|
for( var i = 1; i <= amo; i++ ) {
|
|
|
|
ch = string_char_at(str, i);
|
|
|
|
|
|
|
|
if(ch == kchr) {
|
|
|
|
consec++;
|
|
|
|
conMax = max(conMax, consec);
|
|
|
|
run++;
|
|
|
|
if(run > string_length(key)) return conMax - misMatch;
|
|
|
|
kchr = string_char_at(key, run);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
consec = 0;
|
|
|
|
misMatch += amo - i;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return -9999;
|
|
|
|
}
|
|
|
|
|
2024-07-12 10:35:01 +02:00
|
|
|
function draw_text_match(_x, _y, _text, _search, _scale = 1) {
|
2024-07-08 04:37:36 +02:00
|
|
|
INLINE
|
|
|
|
_x = round(_x);
|
|
|
|
_y = round(_y);
|
|
|
|
|
|
|
|
var ha = draw_get_halign();
|
|
|
|
var xx = _x;
|
|
|
|
var yy = _y;
|
|
|
|
var cc = draw_get_color();
|
|
|
|
|
|
|
|
draw_set_halign(fa_left);
|
|
|
|
_search = string_lower(_search);
|
|
|
|
|
|
|
|
var keylen = string_length(_search);
|
|
|
|
var run = 1;
|
|
|
|
var kchr = string_char_at(_search, 1);
|
|
|
|
|
|
|
|
BLEND_ALPHA_MULP;
|
|
|
|
var aa = string_length(_text);
|
2024-07-12 10:35:01 +02:00
|
|
|
var lw = string_width(_text) * _scale;
|
2024-07-08 04:37:36 +02:00
|
|
|
var tl = string_lower(_text);
|
|
|
|
|
|
|
|
switch(ha) {
|
|
|
|
case fa_left : xx = _x; break;
|
|
|
|
case fa_center : xx = _x - lw / 2; break;
|
|
|
|
case fa_right : xx = _x - lw; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
var j = 1;
|
|
|
|
repeat(aa) {
|
|
|
|
var ch = string_char_at(_text, j);
|
|
|
|
var cl = string_char_at(tl, j);
|
|
|
|
|
|
|
|
if(run > 0 && cl == kchr) {
|
|
|
|
run++;
|
|
|
|
if(run > keylen) run = 0;
|
|
|
|
kchr = string_char_at(_search, run);
|
|
|
|
draw_set_color(COLORS._main_accent);
|
|
|
|
} else
|
|
|
|
draw_set_color(cc);
|
|
|
|
|
2024-07-12 10:35:01 +02:00
|
|
|
if(_scale == 1) draw_text(ceil(xx), ceil(yy), ch);
|
|
|
|
else draw_text_transformed(ceil(xx), ceil(yy), ch, _scale, _scale, 0);
|
|
|
|
xx += string_width(ch) * _scale;
|
2024-07-08 04:37:36 +02:00
|
|
|
j++;
|
|
|
|
}
|
|
|
|
|
|
|
|
BLEND_NORMAL;
|
|
|
|
|
|
|
|
draw_set_halign(ha);
|
|
|
|
}
|
|
|
|
|
|
|
|
function draw_text_match_ext(_x, _y, _text, _w, _search) {
|
|
|
|
INLINE
|
|
|
|
_x = round(_x);
|
|
|
|
_y = round(_y);
|
|
|
|
|
|
|
|
var lines = [];
|
|
|
|
var line = "";
|
|
|
|
var line_w = 0;
|
|
|
|
var words = string_split(_text, " ");
|
|
|
|
var amo = array_length(words);
|
2024-07-10 06:49:08 +02:00
|
|
|
var spw = string_width(" ");
|
2024-07-08 04:37:36 +02:00
|
|
|
|
|
|
|
for( var i = 0; i < amo; i++ ) {
|
|
|
|
var wr = words[i] + " ";
|
|
|
|
var ww = string_width(wr);
|
|
|
|
|
2024-07-10 06:49:08 +02:00
|
|
|
if(line_w + ww - spw > _w) {
|
2024-07-08 04:37:36 +02:00
|
|
|
array_push(lines, line);
|
|
|
|
line = wr;
|
|
|
|
line_w = ww;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
line += wr;
|
|
|
|
line_w += ww;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(line != "") array_push(lines, line);
|
|
|
|
|
|
|
|
var ha = draw_get_halign();
|
|
|
|
var va = draw_get_valign();
|
|
|
|
var xx = _x;
|
|
|
|
var yy = _y;
|
|
|
|
var lh = line_get_height();
|
|
|
|
var hh = lh * array_length(lines);
|
|
|
|
var cc = draw_get_color();
|
|
|
|
|
|
|
|
draw_set_halign(fa_left);
|
|
|
|
draw_set_valign(fa_top);
|
|
|
|
_search = string_lower(_search);
|
|
|
|
|
|
|
|
var keylen = string_length(_search);
|
|
|
|
var run = 1;
|
|
|
|
var kchr = string_char_at(_search, 1);
|
|
|
|
|
|
|
|
switch(va) {
|
|
|
|
case fa_top : yy = _y; break;
|
|
|
|
case fa_middle : yy = _y - hh / 2; break;
|
|
|
|
case fa_bottom : yy = _y - hh; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
BLEND_ALPHA_MULP;
|
|
|
|
for( var i = 0, n = array_length(lines); i < n; i++ ) {
|
|
|
|
var ll = lines[i];
|
|
|
|
var aa = string_length(ll);
|
|
|
|
var lw = string_width(ll);
|
|
|
|
var tl = string_lower(ll);
|
|
|
|
|
|
|
|
switch(ha) {
|
|
|
|
case fa_left : xx = _x; break;
|
|
|
|
case fa_center : xx = _x - lw / 2; break;
|
|
|
|
case fa_right : xx = _x - lw; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
var j = 1;
|
|
|
|
repeat(aa) {
|
|
|
|
var ch = string_char_at(ll, j);
|
|
|
|
var cl = string_char_at(tl, j);
|
|
|
|
|
|
|
|
if(run > 0 && cl == kchr) {
|
|
|
|
run++;
|
|
|
|
if(run > keylen) run = 0;
|
|
|
|
kchr = string_char_at(_search, run);
|
|
|
|
draw_set_color(COLORS._main_accent);
|
|
|
|
} else
|
|
|
|
draw_set_color(cc);
|
|
|
|
|
2024-07-10 06:49:08 +02:00
|
|
|
draw_text(ceil(xx), ceil(yy), ch);
|
2024-07-08 04:37:36 +02:00
|
|
|
xx += string_width(ch);
|
|
|
|
j++;
|
|
|
|
}
|
|
|
|
|
|
|
|
yy += lh;
|
|
|
|
}
|
|
|
|
BLEND_NORMAL;
|
|
|
|
|
|
|
|
draw_set_halign(ha);
|
|
|
|
draw_set_valign(va);
|
|
|
|
|
|
|
|
return hh;
|
2024-07-12 10:35:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
function string_full_match(str, key) {
|
|
|
|
if(string_pos(key, str)) return 1;
|
|
|
|
return -9999;
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|