diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c8466f3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+* Highlighter
+
+ pukiwiki用plugin. 特定の文字装飾をする.正規表現による条件にマッチする
+文字列をまとめて装飾することもできる.
+
+
+使用方法1(インライン): &highlighter(CSS文字列){文字列};
+
+ 指定した文字列を、指定した CSS文字列のスタイルで表示する。
+ CSSを省略した場合しましまとなる。
+ CSS付きのspanで指定した文字列をくくっているだけ。単純。
+
+使用方法2(ブロック): #highlighter(正規表現,CSS文字列)
+
+ 文書中の
要素の中を検索して、正規表現にマッチした文字列のスタイルを CSS文字列に置き換える。
+ CSSを省略した場合しましまとなる。
+ 注意:正規表現はJavaScriptの正規表現
+ 呼び出し箇所に正規表現で探索を行うJavaScriptを生成する。スタイル変更は新しくCSS付きを生成している。
+ 注意 上記理由からそこまでに出現しているテキストしかハイライトできない。
+
+使用方法3(ブロック): #highlighter(正規表現,CSS文字列,true)
+
+ 最後の引数がtrueである場合:文書中の要素の中を検索して、正規表現にマッチする行の要素全体のスタイルをCSS文字列で置き換える。
+ CSSを省略した場合しましまとなる。
+ 呼び出し箇所に正規表現で探索を行うJavaScriptを生成する。スタイル変更は新しくCSS付きを生成している。
+ 注意 上記理由からそこまでに出現している行しかハイライトできない。
+
+ sanitize 何もしてない。あぶない。こわい。とんでもない
+ 誰か直してくれるとうれしいなあ。
+
+↑
+例 †
+
+ &highlighter{ハイライト}; する。
+
+ &highlighter(font-size:8em;color:#ff000030){でっかく};する。
+
+ #highlighter("一行目");
+
+ #highlighter((.)(.)(.).\\3\\2\\1);
+
+ #highlighter("三行目","text-shadow: 3px 3px 2px #1040a0, 5px 5px 1px #105010;");
+
+ #highlighter("幕の内","background: linear-gradient(#39FBFF,#4EBEFF)",true);
+
diff --git a/highlighter.inc.php b/highlighter.inc.php
new file mode 100644
index 0000000..905d663
--- /dev/null
+++ b/highlighter.inc.php
@@ -0,0 +1,99 @@
+$pat";
+ return $ret;
+ }
+
+ return FALSE;
+}
+
+function plugin_highlighter_convert() {
+ $argc = func_num_args();
+ $args = func_get_args();
+ $style = "background: repeating-linear-gradient(-45deg, #ffcce7, #ffcce7 3px,#ffe9f4 3px, #ffe9f4 7px);";//default
+ $wholeline = false;
+ if (($args[$argc-1] == "true")) {
+ $wholeline = true;
+ } else {
+ $wholelien = false;
+ }
+
+ if ($wholeline) {
+ $argc -= 1;
+ }
+
+ if ($argc == 2) {
+ $style = $args[1];
+ }
+
+ if (! $wholeline) {
+ $pat = $args[0];
+ $ret = <<
+ (function() {
+ let lst = document.getElementsByTagName("li");
+ let pat = "$pat";
+ for (let i = 0; i< lst.length; i++) {
+ if (lst[i].parentNode.classList.contains("list1")){
+ var text = lst[i].innerHTML;
+ var reg = new RegExp(pat, "g");
+ lst[i].innerHTML = text.replace(reg, '$&');
+ }
+ }
+ })()
+
+EOT;
+ return $ret;
+
+ } else {
+ $pat = $args[0];
+ $sytle = $args[1];
+
+ $ret = <<
+ let lst = document.getElementsByTagName("li");
+ let pat = "$pat";
+ let style = "background: green;"
+ for (let i = 0; i< lst.length; i++) {
+ if (lst[i].parentNode.classList.contains("list1")){
+ var reg = RegExp(pat);
+ var text = lst[i].innerHTML;
+
+ if (text.match(reg)) {
+ lst[i].style = "$args[1]";
+ }
+ }
+
+ }
+
+EOT;
+ return $ret;
+
+ }
+
+ return FALSE;
+}
+
+function plugin_highlighter_init() {
+}
+?>
+