QA@IT

単語が正しく判定されない

338 PV

Typescriptで、時間を表現する語とそれに係る語をそれぞれ光らせるというコードを書いています。
特定の語はあらかじめ、jsonファイルに用意しておきそれを読み込ませて判定させようとしています。
下記はjsonファイルの内容です。
※矢印より左辺が時間を表現する語
 矢印より右辺が左辺が係る語
{
"強時間":["現在=>設置している",
"(現在=>設置している",
"現在は=>使わず"
]
}

しかし、なぜか一番上の行の「現在」という単語と2行目の「設置している」という語が光らず困っています。
初心者なので助言を頂ければ幸いです。よろしくお願いします。

実行結果
現在設置しているものを使用する。
(現在設置しているものの仕様について以下に示す)
※1行目の「現在」と2行目の「設置している」も光らせたい。

'use strict';
import * as vscode from 'vscode';
import * as fs from 'fs';

// var decChars: DecChars;

export function activate(context: vscode.ExtensionContext) {
    console.log('Congratulations, your extension "semieditor" is now active!');
    // const readJson = JSON.parse(fs.readFileSync('C:\\Users\\神龍\\specification\\src\\parent_dict.json','utf8'));
    const readJson = JSON.parse(fs.readFileSync('C:\\Users\\神龍\\shin\\src\\parent_dict.json','utf8'));

    context.subscriptions.push(vscode.commands.registerCommand('extension.color', () => {
        vscode.window.showInformationMessage("Color Range Word");

        // 特定の単語に色付け
        const strengthTimeWordList = readJson.強時間;
        const strengthTimeWords: vscode.DecorationOptions[] = [];
        var strengthtimeCount = 0


        function decorateWord() {
            const activeEditor = vscode.window.activeTextEditor;
            const text = activeEditor.document.getText(); //ドキュメント取得

            //強時間
            for (let i = 0; i < strengthTimeWordList.length; i++){
                let word = strengthTimeWordList[i].split('=>');
                if(text.indexOf(word[0]) !== -1 && text.indexOf(word[1],text.indexOf(word[0])) !== -1){
                    console.log(text.indexOf(word[0]));
                    console.log(text.indexOf(word[1],text.indexOf(word[0])));

                    //値域、状態値を表現する語を抽出
                    const startPos = activeEditor.document.positionAt(text.indexOf(word[0]));
                    const endPos = activeEditor.document.positionAt(text.indexOf(word[0]) + word[0].length);
                    const strengthtime_decoration = { range: new vscode.Range(startPos, endPos)};
                    strengthTimeWords.push(strengthtime_decoration);

                    // 値域、状態値に係る語を抽出
                    const relation_startPos = activeEditor.document.positionAt(text.indexOf(word[1],text.indexOf(word[0])));
                    const relation_endPos = activeEditor.document.positionAt(text.indexOf(word[1],text.indexOf(word[0])) + word[1].length);
                    const strengthtime_related_decoration = {range:new vscode.Range(relation_startPos,relation_endPos)};
                    dependencyRelationWords.push(strengthtime_related_decoration);

                    strengthtimeCount++;
                }
            }

            activeEditor.setDecorations(strengthTimeMarkerDecoration,strengthTimeWords);
            activeEditor.setDecorations(dependencyRelation,dependencyRelationWords);
        }
        decorateWord();
    }));

    //強時間に色付け
    const strengthTimeMarkerDecoration = vscode.window.createTextEditorDecorationType({
        'borderWidth': '1px',
        'borderRadius': '2px',
        'borderStyle': 'solid',
        // 'backgroundColor': 'rgba(0, 0, 255, 0.3)',
        'backgroundColor': 'rgba(128, 128, 0, 0.3)',
        // 'color':'blue'
        'color':'orange'
    });

    //係り受けの対象を色付け
    const dependencyRelation = vscode.window.createTextEditorDecorationType({
        'borderWidth': '1px',
        'borderRadius': '2px',
        'borderStyle': 'solid',
        'backgroundColor': 'rgba(0, 255, 0, 0.3)',
        'color':'lightgreen'
    });
}

ウォッチ

この質問への回答やコメントをメールでお知らせします。