forked from davidson16807/relativity.scad
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnewSplit.scad
More file actions
121 lines (100 loc) · 3.28 KB
/
newSplit.scad
File metadata and controls
121 lines (100 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
_newSplit_version = [2025, 03, 29, 1];
function _newSplit_version() = _newSplit_version;
function _newSplit_version_str() =
let( s=_newSplit_version )
str( s.x, s.y, s.z, ".", s[3] );
function _new_split(string, delims, i=0) =
is_undef(delims) || is_not_list(delims) ?
undef
: delims == [] ?
[string]
: let( delim = delims[i] )
delim.x == 0 ?
_this_split( string, delims, 0 )
:
_last_split( string, delims, 0 )
;
function _last_split( string, delims, i ) =
let( delim = delims[i] )
i > len( delims ) ?
[]
: i == 0 ?
concat( // ["x"],i,delim.y,delim.x,
before( string, delim.x ),// [delim.y,delim.x],
[stringBlanks( delim.y-delim.x )],
_last_split(string, delims, i+1)
)
: i == len(delims) ?
lastWord( string, delims[i-1] )
: let( pdelim = delims[i-1])
pdelim.y == delim.x ?
concat( // ["y"],i,delim.y,delim.x,
stringBlanks( delim.y-delim.x ),
_last_split( string, delims, i+1 )
)
: concat( //["z"],i,delim.y,delim.x,
str_between_indecies(string, delims[i-1].y, delims[i].x),
stringBlanks( delim.y-delim.x ),
_last_split(string, delims, i+1)
)
;
function _this_split( string, delims, i ) =
let( ldelim = delims[i], ndelim = delims[i+1] )
i >= len( delims ) ?
[]
: ldelim.y == ndelim.x ?
concat(
[stringBlanks( ndelim.y-ndelim.x )],
_this_split(string, delims, i+1)
)
: let( endWord = i+1>=len(delims) ? len(string) : delims[i+1].x )
concat(
[stringBlanks( ldelim.y-ldelim.x )],
_coalesce_on( str_between_indecies(string, ldelim.y, endWord), undef, [] ),
_this_split(string, delims, i+1)
)
;
function lastWord( string, delim ) =
delim.y >= len(string) ? [] : after( string, delim.y-1 ) ;
function _split_only(string, delims, i=0) =
is_undef(delims) || is_not_list(delims) ?
undef
: delims == [] ?
[string]
: let( delim = delims[i] )
delim.x == 0 ?
_this_split_only( string, delims, 0 )
:
_last_split_only( string, delims, 0 )
;
function _last_split_only( string, delims, i ) =
let( delim = delims[i] )
i > len( delims ) ?
[]
: i == 0 ?
concat( // ["x"],i,delim.y,delim.x,
before( string, delim.x ),// [delim.y,delim.x],
_last_split_only(string, delims, i+1)
)
: i == len(delims) ?
lastWord( string, delims[i-1] )
: let( pdelim = delims[i-1])
pdelim.y == delim.x ?
_last_split_only( string, delims, i+1 )
: concat( //["z"],i,delim.y,delim.x,
str_between_indecies(string, delims[i-1].y, delims[i].x),
_last_split_only(string, delims, i+1)
)
;
function _this_split_only( string, delims, i ) =
let( ldelim = delims[i], ndelim = delims[i+1] )
i >= len( delims ) ?
[]
: ldelim.y == ndelim.x ?
_this_split_only(string, delims, i+1)
: let( endWord = i+1>=len(delims) ? len(string) : delims[i+1].x )
concat(
_coalesce_on( str_between_indecies(string, ldelim.y, endWord), undef, [] ),
_this_split_only(string, delims, i+1)
)
;