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";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
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');
|
var fs = require('fs');
|
||||||
/**
|
/**
|
||||||
* @description
|
* @description
|
||||||
|
@ -26,6 +26,37 @@ function match1Char(c) {
|
||||||
}
|
}
|
||||||
exports.match1Char = match1Char;
|
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.
|
* convert the one-char string to codepoint.
|
||||||
* @param s : the string to code point.
|
* @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.
|
* convert the one-char string to codepoint.
|
||||||
* @param s : the string to code point.
|
* @param s : the string to code point.
|
||||||
|
|
Loading…
Reference in a new issue