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