Added dev target in makefile, added regexp-dispatch and example
This commit is contained in:
49
source/text/regexp.mjs
Normal file
49
source/text/regexp.mjs
Normal file
@@ -0,0 +1,49 @@
|
||||
export function get_flags(pattern) {
|
||||
if (pattern instanceof RegExp) {
|
||||
return new Set(pattern.flags);
|
||||
} else {
|
||||
return new Set();
|
||||
}
|
||||
}
|
||||
export function get_source(pattern) {
|
||||
if (pattern instanceof RegExp) {
|
||||
return pattern.source;
|
||||
} else {
|
||||
return pattern;
|
||||
}
|
||||
}
|
||||
|
||||
export function concat(...pattern_list) {
|
||||
let pending_source = '';
|
||||
const pending_flags = new Set();
|
||||
|
||||
for (const pattern of pattern_list) {
|
||||
|
||||
if (pattern instanceof RegExp) {
|
||||
pending_source += pattern.source;
|
||||
for (const flag of pattern.flags) {
|
||||
pending_flags.add(flag);
|
||||
}
|
||||
} else {
|
||||
pending_source += pattern;
|
||||
}
|
||||
}
|
||||
|
||||
return new RegExp(pending_source, String.prototype.concat(...pending_flags));
|
||||
}
|
||||
|
||||
|
||||
export function join(pattern_list, separator, flags=undefined) {
|
||||
return new RegExp(pattern_list.map(pattern => get_source(pattern)).join(get_source(separator)), flags);
|
||||
}
|
||||
|
||||
|
||||
export function update_flag(pattern, flag, state) {
|
||||
const pattern_flags = get_flags(pattern);
|
||||
if (state) {
|
||||
pattern_flags.add(flag);
|
||||
} else {
|
||||
pattern_flags.delete(flag);
|
||||
}
|
||||
return new RegExp(pattern.source, String.prototype.concat(...pattern_flags));
|
||||
}
|
||||
Reference in New Issue
Block a user