textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet
Version:
79 lines (71 loc) • 2.94 kB
JavaScript
// MIT © 2017 azu
;
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var RuleHelper = require("textlint-rule-helper").RuleHelper;
var matchCaptureGroupAll = require("match-index").matchCaptureGroupAll;
var moji = require("moji");
function toHankaku(string) {
return moji(string).convert('ZE', 'HE').toString();
}
function toZenakaku(string) {
return moji(string).convert('HE', 'ZE').toString();
}
var defaultOptions = {
// "全角" or "半角"
"prefer": "半角"
};
var zenkakuOnly = function zenkakuOnly(_ref) {
var report = _ref.report,
RuleError = _ref.RuleError,
fixer = _ref.fixer;
return function checkZenkaku(node, text) {
var matchRegExp = /([a-zA-Z]+)/;
matchCaptureGroupAll(text, matchRegExp).forEach(function (match) {
var index = match.index,
text = match.text;
report(node, new RuleError("アルファベットは「全角」で表記します。", {
index: index,
fix: fixer.replaceTextRange([index, index + text.length], toZenakaku(text))
}));
});
};
};
var hankakuOnly = function hankakuOnly(_ref2) {
var report = _ref2.report,
RuleError = _ref2.RuleError,
fixer = _ref2.fixer;
return function checkZenkaku(node, text) {
var matchRegExp = /([a-zA-Z]+)/;
matchCaptureGroupAll(text, matchRegExp).forEach(function (match) {
var index = match.index,
text = match.text;
report(node, new RuleError("アルファベットは「半角」で表記します。", {
index: index,
fix: fixer.replaceTextRange([index, index + text.length], toHankaku(text))
}));
});
};
};
function reporter(context) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var Syntax = context.Syntax,
RuleError = context.RuleError,
report = context.report,
fixer = context.fixer,
getSource = context.getSource;
var prefer = options.prefer || defaultOptions.prefer;
var helper = new RuleHelper(context);
var checkText = prefer === "半角" ? hankakuOnly({ report: report, RuleError: RuleError, fixer: fixer }) : zenkakuOnly({ report: report, RuleError: RuleError, fixer: fixer });
return _defineProperty({}, Syntax.Str, function (node) {
if (helper.isChildNode(node, [Syntax.Link, Syntax.Image, Syntax.BlockQuote, Syntax.Emphasis])) {
return;
}
var text = getSource(node);
checkText(node, text);
});
}
module.exports = {
linter: reporter,
fixer: reporter
};
//# sourceMappingURL=textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet.js.map