// LICENSE : MIT
"use strict";
// This RegExp are based of https://github.com/recruit-tech/redpen/blob/master/redpen-core/src/main/java/cc/redpen/validator/sentence/JapaneseStyleValidator.java
const DEARU_PATTERN = /のだが|ないかと|してきた|であるから/g;
const DEARU_END_PATTERN = /(?:だ|である|った|ではない｜ないか|しろ|しなさい|いただきたい|いただく|ならない|あろう|られる)。$/g;

const DESUMASU_PATTERN = /でしたが|でしたので|ですので|ですが/g;
const DESUMASU_END_PATTERN = /(?:です|ます|ました|ません|ですね|でしょうか|ください|ませ)。$/g;
/**
 *
 * @param text
 * @param reg
 * @returns {{value:string, columnIndex: number, lineNumber:number}}[]
 */
function countMatchContent(text, reg) {
    let matches = [];
    let tmpMatch;
    while ((tmpMatch = reg.exec(text)) != null) {
        matches.push({
            value: tmpMatch[0],
            lineNumber: 1,
            columnIndex: reg.lastIndex - tmpMatch[0].length
        });
    }
    return matches;
}
/**
 *
 * @param text
 * @param reg
 * @returns {{value:string, columnIndex: number, lineNumber:number}}[]
 */
function countMatchContentEnd(text, reg) {
    let lines = text.split(/\r\n|\r|\n|\u2028|\u2029/g);
    let matches = [];
    lines.forEach((line, index) => {
        let ret = countMatchContent(line, reg);
        // adjust line number
        ret.forEach(match => match.lineNumber += index);
        matches = matches.concat(ret);
    });
    return matches;
}
/**
 * `text` の敬体(ですます調)について解析します
 * @param {string} text
 * @returns {{value:string, columnIndex: number, lineNumber:number}}[]
 */

export function analyzeDesumasu(text) {
    let retDesumasu = countMatchContent(text, DESUMASU_PATTERN);
    let retDesumasuEnd = countMatchContentEnd(text, DESUMASU_END_PATTERN);
    return retDesumasu.concat(retDesumasuEnd)
}
/**
 * `text` の常体(である調)について解析します
 * @param {string} text
 * @returns {{value:string, columnIndex: number, lineNumber:number}}[]
 */
export function analyzeDearu(text) {
    let retDearu = countMatchContent(text, DEARU_PATTERN);
    let retDearuEnd = countMatchContentEnd(text, DEARU_END_PATTERN);
    return retDearu.concat(retDearuEnd)
}
@@ -1387,32 +1387,98 @@
 m %7Bstring%7D text%0A
+ * @param %7Bboolean%7D analyzeConjunction %E6%8E%A5%E7%B6%9A%E8%A9%9E%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B default: true%0A
  * @returns %7B%7Bva
@@ -1569,27 +1569,156 @@
 esumasu(text
-) %7B
+, analyzeConjunction = true) %7B%0A    if (!analyzeConjunction) %7B%0A        return countMatchContentEnd(text, DESUMASU_END_PATTERN);%0A    %7D
 %0A    let ret
@@ -1947,24 +1947,90 @@
 tring%7D text%0A
+ * @param %7Bboolean%7D analyzeConjunction %E6%8E%A5%E7%B6%9A%E8%A9%9E%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B default: true%0A
  * @returns 
@@ -2125,19 +2125,145 @@
 aru(text
-) %7B
+, analyzeConjunction = true) %7B%0A    if (!analyzeConjunction) %7B%0A        return countMatchContentEnd(text, DEARU_END_PATTERN);%0A    %7D
 %0A    let

add option for analyzeConjunction