Japanese Character Count

by hibara
5
4
3
2
1
Score: 50/100

Description

Counts characters for Japanese writing: whole note, selection, heading sections, and paragraphs.

Reviews

No reviews yet.

Stats

0
stars
46
downloads
0
forks
11
days
5
days
5
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
4
commits

Latest Version

5 days ago

Changelog

New

  • Whitespace marks (optional, off by default): show full-width spaces, half-width spaces, and line breaks as marks in the editor. They do not affect the character count.
  • While half-width space marks are shown, Obsidian's indentation guides are aligned to the 4-space boundaries.
  • Settings now appear in the settings search on Obsidian 1.13 and later.

Fixed

  • With line break marks shown, moving the cursor up or down no longer skips empty lines.

追加

  • 空白・改行の表示(任意、初期状態はオフ):全角スペース・半角スペース・改行を、エディタ上に印で示します。文字数には影響しません。
  • 半角スペースの印を出しているあいだは、行頭のスペース4つごとの区切り線を、区切り目に揃えて表示します。
  • Obsidian 1.13 以降で、設定の検索に項目が出るようになりました。

修正

  • 改行の印を出しているとき、カーソルの上下移動で空行が飛ばされる問題を直しました。

README file from

Github

Japanese Character Count

An Obsidian plugin that counts characters (not words) for Japanese writing, such as novels and manga scripts. It shows the count for the whole note, the selection, each heading section, and each paragraph, without ever modifying your Markdown files.

日本語の説明はこちら

Features

  • Status bar — the character count of the current note, plus the count of the selection.
  • Per-heading counts — each heading line shows the character count of its section, drawn as an editor decoration (source mode and live preview).
  • Section-end counts — the same count is repeated at the end of the section, so you do not have to scroll back up in a long chapter.
  • Per-paragraph counts (optional, off by default).
  • End-of-manuscript heading — a heading such as # 完 or # 了 ends the body text. Afterwords and notes below it are not counted, and the total is shown on that line.
  • Whitespace marks (optional, off by default) — shows full-width spaces, half-width spaces, and line breaks as marks in the editor.
  • Grapheme clusters — emoji, combining characters, and variation selectors count as one character (Intl.Segmenter).

Count modes

Mode What it counts
Manuscript (default) Only the text that is displayed as body text. Markdown syntax, line breaks, YAML frontmatter, comments, and ruby readings are excluded.
Raw Text The text of the file as it is, including Markdown syntax.
VSCode Compatible Matches the selection count in the VS Code status bar.
Kakuyomu Matches the character count of Kakuyomu, a Japanese novel posting site. Ruby readings, emphasis-dot markup, spaces, line breaks, and heading lines are excluded.

Installation

In Obsidian, open Settings → Community plugins → Browse, search for "Japanese Character Count", then install and enable it.

The settings screen and commands are in Japanese.


日本語

日本語の小説・漫画原作などの執筆のための、Obsidian用の文字数カウントプラグインです。

英語圏向けのWord Countではなく、**日本語の「文字数」**を数えます。ノート全体・選択範囲・見出しごと・段落ごとの文字数を、Markdownファイルを書き換えずに表示します。


主な機能

ステータスバー

現在のノートの本文文字数を表示します。テキストを選択すると、選択範囲の文字数も並べて表示します。

本文 12,843字 | 選択 286字

見出しごとの文字数

エディタ上で、各見出しの行末にそのセクションの文字数を表示します。

## 病理室                         1,284字

表示はCodeMirrorのDecorationによるもので、Markdownファイルには一切書き込みません。エディタ(ソースモード/ライブプレビュー)での表示となり、閲覧モードでは表示されません。

セクション末尾の文字数

長い章を書いていると、見出しが画面の外へ出てしまい、その章の文字数を確認するために一番上まで戻ることになります。そこで、セクションの最後に書かれた行の行末にも、見出しと同じ文字数を表示します。

 長浜は顕微鏡から目を離した。

                                                       1,284字
## 次の見出し

置き場所は、そのセクションの一番下の行(多くは次の見出しの手前の空行)の右端です。本文の末尾にくっつけると書くたびに数字が横に動き、本文の文字とも重なるためで、空行の右端に固定することでどちらも避けています。空行そのものは文字数には数えません。

