@jdeighan/coffee-utils 8.0.5 → 8.0.6
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/Section.coffee +4 -1
- package/src/Section.js +5 -1
- package/src/SectionMap.coffee +27 -31
- package/src/SectionMap.js +33 -39
- package/src/coffee_utils.coffee +12 -0
- package/src/coffee_utils.js +10 -0
- package/src/indent_utils.coffee +7 -0
- package/src/indent_utils.js +6 -0
package/package.json
CHANGED
package/src/Section.coffee
CHANGED
package/src/Section.js
CHANGED
@@ -79,7 +79,11 @@ export var Section = class Section {
|
|
79
79
|
|
80
80
|
// ..........................................................
|
81
81
|
getBlock() {
|
82
|
-
|
82
|
+
if (this.lLines.length === 0) {
|
83
|
+
return undef;
|
84
|
+
} else {
|
85
|
+
return arrayToBlock(this.lLines);
|
86
|
+
}
|
83
87
|
}
|
84
88
|
|
85
89
|
};
|
package/src/SectionMap.coffee
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
import {
|
4
4
|
assert, pass, undef, defined, croak, OL, isEmpty, nonEmpty,
|
5
5
|
isString, isHash, isArray, isUniqueTree, isNonEmptyString,
|
6
|
+
isNonEmptyArray,
|
6
7
|
} from '@jdeighan/coffee-utils'
|
7
8
|
import {arrayToBlock} from '@jdeighan/coffee-utils/block'
|
8
9
|
import {indented} from '@jdeighan/coffee-utils/indent'
|
@@ -119,14 +120,36 @@ export class SectionMap
|
|
119
120
|
return
|
120
121
|
|
121
122
|
# ..........................................................
|
123
|
+
# --- procFunc should be (name, text) -> return processedText
|
122
124
|
|
123
|
-
getBlock: () ->
|
125
|
+
getBlock: (procFunc=undef, lTree=undef) ->
|
124
126
|
|
125
127
|
debug "enter getBlock()"
|
128
|
+
if (lTree == undef)
|
129
|
+
lTree = @lSectionTree
|
130
|
+
else
|
131
|
+
assert isArray(lTree), "not an array #{OL(lTree)}"
|
132
|
+
|
126
133
|
lParts = []
|
127
|
-
for
|
128
|
-
if
|
129
|
-
|
134
|
+
for part in lTree
|
135
|
+
if isString(part)
|
136
|
+
text = @section(part).getBlock()
|
137
|
+
if nonEmpty(text) && defined(procFunc)
|
138
|
+
text = procFunc(part, text)
|
139
|
+
else if isNonEmptyArray(part)
|
140
|
+
if isSectionName(part[0])
|
141
|
+
text = @getBlock(procFunc, part)
|
142
|
+
else if isSetName(part[0])
|
143
|
+
text = @getBlock(procFunc, part.slice(1))
|
144
|
+
if nonEmpty(text) && defined(procFunc)
|
145
|
+
text = procFunc(part[0], text)
|
146
|
+
else
|
147
|
+
croak "Bad part: #{OL(part)}"
|
148
|
+
else
|
149
|
+
croak "Bad part: #{OL(part)}"
|
150
|
+
if defined(text)
|
151
|
+
lParts.push text
|
152
|
+
|
130
153
|
debug 'lParts', lParts
|
131
154
|
result = arrayToBlock(lParts)
|
132
155
|
debug "return from getBlock()", result
|
@@ -183,33 +206,6 @@ export class SectionMap
|
|
183
206
|
|
184
207
|
# ..........................................................
|
185
208
|
|
186
|
-
indent: (desc=undef, level=1) ->
|
187
|
-
|
188
|
-
for [_, sect] from @allSections(desc)
|
189
|
-
sect.indent(level)
|
190
|
-
return
|
191
|
-
|
192
|
-
# ..........................................................
|
193
|
-
|
194
|
-
enclose: (name, pre, post) ->
|
195
|
-
|
196
|
-
if isSectionName(name)
|
197
|
-
sect = @section(name)
|
198
|
-
if sect.nonEmpty()
|
199
|
-
sect.indent()
|
200
|
-
sect.prepend(pre)
|
201
|
-
sect.add(post)
|
202
|
-
else if isSetName(name)
|
203
|
-
if @nonEmpty(name)
|
204
|
-
@indent(name)
|
205
|
-
@firstSection(name).prepend(pre)
|
206
|
-
@lastSection(name).add(post)
|
207
|
-
else
|
208
|
-
croak "Bad name param #{OL(name)}"
|
209
|
-
return
|
210
|
-
|
211
|
-
# ..........................................................
|
212
|
-
|
213
209
|
getShape: () ->
|
214
210
|
|
215
211
|
debug "enter getShape()"
|
package/src/SectionMap.js
CHANGED
@@ -15,7 +15,8 @@ import {
|
|
15
15
|
isHash,
|
16
16
|
isArray,
|
17
17
|
isUniqueTree,
|
18
|
-
isNonEmptyString
|
18
|
+
isNonEmptyString,
|
19
|
+
isNonEmptyArray
|
19
20
|
} from '@jdeighan/coffee-utils';
|
20
21
|
|
21
22
|
import {
|
@@ -146,15 +147,39 @@ export var SectionMap = class SectionMap {
|
|
146
147
|
}
|
147
148
|
|
148
149
|
// ..........................................................
|
149
|
-
|
150
|
-
|
150
|
+
// --- procFunc should be (name, text) -> return processedText
|
151
|
+
getBlock(procFunc = undef, lTree = undef) {
|
152
|
+
var j, lParts, len, part, result, text;
|
151
153
|
debug("enter getBlock()");
|
154
|
+
if (lTree === undef) {
|
155
|
+
lTree = this.lSectionTree;
|
156
|
+
} else {
|
157
|
+
assert(isArray(lTree), `not an array ${OL(lTree)}`);
|
158
|
+
}
|
152
159
|
lParts = [];
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
160
|
+
for (j = 0, len = lTree.length; j < len; j++) {
|
161
|
+
part = lTree[j];
|
162
|
+
if (isString(part)) {
|
163
|
+
text = this.section(part).getBlock();
|
164
|
+
if (nonEmpty(text) && defined(procFunc)) {
|
165
|
+
text = procFunc(part, text);
|
166
|
+
}
|
167
|
+
} else if (isNonEmptyArray(part)) {
|
168
|
+
if (isSectionName(part[0])) {
|
169
|
+
text = this.getBlock(procFunc, part);
|
170
|
+
} else if (isSetName(part[0])) {
|
171
|
+
text = this.getBlock(procFunc, part.slice(1));
|
172
|
+
if (nonEmpty(text) && defined(procFunc)) {
|
173
|
+
text = procFunc(part[0], text);
|
174
|
+
}
|
175
|
+
} else {
|
176
|
+
croak(`Bad part: ${OL(part)}`);
|
177
|
+
}
|
178
|
+
} else {
|
179
|
+
croak(`Bad part: ${OL(part)}`);
|
180
|
+
}
|
181
|
+
if (defined(text)) {
|
182
|
+
lParts.push(text);
|
158
183
|
}
|
159
184
|
}
|
160
185
|
debug('lParts', lParts);
|
@@ -213,37 +238,6 @@ export var SectionMap = class SectionMap {
|
|
213
238
|
return this.length(desc) > 0;
|
214
239
|
}
|
215
240
|
|
216
|
-
// ..........................................................
|
217
|
-
indent(desc = undef, level = 1) {
|
218
|
-
var _, ref, sect, x;
|
219
|
-
ref = this.allSections(desc);
|
220
|
-
for (x of ref) {
|
221
|
-
[_, sect] = x;
|
222
|
-
sect.indent(level);
|
223
|
-
}
|
224
|
-
}
|
225
|
-
|
226
|
-
// ..........................................................
|
227
|
-
enclose(name, pre, post) {
|
228
|
-
var sect;
|
229
|
-
if (isSectionName(name)) {
|
230
|
-
sect = this.section(name);
|
231
|
-
if (sect.nonEmpty()) {
|
232
|
-
sect.indent();
|
233
|
-
sect.prepend(pre);
|
234
|
-
sect.add(post);
|
235
|
-
}
|
236
|
-
} else if (isSetName(name)) {
|
237
|
-
if (this.nonEmpty(name)) {
|
238
|
-
this.indent(name);
|
239
|
-
this.firstSection(name).prepend(pre);
|
240
|
-
this.lastSection(name).add(post);
|
241
|
-
}
|
242
|
-
} else {
|
243
|
-
croak(`Bad name param ${OL(name)}`);
|
244
|
-
}
|
245
|
-
}
|
246
|
-
|
247
241
|
// ..........................................................
|
248
242
|
getShape() {
|
249
243
|
var lParts, level, ref, result, sect, x;
|
package/src/coffee_utils.coffee
CHANGED
@@ -173,6 +173,12 @@ export isArray = (x) ->
|
|
173
173
|
|
174
174
|
# ---------------------------------------------------------------------------
|
175
175
|
|
176
|
+
export isNonEmptyArray = (x) ->
|
177
|
+
|
178
|
+
return isArray(x) && (x.length > 0)
|
179
|
+
|
180
|
+
# ---------------------------------------------------------------------------
|
181
|
+
|
176
182
|
export isHash = (x, lKeys) ->
|
177
183
|
|
178
184
|
if ! x || (getClassName(x) != 'Object')
|
@@ -186,6 +192,12 @@ export isHash = (x, lKeys) ->
|
|
186
192
|
|
187
193
|
# ---------------------------------------------------------------------------
|
188
194
|
|
195
|
+
export isNonEmptyHash = (x) ->
|
196
|
+
|
197
|
+
return isHash(x) && (Object.keys(x).length > 0)
|
198
|
+
|
199
|
+
# ---------------------------------------------------------------------------
|
200
|
+
|
189
201
|
export hashHasKey = (x, key) ->
|
190
202
|
|
191
203
|
assert isHash(x), "hashHasKey(): not a hash"
|
package/src/coffee_utils.js
CHANGED
@@ -159,6 +159,11 @@ export var isArray = function(x) {
|
|
159
159
|
return Array.isArray(x);
|
160
160
|
};
|
161
161
|
|
162
|
+
// ---------------------------------------------------------------------------
|
163
|
+
export var isNonEmptyArray = function(x) {
|
164
|
+
return isArray(x) && (x.length > 0);
|
165
|
+
};
|
166
|
+
|
162
167
|
// ---------------------------------------------------------------------------
|
163
168
|
export var isHash = function(x, lKeys) {
|
164
169
|
var i, key, len;
|
@@ -177,6 +182,11 @@ export var isHash = function(x, lKeys) {
|
|
177
182
|
return true;
|
178
183
|
};
|
179
184
|
|
185
|
+
// ---------------------------------------------------------------------------
|
186
|
+
export var isNonEmptyHash = function(x) {
|
187
|
+
return isHash(x) && (Object.keys(x).length > 0);
|
188
|
+
};
|
189
|
+
|
180
190
|
// ---------------------------------------------------------------------------
|
181
191
|
export var hashHasKey = function(x, key) {
|
182
192
|
assert(isHash(x), "hashHasKey(): not a hash");
|
package/src/indent_utils.coffee
CHANGED
@@ -146,3 +146,10 @@ export tabify = (str, numSpaces=undef) ->
|
|
146
146
|
export untabify = (str, numSpaces=3) ->
|
147
147
|
|
148
148
|
return str.replace(/\t/g, ' '.repeat(numSpaces))
|
149
|
+
|
150
|
+
# ---------------------------------------------------------------------------
|
151
|
+
# enclose - indent text, surround with pre and post
|
152
|
+
|
153
|
+
export enclose = (text, pre, post) ->
|
154
|
+
|
155
|
+
return pre + "\n" + indented(text) + "\n" + post
|
package/src/indent_utils.js
CHANGED
@@ -175,3 +175,9 @@ export var tabify = function(str, numSpaces = undef) {
|
|
175
175
|
export var untabify = function(str, numSpaces = 3) {
|
176
176
|
return str.replace(/\t/g, ' '.repeat(numSpaces));
|
177
177
|
};
|
178
|
+
|
179
|
+
// ---------------------------------------------------------------------------
|
180
|
+
// enclose - indent text, surround with pre and post
|
181
|
+
export var enclose = function(text, pre, post) {
|
182
|
+
return pre + "\n" + indented(text) + "\n" + post;
|
183
|
+
};
|