Beispiel #1
0
import rx from 'regx';

import * as commentStyles from './comment-styles.js';
import * as tagStyles from './tag-styles.js';

export const AST_TYPE_DOCUMENTATION = 'Documentation';
export const AST_TYPE_BLOCK = 'Block';
export const AST_TYPE_COMMENT = 'Comment';
export const AST_TYPE_COMMENT_TAG = 'Tag';
export const AST_TYPE_CODE = 'Code';

const RX_NEWLINE_DOS = /\r\n/g;
const rxm = rx('m');
const rxgm = rx('gm');

const { slashStarStar } = commentStyles;
const { atCurlyDash } = tagStyles;
const defaultNamedTags = [
	'arg',
	'argument',
	'class',
	'exports',
	'extends',
	'imports',
	'method',
	'module',
	'param',
	'parameter',
	'prop',
	'property'
];
// LICENSE : MIT
"use strict";
/*
 全角文字と半角文字の間
 全角文字どうしの間にスペースを入れません。
 ただしカタカナ複合語の場合を除きます。
 */
import {RuleHelper} from "textlint-rule-helper";
import {matchAll} from "match-index";
import regx from "regx";
const rx = regx("g");
const japaneseRegExp = /(?:[々〇〻\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]|[ぁ-んァ-ヶ])/;

function reporter(context) {
    const {Syntax, RuleError, report, fixer, getSource} = context;
    const helper = new RuleHelper();
    return {
        [Syntax.Str](node){
            if (helper.isChildNode(node, [Syntax.Link, Syntax.Image, Syntax.BlockQuote, Syntax.Emphasis])) {
                return;
            }
            const text = getSource(node);
            // 全角同士の間は半角スペースを入れない
            const matchReg = rx`${japaneseRegExp}( )${japaneseRegExp}`;
            const katakakana = /[ァ-ヶ]( )[ァ-ヶ]/;
            matchAll(text, matchReg).forEach(match => {
                const {input, captureGroups} = match;
                // ただしカタカナ複合語の場合を除きます。
                if (katakakana.test(input)) {
                    return;
                }