Skip to content

Commit a2e4945

Browse files
Implement several *_char function wrappers (#2475)
1 parent aaf8bd6 commit a2e4945

File tree

4 files changed

+98
-19
lines changed

4 files changed

+98
-19
lines changed

DMCompiler/DMStandard/UnsortedAdditions.dm

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,16 @@
66
/proc/eval(script)
77
set opendream_unsupported = "eval() is officialy deprecated"
88

9-
/proc/findlasttext_char(Haystack,Needle,Start=0,End=1)
10-
set opendream_unimplemented = TRUE
11-
/proc/findlasttextEx_char(Haystack,Needle,Start=1,End=0)
12-
set opendream_unimplemented = TRUE
13-
/proc/findtext_char(Haystack,Needle,Start=1,End=0)
14-
set opendream_unimplemented = TRUE
15-
/proc/findtextEx_char(Haystack,Needle,Start=1,End=0)
16-
set opendream_unimplemented = TRUE
179
/proc/load_resource(File)
1810
set opendream_unimplemented = TRUE
1911
proc/missile(Type, Start, End)
2012
set opendream_unimplemented = TRUE
2113
/proc/obounds(Ref=src, Dist=0)
2214
set opendream_unimplemented = TRUE
23-
/proc/replacetext_char(Haystack,Needle,Replacement,Start=1,End=0)
24-
set opendream_unimplemented = TRUE
2515
/proc/run(File)
2616
set opendream_unimplemented = TRUE
2717
/proc/shell(command)
2818
set opendream_unimplemented = TRUE
29-
/proc/nonspantext_char(Haystack,Needles,Start=1)
30-
set opendream_unimplemented = TRUE
31-
/proc/splittext_char(Text,Start=1,End=0,Insert="")
32-
set opendream_unimplemented = TRUE
3319
/proc/bound_pixloc(var/atom/Atom, var/Dir as num) as /pixloc
3420
set opendream_unimplemented = TRUE
3521

DMCompiler/DMStandard/_Standard.dm

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ proc/file(Path)
2121
proc/file2text(File) as text|null
2222
proc/filter(type, ...)
2323
proc/findtext(Haystack, Needle, Start = 1, End = 0) as num
24+
proc/findtext_char(Haystack, Needle, Start = 1, End = 0) as num
2425
proc/findtextEx(Haystack, Needle, Start = 1, End = 0) as num
26+
proc/findtextEx_char(Haystack, Needle, Start = 1, End = 0) as num
2527
proc/findlasttext(Haystack, Needle, Start = 0, End = 1) as num
28+
proc/findlasttext_char(Haystack, Needle, Start = 0, End = 1) as num
2629
proc/findlasttextEx(Haystack, Needle, Start = 0, End = 1) as num
30+
proc/findlasttextEx_char(Haystack, Needle, Start = 1, End = 0) as num
2731
proc/flick(Icon, Object)
2832
proc/flist(Path) as /list
2933
proc/floor(A) as num
@@ -67,6 +71,7 @@ proc/noise_hash(...) as num
6771
set opendream_unimplemented = 1
6872
return 0.5
6973
proc/nonspantext(Haystack, Needles, Start = 1) as num
74+
proc/nonspantext_char(Haystack, Needles, Start = 1) as num
7075
proc/num2text(N, A, B) as text
7176
proc/orange(Dist = 5, Center = usr) as /list|null // NOTE: Not sure if return types have BYOND parity
7277
proc/oview(Dist = 5, Center = usr) as /list
@@ -78,7 +83,9 @@ proc/rand_seed(Seed) as null
7883
proc/range(Dist, Center) as /list|null // NOTE: Not sure if return types have BYOND parity
7984
proc/ref(Object) as text
8085
proc/replacetext(Haystack, Needle, Replacement, Start = 1, End = 0) as text|null
86+
proc/replacetext_char(Haystack, Needle, Replacement, Start = 1, End = 0) as text|null
8187
proc/replacetextEx(Haystack, Needle, Replacement, Start = 1, End = 0) as text|null
88+
proc/replacetextEx_char(Haystack, Needle, Replacement, Start = 1, End = 0) as text|null
8289
proc/rgb(R, G, B, A, space) as text|null
8390
proc/rgb2num(color, space = COLORSPACE_RGB) as /list
8491
proc/roll(ndice = 1, sides) as num
@@ -94,7 +101,8 @@ proc/spantext(Haystack,Needles,Start=1) as num
94101
proc/spantext_char(Haystack,Needles,Start=1) as num
95102
proc/splicetext(Text, Start = 1, End = 0, Insert = "") as text|null
96103
proc/splicetext_char(Text, Start = 1, End = 0, Insert = "") as text|null
97-
proc/splittext(Text, Delimiter) as /list
104+
proc/splittext(Text, Delimiter, Start = 1, End = 0, include_delimiters = 0) as /list
105+
proc/splittext_char(Text, Delimiter, Start = 1, End = 0, include_delimiters = 0) as /list
98106
proc/stat(Name, Value)
99107
proc/statpanel(Panel, Name, Value)
100108
proc/text2ascii(T, pos = 1) as text
@@ -156,10 +164,6 @@ proc/winset(player, control_id, params)
156164
#include "Types\Atoms\Turf.dm"
157165
#include "UnsortedAdditions.dm"
158166

159-
proc/replacetextEx_char(Haystack as text, Needle, Replacement, Start = 1, End = 0) as text
160-
set opendream_unimplemented = TRUE
161-
return Haystack
162-
163167
/proc/step(atom/movable/Ref as /atom/movable, var/Dir, var/Speed=0) as num
164168
//TODO: Speed = step_size if Speed is 0
165169
return Ref.Move(get_step(Ref, Dir), Dir)

OpenDreamRuntime/Procs/Native/DreamProcNative.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) {
2626
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_file2text);
2727
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_filter);
2828
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findtext);
29+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findtext_char);
2930
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findtextEx);
31+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findtextEx_char);
3032
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findlasttext);
33+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findlasttext_char);
3134
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findlasttextEx);
35+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_findlasttextEx_char);
3236
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_flick);
3337
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_flist);
3438
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_floor);
@@ -69,6 +73,7 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) {
6973
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_md5);
7074
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_min);
7175
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_nonspantext);
76+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_nonspantext_char);
7277
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_num2text);
7378
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_ohearers);
7479
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_orange);
@@ -81,7 +86,9 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) {
8186
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_ref);
8287
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_regex);
8388
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_replacetext);
89+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_replacetext_char);
8490
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_replacetextEx);
91+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_replacetextEx_char);
8592
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_rgb2num);
8693
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_roll);
8794
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_round);
@@ -97,6 +104,7 @@ public static void SetupNativeProcs(DreamObjectTree objectTree) {
97104
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_splicetext);
98105
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_splicetext_char);
99106
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_splittext);
107+
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_splittext_char);
100108
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_stat);
101109
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_statpanel);
102110
objectTree.SetGlobalNativeProc(DreamProcNativeRoot.NativeProc_text2ascii);

