add matchRange
This commit is contained in:
parent
9ff7b784f8
commit
13c9e7026b
2 changed files with 62 additions and 1 deletions
33
src/index.js
33
src/index.js
|
@ -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.
|
||||
|
|
30
src/index.ts
30
src/index.ts
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue