eliza-core
Version:
A rendition of ELIZA program engine by Weizenbaum sharable for all javascript environments
142 lines (141 loc) • 3.84 kB
JavaScript
;
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;