add matchRange

This commit is contained in:
Tan, Kian-ting 2023-09-04 22:02:05 +08:00
parent 9ff7b784f8
commit 13c9e7026b
2 changed files with 62 additions and 1 deletions

View file

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.thenDo = exports.charToCodepoint = exports.match1Char = void 0;
exports.thenDo = exports.charToCodepoint = exports.matchRange = exports.match1Char = void 0;
var fs = require('fs');
/**
* @description
@ -26,6 +26,37 @@ function match1Char(c) {
}
exports.match1Char = match1Char;
;
/**
* @description
* it returns a function which test if the first char of the `remained` part of
* the argument of the function is between `l` and `u`, if it's true, update the `MatchedPair` wrapped
* in `Some`. Otherwise, it returns `None`.
* * @param l : lower bound char, 1-char string
* * @param u : upper bound char, 1-char string
* @returns the updated `MatchedPair` wrapped in `Some(x)` or `None`.
*/
function matchRange(l, u) {
let lCodepoint = charToCodepoint(l);
let uCodepoint = charToCodepoint(u);
if (l > u) {
throw new Error("Error: the codepoint of `" + l + "` is not smaller than `" + u + "`)");
}
return (m) => {
const charToBeMatched = m.remained[0];
const codePointToBeMatched = charToCodepoint(charToBeMatched);
if (codePointToBeMatched >= lCodepoint && codePointToBeMatched <= uCodepoint) {
return { _tag: "Some", value: {
matched: m.matched + charToBeMatched,
remained: m.remained.substring(1)
} };
}
else {
return { _tag: "None" };
}
};
}
exports.matchRange = matchRange;
;
/**
* convert the one-char string to codepoint.
* @param s : the string to code point.

View file

@ -45,6 +45,36 @@ export function match1Char(c : string) : (m: MatcheePair) => Maybe<MatcheePair>
}
};
/**
* @description
* it returns a function which test if the first char of the `remained` part of
* the argument of the function is between `l` and `u`, if it's true, update the `MatchedPair` wrapped
* in `Some`. Otherwise, it returns `None`.
* * @param l : lower bound char, 1-char string
* * @param u : upper bound char, 1-char string
* @returns the updated `MatchedPair` wrapped in `Some(x)` or `None`.
*/
export function matchRange(l : string, u : string) : (m: MatcheePair) => Maybe<MatcheePair> {
let lCodepoint = charToCodepoint(l);
let uCodepoint = charToCodepoint(u);
if (l > u){
throw new Error("Error: the codepoint of `"+l+"` is not smaller than `"+u+"`)");
}
return (m : MatcheePair)=>{
const charToBeMatched = m.remained[0];
const codePointToBeMatched = charToCodepoint(charToBeMatched);
if (codePointToBeMatched >= lCodepoint && codePointToBeMatched <= uCodepoint){
return {_tag: "Some", value :{
matched : m.matched + charToBeMatched,
remained : m.remained.substring(1)}};
}
else{
return {_tag: "None"};
}
}
};
/**
* convert the one-char string to codepoint.
* @param s : the string to code point.