コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Sat.d.h./char-counter.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

/**
 * 文字数を種類ごとにカウントするツール。※ただし合字ゟ、ヿ、𪜈は非対応
 * 起動方法は、
 * 	1.ページ上部の文字数タブをクリック(記事全体の文字数をカウント)
 * 	2.カウント対象の文字列を選択し、Ctrl + Shift + G(選択範囲の文字数をカウント)
 * 下リンクによれば、ひらがなは60~70%、漢字は20~30%、カタカナは10%が理想である。
 * https://books.google.co.jp/books?id=ZSkfBAAAQBAJ&pg=PA106&lpg=PA106#v=onepage&q&f=false
 * 表記の詳細は[[w:ja:Wikipedia:表記ガイド]]を参照。
 */
(function() {
	'use strict';

	// 画面上部のタブ
	$('#p-namespaces > ul')
		.append($('<li><span><a>文字数</a></span></li>').attr({'id':'char-count'}));
	$('#char-count').click(function() {
		counter();
	});
	// キーボードショートカット (Ctrl + Shift + G)
	$(window).keydown(function(e){
		if (e.ctrlKey && e.shiftKey && e.keyCode === 71) {
			counter();
			return false;
		}
	});

	function counter () {
		// 文字列取得
		var endPos = 0;
		var startPos = 0;
		var txt = '';
		var wpTextbox = {};
		if (document.getElementById('editform')) {
			wpTextbox = document.forms.editform.wpTextbox1;
			if (wpTextbox.selectionStart) {
				endPos = wpTextbox.selectionEnd;
				startPos = wpTextbox.selectionStart;
				txt = wpTextbox.value.substring(startPos,endPos);
			} else {
				txt = wpTextbox.value;
			}
		} else if (document.getSelection().toString().length > 0) {
			txt = document.getSelection().toString();
		} else {
			txt = document.getElementById('bodyContent').textContent;
		}

		// テキストから文字種ごとにまとめ、文字数カウント
		var hanBasic = txt.match(/[\u2e80-\u2fdf|\u3400-\u4dbf|\u4e00-\u9fff|\uf900-\ufaff]/g) || '';
		var hanSuppl = txt.match(/[\ud840-\ud87e][\udc00-\udfff]/g) || '';
		var hira = txt.match(/[ぁ-ゖ|𛀁]/g) || '';
		var kana = txt.match(/[ァ-ヺ|ㇰ-ㇿ|ヲ-ン|𛀀]/g) || '';
		var numHanBasic = hanBasic.length;
		var numHanSuppl = hanSuppl.length;
		var numHira = hira.length;
		var numKana = kana.length;
		var numTotal = txt.length;
		var numHan = numHanBasic + numHanSuppl;
		var numJpan = numHan + numHira + numKana;
		var numOther = numTotal - numJpan;
		alert('漢字: ' + numHan + '文字 (' + Math.round(numHan / numJpan * 100) + '%) 、'
			+ 'ひらがな: ' + numHira + '文字 (' + Math.round(numHira / numJpan * 100) + '%) 、'
			+ 'カタカナ: ' + numKana + '文字 (' + Math.round(numKana / numJpan * 100) + '%) 、'
			+ 'その他: ' + numOther + '文字');
	}
}());