見出しのすぐ次の行しか本文がないときは、同じ数字が並ぶだけなので表示しません。不要なら設定でオフにできます。

段落ごとの文字数(任意)

空行で区切られた本文ブロックごとに文字数を表示します。画面が賑やかになるため、初期状態ではオフです。

長浜は顕微鏡から目を離した。          14字

空白・改行の表示(任意)

全角スペース・半角スペース・改行を、エディタ上に淡い印で示します。それぞれ個別にオン/オフでき、初期状態ではすべてオフです。文字数には影響しません。

対象 印
全角スペース 文字の中央に、点線の小さな四角
半角スペース 文字の下端に、「⊥」の形
改行 行末に、折り返しの矢印

半角スペースの印を出しているあいだは、行頭のスペース4つごとにObsidianが引く区切り線(インデントガイド)を、区切り目ちょうどに揃えて表示します。

印の大きさや色は、CSSスニペットで --jcc-ws-* の変数を上書きすると変えられます。

「完」「了」での打ち切り

# 完 や # 了 のような見出しがあると、その直前までを本文として数えます(見出しのレベルは問いません)。あとがきや設定資料を本文の字数に混ぜたくない場合に使えます。

見出しではない、ただの「完」の行は無視されます。「完」と「了」の両方があっても、先に現れたほうの1つだけが本文の終わりになります。この動作は設定でオフにできます。

さらに、その「完」の行の右端には、そこまでの本文全体の総文字数を「総計 12,345字」の形で表示します。応募規定の字数を確かめるとき、原稿の末尾を見れば済むようにするためのものです。


カウント方式

Manuscript Mode(既定・執筆用)