OpenDreamRuntime/Procs/Native/DreamProcNativeRoot.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,16 @@ public static DreamValue NativeProc_findtext(NativeProc.Bundle bundle, DreamObje
885885
return new DreamValue(needleIndex + 1); //1-indexed
886886
}
887887

888+
[DreamProc("findtext_char")]
889+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
890+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
891+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
892+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
893+
public static DreamValue NativeProc_findtext_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
894+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
895+
return NativeProc_findtext(bundle, src, usr);
896+
}
897+
888898
[DreamProc("findtextEx")]
889899
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
890900
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
@@ -930,6 +940,16 @@ public static DreamValue NativeProc_findtextEx(NativeProc.Bundle bundle, DreamOb
930940
}
931941
}
932942

943+
[DreamProc("findtextEx_char")]
944+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
945+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
946+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
947+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
948+
public static DreamValue NativeProc_findtextEx_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
949+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
950+
return NativeProc_findtextEx(bundle, src, usr);
951+
}
952+
933953
[DreamProc("findlasttext")]
934954
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
935955
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
@@ -968,6 +988,15 @@ public static DreamValue NativeProc_findlasttext(NativeProc.Bundle bundle, Dream
968988
return new DreamValue(needleIndex + 1); //1-indexed, or 0 if not found (LastIndexOf returns -1 if not found)
969989
}
970990

991+
[DreamProc("findlasttext_char")]
992+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
993+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
994+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
995+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
996+
public static DreamValue NativeProc_findlasttext_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
997+
return NativeProc_findlasttext(bundle, src, usr);
998+
}
999+
9711000
[DreamProc("findlasttextEx")]
9721001
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
9731002
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
@@ -1007,6 +1036,16 @@ public static DreamValue NativeProc_findlasttextEx(NativeProc.Bundle bundle, Dre
10071036
return new DreamValue(needleIndex + 1); //1-indexed, or 0 if not found (LastIndexOf returns -1 if not found)
10081037
}
10091038

