UNPKG

eliza-core

Version:

A rendition of ELIZA program engine by Weizenbaum sharable for all javascript environments

142 lines (141 loc) 3.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var trimStart_1 = __importDefault(require("lodash/trimStart")); var trim_1 = __importDefault(require("lodash/trim")); var countBy_1 = __importDefault(require("lodash/countBy")); var NUMBERS = '0123456789'; function amatch(str, pat) { if (str.length < 1) { return -1; } var matchingLength = 0; var i = 0; var j = 0; while (i < str.length && j < pat.length) { var p = pat.charAt(j); if (p === '*' || p === '#') { return matchingLength; } if (str.charAt(i) !== p) { return -1; } i++; j++; matchingLength++; } return matchingLength; } exports.amatch = amatch; function findWildString(str, pat) { var matchingLength = 0; for (var i = 0; i < str.length; i++) { if (amatch(str.substring(i), pat) >= 0) { return matchingLength; } matchingLength++; } return -1; } exports.findWildString = findWildString; function findNum(str) { var matchingLength = 0; for (var i = 0; i < str.length; i++) { if (NUMBERS.indexOf(str.charAt(i)) === -1) { return matchingLength; } matchingLength++; } return matchingLength; } exports.findNum = findNum; function match_v1(str, pat) { var matches = []; var i = 0; var pos = 0; while (pos < pat.length) { switch (pat.charAt(pos)) { case '*': var n1 = (pos + 1 === pat.length) ? (str.length - i) : findWildString(str.substring(i), pat.substring(pos + 1)); if (n1 < 0) { return null; } matches.push(str.substring(i, i + n1)); i += n1; pos++; break; case '#': var n2 = findNum(str.substring(i)); matches.push(str.substring(i, i + n2)); i += n2; pos++; break; default: var n3 = amatch(str.substring(i), pat.substring(pos)); if (n3 <= 0) { return null; } i += n3; pos += n3; break; } } if (i >= str.length && pos >= pat.length) { return matches; } return null; } function match(str, pat) { return match_v1(str, pat); } exports.match = match; function replaceAll(str, src, dest) { if (src.length !== dest.length) { throw new Error('Fatal Code Error: dest and src should be the same.'); } for (var index = 0; index < src.length; index++) { str = str.split(src.charAt(index)).join(dest.charAt(index)); } return str; } exports.replaceAll = replaceAll; function compress(s) { var dest = ''; if (s.length < 1) { return s; } var prevChar; s.split('').forEach(function (currChar) { if (!prevChar) { prevChar = currChar; return; } if (prevChar === ' ' && ([' ', ',', '.'].indexOf(currChar) > -1)) { } else if (prevChar !== ' ' && currChar === '?') { dest += prevChar + " "; } else { dest += prevChar; } prevChar = currChar; }); return dest + (prevChar || ''); } exports.compress = compress; function trim(s) { return trimStart_1.default(s); } exports.trim = trim; function pad(s) { return " " + trim_1.default(s) + " "; } exports.pad = pad; function count(s, c) { return countBy_1.default(s)[c] || 0; } exports.count = count;