利用者:Naggy Nagumo/Edit Formatter.js

出典: フリー多機能辞典『ウィクショナリー日本語版(Wiktionary)』
ナビゲーションに移動 検索に移動

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
// <nowiki>

EDIT.フォーマット = {
	実行: function (f) {
		const 元のテキスト = $('#' + EDIT.テキストボックスID).val();
		const 整形後テキスト = f(元のテキスト);

		$('#' + EDIT.テキストボックスID).val(整形後テキスト);
	},

	フォーマット: function (ウィキテキスト) {
		let 整形後テキスト = ウィキテキスト;

		整形後テキスト = 整形後テキスト.split('{{infl|').join('{{head|');
		整形後テキスト = 整形後テキスト.split('{{see|').join('{{also|');
		整形後テキスト = 整形後テキスト.replace(new RegExp(`\\*\\s*【\\[\\[`, 'g'), `#【[[`)
		整形後テキスト = EDIT.フォーマット.日本語デフォルトソートを変更(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.inf_jaを変更(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.見出しを整形(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.不要テンプレート除去(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.言語間リンク除去(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.言語コードを3文字から2文字に変更(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.言語見出しを変更(整形後テキスト);
		整形後テキスト = EDIT.フォーマット.空行を整理(整形後テキスト);

		return 整形後テキスト;
	},

	見出しを整形: function (ウィキテキスト) {
		return ウィキテキスト
			.replace(/^\n?(={1,6})\s*([^=\n]+?)\s*(={1,6})[^=\n]*\n/, '$1$2$3\n')
			.replace(/\n(={1,6})\s*([^=\n]+?)\s*(={1,6})[^=\n]*\n/g, '\n$1$2$3\n');
	},

	不要テンプレート除去: function (ウィキテキスト) {
		return ウィキテキスト
			.split('{{lcsort}}\n').join('')
			.split('{{mid}}\n').join('')
			.split('{{mid2}}\n').join('')
			.split('{{mid3}}\n').join('')
			.split('{{mid4}}\n').join('')
			.split('{{mid5}}\n').join('')
			.split('{{mid10}}\n').join('')
			.split('{{rel-mid}}\n').join('')
			.split('{{rel-mid3}}\n').join('')
			.split('{{rel-mid4}}\n').join('')
			.split('{{rel-mid5}}\n').join('')
			.split('{{trans-mid}}\n').join('');
	},

	言語間リンク除去: function (ウィキテキスト) {
		return ウィキテキスト.replace(/\n\[\[(aa|ab|af|ak|am|an|ang|ar|as|ast|av|ay|az|bcl|be|bg|bh|bi|bm|bn|bo|br|bs|ca|ch|chr|co|cr|cs|csb|cy|da|de|diq|dv|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gom|gu|gv|ha|he|hi|hif|hr|hsb|hu|hy|ia|id|ie|ik|io|is|it|iu|ja|jbo|jv|ka|kk|kl|km|kn|ko|ks|ku|kw|ky|la|lb|li|ln|lo|lt|lv|mg|mh|mi|min|mk|ml|mn|mni|mnw|mr|ms|mt|my|na|nah|nds|ne|nia|nl|nn|no|oc|om|or|pa|pi|pl|pnb|ps|pt|qu|rm|rn|ro|roa-rup|ru|rw|sa|sc|scn|sd|sg|sh|shn|shy|si|simple|sk|skr|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tpi|tr|ts|tt|tw|ug|uk|ur|uz|vec|vi|vo|wa|wo|xh|yi|yo|yue|za|zh|zh-min-nan|zu):[^\]]*\]\]/g, '');
	},

	言語コードを3文字から2文字に変更: function (ウィキテキスト) {
		const 言語コード置換テーブル = UTIL.code3_to_code2_t;
		Object.keys(言語コード置換テーブル).forEach(function (key) {
			ウィキテキスト = ウィキテキスト
				.split(`{{${key}}}`).join(`{{${言語コード置換テーブル[key]}}}`)
				.split(`{{anagrams|${key}`).join(`{{anagrams|${言語コード置換テーブル[key]}`)
				.split(`{{bor|${key}|`).join(`{{bor|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`\\{\\{bor\\|([^\\}\\|]*)\\|${key}\\|`, 'g'), `{{bor|$1|${言語コード置換テーブル[key]}|`)
				.split(`{{context|lang=${key}`).join(`{{context|lang=${言語コード置換テーブル[key]}`)
				.replace(new RegExp(`(\\{\\{context\\|[^\\}]*)\\|lang=${key}`, 'g'), `$1|lang=${言語コード置換テーブル[key]}`)
				.split(`{{der|${key}|`).join(`{{der|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`\\{\\{der\\|([^\\}\\|]*)\\|${key}\\|`, 'g'), `{{der|$1|${言語コード置換テーブル[key]}|`)
				.split(`{{derived|${key}|`).join(`{{derived|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`\\{\\{derived\\|([^\\}\\|]*)\\|${key}\\|`, 'g'), `{{derived|$1|${言語コード置換テーブル[key]}|`)
				.split(`{{desc|${key}|`).join(`{{desc|${言語コード置換テーブル[key]}|`)
				.split(`{{etyl|${key}|`).join(`{{etyl|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`\\{\\{etyl\\|([^\\}\\|]*)\\|${key}\\}\\}`, 'g'), `{{etyl|$1|${言語コード置換テーブル[key]}}}`)
				.split(`{{etyl|${key}}}`).join(`{{etyl|${言語コード置換テーブル[key]}}}`)
				.split(`{{head|${key}|`).join(`{{head|${言語コード置換テーブル[key]}|`)
				.split(`{{inh|${key}|`).join(`{{inh|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`\\{\\{inh\\|([^\\}\\|]*)\\|${key}\\|`, 'g'), `{{inh|$1|${言語コード置換テーブル[key]}|`)
				.replace(new RegExp(`(\\{\\{IPA[12]?\\|[^\\}]*)\\|lang=${key}`, 'g'), `$1|lang=${言語コード置換テーブル[key]}`)
				.split(`{{L|${key}}}`).join(`{{L|${言語コード置換テーブル[key]}}}`)
				.split(`{{l|${key}|`).join(`{{l|${言語コード置換テーブル[key]}|`)
				.split(`{{lang|${key}|`).join(`{{lang|${言語コード置換テーブル[key]}|`)
				.split(`{{language|${key}}}`).join(`{{language|${言語コード置換テーブル[key]}}}`)
				.split(`{{lb|${key}|`).join(`{{lb|${言語コード置換テーブル[key]}|`)
				.split(`{{m|${key}|`).join(`{{m|${言語コード置換テーブル[key]}|`)
				.split(`{{pron|${key}}}`).join(`{{pron|${言語コード置換テーブル[key]}}}`)
				.split(`{{T|${key}}}`).join(`{{T|${言語コード置換テーブル[key]}}}`)
				.split(`{{タグ|${key}`).join(`{{タグ|${言語コード置換テーブル[key]}`);
		});

		return ウィキテキスト;
	},

	日本語デフォルトソートを変更: function (ウィキテキスト) {
		if(mw.config.get('wgTitle').match(/^[ぁ-ゖァ-ヺー]+$/)){
			return ウィキテキスト
				.replace(/\{\{(デフォルトソート|DEFAULTSORT):[^\}]+\}+/, '{{ja-DEFAULTSORT}}');
		}
		else{
			return ウィキテキスト
				.replace(/\{\{(デフォルトソート|DEFAULTSORT):([ぁ-ん]+)\}\}/, '{{ja-DEFAULTSORT|$2}}')
				.replace(/\{\{(デフォルトソート|DEFAULTSORT):([ぁ-ん]+)[ _]\{\{PAGENAME\}\}\}\}/, '{{ja-DEFAULTSORT|$2}}')
				.replace(/\{\{(デフォルトソート|DEFAULTSORT):([ぁ-ん]+)[ _]([ぁ-ん]+)\}\}/, '{{ja-DEFAULTSORT|$3}}')
				.replace(/\{\{(デフォルトソート|DEFAULTSORT):([ぁ-ん]+)[ _]([ぁ-ん]+)[ _][^\n]*\}\}/, '{{ja-DEFAULTSORT|$3}}');
		}
	},

	inf_jaを変更: function (ウィキテキスト) {
		return ウィキテキスト
			.replace(/\{\{inf-ja\|古語[_ ]\|[^\|]*\|([^\|]*)\|([^\|]*\|[^\|\}]*)[^\}]*\}\}/g, '===={{conjug}}====\n{{古典日本語$1段活用|$2}}')
			.replace(/古典日本語変段活用/g, '古典日本語変格活用')
			.replace(/\{\{inf-ja\|\|([^\|])*\|([^\|]*)\|([^\|]*\|[^\|\}]*)[^\}]*\}\}/g, '===={{conjug}}====\n{{日本語$1$2活用}}')
			.replace(/日本語[アカガサザタダナハバパマヤラワ]+(五|上一|下一)活用/g, '日本語$1段活用');
			
	},

	言語見出しを変更: function (ウィキテキスト) {
		return ウィキテキスト
			.replace(/^\n?==\{\{(\w+)\}\}==\n/, '=={{L|$1}}==\n')
			.replace(/\n==\{\{(\w+)\}\}==\n/g, '\n=={{L|$1}}==\n');
	},

	空行を削除: function (ウィキテキスト) {
		return ウィキテキスト.replace(/\n{2,}/g, '\n');
	},

	空行を整理: function (ウィキテキスト) {
		let コメント = [];
		ウィキテキスト = EDIT.コメントを退避(ウィキテキスト, コメント);

		// H1~H6の前に改行挿入
		let 改行を入れる位置 = [];
		const 正規表現 = /\n(={1,6}[^=\n]+={1,6}[^=\n]*|----)/g;
		let 正規表現実行結果;
		while ((正規表現実行結果 = 正規表現.exec(ウィキテキスト)) !== null) {
			改行を入れる位置.push(正規表現実行結果.index);
		}
		改行を入れる位置.sort(function (a, b) {
			return b - a;
		}).forEach(index => {
			ウィキテキスト = ウィキテキスト.slice(0, index) + '\n' + ウィキテキスト.slice(index);
		});

		// 最初のセクションヘッダーの前は空行を入れない
		ウィキテキスト = ウィキテキスト.replace(/\n*?(\n?={1,6}[^=\n]+={1,6}[^=\n]*\n)/, '$1');

		// 連続空行を除去
		ウィキテキスト = ウィキテキスト.replace(/\n{3,}/g, '\n\n').replace(/\n{2,}$/, '\n');

		ウィキテキスト = EDIT.コメントを戻す(ウィキテキスト, コメント);

		return ウィキテキスト;
	},

	コメントを削除: function (ウィキテキスト) {
		return EDIT.コメントを除去(ウィキテキスト);
	},

	フォーマットボタン: $('<button>フォーマット</button>').click(function () {
		EDIT.フォーマット.実行(EDIT.フォーマット.フォーマット);
	}),

	空行を削除ボタン: $('<button style="float: right;">空行を削除</button>').click(function () {
		EDIT.フォーマット.実行(EDIT.フォーマット.空行を削除);
	}),

	コメントを削除ボタン: $('<button style="float: right;">コメントを削除</button>').click(function () {
		EDIT.フォーマット.実行(EDIT.フォーマット.コメントを削除);
	}),
};

$('#editform').before(EDIT.フォーマット.フォーマットボタン);
$('#editform').before(EDIT.フォーマット.空行を削除ボタン);
$('#editform').before(EDIT.フォーマット.コメントを削除ボタン);

// </nowiki>