1039+
[DreamProc("findlasttextEx_char")]
1040+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
1041+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
1042+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
1043+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
1044+
public static DreamValue NativeProc_findlasttextEx_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
1045+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
1046+
return NativeProc_findlasttextEx(bundle, src, usr);
1047+
}
1048+
10101049
[DreamProc("flick")]
10111050
[DreamProcParameter("Icon", Type = DreamValueTypeFlag.String | DreamValueTypeFlag.DreamResource)]
10121051
[DreamProcParameter("Object", Type = DreamValueTypeFlag.String | DreamValueTypeFlag.DreamResource)]
@@ -2002,6 +2041,15 @@ public static DreamValue NativeProc_nonspantext(NativeProc.Bundle bundle, DreamO
20022041
return new DreamValue(index);
20032042
}
20042043

2044+
[DreamProc("nonspantext_char")]
2045+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
2046+
[DreamProcParameter("Needles", Type = DreamValueTypeFlag.String)]
2047+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
2048+
public static DreamValue NativeProc_nonspantext_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
2049+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
2050+
return NativeProc_nonspantext(bundle, src, usr);
2051+
}
2052+
20052053
[DreamProc("num2text")]
20062054
[DreamProcParameter("N")]
20072055
[DreamProcParameter("A", Type = DreamValueTypeFlag.Float)]
@@ -2334,6 +2382,17 @@ public static DreamValue NativeProc_replacetext(NativeProc.Bundle bundle, DreamO
23342382
throw new Exception($"Invalid needle {needle}");
23352383
}
23362384

2385+
[DreamProc("replacetext_char")]
2386+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
2387+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
2388+
[DreamProcParameter("Replacement", Type = DreamValueTypeFlag.String)]
2389+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
2390+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
2391+
public static DreamValue NativeProc_replacetext_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
2392+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
2393+
return NativeProc_replacetext(bundle, src, usr);
2394+
}
2395+
23372396
[DreamProc("replacetextEx")]
23382397
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
23392398
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
@@ -2381,6 +2440,17 @@ public static DreamValue NativeProc_replacetextEx(NativeProc.Bundle bundle, Drea
23812440
return new DreamValue(text.Substring(start - 1, end - start).Replace(needle, replacement, StringComparison.Ordinal));
23822441
}
23832442

2443+
[DreamProc("replacetextEx_char")]
2444+
[DreamProcParameter("Haystack", Type = DreamValueTypeFlag.String)]
2445+
[DreamProcParameter("Needle", Type = DreamValueTypeFlag.String)]
2446+
[DreamProcParameter("Replacement", Type = DreamValueTypeFlag.String)]
2447+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
2448+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
2449+
public static DreamValue NativeProc_replacetextEx_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
2450+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
2451+
return NativeProc_replacetextEx(bundle, src, usr);
2452+
}
2453+
23842454
[DreamProc("rgb2num")]
23852455
[DreamProcParameter("color", Type = DreamValueTypeFlag.String, DefaultValue = "#FFFFFF")]
23862456
[DreamProcParameter("space", Type = DreamValueTypeFlag.Float, DefaultValue = 0)] // Same value as COLORSPACE_RGB
@@ -2852,6 +2922,17 @@ public static DreamValue NativeProc_splittext(NativeProc.Bundle bundle, DreamObj
28522922
}
28532923
}
28542924

2925+
[DreamProc("splittext_char")]
2926+
[DreamProcParameter("Text", Type = DreamValueTypeFlag.String)]
2927+
[DreamProcParameter("Delimiter", Type = DreamValueTypeFlag.String)]
2928+
[DreamProcParameter("Start", Type = DreamValueTypeFlag.Float, DefaultValue = 1)]
2929+
[DreamProcParameter("End", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
2930+
[DreamProcParameter("include_delimiters", Type = DreamValueTypeFlag.Float, DefaultValue = 0)]
2931+
public static DreamValue NativeProc_splittext_char(NativeProc.Bundle bundle, DreamObject? src, DreamObject? usr) {
2932+
//Wrapper function, Opendream defaults to counting by chars instead of bytes.
2933+
return NativeProc_splittext(bundle, src, usr);
2934+
}
2935+
28552936
private static void OutputToStatPanel(DreamManager dreamManager, DreamConnection connection, DreamValue name, DreamValue value) {
28562937
if (name.IsNull && value.TryGetValueAsDreamList(out var list)) {
28572938
foreach (var item in list.EnumerateValues())

0 commit comments

Comments
 (0)