画面上に本文として表示される文字だけを数えます。

  • 改行は数えない
  • Markdown記号(**、#、リスト記号など)は数えない
  • YAML frontmatterは数えない
  • 句読点・括弧・英数字は1文字として数える
  • コメント(%% %%、<!-- -->)は数えない
  • カクヨム記法のルビは親文字だけを数える(|時任《ときとう》 → 2文字。設定でオフにできます)
  • 半角スペース/全角スペースを数えるかは設定可能(既定では半角は数えず、全角は数えます)

たとえば **重要** は「重要」の2文字として数えます。

Manuscript Modeでの記法ごとの扱い
記法 数える内容 例 → 文字数
強調・打ち消し・ハイライト 中身のみ **重要** → 2
見出し 見出しの文字のみ(# は数えない) ## 病理室 → 3
リスト・引用・チェックボックス 本文のみ(マーカーとインデントは数えない) - 項目一 → 3
リンク 表示名のみ [Obsidian](https://obsidian.md) → 8
Wikiリンク 表示名(無ければリンク先) [[ページ名|表示名]] → 3
埋め込み 数えない ![[画像.png]] → 0
コメント 数えない %%メモ%% → 0
Callout ラベル([!note])は数えず、本文は数える > [!note] 補足 → 2
ルビ(カクヨム記法) 親文字のみ `
傍点(カクヨム記法) 親文字のみ 《《通訳》》 → 2
HTMLタグ タグは数えず、中のテキストは数える 本文<br>続き → 4
脚注 参照記号は数えず、脚注の本文は数える 本文[^1] → 2
インラインコード 中身のみ `code` → 4
コードブロック 中身は数える(``` の行は数えない) —
水平線・表の区切り行 数えない --- → 0
エスケープ記号 記号を1文字として数える \* → 1
表 セルの中身のみ(` ` は数えない)

Raw Text Mode

ファイルに保存されている文字列を、Markdown記号も含めてそのまま数えます。他ソフトとの比較やデバッグ用です。

VSCode Compatible Mode

VSCodeのステータスバーに出る選択文字数(全選択したときの「N 文字を選択」)に合わせるモードです。

  • Markdown記号もそのまま数える
  • 改行は数えない(VSCodeの表示に合わせています)
  • 半角スペース・全角スペースは数える
  • サロゲートペアは1文字(コードポイント単位。書記素クラスタは使いません)

実際の原稿(324行・5,248字)で突き合わせて確認しています。

カクヨムモード

カクヨムの文字数表示に合わせるモードです。

  • 改行・半角スペース・全角スペースを数えない
  • ルビの読みを数えない — |時任《ときとう》 も 時任《ときとう》 も、親文字の「時任」2文字
  • 傍点は親文字だけを数える — 《《通訳》》 は「通訳」2文字
  • 親文字を伴わない 《…》 は、カクヨムでもルビにならずそのまま表示されるので数えます
  • 見出し行は数えない — 話のタイトルは本文とは別に入力するため
  • Markdown記号はそのまま数える — カクヨムはMarkdownを解釈しないので、シーン区切りの *** はアスタリスク3文字として表示され、文字数にも入ります

同じ原稿を「Obsidianのノート(見出し行つき)」と「カクヨムへ貼り付けた本文」の両方から数えて、同じ値になることを確認しています。

なお、カクヨムの執筆画面の文字数表示は 100字単位の概数(「約4,900字」のような形)です。ルビ・傍点の扱いは、記法を100個単位で並べたテキストを実際に貼り付け、表示の増え方から確定しました。

貼り付けたもの カクヨムの表示 分かること
本文(4,688字) 約4,700字 —
+ 《《通訳》》 × 100 約4,900字 傍点は親文字だけを数える(記号込みなら約5,400字)
+ ` 時任《ときとう》` × 100 約4,900字
+ 《《》》 × 25 約4,800字 中身のない記法は無効で、記号4文字として数える

Unicodeの扱い

string.length には依存せず、Intl.Segmenter による書記素クラスタ単位で数えます。

  • サロゲートペア(例:🍣)→ 1文字
  • 結合文字(例:か + 濁点)→ 1文字
  • ZWJで連結した絵文字(例:👨‍👩‍👧‍👦)→ 1文字
  • 異体字セレクタ付きの漢字 → 1文字

設定でオフにすると、コードポイント単位のカウントになります。


設定

設定 既定値
ステータスバーに総文字数を表示 オン
見出しごとの文字数を表示 オン
セクションの末尾にも文字数を表示 オン
段落ごとの文字数を表示 オフ
概数で表示(カクヨム式) オフ
カウントモード Manuscript(Manuscript/Raw Text/VSCode Compatible/カクヨム)
Markdown記号を除外 オン
改行を除外 オン
半角スペースを除外 オン
全角スペースを除外 オフ
YAML frontmatterを除外 オン
ルビの読みを除外 オン
書記素クラスタ単位で数える オン
「完」の行に総文字数を表示 オン
「完」「了」の見出しで本文を打ち切る オン
本文終了とみなす見出し語 完, 了
親見出しに子見出しの文字数を含める オフ
全角スペースを表示 オフ
半角スペースを表示 オフ
改行を表示 オフ
再計算の遅延(ミリ秒) 200

コマンド

  • 文字数の内訳を表示 — 本文の文字数、見出し数、段落数を通知で表示します
  • 段落ごとの文字数表示を切り替え

インストール

コミュニティプラグインから

Obsidianの 設定 → コミュニティプラグイン → 閲覧 で「Japanese Character Count」を検索し、インストールして有効化します。

手動インストール

  1. Releases から main.js / manifest.json / styles.css をダウンロードします
  2. Vaultの .obsidian/plugins/japanese-character-count/ に配置します
  3. Obsidianを再読み込みし、設定 → コミュニティプラグイン から有効化します

ソースからビルド

git clone https://github.com/hibara/obsidian-japanese-count.git
cd obsidian-japanese-count
npm install
npm run build

生成された main.js、manifest.json、styles.css を、Vaultの .obsidian/plugins/japanese-character-count/ に置きます。


開発

npm install
npm run dev     # ファイル監視つきビルド
npm run build   # 型チェック+本番ビルド
npm test        # テスト

ソース構成

src/
  main.ts         プラグイン本体(ステータスバー、コマンド、設定の読み書き)
  counter.ts      文字数カウントの中核
  markdown.ts     Markdown記法の除去
  sections.ts     見出し・段落・本文範囲の解析
  decorations.ts  エディタ上の文字数表示(CodeMirror Decoration)
  whitespace.ts   空白・改行の印の表示(CodeMirror Decoration)
  settings.ts     設定の型と設定画面
  format.ts       表示用の数値フォーマット
tests/
  counter.test.ts
  format.test.ts
  sections.test.ts
  whitespace.test.ts

カウント処理はObsidian APIに依存していないため、そのまま単体テストできます。


ライセンス

MIT