Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"use strict";
import { window, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument } from 'vscode';
import { window, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument, TextEditor, Range } from 'vscode';
export function activate(context: ExtensionContext) {
let characterCounter = new CharacterCounter();
let controller = new CharacterCounterController(characterCounter);
Expand All @@ -24,27 +24,53 @@ export class CharacterCounter {
// Markdownとプレーンテキストの時だけカウント
if (doc.languageId === "markdown" || doc.languageId === "plaintext") {
let characterCount = this._getCharacterCount(doc);
this._statusBarItem.text = `$(pencil) ${characterCount} 文字`;
// 選択されているテキスト分を追加
let selectedCharacterCount = this._getSelectedCharacterCount(editor);
this._statusBarItem.text = `$(pencil) ${characterCount} 文字 ${selectedCharacterCount} 選択`;
this._statusBarItem.show();
} else {
this._statusBarItem.hide();
}
}

public _getCharacterCount(doc: TextDocument): number {
let docContent = doc.getText();
public _filterUncountedCharacters(docContent: string): string{
// カウントに含めない文字を削除する
docContent = docContent
.replace(/\s/g, '') // すべての空白文字
.replace(/《(.+?)》/g, '') // ルビ範囲指定記号とその中の文字
.replace(/[\||]/g, ''); // ルビ開始記号
return docContent
}

public _getCharacterCount(doc: TextDocument): number {
let docContent = doc.getText();
// // カウントに含めない文字を削除する
// docContent = docContent
// .replace(/\s/g, '') // すべての空白文字
// .replace(/《(.+?)》/g, '') // ルビ範囲指定記号とその中の文字
// .replace(/[\||]/g, ''); // ルビ開始記号
// ↑ をメソッド化した
docContent = this._filterUncountedCharacters(docContent);
let characterCount = 0;
if (docContent !== "") {
characterCount = docContent.length;
}
return characterCount;
}

public _getSelectedCharacterCount(editor: TextEditor): number {
// 選択されているテキストをカウントする
let doc = editor.document;
let characterCount = 0;
for (let i = 0; i < editor.selections.length; i++){
let selectedRange = new Range(editor.selections[i].start, editor.selections[i].end);
let docContent = doc.getText(selectedRange);
docContent = this._filterUncountedCharacters(docContent);
characterCount += docContent.length;
}
return characterCount;
}

public dispose() {
this._statusBarItem.dispose();
}
Expand Down