<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://www.haijin-boys.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Snipsnipsnip</id>
	<title>MeryWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://www.haijin-boys.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Snipsnipsnip"/>
	<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/Snipsnipsnip"/>
	<updated>2026-06-14T07:24:25Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=JavaScript_%E3%82%92%E5%AE%9F%E8%A1%8C&amp;diff=1243</id>
		<title>JavaScript を実行</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=JavaScript_%E3%82%92%E5%AE%9F%E8%A1%8C&amp;diff=1243"/>
		<updated>2013-12-07T15:18:40Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;選択範囲をevalして結果をその場に出します。電卓代わりにどうぞ。&lt;br /&gt;
&lt;br /&gt;
== 置き換え版 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// JavaScriptを実行 (置き換え版).js&lt;br /&gt;
&lt;br /&gt;
if (!document.selection.Text) {&lt;br /&gt;
  document.selection.EndOfLine(false);&lt;br /&gt;
  document.selection.StartOfLine(true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (document.selection.Text) {&lt;br /&gt;
  document.selection.Text = eval(document.selection.Text)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 挿入版 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// JavaScriptを実行.js (挿入版)&lt;br /&gt;
&lt;br /&gt;
if (!document.selection.Text) {&lt;br /&gt;
  document.selection.EndOfLine(false);&lt;br /&gt;
  document.selection.StartOfLine(true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (document.selection.Text) {&lt;br /&gt;
  document.selection.Text = document.selection.Text + &#039; =&amp;gt; &#039; + eval(document.selection.Text)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== アウトプットバー版 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// JavaScriptを実行 (アウトプットバー版).js&lt;br /&gt;
&lt;br /&gt;
if (!document.selection.Text) {&lt;br /&gt;
  document.selection.EndOfLine(false);&lt;br /&gt;
  document.selection.StartOfLine(true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (document.selection.Text) {&lt;br /&gt;
  outputbar.visible = true;&lt;br /&gt;
  // outputbar.Writeln(&amp;quot;&amp;gt;&amp;gt; &amp;quot; + document.selection.Text)&lt;br /&gt;
  outputbar.Writeln(&amp;quot;=&amp;gt; &amp;quot; + eval(document.selection.Text).toString())&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E9%96%8B%E3%81%8F&amp;diff=1229</id>
		<title>フォルダを開く</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E9%96%8B%E3%81%8F&amp;diff=1229"/>
		<updated>2013-11-20T05:34:44Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: r2: 編集中のファイルを選択するように&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;編集中のファイルのあるフォルダでエクスプローラを起動します。&lt;br /&gt;
&lt;br /&gt;
ファイルがまだ無題の場合はデスクトップを開きます。&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1: 失念&lt;br /&gt;
* r2: 編集中のファイルを選択するように&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// フォルダを開く.js r2&lt;br /&gt;
 &lt;br /&gt;
var shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if (document.FullName == &amp;quot;&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    shell.Run(&#039;explorer &amp;quot;&#039; + shell.SpecialFolders(&amp;quot;Desktop&amp;quot;) + &#039;&amp;quot;&#039;)&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    shell.Run(&#039;explorer /select, &amp;quot;&#039; + document.FullName + &#039;&amp;quot;&#039;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%84%E3%83%AA%E3%83%BC%E3%82%92%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%A1%A8%E7%A4%BA&amp;diff=1173</id>
		<title>フォルダツリーをポップアップ表示</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%84%E3%83%AA%E3%83%BC%E3%82%92%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%A1%A8%E7%A4%BA&amp;diff=1173"/>
		<updated>2013-09-21T14:42:09Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: r2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;今開いているファイルのフォルダの内容をポップアップで表示して、選択するとそのファイルを開きます。&lt;br /&gt;
&lt;br /&gt;
手石さんの[[ポップアップメニューでファイル選択]]の下位互換です。手石さんのものはページ切り替えなどのボタンがあり、これよりも使いやすいと思います。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを[カスタマイズ]→[新規作成]で登録し、Alt+Pなどお好みで設定する&lt;br /&gt;
&lt;br /&gt;
== カスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.folder_pattern || &amp;lt;nowiki&amp;gt;/^[^\.]/&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするフォルダ名を一覧に含めます&lt;br /&gt;
&lt;br /&gt;
初期設定では . で始まるフォルダを除外します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.file_pattern || &amp;lt;nowiki&amp;gt;/^[^\.]/&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするファイル名を一覧に含めます&lt;br /&gt;
&lt;br /&gt;
初期設定では . で始まるフォルダを除外します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.file_ignore_pattern || &amp;lt;nowiki&amp;gt;/\.(?:png|jpg|gif|db|exe|dll|obj|tmp)$/i&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするファイル名は一覧から除きます&lt;br /&gt;
&lt;br /&gt;
初期設定では画像ファイルなど適当に思いついたものを除外してあります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.ignore_case || &amp;lt;nowiki&amp;gt;true&amp;lt;/nowiki&amp;gt; || trueにすると一覧のソートで大文字小文字を無視します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.sort_by_extension || &amp;lt;nowiki&amp;gt;true&amp;lt;/nowiki&amp;gt; || trueにすると一覧で拡張子ごとにまとめます&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.sort_by_modified_time || &amp;lt;nowiki&amp;gt;false&amp;lt;/nowiki&amp;gt; || trueにするとファイルの最終変更時間で降順にソートします&lt;br /&gt;
&lt;br /&gt;
これをtrueにすると上2つの設定は無視されます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1(2013-09-10): 初版&lt;br /&gt;
* r2(2013-09-21): ディレクトリをまたぐと開けなかったバグ修正&lt;br /&gt;
&lt;br /&gt;
== ソース ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 同じフォルダにあるファイルを開く.js r2&lt;br /&gt;
// もしくは 簡易フォルダツリー&lt;br /&gt;
&lt;br /&gt;
CONFIG = {}&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// 一覧に含めるフォルダ名の正規表現&lt;br /&gt;
CONFIG.folder_pattern = /^[^\.]/&lt;br /&gt;
&lt;br /&gt;
// 一覧に含めるファイル名の正規表現&lt;br /&gt;
CONFIG.file_pattern = /^[^\.]/&lt;br /&gt;
&lt;br /&gt;
// 別例: 現在のファイルと同じ拡張子だけ表示&lt;br /&gt;
// CONFIG.file_pattern = document.Name.indexOf(&#039;.&#039;) == -1 ? /./ : RegExp(document.Name.substr(document.Name.indexOf(&#039;.&#039;)), &amp;quot;i&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
// 一覧から除外するファイル名の正規表現&lt;br /&gt;
CONFIG.file_ignore_pattern = /\.(?:png|jpg|gif|db|exe|dll|obj|tmp)$/i&lt;br /&gt;
&lt;br /&gt;
// 大文字小文字を無視するならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.ignore_case = true&lt;br /&gt;
&lt;br /&gt;
// 拡張子ごとにまとめるならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.sort_by_extension = true&lt;br /&gt;
&lt;br /&gt;
// 時間でソートするならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.sort_by_modified_time = false&lt;br /&gt;
&lt;br /&gt;
/** 以下本体 **/&lt;br /&gt;
&lt;br /&gt;
var FS = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var dir = document.Path&lt;br /&gt;
  var choosed = choose(ls(dir))&lt;br /&gt;
  &lt;br /&gt;
  while (choosed &amp;amp;&amp;amp; /\/$/.test(choosed))&lt;br /&gt;
  {&lt;br /&gt;
    dir = FS.BuildPath(dir, choosed)&lt;br /&gt;
    choosed = choose(ls(dir))&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (choosed)&lt;br /&gt;
  {&lt;br /&gt;
    var path = FS.BuildPath(dir, choosed).replace(/\//g, &#039;\\&#039;)&lt;br /&gt;
    editor.OpenFile(path, 0, meOpenAllowNewWindow)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ls(path)&lt;br /&gt;
{&lt;br /&gt;
  var folder = FS.GetFolder(path)&lt;br /&gt;
  &lt;br /&gt;
  var folders = []&lt;br /&gt;
  each_item(folder.SubFolders, function(e)&lt;br /&gt;
  {&lt;br /&gt;
    if (CONFIG.folder_pattern.test(e.Name))&lt;br /&gt;
    {&lt;br /&gt;
      folders.push(e.Name + &amp;quot;/&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
  })&lt;br /&gt;
  folders.sort()&lt;br /&gt;
  &lt;br /&gt;
  folders.unshift(&#039;../&#039;)&lt;br /&gt;
  &lt;br /&gt;
  var files = []&lt;br /&gt;
  each_item(folder.Files, function(e)&lt;br /&gt;
  {&lt;br /&gt;
    if (CONFIG.file_pattern.test(e.Name) &amp;amp;&amp;amp; !CONFIG.file_ignore_pattern.test(e.Name))&lt;br /&gt;
    {&lt;br /&gt;
      files.push(e.Name)&lt;br /&gt;
    }&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  if (CONFIG.sort_by_time)&lt;br /&gt;
  {&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      a = FS.GetFile(a).DateLastModified&lt;br /&gt;
      b = FS.GetFile(b).DateLastModified&lt;br /&gt;
      return a &amp;lt; b ? 1 : a &amp;gt; b ? -1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  else if (CONFIG.ignore_case)&lt;br /&gt;
  {&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      a = a.toLocaleLowerCase()&lt;br /&gt;
      b = b.toLocaleLowerCase()&lt;br /&gt;
      return !a ? -1 : !b ? 1 : a &amp;lt; b ? -1 : a &amp;gt; b ? 1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    files.sort()&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (CONFIG.sort_by_extension)&lt;br /&gt;
  {&lt;br /&gt;
    // JScriptは安定ソートなのでこれでも大丈夫なはず&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      var sa = get_extension(a)&lt;br /&gt;
      var sb = get_extension(b)&lt;br /&gt;
      return !sa ? 1 : !sb ? -1 : sa &amp;lt; sb ? -1 : sa &amp;gt; sb ? 1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return folders.concat(files)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_extension(str)&lt;br /&gt;
{&lt;br /&gt;
    var i = str.lastIndexOf(&#039;.&#039;)&lt;br /&gt;
    return i &amp;gt;= 0 &amp;amp;&amp;amp; str.substr(i + 1)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function each_item(collection, callback)&lt;br /&gt;
{&lt;br /&gt;
  var result&lt;br /&gt;
  &lt;br /&gt;
  for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext())&lt;br /&gt;
  {&lt;br /&gt;
    result = callback(e.item())&lt;br /&gt;
    if (result)&lt;br /&gt;
    {&lt;br /&gt;
      return result&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function choose(words)&lt;br /&gt;
{&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
 &lt;br /&gt;
  return i &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
 &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    &lt;br /&gt;
    if (!words || words.length == 0) { return menu }&lt;br /&gt;
    &lt;br /&gt;
    var n = -1&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%84%E3%83%AA%E3%83%BC%E3%82%92%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%A1%A8%E7%A4%BA&amp;diff=1154</id>
		<title>フォルダツリーをポップアップ表示</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%84%E3%83%AA%E3%83%BC%E3%82%92%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%A1%A8%E7%A4%BA&amp;diff=1154"/>
		<updated>2013-09-10T11:53:43Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「今開いているファイルのフォルダの内容をポップアップで表示して、選択するとそのファイルを開きます。  手石さんの[[ポ...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;今開いているファイルのフォルダの内容をポップアップで表示して、選択するとそのファイルを開きます。&lt;br /&gt;
&lt;br /&gt;
手石さんの[[ポップアップメニューでファイル選択]]の下位互換です。手石さんのものはページ切り替えなどのボタンがあり、これよりも使いやすいと思います。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを[カスタマイズ]→[新規作成]で登録し、Alt+Pなどお好みで設定する&lt;br /&gt;
&lt;br /&gt;
== カスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.folder_pattern || &amp;lt;nowiki&amp;gt;/^[^\.]/&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするフォルダ名を一覧に含めます&lt;br /&gt;
&lt;br /&gt;
初期設定では . で始まるフォルダを除外します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.file_pattern || &amp;lt;nowiki&amp;gt;/^[^\.]/&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするファイル名を一覧に含めます&lt;br /&gt;
&lt;br /&gt;
初期設定では . で始まるフォルダを除外します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.file_ignore_pattern || &amp;lt;nowiki&amp;gt;/\.(?:png|jpg|gif|db|exe|dll|obj|tmp)$/i&amp;lt;/nowiki&amp;gt; || この正規表現にマッチするファイル名は一覧から除きます&lt;br /&gt;
&lt;br /&gt;
初期設定では画像ファイルなど適当に思いついたものを除外してあります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.ignore_case || &amp;lt;nowiki&amp;gt;true&amp;lt;/nowiki&amp;gt; || trueにすると一覧のソートで大文字小文字を無視します&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.sort_by_extension || &amp;lt;nowiki&amp;gt;true&amp;lt;/nowiki&amp;gt; || trueにすると一覧で拡張子ごとにまとめます&lt;br /&gt;
|-&lt;br /&gt;
| CONFIG.sort_by_modified_time || &amp;lt;nowiki&amp;gt;false&amp;lt;/nowiki&amp;gt; || trueにするとファイルの最終変更時間で降順にソートします&lt;br /&gt;
&lt;br /&gt;
これをtrueにすると上2つの設定は無視されます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1(2013-09-10): 初版&lt;br /&gt;
&lt;br /&gt;
== ソース ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 同じフォルダにあるファイルを開く.js r1&lt;br /&gt;
// もしくは 簡易フォルダツリー&lt;br /&gt;
&lt;br /&gt;
CONFIG = {}&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// 一覧に含めるフォルダ名の正規表現&lt;br /&gt;
CONFIG.folder_pattern = /^[^\.]/&lt;br /&gt;
&lt;br /&gt;
// 一覧に含めるファイル名の正規表現&lt;br /&gt;
CONFIG.file_pattern = /^[^\.]/&lt;br /&gt;
&lt;br /&gt;
// 一覧から除外するファイル名の正規表現&lt;br /&gt;
CONFIG.file_ignore_pattern = /\.(?:png|jpg|gif|db|exe|dll|obj|tmp)$/i&lt;br /&gt;
&lt;br /&gt;
// 大文字小文字を無視するならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.ignore_case = true&lt;br /&gt;
&lt;br /&gt;
// 拡張子ごとにまとめるならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.sort_by_extension = true&lt;br /&gt;
&lt;br /&gt;
// 時間でソートするならtrue、そうでなければfalse&lt;br /&gt;
CONFIG.sort_by_modified_time = false&lt;br /&gt;
&lt;br /&gt;
/** 以下本体 **/&lt;br /&gt;
&lt;br /&gt;
var FS = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var dir = document.Path&lt;br /&gt;
  var choosed = choose(ls(dir))&lt;br /&gt;
  &lt;br /&gt;
  while (choosed &amp;amp;&amp;amp; /\/$/.test(choosed))&lt;br /&gt;
  {&lt;br /&gt;
    dir = FS.BuildPath(dir, choosed)&lt;br /&gt;
    choosed = choose(ls(dir))&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (choosed)&lt;br /&gt;
  {&lt;br /&gt;
    var path = FS.BuildPath(dir, choosed).replace(/\//, &#039;\\&#039;)&lt;br /&gt;
    editor.OpenFile(path, 0, meOpenAllowNewWindow)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ls(path)&lt;br /&gt;
{&lt;br /&gt;
  var folder = FS.GetFolder(path)&lt;br /&gt;
  &lt;br /&gt;
  var folders = []&lt;br /&gt;
  each_item(folder.SubFolders, function(e)&lt;br /&gt;
  {&lt;br /&gt;
    if (CONFIG.folder_pattern.test(e.Name))&lt;br /&gt;
    {&lt;br /&gt;
      folders.push(e.Name + &amp;quot;/&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
  })&lt;br /&gt;
  folders.sort()&lt;br /&gt;
  &lt;br /&gt;
  folders.unshift(&#039;../&#039;)&lt;br /&gt;
  &lt;br /&gt;
  var files = []&lt;br /&gt;
  each_item(folder.Files, function(e)&lt;br /&gt;
  {&lt;br /&gt;
    if (CONFIG.file_pattern.test(e.Name) &amp;amp;&amp;amp; !CONFIG.file_ignore_pattern.test(e.Name))&lt;br /&gt;
    {&lt;br /&gt;
      files.push(e.Name)&lt;br /&gt;
    }&lt;br /&gt;
  })&lt;br /&gt;
  &lt;br /&gt;
  if (CONFIG.sort_by_time)&lt;br /&gt;
  {&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      a = FS.GetFile(a).DateLastModified&lt;br /&gt;
      b = FS.GetFile(b).DateLastModified&lt;br /&gt;
      return a &amp;lt; b ? 1 : a &amp;gt; b ? -1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  else if (CONFIG.ignore_case)&lt;br /&gt;
  {&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      a = a.toLocaleLowerCase()&lt;br /&gt;
      b = b.toLocaleLowerCase()&lt;br /&gt;
      return !a ? -1 : !b ? 1 : a &amp;lt; b ? -1 : a &amp;gt; b ? 1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    files.sort()&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (CONFIG.sort_by_extension)&lt;br /&gt;
  {&lt;br /&gt;
    // JScriptは安定ソートなのでこれでも大丈夫なはず&lt;br /&gt;
    files.sort(function(a, b)&lt;br /&gt;
    {&lt;br /&gt;
      var sa = get_extension(a)&lt;br /&gt;
      var sb = get_extension(b)&lt;br /&gt;
      return !sa ? 1 : !sb ? -1 : sa &amp;lt; sb ? -1 : sa &amp;gt; sb ? 1 : 0&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return folders.concat(files)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_extension(str)&lt;br /&gt;
{&lt;br /&gt;
    var i = str.lastIndexOf(&#039;.&#039;)&lt;br /&gt;
    return i &amp;gt;= 0 &amp;amp;&amp;amp; str.substr(i + 1)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function each_item(collection, callback)&lt;br /&gt;
{&lt;br /&gt;
  var result&lt;br /&gt;
  &lt;br /&gt;
  for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext())&lt;br /&gt;
  {&lt;br /&gt;
    result = callback(e.item())&lt;br /&gt;
    if (result)&lt;br /&gt;
    {&lt;br /&gt;
      return result&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function choose(words)&lt;br /&gt;
{&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
 &lt;br /&gt;
  return i &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
 &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    &lt;br /&gt;
    if (!words || words.length == 0) { return menu }&lt;br /&gt;
    &lt;br /&gt;
    var n = -1&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1153</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1153"/>
		<updated>2013-09-10T11:38:47Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: フォルダツリーをポップアップ表示&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mery で使用できるマクロを集めたライブラリです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」 (JavaScript、JScript の場合) にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
== テキスト操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/haijinboys/mery-macro-emmet Emmet] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[選択範囲を上下に移動]]（ks）&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat) update 2012/10/01&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント]] (inuuik)&lt;br /&gt;
*[[ラクラク罫線]] (手石) Update 2012/12/22&lt;br /&gt;
*[[ファイル:XHTML.zip]](HTMLタグを、ショートカット・キーに登録して入力するマクロ「文章挟み込み仕様」アラフォー親父）&lt;br /&gt;
*[[矩形ペースト]] (手石)&lt;br /&gt;
*[[自動箇条書き]] (手石)　update 2013/03/15&lt;br /&gt;
*[[インデントを考慮した折り返し（改行挿入）]] (手石)　update 2013/02/23&lt;br /&gt;
&lt;br /&gt;
== ファイル操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[[文字列中のパス起動]] (ks)&lt;br /&gt;
*[[自動バックアップ]] (ks)&lt;br /&gt;
*[[アップデート]] (ks)&lt;br /&gt;
*[[終了時状態保持・復元]] (ks)&lt;br /&gt;
*[[上書き保存(UAC対応)]] (ks)&lt;br /&gt;
*[[含んでいるフォルダを開く]]（ks）&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat) update 2012/09/24 &lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[SDIウィンドウの記憶と復帰]](papagoat) Update 2012/10/23&lt;br /&gt;
*[[よく使うフォルダ]] (手石) Update 2013/02/23&lt;br /&gt;
*[[ファイル（選択範囲）の仮保存]] (手石)&lt;br /&gt;
*[[ポップアップメニューでファイル選択]] (手石)&lt;br /&gt;
*[[フォルダツリーをポップアップ表示]] (n)&lt;br /&gt;
&lt;br /&gt;
== 変換・ソート・整形 ==&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[ブックマーク系コマンド集]] (ks)&lt;br /&gt;
*[[テキスト変換]] (ks)&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[連番の挿入]] (手石)&lt;br /&gt;
*[[TSV(CSV) ⇒ 固定長]] (手石)　update 2013/04/16&lt;br /&gt;
*[[コメントマーク付け外し]]（手石）　update 2013/03/28&lt;br /&gt;
*[[行並べ替え]] (masme) 2013/08/25, update 2013/08/29&lt;br /&gt;
*[[連番を挿入]] (masme) 2013/08/25&lt;br /&gt;
&lt;br /&gt;
== 検索・置換 ==&lt;br /&gt;
&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
*[[タグの外側（内側）だけ置換]] (手石)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== プログラミング補助 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[スマートインデント(C 構文)]](ks)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[コードスニペットもどき]] (手石) Update 2012/12/20&lt;br /&gt;
&lt;br /&gt;
== おもしろ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
*[[キーアサイン集]]（ks）&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[フォルダ選択ダイアログ]]（手石）&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[ポップアップメニューを手軽に扱う]] (komorebikoboshi)&lt;br /&gt;
*[[マクロ・関数をメニューで呼び出す]] (aliquis, 2013/08/19)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1152</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1152"/>
		<updated>2013-09-10T11:32:24Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: 「その他」に入っていたものを独断で分類しました&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mery で使用できるマクロを集めたライブラリです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」 (JavaScript、JScript の場合) にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
== テキスト操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/haijinboys/mery-macro-emmet Emmet] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[選択範囲を上下に移動]]（ks）&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat) update 2012/10/01&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント]] (inuuik)&lt;br /&gt;
*[[ラクラク罫線]] (手石) Update 2012/12/22&lt;br /&gt;
*[[ファイル:XHTML.zip]](HTMLタグを、ショートカット・キーに登録して入力するマクロ「文章挟み込み仕様」アラフォー親父）&lt;br /&gt;
*[[矩形ペースト]] (手石)&lt;br /&gt;
*[[自動箇条書き]] (手石)　update 2013/03/15&lt;br /&gt;
*[[インデントを考慮した折り返し（改行挿入）]] (手石)　update 2013/02/23&lt;br /&gt;
&lt;br /&gt;
== ファイル操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[[文字列中のパス起動]] (ks)&lt;br /&gt;
*[[自動バックアップ]] (ks)&lt;br /&gt;
*[[アップデート]] (ks)&lt;br /&gt;
*[[終了時状態保持・復元]] (ks)&lt;br /&gt;
*[[上書き保存(UAC対応)]] (ks)&lt;br /&gt;
*[[含んでいるフォルダを開く]]（ks）&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat) update 2012/09/24 &lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[SDIウィンドウの記憶と復帰]](papagoat) Update 2012/10/23&lt;br /&gt;
*[[よく使うフォルダ]] (手石) Update 2013/02/23&lt;br /&gt;
*[[ファイル（選択範囲）の仮保存]] (手石)&lt;br /&gt;
*[[ポップアップメニューでファイル選択]] (手石)&lt;br /&gt;
*[[フォルダ選択ダイアログ]]（手石）&lt;br /&gt;
&lt;br /&gt;
== 変換・整形 ==&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[ブックマーク系コマンド集]] (ks)&lt;br /&gt;
*[[テキスト変換]] (ks)&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[連番の挿入]] (手石)&lt;br /&gt;
*[[TSV(CSV) ⇒ 固定長]] (手石)　update 2013/04/16&lt;br /&gt;
*[[コメントマーク付け外し]]（手石）　update 2013/03/28&lt;br /&gt;
*[[行並べ替え]] (masme) 2013/08/25, update 2013/08/29&lt;br /&gt;
*[[連番を挿入]] (masme) 2013/08/25&lt;br /&gt;
&lt;br /&gt;
== 検索・置換 ==&lt;br /&gt;
&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
*[[タグの外側（内側）だけ置換]] (手石)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== プログラミング補助 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[スマートインデント(C 構文)]](ks)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[コードスニペットもどき]] (手石) Update 2012/12/20&lt;br /&gt;
&lt;br /&gt;
== おもしろ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
*[[キーアサイン集]]（ks）&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[ポップアップメニューを手軽に扱う]] (komorebikoboshi)&lt;br /&gt;
*[[マクロ・関数をメニューで呼び出す]] (aliquis, 2013/08/19)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1151</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=1151"/>
		<updated>2013-09-10T11:20:50Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ファイル操作補助節を追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mery で使用できるマクロを集めたライブラリです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」 (JavaScript、JScript の場合) にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== テキスト操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/haijinboys/mery-macro-emmet Emmet] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[文字列中のパス起動]] (ks)&lt;br /&gt;
*[[終了時状態保持・復元]] (ks)&lt;br /&gt;
*[[自動バックアップ]] (ks)&lt;br /&gt;
*[[キーアサイン集]]（ks）&lt;br /&gt;
*[[選択範囲を上下に移動]]（ks）&lt;br /&gt;
&lt;br /&gt;
== ファイル操作補助 ==&lt;br /&gt;
&lt;br /&gt;
*[[アップデート]] (ks)&lt;br /&gt;
*[[上書き保存(UAC対応)]] (ks)&lt;br /&gt;
*[[含んでいるフォルダを開く]]（ks）&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
&lt;br /&gt;
== 変換・整形 ==&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[ブックマーク系コマンド集]] (ks)&lt;br /&gt;
*[[テキスト変換]] (ks)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 検索・置換 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== プログラミング補助 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[スマートインデント(C 構文)]](ks)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== おもしろ ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat) update 2012/10/01&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat) update 2012/09/24 &lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント]] (inuuik)&lt;br /&gt;
*[[SDIウィンドウの記憶と復帰]](papagoat) Update 2012/10/23&lt;br /&gt;
*[[よく使うフォルダ]] (手石) Update 2013/02/23&lt;br /&gt;
*[[連番の挿入]] (手石)&lt;br /&gt;
*[[コードスニペットもどき]] (手石) Update 2012/12/20&lt;br /&gt;
*[[ポップアップメニューを手軽に扱う]] (komorebikoboshi)&lt;br /&gt;
*[[ラクラク罫線]] (手石) Update 2012/12/22&lt;br /&gt;
*[[ファイル:XHTML.zip]](HTMLタグを、ショートカット・キーに登録して入力するマクロ「文章挟み込み仕様」アラフォー親父）&lt;br /&gt;
*[[タグの外側（内側）だけ置換]] (手石)&lt;br /&gt;
*[[ファイル（選択範囲）の仮保存]] (手石)&lt;br /&gt;
*[[TSV(CSV) ⇒ 固定長]] (手石)　update 2013/04/16&lt;br /&gt;
*[[矩形ペースト]] (手石)&lt;br /&gt;
*[[インデントを考慮した折り返し（改行挿入）]] (手石)　update 2013/02/23&lt;br /&gt;
*[[自動箇条書き]] (手石)　update 2013/03/15&lt;br /&gt;
*[[ポップアップメニューでファイル選択]] (手石)&lt;br /&gt;
*[[フォルダ選択ダイアログ]]（手石）&lt;br /&gt;
*[[コメントマーク付け外し]]（手石）　update 2013/03/28&lt;br /&gt;
*[[マクロ・関数をメニューで呼び出す]] (aliquis, 2013/08/19)&lt;br /&gt;
*[[行並べ替え]] (masme) 2013/08/25, update 2013/08/29&lt;br /&gt;
*[[連番を挿入]] (masme) 2013/08/25&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=Clojure&amp;diff=967</id>
		<title>Clojure</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=Clojure&amp;diff=967"/>
		<updated>2013-02-25T02:07:43Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[構文ファイル|&amp;amp;laquo; 構文ファイル]]&lt;br /&gt;
&lt;br /&gt;
[http://clojure.org/documentation ドキュメント]や[http://clojuredocs.org/clojure_core/clojure.core clojure.core] などから恣意的に作成。最後のいくつかの設定は.や/を含んだ識別子を問答無用で強調しますが、お気に召さなければ削って下さい。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;clojure&amp;quot;&amp;gt;&lt;br /&gt;
#TagBegin=&lt;br /&gt;
#TagEnd=&lt;br /&gt;
#CommentBegin1=&lt;br /&gt;
#CommentEnd1=&lt;br /&gt;
#LineComment1=;&lt;br /&gt;
#CommentBegin2=&lt;br /&gt;
#CommentEnd2=&lt;br /&gt;
#LineComment2=&lt;br /&gt;
#SpecialSyntax=None&lt;br /&gt;
#ScriptBegin=&lt;br /&gt;
#ScriptEnd=&lt;br /&gt;
#QuoteSingle=False&lt;br /&gt;
#QuoteDouble=True&lt;br /&gt;
#QuoteContinue=True&lt;br /&gt;
#EscapeCharacter=\&lt;br /&gt;
&lt;br /&gt;
#Word Color=0, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
declare&lt;br /&gt;
def&lt;br /&gt;
definline&lt;br /&gt;
definterface&lt;br /&gt;
defmacro&lt;br /&gt;
defmethod&lt;br /&gt;
defmulti&lt;br /&gt;
defn&lt;br /&gt;
defn-&lt;br /&gt;
defonce&lt;br /&gt;
defprotocol&lt;br /&gt;
defrecord&lt;br /&gt;
defstruct&lt;br /&gt;
deftype&lt;br /&gt;
do&lt;br /&gt;
fn&lt;br /&gt;
if&lt;br /&gt;
if-let&lt;br /&gt;
if-not&lt;br /&gt;
let&lt;br /&gt;
loop&lt;br /&gt;
monitor-enter&lt;br /&gt;
monitor-exit&lt;br /&gt;
new&lt;br /&gt;
ns&lt;br /&gt;
quote&lt;br /&gt;
recur&lt;br /&gt;
require&lt;br /&gt;
set!&lt;br /&gt;
throw&lt;br /&gt;
try&lt;br /&gt;
var&lt;br /&gt;
when&lt;br /&gt;
when-first&lt;br /&gt;
when-let&lt;br /&gt;
when-not&lt;br /&gt;
while&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
accessor&lt;br /&gt;
aclone&lt;br /&gt;
add-classpath&lt;br /&gt;
add-watch&lt;br /&gt;
agent&lt;br /&gt;
agent-error&lt;br /&gt;
agent-errors&lt;br /&gt;
aget&lt;br /&gt;
alength&lt;br /&gt;
alias&lt;br /&gt;
all-ns&lt;br /&gt;
alter&lt;br /&gt;
alter-meta!&lt;br /&gt;
alter-var-root&lt;br /&gt;
amap&lt;br /&gt;
ancestors&lt;br /&gt;
and&lt;br /&gt;
apply&lt;br /&gt;
areduce&lt;br /&gt;
array-map&lt;br /&gt;
aset&lt;br /&gt;
aset-boolean&lt;br /&gt;
aset-byte&lt;br /&gt;
aset-char&lt;br /&gt;
aset-double&lt;br /&gt;
aset-float&lt;br /&gt;
aset-int&lt;br /&gt;
aset-long&lt;br /&gt;
aset-short&lt;br /&gt;
assert&lt;br /&gt;
assoc&lt;br /&gt;
assoc!&lt;br /&gt;
assoc-in&lt;br /&gt;
associative?&lt;br /&gt;
atom&lt;br /&gt;
await&lt;br /&gt;
await-for&lt;br /&gt;
bases&lt;br /&gt;
bean&lt;br /&gt;
bigdec&lt;br /&gt;
bigint&lt;br /&gt;
biginteger&lt;br /&gt;
binding&lt;br /&gt;
bit-and&lt;br /&gt;
bit-and-not&lt;br /&gt;
bit-clear&lt;br /&gt;
bit-flip&lt;br /&gt;
bit-not&lt;br /&gt;
bit-or&lt;br /&gt;
bit-set&lt;br /&gt;
bit-shift-left&lt;br /&gt;
bit-shift-right&lt;br /&gt;
bit-test&lt;br /&gt;
bit-xor&lt;br /&gt;
boolean&lt;br /&gt;
boolean-array&lt;br /&gt;
booleans&lt;br /&gt;
bound-fn&lt;br /&gt;
bound-fn*&lt;br /&gt;
bound?&lt;br /&gt;
butlast&lt;br /&gt;
byte&lt;br /&gt;
byte-array&lt;br /&gt;
bytes&lt;br /&gt;
case&lt;br /&gt;
cast&lt;br /&gt;
char&lt;br /&gt;
char-array&lt;br /&gt;
char-escape-string&lt;br /&gt;
char-name-string&lt;br /&gt;
char?&lt;br /&gt;
chars&lt;br /&gt;
class&lt;br /&gt;
class?&lt;br /&gt;
clear-agent-errors&lt;br /&gt;
clojure-version&lt;br /&gt;
coll?&lt;br /&gt;
comment&lt;br /&gt;
commute&lt;br /&gt;
comp&lt;br /&gt;
comparator&lt;br /&gt;
compare&lt;br /&gt;
compare-and-set!&lt;br /&gt;
compile&lt;br /&gt;
complement&lt;br /&gt;
concat&lt;br /&gt;
cond&lt;br /&gt;
condp&lt;br /&gt;
conj&lt;br /&gt;
conj!&lt;br /&gt;
cons&lt;br /&gt;
constantly&lt;br /&gt;
construct-proxy&lt;br /&gt;
contains?&lt;br /&gt;
count&lt;br /&gt;
counted?&lt;br /&gt;
create-ns&lt;br /&gt;
create-struct&lt;br /&gt;
cycle&lt;br /&gt;
dec&lt;br /&gt;
dec&#039;&lt;br /&gt;
decimal?&lt;br /&gt;
default-data-readers&lt;br /&gt;
delay&lt;br /&gt;
delay?&lt;br /&gt;
deliver&lt;br /&gt;
denominator&lt;br /&gt;
deref&lt;br /&gt;
derive&lt;br /&gt;
descendants&lt;br /&gt;
disj&lt;br /&gt;
disj!&lt;br /&gt;
dissoc&lt;br /&gt;
dissoc!&lt;br /&gt;
distinct&lt;br /&gt;
distinct?&lt;br /&gt;
doall&lt;br /&gt;
dorun&lt;br /&gt;
doseq&lt;br /&gt;
dosync&lt;br /&gt;
dotimes&lt;br /&gt;
doto&lt;br /&gt;
double&lt;br /&gt;
double-array&lt;br /&gt;
doubles&lt;br /&gt;
drop&lt;br /&gt;
drop-last&lt;br /&gt;
drop-while&lt;br /&gt;
empty&lt;br /&gt;
empty?&lt;br /&gt;
ensure&lt;br /&gt;
enumeration-seq&lt;br /&gt;
error-handler&lt;br /&gt;
error-mode&lt;br /&gt;
eval&lt;br /&gt;
even?&lt;br /&gt;
every-pred&lt;br /&gt;
every?&lt;br /&gt;
ex-data&lt;br /&gt;
ex-info&lt;br /&gt;
extend&lt;br /&gt;
extend-protocol&lt;br /&gt;
extend-type&lt;br /&gt;
extenders&lt;br /&gt;
extends?&lt;br /&gt;
false?&lt;br /&gt;
ffirst&lt;br /&gt;
file-seq&lt;br /&gt;
filter&lt;br /&gt;
filterv&lt;br /&gt;
find&lt;br /&gt;
find-keyword&lt;br /&gt;
find-ns&lt;br /&gt;
find-var&lt;br /&gt;
first&lt;br /&gt;
flatten&lt;br /&gt;
float&lt;br /&gt;
float-array&lt;br /&gt;
float?&lt;br /&gt;
floats&lt;br /&gt;
flush&lt;br /&gt;
fn?&lt;br /&gt;
fnext&lt;br /&gt;
fnil&lt;br /&gt;
for&lt;br /&gt;
force&lt;br /&gt;
format&lt;br /&gt;
frequencies&lt;br /&gt;
future&lt;br /&gt;
future-call&lt;br /&gt;
future-cancel&lt;br /&gt;
future-cancelled?&lt;br /&gt;
future-done?&lt;br /&gt;
future?&lt;br /&gt;
gen-class&lt;br /&gt;
gen-interface&lt;br /&gt;
gensym&lt;br /&gt;
get&lt;br /&gt;
get-in&lt;br /&gt;
get-method&lt;br /&gt;
get-proxy-class&lt;br /&gt;
get-thread-bindings&lt;br /&gt;
get-validator&lt;br /&gt;
group-by&lt;br /&gt;
hash&lt;br /&gt;
hash-map&lt;br /&gt;
hash-set&lt;br /&gt;
identical?&lt;br /&gt;
identity&lt;br /&gt;
ifn?&lt;br /&gt;
import&lt;br /&gt;
in-ns&lt;br /&gt;
inc&lt;br /&gt;
inc&#039;&lt;br /&gt;
init-proxy&lt;br /&gt;
instance?&lt;br /&gt;
int&lt;br /&gt;
int-array&lt;br /&gt;
integer?&lt;br /&gt;
interleave&lt;br /&gt;
intern&lt;br /&gt;
interpose&lt;br /&gt;
into&lt;br /&gt;
into-array&lt;br /&gt;
ints&lt;br /&gt;
io!&lt;br /&gt;
isa?&lt;br /&gt;
iterate&lt;br /&gt;
iterator-seq&lt;br /&gt;
juxt&lt;br /&gt;
keep&lt;br /&gt;
keep-indexed&lt;br /&gt;
key&lt;br /&gt;
keys&lt;br /&gt;
keyword&lt;br /&gt;
keyword?&lt;br /&gt;
last&lt;br /&gt;
lazy-cat&lt;br /&gt;
lazy-seq&lt;br /&gt;
letfn&lt;br /&gt;
line-seq&lt;br /&gt;
list&lt;br /&gt;
list*&lt;br /&gt;
list?&lt;br /&gt;
load&lt;br /&gt;
load-file&lt;br /&gt;
load-reader&lt;br /&gt;
load-string&lt;br /&gt;
loaded-libs&lt;br /&gt;
locking&lt;br /&gt;
long&lt;br /&gt;
long-array&lt;br /&gt;
longs&lt;br /&gt;
macroexpand&lt;br /&gt;
macroexpand-1&lt;br /&gt;
make-array&lt;br /&gt;
make-hierarchy&lt;br /&gt;
map&lt;br /&gt;
map-indexed&lt;br /&gt;
map?&lt;br /&gt;
mapcat&lt;br /&gt;
mapv&lt;br /&gt;
max&lt;br /&gt;
max-key&lt;br /&gt;
memfn&lt;br /&gt;
memoize&lt;br /&gt;
merge&lt;br /&gt;
merge-with&lt;br /&gt;
meta&lt;br /&gt;
methods&lt;br /&gt;
min&lt;br /&gt;
min-key&lt;br /&gt;
mod&lt;br /&gt;
name&lt;br /&gt;
namespace&lt;br /&gt;
namespace-munge&lt;br /&gt;
neg?&lt;br /&gt;
newline&lt;br /&gt;
next&lt;br /&gt;
nfirst&lt;br /&gt;
nil?&lt;br /&gt;
nnext&lt;br /&gt;
not&lt;br /&gt;
not-any?&lt;br /&gt;
not-empty&lt;br /&gt;
not-every?&lt;br /&gt;
not=&lt;br /&gt;
ns-aliases&lt;br /&gt;
ns-imports&lt;br /&gt;
ns-interns&lt;br /&gt;
ns-map&lt;br /&gt;
ns-name&lt;br /&gt;
ns-publics&lt;br /&gt;
ns-refers&lt;br /&gt;
ns-resolve&lt;br /&gt;
ns-unalias&lt;br /&gt;
ns-unmap&lt;br /&gt;
nth&lt;br /&gt;
nthnext&lt;br /&gt;
nthrest&lt;br /&gt;
num&lt;br /&gt;
number?&lt;br /&gt;
numerator&lt;br /&gt;
object-array&lt;br /&gt;
odd?&lt;br /&gt;
or&lt;br /&gt;
parents&lt;br /&gt;
partial&lt;br /&gt;
partition&lt;br /&gt;
partition-all&lt;br /&gt;
partition-by&lt;br /&gt;
pcalls&lt;br /&gt;
peek&lt;br /&gt;
persistent!&lt;br /&gt;
pmap&lt;br /&gt;
pop&lt;br /&gt;
pop!&lt;br /&gt;
pop-thread-bindings&lt;br /&gt;
pos?&lt;br /&gt;
pr&lt;br /&gt;
pr-str&lt;br /&gt;
prefer-method&lt;br /&gt;
prefers&lt;br /&gt;
print&lt;br /&gt;
print-str&lt;br /&gt;
printf&lt;br /&gt;
println&lt;br /&gt;
println-str&lt;br /&gt;
prn&lt;br /&gt;
prn-str&lt;br /&gt;
promise&lt;br /&gt;
proxy&lt;br /&gt;
proxy-mappings&lt;br /&gt;
proxy-super&lt;br /&gt;
push-thread-bindings&lt;br /&gt;
pvalues&lt;br /&gt;
quot&lt;br /&gt;
rand&lt;br /&gt;
rand-int&lt;br /&gt;
rand-nth&lt;br /&gt;
range&lt;br /&gt;
ratio?&lt;br /&gt;
rational?&lt;br /&gt;
rationalize&lt;br /&gt;
re-find&lt;br /&gt;
re-groups&lt;br /&gt;
re-matcher&lt;br /&gt;
re-matches&lt;br /&gt;
re-pattern&lt;br /&gt;
re-seq&lt;br /&gt;
read&lt;br /&gt;
read-line&lt;br /&gt;
read-string&lt;br /&gt;
realized?&lt;br /&gt;
reduce&lt;br /&gt;
reduce-kv&lt;br /&gt;
reductions&lt;br /&gt;
ref&lt;br /&gt;
ref-history-count&lt;br /&gt;
ref-max-history&lt;br /&gt;
ref-min-history&lt;br /&gt;
ref-set&lt;br /&gt;
refer&lt;br /&gt;
refer-clojure&lt;br /&gt;
reify&lt;br /&gt;
release-pending-sends&lt;br /&gt;
rem&lt;br /&gt;
remove&lt;br /&gt;
remove-all-methods&lt;br /&gt;
remove-method&lt;br /&gt;
remove-ns&lt;br /&gt;
remove-watch&lt;br /&gt;
repeat&lt;br /&gt;
repeatedly&lt;br /&gt;
replace&lt;br /&gt;
replicate&lt;br /&gt;
reset!&lt;br /&gt;
reset-meta!&lt;br /&gt;
resolve&lt;br /&gt;
rest&lt;br /&gt;
restart-agent&lt;br /&gt;
resultset-seq&lt;br /&gt;
reverse&lt;br /&gt;
reversible?&lt;br /&gt;
rseq&lt;br /&gt;
rsubseq&lt;br /&gt;
satisfies?&lt;br /&gt;
second&lt;br /&gt;
select-keys&lt;br /&gt;
send&lt;br /&gt;
send-off&lt;br /&gt;
seq&lt;br /&gt;
seq?&lt;br /&gt;
seque&lt;br /&gt;
sequence&lt;br /&gt;
sequential?&lt;br /&gt;
set&lt;br /&gt;
set-error-handler!&lt;br /&gt;
set-error-mode!&lt;br /&gt;
set-validator!&lt;br /&gt;
set?&lt;br /&gt;
short&lt;br /&gt;
short-array&lt;br /&gt;
shorts&lt;br /&gt;
shuffle&lt;br /&gt;
shutdown-agents&lt;br /&gt;
slurp&lt;br /&gt;
some&lt;br /&gt;
some-fn&lt;br /&gt;
sort&lt;br /&gt;
sort-by&lt;br /&gt;
sorted-map&lt;br /&gt;
sorted-map-by&lt;br /&gt;
sorted-set&lt;br /&gt;
sorted-set-by&lt;br /&gt;
sorted?&lt;br /&gt;
special-symbol?&lt;br /&gt;
spit&lt;br /&gt;
split-at&lt;br /&gt;
split-with&lt;br /&gt;
str&lt;br /&gt;
string?&lt;br /&gt;
struct&lt;br /&gt;
struct-map&lt;br /&gt;
subs&lt;br /&gt;
subseq&lt;br /&gt;
subvec&lt;br /&gt;
supers&lt;br /&gt;
swap!&lt;br /&gt;
symbol&lt;br /&gt;
symbol?&lt;br /&gt;
sync&lt;br /&gt;
take&lt;br /&gt;
take-last&lt;br /&gt;
take-nth&lt;br /&gt;
take-while&lt;br /&gt;
test&lt;br /&gt;
the-ns&lt;br /&gt;
thread-bound?&lt;br /&gt;
time&lt;br /&gt;
to-array&lt;br /&gt;
to-array-2d&lt;br /&gt;
trampoline&lt;br /&gt;
transient&lt;br /&gt;
tree-seq&lt;br /&gt;
true?&lt;br /&gt;
type&lt;br /&gt;
unchecked-add&lt;br /&gt;
unchecked-add-int&lt;br /&gt;
unchecked-byte&lt;br /&gt;
unchecked-char&lt;br /&gt;
unchecked-dec&lt;br /&gt;
unchecked-dec-int&lt;br /&gt;
unchecked-divide-int&lt;br /&gt;
unchecked-double&lt;br /&gt;
unchecked-float&lt;br /&gt;
unchecked-inc&lt;br /&gt;
unchecked-inc-int&lt;br /&gt;
unchecked-int&lt;br /&gt;
unchecked-long&lt;br /&gt;
unchecked-multiply&lt;br /&gt;
unchecked-multiply-int&lt;br /&gt;
unchecked-negate&lt;br /&gt;
unchecked-negate-int&lt;br /&gt;
unchecked-remainder-int&lt;br /&gt;
unchecked-short&lt;br /&gt;
unchecked-subtract&lt;br /&gt;
unchecked-subtract-int&lt;br /&gt;
underive&lt;br /&gt;
update-in&lt;br /&gt;
update-proxy&lt;br /&gt;
use&lt;br /&gt;
val&lt;br /&gt;
vals&lt;br /&gt;
var-get&lt;br /&gt;
var-set&lt;br /&gt;
var?&lt;br /&gt;
vary-meta&lt;br /&gt;
vec&lt;br /&gt;
vector&lt;br /&gt;
vector-of&lt;br /&gt;
vector?&lt;br /&gt;
with-bindings&lt;br /&gt;
with-bindings*&lt;br /&gt;
with-in-str&lt;br /&gt;
with-local-vars&lt;br /&gt;
with-meta&lt;br /&gt;
with-open&lt;br /&gt;
with-out-str&lt;br /&gt;
with-precision&lt;br /&gt;
with-redefs&lt;br /&gt;
with-redefs-fn&lt;br /&gt;
xml-seq&lt;br /&gt;
zero?&lt;br /&gt;
zipmap&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
\bwith-[^^\s\)\]\}]+&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
browse&lt;br /&gt;
browse-ui&lt;br /&gt;
clojure&lt;br /&gt;
core&lt;br /&gt;
data&lt;br /&gt;
inspector&lt;br /&gt;
io&lt;br /&gt;
java&lt;br /&gt;
javadoc&lt;br /&gt;
junit&lt;br /&gt;
main&lt;br /&gt;
pprint&lt;br /&gt;
protocols&lt;br /&gt;
reflect&lt;br /&gt;
repl&lt;br /&gt;
set&lt;br /&gt;
shell&lt;br /&gt;
stacktrace&lt;br /&gt;
string&lt;br /&gt;
tap&lt;br /&gt;
template&lt;br /&gt;
test&lt;br /&gt;
walk&lt;br /&gt;
xml&lt;br /&gt;
zip&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s/])\*[^^\s\*]*\*&lt;br /&gt;
&lt;br /&gt;
#Word Color=3, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s])[\\:][^^\s\)\]\}]+&lt;br /&gt;
&lt;br /&gt;
#Word Color=4, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s])[a-z\$]*\.[^^\s\)\]\}]*&lt;br /&gt;
\b[a-z\$]+\/[^^\s\)\]\}]+&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=Clojure&amp;diff=966</id>
		<title>Clojure</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=Clojure&amp;diff=966"/>
		<updated>2013-02-25T01:36:15Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「&amp;amp;laquo; 構文ファイル  [http://clojure.org/documentation ドキュメント]や[http://clojuredocs.org/clojure_core/clojure.core clojure.cor...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[構文ファイル|&amp;amp;laquo; 構文ファイル]]&lt;br /&gt;
&lt;br /&gt;
[http://clojure.org/documentation ドキュメント]や[http://clojuredocs.org/clojure_core/clojure.core clojure.core] などから恣意的に作成。最後のいくつかの設定は.や/を含んだ識別子を問答無用で強調しますが、お気に召さなければ削って下さい。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;clojure&amp;quot;&amp;gt;&lt;br /&gt;
#TagBegin=&lt;br /&gt;
#TagEnd=&lt;br /&gt;
#CommentBegin1=&lt;br /&gt;
#CommentEnd1=&lt;br /&gt;
#LineComment1=;&lt;br /&gt;
#CommentBegin2=&lt;br /&gt;
#CommentEnd2=&lt;br /&gt;
#LineComment2=&lt;br /&gt;
#SpecialSyntax=None&lt;br /&gt;
#ScriptBegin=&lt;br /&gt;
#ScriptEnd=&lt;br /&gt;
#QuoteSingle=False&lt;br /&gt;
#QuoteDouble=True&lt;br /&gt;
#QuoteContinue=True&lt;br /&gt;
#EscapeCharacter=\&lt;br /&gt;
&lt;br /&gt;
#Word Color=0, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
declare&lt;br /&gt;
def&lt;br /&gt;
definline&lt;br /&gt;
definterface&lt;br /&gt;
defmacro&lt;br /&gt;
defmethod&lt;br /&gt;
defmulti&lt;br /&gt;
defn&lt;br /&gt;
defn-&lt;br /&gt;
defonce&lt;br /&gt;
defprotocol&lt;br /&gt;
defrecord&lt;br /&gt;
defstruct&lt;br /&gt;
deftype&lt;br /&gt;
do&lt;br /&gt;
fn&lt;br /&gt;
if&lt;br /&gt;
if-let&lt;br /&gt;
if-not&lt;br /&gt;
let&lt;br /&gt;
loop&lt;br /&gt;
monitor-enter&lt;br /&gt;
monitor-exit&lt;br /&gt;
new&lt;br /&gt;
ns&lt;br /&gt;
quote&lt;br /&gt;
recur&lt;br /&gt;
require&lt;br /&gt;
set!&lt;br /&gt;
throw&lt;br /&gt;
try&lt;br /&gt;
var&lt;br /&gt;
when&lt;br /&gt;
when-first&lt;br /&gt;
when-let&lt;br /&gt;
when-not&lt;br /&gt;
while&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
+&lt;br /&gt;
+&#039;&lt;br /&gt;
-&lt;br /&gt;
-&#039;&lt;br /&gt;
-&amp;gt;&lt;br /&gt;
-&amp;gt;&amp;gt;&lt;br /&gt;
-&amp;gt;ArrayChunk&lt;br /&gt;
-&amp;gt;Vec&lt;br /&gt;
-&amp;gt;VecNode&lt;br /&gt;
-&amp;gt;VecSeq&lt;br /&gt;
-cache-protocol-fn&lt;br /&gt;
-reset-methods&lt;br /&gt;
..&lt;br /&gt;
/&lt;br /&gt;
&amp;lt;&lt;br /&gt;
&amp;lt;=&lt;br /&gt;
=&lt;br /&gt;
==&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;=&lt;br /&gt;
EMPTY-NODE&lt;br /&gt;
accessor&lt;br /&gt;
aclone&lt;br /&gt;
add-classpath&lt;br /&gt;
add-watch&lt;br /&gt;
agent&lt;br /&gt;
agent-error&lt;br /&gt;
agent-errors&lt;br /&gt;
aget&lt;br /&gt;
alength&lt;br /&gt;
alias&lt;br /&gt;
all-ns&lt;br /&gt;
alter&lt;br /&gt;
alter-meta!&lt;br /&gt;
alter-var-root&lt;br /&gt;
amap&lt;br /&gt;
ancestors&lt;br /&gt;
and&lt;br /&gt;
apply&lt;br /&gt;
areduce&lt;br /&gt;
array-map&lt;br /&gt;
aset&lt;br /&gt;
aset-boolean&lt;br /&gt;
aset-byte&lt;br /&gt;
aset-char&lt;br /&gt;
aset-double&lt;br /&gt;
aset-float&lt;br /&gt;
aset-int&lt;br /&gt;
aset-long&lt;br /&gt;
aset-short&lt;br /&gt;
assert&lt;br /&gt;
assoc&lt;br /&gt;
assoc!&lt;br /&gt;
assoc-in&lt;br /&gt;
associative?&lt;br /&gt;
atom&lt;br /&gt;
await&lt;br /&gt;
await-for&lt;br /&gt;
await1&lt;br /&gt;
bases&lt;br /&gt;
bean&lt;br /&gt;
bigdec&lt;br /&gt;
bigint&lt;br /&gt;
biginteger&lt;br /&gt;
binding&lt;br /&gt;
bit-and&lt;br /&gt;
bit-and-not&lt;br /&gt;
bit-clear&lt;br /&gt;
bit-flip&lt;br /&gt;
bit-not&lt;br /&gt;
bit-or&lt;br /&gt;
bit-set&lt;br /&gt;
bit-shift-left&lt;br /&gt;
bit-shift-right&lt;br /&gt;
bit-test&lt;br /&gt;
bit-xor&lt;br /&gt;
boolean&lt;br /&gt;
boolean-array&lt;br /&gt;
booleans&lt;br /&gt;
bound-fn&lt;br /&gt;
bound-fn*&lt;br /&gt;
bound?&lt;br /&gt;
butlast&lt;br /&gt;
byte&lt;br /&gt;
byte-array&lt;br /&gt;
bytes&lt;br /&gt;
case&lt;br /&gt;
cast&lt;br /&gt;
catch&lt;br /&gt;
char&lt;br /&gt;
char-array&lt;br /&gt;
char-escape-string&lt;br /&gt;
char-name-string&lt;br /&gt;
char?&lt;br /&gt;
chars&lt;br /&gt;
chunk&lt;br /&gt;
chunk-append&lt;br /&gt;
chunk-buffer&lt;br /&gt;
chunk-cons&lt;br /&gt;
chunk-first&lt;br /&gt;
chunk-next&lt;br /&gt;
chunk-rest&lt;br /&gt;
chunked-seq?&lt;br /&gt;
class&lt;br /&gt;
class?&lt;br /&gt;
clear-agent-errors&lt;br /&gt;
clojure-version&lt;br /&gt;
coll?&lt;br /&gt;
comment&lt;br /&gt;
commute&lt;br /&gt;
comp&lt;br /&gt;
comparator&lt;br /&gt;
compare&lt;br /&gt;
compare-and-set!&lt;br /&gt;
compile&lt;br /&gt;
complement&lt;br /&gt;
concat&lt;br /&gt;
cond&lt;br /&gt;
condp&lt;br /&gt;
conj&lt;br /&gt;
conj!&lt;br /&gt;
cons&lt;br /&gt;
constantly&lt;br /&gt;
construct-proxy&lt;br /&gt;
contains?&lt;br /&gt;
count&lt;br /&gt;
counted?&lt;br /&gt;
create-ns&lt;br /&gt;
create-struct&lt;br /&gt;
cycle&lt;br /&gt;
dec&lt;br /&gt;
dec&#039;&lt;br /&gt;
decimal?&lt;br /&gt;
delay&lt;br /&gt;
delay?&lt;br /&gt;
deliver&lt;br /&gt;
denominator&lt;br /&gt;
deref&lt;br /&gt;
derive&lt;br /&gt;
descendants&lt;br /&gt;
destructure&lt;br /&gt;
disj&lt;br /&gt;
disj!&lt;br /&gt;
dissoc&lt;br /&gt;
dissoc!&lt;br /&gt;
distinct&lt;br /&gt;
distinct?&lt;br /&gt;
doall&lt;br /&gt;
dorun&lt;br /&gt;
doseq&lt;br /&gt;
dosync&lt;br /&gt;
dotimes&lt;br /&gt;
doto&lt;br /&gt;
double&lt;br /&gt;
double-array&lt;br /&gt;
doubles&lt;br /&gt;
drop&lt;br /&gt;
drop-last&lt;br /&gt;
drop-while&lt;br /&gt;
empty&lt;br /&gt;
empty?&lt;br /&gt;
ensure&lt;br /&gt;
enumeration-seq&lt;br /&gt;
error-handler&lt;br /&gt;
error-mode&lt;br /&gt;
eval&lt;br /&gt;
even?&lt;br /&gt;
every-pred&lt;br /&gt;
every?&lt;br /&gt;
extend&lt;br /&gt;
extend-protocol&lt;br /&gt;
extend-type&lt;br /&gt;
extenders&lt;br /&gt;
extends?&lt;br /&gt;
false?&lt;br /&gt;
ffirst&lt;br /&gt;
file-seq&lt;br /&gt;
filter&lt;br /&gt;
finally&lt;br /&gt;
find&lt;br /&gt;
find-keyword&lt;br /&gt;
find-ns&lt;br /&gt;
find-protocol-impl&lt;br /&gt;
find-protocol-method&lt;br /&gt;
find-var&lt;br /&gt;
first&lt;br /&gt;
flatten&lt;br /&gt;
float&lt;br /&gt;
float-array&lt;br /&gt;
float?&lt;br /&gt;
floats&lt;br /&gt;
flush&lt;br /&gt;
fn?&lt;br /&gt;
fnext&lt;br /&gt;
fnil&lt;br /&gt;
for&lt;br /&gt;
force&lt;br /&gt;
format&lt;br /&gt;
frequencies&lt;br /&gt;
future&lt;br /&gt;
future-call&lt;br /&gt;
future-cancel&lt;br /&gt;
future-cancelled?&lt;br /&gt;
future-done?&lt;br /&gt;
future?&lt;br /&gt;
gen-class&lt;br /&gt;
gen-interface&lt;br /&gt;
gensym&lt;br /&gt;
get&lt;br /&gt;
get-in&lt;br /&gt;
get-method&lt;br /&gt;
get-proxy-class&lt;br /&gt;
get-thread-bindings&lt;br /&gt;
get-validator&lt;br /&gt;
group-by&lt;br /&gt;
hash&lt;br /&gt;
hash-combine&lt;br /&gt;
hash-map&lt;br /&gt;
hash-set&lt;br /&gt;
identical?&lt;br /&gt;
identity&lt;br /&gt;
ifn?&lt;br /&gt;
import&lt;br /&gt;
in-ns&lt;br /&gt;
inc&lt;br /&gt;
inc&#039;&lt;br /&gt;
init-proxy&lt;br /&gt;
instance?&lt;br /&gt;
int&lt;br /&gt;
int-array&lt;br /&gt;
integer?&lt;br /&gt;
interleave&lt;br /&gt;
intern&lt;br /&gt;
interpose&lt;br /&gt;
into&lt;br /&gt;
into-array&lt;br /&gt;
ints&lt;br /&gt;
io!&lt;br /&gt;
isa?&lt;br /&gt;
iterate&lt;br /&gt;
iterator-seq&lt;br /&gt;
juxt&lt;br /&gt;
keep&lt;br /&gt;
keep-indexed&lt;br /&gt;
key&lt;br /&gt;
keys&lt;br /&gt;
keyword&lt;br /&gt;
keyword?&lt;br /&gt;
last&lt;br /&gt;
lazy-cat&lt;br /&gt;
lazy-seq&lt;br /&gt;
letfn&lt;br /&gt;
line-seq&lt;br /&gt;
list&lt;br /&gt;
list*&lt;br /&gt;
list?&lt;br /&gt;
load&lt;br /&gt;
load-file&lt;br /&gt;
load-reader&lt;br /&gt;
load-string&lt;br /&gt;
loaded-libs&lt;br /&gt;
locking&lt;br /&gt;
long&lt;br /&gt;
long-array&lt;br /&gt;
longs&lt;br /&gt;
macroexpand&lt;br /&gt;
macroexpand-1&lt;br /&gt;
make-array&lt;br /&gt;
make-hierarchy&lt;br /&gt;
map&lt;br /&gt;
map-indexed&lt;br /&gt;
map?&lt;br /&gt;
mapcat&lt;br /&gt;
max&lt;br /&gt;
max-key&lt;br /&gt;
memfn&lt;br /&gt;
memoize&lt;br /&gt;
merge&lt;br /&gt;
merge-with&lt;br /&gt;
meta&lt;br /&gt;
method-sig&lt;br /&gt;
methods&lt;br /&gt;
min&lt;br /&gt;
min-key&lt;br /&gt;
mod&lt;br /&gt;
munge&lt;br /&gt;
name&lt;br /&gt;
namespace&lt;br /&gt;
namespace-munge&lt;br /&gt;
neg?&lt;br /&gt;
newline&lt;br /&gt;
next&lt;br /&gt;
nfirst&lt;br /&gt;
nil?&lt;br /&gt;
nnext&lt;br /&gt;
not&lt;br /&gt;
not-any?&lt;br /&gt;
not-empty&lt;br /&gt;
not-every?&lt;br /&gt;
not=&lt;br /&gt;
ns-aliases&lt;br /&gt;
ns-imports&lt;br /&gt;
ns-interns&lt;br /&gt;
ns-map&lt;br /&gt;
ns-name&lt;br /&gt;
ns-publics&lt;br /&gt;
ns-refers&lt;br /&gt;
ns-resolve&lt;br /&gt;
ns-unalias&lt;br /&gt;
ns-unmap&lt;br /&gt;
nth&lt;br /&gt;
nthnext&lt;br /&gt;
nthrest&lt;br /&gt;
num&lt;br /&gt;
number?&lt;br /&gt;
numerator&lt;br /&gt;
object-array&lt;br /&gt;
odd?&lt;br /&gt;
or&lt;br /&gt;
parents&lt;br /&gt;
partial&lt;br /&gt;
partition&lt;br /&gt;
partition-all&lt;br /&gt;
partition-by&lt;br /&gt;
pcalls&lt;br /&gt;
peek&lt;br /&gt;
persistent!&lt;br /&gt;
pmap&lt;br /&gt;
pop&lt;br /&gt;
pop!&lt;br /&gt;
pop-thread-bindings&lt;br /&gt;
pos?&lt;br /&gt;
pr&lt;br /&gt;
pr-str&lt;br /&gt;
prefer-method&lt;br /&gt;
prefers&lt;br /&gt;
primitives-classnames&lt;br /&gt;
print&lt;br /&gt;
print-ctor&lt;br /&gt;
print-dup&lt;br /&gt;
print-method&lt;br /&gt;
print-simple&lt;br /&gt;
print-str&lt;br /&gt;
printf&lt;br /&gt;
println&lt;br /&gt;
println-str&lt;br /&gt;
prn&lt;br /&gt;
prn-str&lt;br /&gt;
promise&lt;br /&gt;
proxy&lt;br /&gt;
proxy-call-with-super&lt;br /&gt;
proxy-mappings&lt;br /&gt;
proxy-name&lt;br /&gt;
proxy-super&lt;br /&gt;
push-thread-bindings&lt;br /&gt;
pvalues&lt;br /&gt;
quot&lt;br /&gt;
rand&lt;br /&gt;
rand-int&lt;br /&gt;
rand-nth&lt;br /&gt;
range&lt;br /&gt;
ratio?&lt;br /&gt;
rational?&lt;br /&gt;
rationalize&lt;br /&gt;
re-find&lt;br /&gt;
re-groups&lt;br /&gt;
re-matcher&lt;br /&gt;
re-matches&lt;br /&gt;
re-pattern&lt;br /&gt;
re-seq&lt;br /&gt;
read&lt;br /&gt;
read-line&lt;br /&gt;
read-string&lt;br /&gt;
realized?&lt;br /&gt;
reduce&lt;br /&gt;
reductions&lt;br /&gt;
ref&lt;br /&gt;
ref-history-count&lt;br /&gt;
ref-max-history&lt;br /&gt;
ref-min-history&lt;br /&gt;
ref-set&lt;br /&gt;
refer&lt;br /&gt;
refer-clojure&lt;br /&gt;
reify&lt;br /&gt;
release-pending-sends&lt;br /&gt;
rem&lt;br /&gt;
remove&lt;br /&gt;
remove-all-methods&lt;br /&gt;
remove-method&lt;br /&gt;
remove-ns&lt;br /&gt;
remove-watch&lt;br /&gt;
repeat&lt;br /&gt;
repeatedly&lt;br /&gt;
replace&lt;br /&gt;
replicate&lt;br /&gt;
reset!&lt;br /&gt;
reset-meta!&lt;br /&gt;
resolve&lt;br /&gt;
rest&lt;br /&gt;
restart-agent&lt;br /&gt;
resultset-seq&lt;br /&gt;
reverse&lt;br /&gt;
reversible?&lt;br /&gt;
rseq&lt;br /&gt;
rsubseq&lt;br /&gt;
satisfies?&lt;br /&gt;
second&lt;br /&gt;
select-keys&lt;br /&gt;
send&lt;br /&gt;
send-off&lt;br /&gt;
seq&lt;br /&gt;
seq?&lt;br /&gt;
seque&lt;br /&gt;
sequence&lt;br /&gt;
sequential?&lt;br /&gt;
set&lt;br /&gt;
set-error-handler!&lt;br /&gt;
set-error-mode!&lt;br /&gt;
set-validator!&lt;br /&gt;
set?&lt;br /&gt;
short&lt;br /&gt;
short-array&lt;br /&gt;
shorts&lt;br /&gt;
shuffle&lt;br /&gt;
shutdown-agents&lt;br /&gt;
slurp&lt;br /&gt;
some&lt;br /&gt;
some-fn&lt;br /&gt;
sort&lt;br /&gt;
sort-by&lt;br /&gt;
sorted-map&lt;br /&gt;
sorted-map-by&lt;br /&gt;
sorted-set&lt;br /&gt;
sorted-set-by&lt;br /&gt;
sorted?&lt;br /&gt;
special-symbol?&lt;br /&gt;
spit&lt;br /&gt;
split-at&lt;br /&gt;
split-with&lt;br /&gt;
str&lt;br /&gt;
string?&lt;br /&gt;
struct&lt;br /&gt;
struct-map&lt;br /&gt;
subs&lt;br /&gt;
subseq&lt;br /&gt;
subvec&lt;br /&gt;
supers&lt;br /&gt;
swap!&lt;br /&gt;
symbol&lt;br /&gt;
symbol?&lt;br /&gt;
sync&lt;br /&gt;
take&lt;br /&gt;
take-last&lt;br /&gt;
take-nth&lt;br /&gt;
take-while&lt;br /&gt;
test&lt;br /&gt;
the-ns&lt;br /&gt;
thread-bound?&lt;br /&gt;
time&lt;br /&gt;
to-array&lt;br /&gt;
to-array-2d&lt;br /&gt;
trampoline&lt;br /&gt;
transient&lt;br /&gt;
tree-seq&lt;br /&gt;
true?&lt;br /&gt;
type&lt;br /&gt;
unchecked-add&lt;br /&gt;
unchecked-add-int&lt;br /&gt;
unchecked-byte&lt;br /&gt;
unchecked-char&lt;br /&gt;
unchecked-dec&lt;br /&gt;
unchecked-dec-int&lt;br /&gt;
unchecked-divide-int&lt;br /&gt;
unchecked-double&lt;br /&gt;
unchecked-float&lt;br /&gt;
unchecked-inc&lt;br /&gt;
unchecked-inc-int&lt;br /&gt;
unchecked-int&lt;br /&gt;
unchecked-long&lt;br /&gt;
unchecked-multiply&lt;br /&gt;
unchecked-multiply-int&lt;br /&gt;
unchecked-negate&lt;br /&gt;
unchecked-negate-int&lt;br /&gt;
unchecked-remainder-int&lt;br /&gt;
unchecked-short&lt;br /&gt;
unchecked-subtract&lt;br /&gt;
unchecked-subtract-int&lt;br /&gt;
underive&lt;br /&gt;
unquote&lt;br /&gt;
unquote-splicing&lt;br /&gt;
update-in&lt;br /&gt;
update-proxy&lt;br /&gt;
use&lt;br /&gt;
val&lt;br /&gt;
vals&lt;br /&gt;
var-get&lt;br /&gt;
var-set&lt;br /&gt;
var?&lt;br /&gt;
vary-meta&lt;br /&gt;
vec&lt;br /&gt;
vector&lt;br /&gt;
vector-of&lt;br /&gt;
vector?&lt;br /&gt;
xml-seq&lt;br /&gt;
zero?&lt;br /&gt;
zipmap&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
\bwith-[^^\s\)\]\}]+&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
browse&lt;br /&gt;
browse-ui&lt;br /&gt;
clojure&lt;br /&gt;
core&lt;br /&gt;
data&lt;br /&gt;
inspector&lt;br /&gt;
io&lt;br /&gt;
java&lt;br /&gt;
javadoc&lt;br /&gt;
junit&lt;br /&gt;
main&lt;br /&gt;
pprint&lt;br /&gt;
protocols&lt;br /&gt;
reflect&lt;br /&gt;
repl&lt;br /&gt;
set&lt;br /&gt;
shell&lt;br /&gt;
stacktrace&lt;br /&gt;
string&lt;br /&gt;
tap&lt;br /&gt;
template&lt;br /&gt;
test&lt;br /&gt;
walk&lt;br /&gt;
xml&lt;br /&gt;
zip&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s/])\*[^^\s\*]*\*&lt;br /&gt;
&lt;br /&gt;
#Word Color=3, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s])[\\:][^^\s\)\]\}]+&lt;br /&gt;
&lt;br /&gt;
#Word Color=5, WholeWord=True, RightSide=False, MatchCase=False, InsideTag=False, RegEx=True&lt;br /&gt;
(?&amp;lt;=^^|[\(\[\{\s])[a-z\$]*\.[^^\s\)\]\}]*&lt;br /&gt;
\b[a-z\$]+\/[^^\s\)\]\}]+&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E6%A7%8B%E6%96%87%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=965</id>
		<title>構文ファイル</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E6%A7%8B%E6%96%87%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=965"/>
		<updated>2013-02-25T01:30:29Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mery で使用できる構文ファイルを集めたライブラリです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「編集モードの設定 &amp;gt; プロパティ」の下部にある「インポート」ボタンでインポートして使用します。構文ファイルライブラリはどなたでも自由に編集できますので、新しい言語やマニアックな言語の色分けに使えそうなものが出来上がったら投稿してみてくださいね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/bf.msy Brainf*ck] (MihailJP) &amp;lt;!-- 冗談半分で作ったシロモノです --&amp;gt;&lt;br /&gt;
*[[Delphi]] (kuro)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/d.msy D言語] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/erlang.msy Erlang] (MihailJP)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/fsharp.msy F#] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/go.msy Go] (MihailJP) ※Mery本体の仕様により、Raw文字列リテラルは色分けされません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/haskell.msy Haskell] (MihailJP)&lt;br /&gt;
*[[HTML5]] (ucky)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/markdown.msy Markdown] (MihailJP)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/ocaml.msy OCaml] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/nadesiko.msy なでしこ] (MihailJP) ※試供品。注意点は[https://github.com/MihailJP/merydef#%E3%81%AA%E3%81%A7%E3%81%97%E3%81%93-nadesikomsy]を参照のこと&lt;br /&gt;
*[[Lua]] (n)&lt;br /&gt;
*[[Clojure]] (n)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=Lua&amp;diff=964</id>
		<title>Lua</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=Lua&amp;diff=964"/>
		<updated>2013-02-23T13:52:31Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[構文ファイル|&amp;amp;laquo; 構文ファイル]]&lt;br /&gt;
&lt;br /&gt;
[http://www.lua.org/manual/5.2/manual.html Lua 5.2 Manual] より作成。&amp;lt;code&amp;gt;[=[ ... ]=]&amp;lt;/code&amp;gt;の形の文字列には非対応です。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
#TagBegin=&lt;br /&gt;
#TagEnd=&lt;br /&gt;
#CommentBegin1=--[[&lt;br /&gt;
#CommentEnd1=]]&lt;br /&gt;
#LineComment1=--&lt;br /&gt;
#CommentBegin2=[[&lt;br /&gt;
#CommentEnd2=]]&lt;br /&gt;
#LineComment2=&lt;br /&gt;
#SpecialSyntax=None&lt;br /&gt;
#ScriptBegin=&lt;br /&gt;
#ScriptEnd=&lt;br /&gt;
#QuoteSingle=True&lt;br /&gt;
#QuoteDouble=True&lt;br /&gt;
#QuoteContinue=True&lt;br /&gt;
#EscapeCharacter=\&lt;br /&gt;
&lt;br /&gt;
#Word Color=0, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
and&lt;br /&gt;
break&lt;br /&gt;
do&lt;br /&gt;
else&lt;br /&gt;
elseif&lt;br /&gt;
end&lt;br /&gt;
false&lt;br /&gt;
for&lt;br /&gt;
function&lt;br /&gt;
goto&lt;br /&gt;
if&lt;br /&gt;
in&lt;br /&gt;
local&lt;br /&gt;
nil&lt;br /&gt;
not&lt;br /&gt;
or&lt;br /&gt;
repeat&lt;br /&gt;
return&lt;br /&gt;
then&lt;br /&gt;
true&lt;br /&gt;
until&lt;br /&gt;
while&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
_G&lt;br /&gt;
_VERSION&lt;br /&gt;
assert&lt;br /&gt;
collectgarbage&lt;br /&gt;
dofile&lt;br /&gt;
error&lt;br /&gt;
getmetatable&lt;br /&gt;
ipairs&lt;br /&gt;
loadfile&lt;br /&gt;
load&lt;br /&gt;
next&lt;br /&gt;
pairs&lt;br /&gt;
pcall&lt;br /&gt;
print&lt;br /&gt;
rawequal&lt;br /&gt;
rawget&lt;br /&gt;
rawlen&lt;br /&gt;
rawset&lt;br /&gt;
require&lt;br /&gt;
select&lt;br /&gt;
setmetatable&lt;br /&gt;
tonumber&lt;br /&gt;
tostring&lt;br /&gt;
type&lt;br /&gt;
xpcall&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
bit32&lt;br /&gt;
coroutine&lt;br /&gt;
debug&lt;br /&gt;
file&lt;br /&gt;
io&lt;br /&gt;
math&lt;br /&gt;
os&lt;br /&gt;
package&lt;br /&gt;
string&lt;br /&gt;
table&lt;br /&gt;
&lt;br /&gt;
#Word Color=3, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
byteabs&lt;br /&gt;
acos&lt;br /&gt;
arshift&lt;br /&gt;
asin&lt;br /&gt;
atan&lt;br /&gt;
atan2&lt;br /&gt;
band&lt;br /&gt;
bnot&lt;br /&gt;
bor&lt;br /&gt;
btest&lt;br /&gt;
bxor&lt;br /&gt;
byte&lt;br /&gt;
ceil&lt;br /&gt;
char&lt;br /&gt;
clock&lt;br /&gt;
close&lt;br /&gt;
concat&lt;br /&gt;
config&lt;br /&gt;
cos&lt;br /&gt;
cosh&lt;br /&gt;
cpath&lt;br /&gt;
create&lt;br /&gt;
date&lt;br /&gt;
deg&lt;br /&gt;
difftime&lt;br /&gt;
dump&lt;br /&gt;
execute&lt;br /&gt;
exit&lt;br /&gt;
exp&lt;br /&gt;
extract&lt;br /&gt;
find&lt;br /&gt;
floor&lt;br /&gt;
flush&lt;br /&gt;
fmod&lt;br /&gt;
format&lt;br /&gt;
frexp&lt;br /&gt;
getenv&lt;br /&gt;
gethook&lt;br /&gt;
getinfo&lt;br /&gt;
getlocal&lt;br /&gt;
getmetatable&lt;br /&gt;
getregistry&lt;br /&gt;
getupvalue&lt;br /&gt;
getuservalue&lt;br /&gt;
gmatch&lt;br /&gt;
gsub&lt;br /&gt;
huge&lt;br /&gt;
input&lt;br /&gt;
insert&lt;br /&gt;
ldexp&lt;br /&gt;
len&lt;br /&gt;
lines&lt;br /&gt;
loaded&lt;br /&gt;
loadlib&lt;br /&gt;
log&lt;br /&gt;
lower&lt;br /&gt;
lrotate&lt;br /&gt;
lshift&lt;br /&gt;
match&lt;br /&gt;
max&lt;br /&gt;
min&lt;br /&gt;
modf&lt;br /&gt;
open&lt;br /&gt;
output&lt;br /&gt;
pack&lt;br /&gt;
path&lt;br /&gt;
pi&lt;br /&gt;
popen&lt;br /&gt;
pow&lt;br /&gt;
preload&lt;br /&gt;
rad&lt;br /&gt;
random&lt;br /&gt;
randomseed&lt;br /&gt;
read&lt;br /&gt;
remove&lt;br /&gt;
rename&lt;br /&gt;
rep&lt;br /&gt;
replace&lt;br /&gt;
resume&lt;br /&gt;
reverse&lt;br /&gt;
rrotate&lt;br /&gt;
rshift&lt;br /&gt;
running&lt;br /&gt;
searchers&lt;br /&gt;
searchpath&lt;br /&gt;
seek&lt;br /&gt;
sethook&lt;br /&gt;
setlocal&lt;br /&gt;
setlocale&lt;br /&gt;
setmetatable&lt;br /&gt;
setupvalue&lt;br /&gt;
setuservalue&lt;br /&gt;
setvbuf&lt;br /&gt;
sin&lt;br /&gt;
sinh&lt;br /&gt;
sort&lt;br /&gt;
sqrt&lt;br /&gt;
status&lt;br /&gt;
stderr&lt;br /&gt;
stdin&lt;br /&gt;
stdout&lt;br /&gt;
sub&lt;br /&gt;
tan&lt;br /&gt;
tanh&lt;br /&gt;
time&lt;br /&gt;
tmpfile&lt;br /&gt;
tmpname&lt;br /&gt;
traceback&lt;br /&gt;
type&lt;br /&gt;
unpack&lt;br /&gt;
upper&lt;br /&gt;
upvalueid&lt;br /&gt;
upvaluejoin&lt;br /&gt;
wrap&lt;br /&gt;
write&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
#Word Color=4, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=Falsebyte&lt;br /&gt;
__add&lt;br /&gt;
__call&lt;br /&gt;
__concat&lt;br /&gt;
__div&lt;br /&gt;
__eq&lt;br /&gt;
__index&lt;br /&gt;
__le&lt;br /&gt;
__len&lt;br /&gt;
__lt&lt;br /&gt;
__mod&lt;br /&gt;
__mul&lt;br /&gt;
__newindex&lt;br /&gt;
__pow&lt;br /&gt;
__sub&lt;br /&gt;
__unm&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=Lua&amp;diff=963</id>
		<title>Lua</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=Lua&amp;diff=963"/>
		<updated>2013-02-23T13:46:50Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「&amp;amp;laquo; 構文ファイル  [http://www.lua.org/manual/5.2/manual.html Lua 5.2 Manual] より作成。  &amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt; #TagBegin= #TagEnd= #...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[構文ファイル|&amp;amp;laquo; 構文ファイル]]&lt;br /&gt;
&lt;br /&gt;
[http://www.lua.org/manual/5.2/manual.html Lua 5.2 Manual] より作成。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
#TagBegin=&lt;br /&gt;
#TagEnd=&lt;br /&gt;
#CommentBegin1=[[&lt;br /&gt;
#CommentEnd1=]]&lt;br /&gt;
#LineComment1=--&lt;br /&gt;
#CommentBegin2=[=[&lt;br /&gt;
#CommentEnd2=]=]&lt;br /&gt;
#LineComment2=&lt;br /&gt;
#SpecialSyntax=None&lt;br /&gt;
#ScriptBegin=&lt;br /&gt;
#ScriptEnd=&lt;br /&gt;
#QuoteSingle=True&lt;br /&gt;
#QuoteDouble=True&lt;br /&gt;
#QuoteContinue=True&lt;br /&gt;
#EscapeCharacter=\&lt;br /&gt;
&lt;br /&gt;
#Word Color=0, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
and&lt;br /&gt;
break&lt;br /&gt;
do&lt;br /&gt;
else&lt;br /&gt;
elseif&lt;br /&gt;
end&lt;br /&gt;
false&lt;br /&gt;
for&lt;br /&gt;
function&lt;br /&gt;
goto&lt;br /&gt;
if&lt;br /&gt;
in&lt;br /&gt;
local&lt;br /&gt;
nil&lt;br /&gt;
not&lt;br /&gt;
or&lt;br /&gt;
repeat&lt;br /&gt;
return&lt;br /&gt;
then&lt;br /&gt;
true&lt;br /&gt;
until&lt;br /&gt;
while&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
#Word Color=1, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
_G&lt;br /&gt;
_VERSION&lt;br /&gt;
assert&lt;br /&gt;
collectgarbage&lt;br /&gt;
dofile&lt;br /&gt;
error&lt;br /&gt;
getmetatable&lt;br /&gt;
ipairs&lt;br /&gt;
loadfile&lt;br /&gt;
load&lt;br /&gt;
next&lt;br /&gt;
pairs&lt;br /&gt;
pcall&lt;br /&gt;
print&lt;br /&gt;
rawequal&lt;br /&gt;
rawget&lt;br /&gt;
rawlen&lt;br /&gt;
rawset&lt;br /&gt;
require&lt;br /&gt;
select&lt;br /&gt;
setmetatable&lt;br /&gt;
tonumber&lt;br /&gt;
tostring&lt;br /&gt;
type&lt;br /&gt;
xpcall&lt;br /&gt;
&lt;br /&gt;
#Word Color=2, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
bit32&lt;br /&gt;
coroutine&lt;br /&gt;
debug&lt;br /&gt;
file&lt;br /&gt;
io&lt;br /&gt;
math&lt;br /&gt;
os&lt;br /&gt;
package&lt;br /&gt;
string&lt;br /&gt;
table&lt;br /&gt;
&lt;br /&gt;
#Word Color=3, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=False&lt;br /&gt;
byteabs&lt;br /&gt;
acos&lt;br /&gt;
arshift&lt;br /&gt;
asin&lt;br /&gt;
atan&lt;br /&gt;
atan2&lt;br /&gt;
band&lt;br /&gt;
bnot&lt;br /&gt;
bor&lt;br /&gt;
btest&lt;br /&gt;
bxor&lt;br /&gt;
byte&lt;br /&gt;
ceil&lt;br /&gt;
char&lt;br /&gt;
clock&lt;br /&gt;
close&lt;br /&gt;
concat&lt;br /&gt;
config&lt;br /&gt;
cos&lt;br /&gt;
cosh&lt;br /&gt;
cpath&lt;br /&gt;
create&lt;br /&gt;
date&lt;br /&gt;
deg&lt;br /&gt;
difftime&lt;br /&gt;
dump&lt;br /&gt;
execute&lt;br /&gt;
exit&lt;br /&gt;
exp&lt;br /&gt;
extract&lt;br /&gt;
find&lt;br /&gt;
floor&lt;br /&gt;
flush&lt;br /&gt;
fmod&lt;br /&gt;
format&lt;br /&gt;
frexp&lt;br /&gt;
getenv&lt;br /&gt;
gethook&lt;br /&gt;
getinfo&lt;br /&gt;
getlocal&lt;br /&gt;
getmetatable&lt;br /&gt;
getregistry&lt;br /&gt;
getupvalue&lt;br /&gt;
getuservalue&lt;br /&gt;
gmatch&lt;br /&gt;
gsub&lt;br /&gt;
huge&lt;br /&gt;
input&lt;br /&gt;
insert&lt;br /&gt;
ldexp&lt;br /&gt;
len&lt;br /&gt;
lines&lt;br /&gt;
loaded&lt;br /&gt;
loadlib&lt;br /&gt;
log&lt;br /&gt;
lower&lt;br /&gt;
lrotate&lt;br /&gt;
lshift&lt;br /&gt;
match&lt;br /&gt;
max&lt;br /&gt;
min&lt;br /&gt;
modf&lt;br /&gt;
open&lt;br /&gt;
output&lt;br /&gt;
pack&lt;br /&gt;
path&lt;br /&gt;
pi&lt;br /&gt;
popen&lt;br /&gt;
pow&lt;br /&gt;
preload&lt;br /&gt;
rad&lt;br /&gt;
random&lt;br /&gt;
randomseed&lt;br /&gt;
read&lt;br /&gt;
remove&lt;br /&gt;
rename&lt;br /&gt;
rep&lt;br /&gt;
replace&lt;br /&gt;
resume&lt;br /&gt;
reverse&lt;br /&gt;
rrotate&lt;br /&gt;
rshift&lt;br /&gt;
running&lt;br /&gt;
searchers&lt;br /&gt;
searchpath&lt;br /&gt;
seek&lt;br /&gt;
sethook&lt;br /&gt;
setlocal&lt;br /&gt;
setlocale&lt;br /&gt;
setmetatable&lt;br /&gt;
setupvalue&lt;br /&gt;
setuservalue&lt;br /&gt;
setvbuf&lt;br /&gt;
sin&lt;br /&gt;
sinh&lt;br /&gt;
sort&lt;br /&gt;
sqrt&lt;br /&gt;
status&lt;br /&gt;
stderr&lt;br /&gt;
stdin&lt;br /&gt;
stdout&lt;br /&gt;
sub&lt;br /&gt;
tan&lt;br /&gt;
tanh&lt;br /&gt;
time&lt;br /&gt;
tmpfile&lt;br /&gt;
tmpname&lt;br /&gt;
traceback&lt;br /&gt;
type&lt;br /&gt;
unpack&lt;br /&gt;
upper&lt;br /&gt;
upvalueid&lt;br /&gt;
upvaluejoin&lt;br /&gt;
wrap&lt;br /&gt;
write&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
#Word Color=4, WholeWord=True, RightSide=False, MatchCase=True, InsideTag=False, RegEx=Falsebyte&lt;br /&gt;
__add&lt;br /&gt;
__call&lt;br /&gt;
__concat&lt;br /&gt;
__div&lt;br /&gt;
__eq&lt;br /&gt;
__index&lt;br /&gt;
__le&lt;br /&gt;
__len&lt;br /&gt;
__lt&lt;br /&gt;
__mod&lt;br /&gt;
__mul&lt;br /&gt;
__newindex&lt;br /&gt;
__pow&lt;br /&gt;
__sub&lt;br /&gt;
__unm&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E6%A7%8B%E6%96%87%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=962</id>
		<title>構文ファイル</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E6%A7%8B%E6%96%87%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=962"/>
		<updated>2013-02-23T13:34:57Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: +Lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mery で使用できる構文ファイルを集めたライブラリです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「編集モードの設定 &amp;gt; プロパティ」の下部にある「インポート」ボタンでインポートして使用します。構文ファイルライブラリはどなたでも自由に編集できますので、新しい言語やマニアックな言語の色分けに使えそうなものが出来上がったら投稿してみてくださいね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/bf.msy Brainf*ck] (MihailJP) &amp;lt;!-- 冗談半分で作ったシロモノです --&amp;gt;&lt;br /&gt;
*[[Delphi]] (kuro)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/d.msy D言語] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/erlang.msy Erlang] (MihailJP)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/fsharp.msy F#] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/go.msy Go] (MihailJP) ※Mery本体の仕様により、Raw文字列リテラルは色分けされません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/haskell.msy Haskell] (MihailJP)&lt;br /&gt;
*[[HTML5]] (ucky)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/markdown.msy Markdown] (MihailJP)&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/ocaml.msy OCaml] (MihailJP) ※Mery本体の仕様により、コメントネストが正しく表示されません&lt;br /&gt;
*[https://github.com/MihailJP/merydef/blob/master/nadesiko.msy なでしこ] (MihailJP) ※試供品。注意点は[https://github.com/MihailJP/merydef#%E3%81%AA%E3%81%A7%E3%81%97%E3%81%93-nadesikomsy]を参照のこと&lt;br /&gt;
*[[Lua]] (n)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=509</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=509"/>
		<updated>2012-10-13T18:14:40Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: /* 更新履歴 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#初回起動の場合、タグファイルの作成を待つ&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
== カスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| TAGS || &amp;quot;.merytags&amp;quot; || タグファイルの名前&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS || &amp;quot;ctags.exe&amp;quot; || ctags.exeの名前&lt;br /&gt;
&lt;br /&gt;
相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS_FLAGS || &amp;quot;--excmd=number --recurse --fields=+S&amp;quot; || ctagsに与える引数&lt;br /&gt;
&lt;br /&gt;
初期設定の意味は左から&lt;br /&gt;
* 位置を行番号で記憶 (タグジャンプに必要)&lt;br /&gt;
* フォルダを再帰的に処理&lt;br /&gt;
* 関数の引数を記憶&lt;br /&gt;
|-&lt;br /&gt;
| WHOLE_WORD || true || 単語の途中で補完する際の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
&lt;br /&gt;
falseにするとカーソルより左から補完します&lt;br /&gt;
|-&lt;br /&gt;
| CASE_INSENSITIVE || true || 単語の検索の挙動&lt;br /&gt;
&lt;br /&gt;
trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
&lt;br /&gt;
falseにすると区別します&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_TAGS_DIR || &amp;quot;.&amp;quot; || タグを作るフォルダ&lt;br /&gt;
&lt;br /&gt;
&amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIRM_CREATE_TAGS || true || タグファイルがない場合の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
&lt;br /&gt;
falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1～r2: 失念&lt;br /&gt;
* r3: 単独でctags呼び出し&lt;br /&gt;
* r4: ホットキー&lt;br /&gt;
* r5: C言語の関数で引数を表示、今開いてるファイル中の単語からも補完、文字の大小を区別しないオプション&lt;br /&gt;
* r6: 確認せずにctagsを起動するオプション&lt;br /&gt;
* r7: 補完候補の単語が1つだけのときうまく補完されないのを修正&lt;br /&gt;
&lt;br /&gt;
== ソース ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r7 2012-10-24&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の 日本語版ctags 5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var opts = CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;&lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, opts)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
      if (words.length === 1)&lt;br /&gt;
      {&lt;br /&gt;
        return words[0] === word ? [] : words&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var w = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== w)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = w&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var line = lines[i]&lt;br /&gt;
        var tab1 = line.indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = line.indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = line.indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = line.indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = line.substring(0, tab1)&lt;br /&gt;
        var filename = line.substring(tab1 + 1, tab2)&lt;br /&gt;
        var linenum = line.substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : line.substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, linenum, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=508</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=508"/>
		<updated>2012-10-13T18:09:32Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#初回起動の場合、タグファイルの作成を待つ&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
== カスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| TAGS || &amp;quot;.merytags&amp;quot; || タグファイルの名前&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS || &amp;quot;ctags.exe&amp;quot; || ctags.exeの名前&lt;br /&gt;
&lt;br /&gt;
相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS_FLAGS || &amp;quot;--excmd=number --recurse --fields=+S&amp;quot; || ctagsに与える引数&lt;br /&gt;
&lt;br /&gt;
初期設定の意味は左から&lt;br /&gt;
* 位置を行番号で記憶 (タグジャンプに必要)&lt;br /&gt;
* フォルダを再帰的に処理&lt;br /&gt;
* 関数の引数を記憶&lt;br /&gt;
|-&lt;br /&gt;
| WHOLE_WORD || true || 単語の途中で補完する際の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
&lt;br /&gt;
falseにするとカーソルより左から補完します&lt;br /&gt;
|-&lt;br /&gt;
| CASE_INSENSITIVE || true || 単語の検索の挙動&lt;br /&gt;
&lt;br /&gt;
trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
&lt;br /&gt;
falseにすると区別します&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_TAGS_DIR || &amp;quot;.&amp;quot; || タグを作るフォルダ&lt;br /&gt;
&lt;br /&gt;
&amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIRM_CREATE_TAGS || true || タグファイルがない場合の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
&lt;br /&gt;
falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1～r3: 失念&lt;br /&gt;
* r4: ホットキー追加&lt;br /&gt;
* r5: C言語の関数で引数を表示、今開いてるファイル中の単語からも補完、文字の大小を区別しないオプション&lt;br /&gt;
* r6: 確認せずにctagsを起動するオプション&lt;br /&gt;
* r7: 補完候補の単語が1つだけのときうまく補完されないのを修正&lt;br /&gt;
&lt;br /&gt;
== ソース ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r7 2012-10-24&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の 日本語版ctags 5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var opts = CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;&lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, opts)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
      if (words.length === 1)&lt;br /&gt;
      {&lt;br /&gt;
        return words[0] === word ? [] : words&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var w = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== w)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = w&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var line = lines[i]&lt;br /&gt;
        var tab1 = line.indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = line.indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = line.indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = line.indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = line.substring(0, tab1)&lt;br /&gt;
        var filename = line.substring(tab1 + 1, tab2)&lt;br /&gt;
        var linenum = line.substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : line.substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, linenum, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=507</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=507"/>
		<updated>2012-10-13T18:05:58Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#初回起動の場合、タグファイルの作成を待つ&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
== カスタマイズ ==&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| TAGS || &amp;quot;.merytags&amp;quot; || タグファイルの名前&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS || &amp;quot;ctags.exe&amp;quot; || ctags.exeの名前&lt;br /&gt;
&lt;br /&gt;
相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS_FLAGS || &amp;quot;--excmd=number --recurse --fields=+S&amp;quot; || ctagsに与える引数&lt;br /&gt;
&lt;br /&gt;
初期設定の意味は左から&lt;br /&gt;
* 位置を行番号で記憶 (タグジャンプに必要)&lt;br /&gt;
* フォルダを再帰的に処理&lt;br /&gt;
* 関数の引数を記憶&lt;br /&gt;
|-&lt;br /&gt;
| WHOLE_WORD || true || 単語の途中で補完する際の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
&lt;br /&gt;
falseにするとカーソルより左から補完します&lt;br /&gt;
|-&lt;br /&gt;
| CASE_INSENSITIVE || true || 単語の検索の挙動&lt;br /&gt;
&lt;br /&gt;
trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
&lt;br /&gt;
falseにすると区別します&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_TAGS_DIR || &amp;quot;.&amp;quot; || タグを作るフォルダ&lt;br /&gt;
&lt;br /&gt;
&amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIRM_CREATE_TAGS || true || タグファイルがない場合の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
&lt;br /&gt;
falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
* r1～r3: 失念&lt;br /&gt;
* r4: ホットキー追加&lt;br /&gt;
* r5: C言語の関数で引数を表示、今開いてるファイル中の単語からも補完、文字の大小を区別しないオプション&lt;br /&gt;
* r6: 確認せずにctagsを起動するオプション&lt;br /&gt;
* r7: 補完候補の単語が1つだけのときうまく補完されないのを修正&lt;br /&gt;
&lt;br /&gt;
== ソース ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r7 2012-10-24&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の 日本語版ctags 5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var opts = CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;&lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, opts)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
      if (words.length === 1)&lt;br /&gt;
      {&lt;br /&gt;
        return words[0] === word ? [] : words&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var w = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== w)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = w&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var line = lines[i]&lt;br /&gt;
        var tab1 = line.indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = line.indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = line.indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = line.indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = line.substring(0, tab1)&lt;br /&gt;
        var filename = line.substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = line.substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : line.substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=506</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=506"/>
		<updated>2012-10-13T17:55:08Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: r7に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
&lt;br /&gt;
*使い方&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#初回起動の場合、タグファイルの作成を待つ&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
*カスタマイズ&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;width: 80%; margin-left: 2em; border-collapse: collapse&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| TAGS || &amp;quot;.merytags&amp;quot; || タグファイルの名前&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS || &amp;quot;ctags.exe&amp;quot; || ctags.exeの名前&lt;br /&gt;
&lt;br /&gt;
相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS_FLAGS || &amp;quot;--excmd=number --recurse --fields=+S&amp;quot; || ctagsに与える引数&lt;br /&gt;
&lt;br /&gt;
初期設定の意味は左から&lt;br /&gt;
* 位置を行番号で記憶 (タグジャンプに必要)&lt;br /&gt;
* フォルダを再帰的に処理&lt;br /&gt;
* 関数の引数を記憶&lt;br /&gt;
|-&lt;br /&gt;
| WHOLE_WORD || true || 単語の途中で補完する際の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
&lt;br /&gt;
falseにするとカーソルより左から補完します&lt;br /&gt;
|-&lt;br /&gt;
| CASE_INSENSITIVE || true || 単語の検索の挙動&lt;br /&gt;
&lt;br /&gt;
trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
&lt;br /&gt;
falseにすると区別します&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_TAGS_DIR || &amp;quot;.&amp;quot; || タグを作るフォルダ&lt;br /&gt;
&lt;br /&gt;
&amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIRM_CREATE_TAGS || true || タグファイルがない場合の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
&lt;br /&gt;
falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r7 2012-10-24&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の 日本語版ctags 5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var opts = CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;&lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, opts)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
      if (words.length === 1)&lt;br /&gt;
      {&lt;br /&gt;
        return words[0] === word ? [] : words&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var w = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== w)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = w&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var line = lines[i]&lt;br /&gt;
        var tab1 = line.indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = line.indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = line.indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = line.indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = line.substring(0, tab1)&lt;br /&gt;
        var filename = line.substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = line.substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : line.substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%AA%E3%83%95%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88&amp;diff=411</id>
		<title>オフインデント</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%AA%E3%83%95%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88&amp;diff=411"/>
		<updated>2012-09-04T02:03:21Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「 &amp;lt;pre&amp;gt; 無いより増しかな…： オフインデントのマクロ  「自動インデントを有効にする」にしているとき、 Shift キーを押しな...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
無いより増しかな…： オフインデントのマクロ&lt;br /&gt;
&lt;br /&gt;
「自動インデントを有効にする」にしているとき、&lt;br /&gt;
Shift キーを押しながら Enter キーを押す（Shift+Enter）と、&lt;br /&gt;
インデントをしないで次の行頭にカーソルが移動するマクロ。&lt;br /&gt;
&lt;br /&gt;
オフインデント(Shift+Enter).js&lt;br /&gt;
&lt;br /&gt;
下の内容を、上の名前のファイルにして、My Macros に置く。&lt;br /&gt;
そこから Mery で開いて、マクロ - これを選択、&lt;br /&gt;
ツール - オプション - キーボード の マクロ で Shift+Enter に割り当て。&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
([http://www.haijin-boys.com/index.php?fuseaction=weblog.entryInquire&amp;amp;entry_id=5041fb10749ab2.98527205 ブログのコメント] より転載)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
// オフインデント(Shift+Enter)&lt;br /&gt;
// revised  inuuik  2012-09-02&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection;&lt;br /&gt;
  Redraw = false;&lt;br /&gt;
  s.NewLine(1);&lt;br /&gt;
  s.StartOfLine(true, mePosLogical);&lt;br /&gt;
  if (!s.IsEmpty) {&lt;br /&gt;
    s.Text = &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  Redraw = true;&lt;br /&gt;
}&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=410</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=410"/>
		<updated>2012-09-04T02:03:04Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ここは Mery で使用できるマクロを集めたライブラリです&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat)&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat)&lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント]] (inuuik)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E9%9D%9E%E9%81%B8%E6%8A%9E%E7%8A%B6%E6%85%8B%E3%81%A7%E3%82%82%E9%80%86%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88&amp;diff=409</id>
		<title>非選択状態でも逆インデント</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E9%9D%9E%E9%81%B8%E6%8A%9E%E7%8A%B6%E6%85%8B%E3%81%A7%E3%82%82%E9%80%86%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88&amp;diff=409"/>
		<updated>2012-09-04T02:01:35Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「&amp;lt;pre&amp;gt; 最終書き込み 2012/03/30 の「ちょっとクロさん！！！！！！！！！！！！！(要望) 」 でユーケーさんが求めていた非選択...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
最終書き込み 2012/03/30 の「ちょっとクロさん！！！！！！！！！！！！！(要望) 」&lt;br /&gt;
でユーケーさんが求めていた非選択状態での逆インデント。&lt;br /&gt;
選択状態では標準機能の逆インデントを実行するので、Shift + TAB に割り当てでき&lt;br /&gt;
ます。カーソルは実行時の文字位置(x位置ではなく)を維持します。&lt;br /&gt;
&lt;br /&gt;
#title=&amp;quot;非選択状態でも逆インデント&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
([http://www.haijin-boys.com/index.php?fuseaction=weblog.entryInquire&amp;amp;entry_id=5041fb10749ab2.98527205 ブログのコメント] より転載)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(function(){&lt;br /&gt;
  Redraw = false;&lt;br /&gt;
  with (document.selection){&lt;br /&gt;
    var flg = isEmpty;&lt;br /&gt;
    if(flg){&lt;br /&gt;
      var curPointX = GetActivePointX(mePosLogical);&lt;br /&gt;
      var curPointY = GetActivePointY(mePosLogical);&lt;br /&gt;
      EndOfLine(mePosLogical);&lt;br /&gt;
      var endPointX = GetActivePointX(mePosLogical);&lt;br /&gt;
      SelectLine();&lt;br /&gt;
    }&lt;br /&gt;
    UnIndent();&lt;br /&gt;
    if(flg){&lt;br /&gt;
      var topchar = Text.charAt(0);&lt;br /&gt;
      Collapse(meCollapseStart);&lt;br /&gt;
      EndOfLine(mePosLogical);&lt;br /&gt;
      curPointX -= (endPointX - GetActivePointX(mePosLogical));&lt;br /&gt;
      SetActivePoint(mePosLogical, curPointX, curPointY, false);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  Redraw = true;&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%AA%E3%83%95%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88(Shift%2BEnter)&amp;diff=408</id>
		<title>オフインデント(Shift+Enter)</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%AA%E3%83%95%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88(Shift%2BEnter)&amp;diff=408"/>
		<updated>2012-09-04T02:00:32Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: ページの作成：「 &amp;lt;pre&amp;gt; 無いより増しかな…： オフインデントのマクロ  「自動インデントを有効にする」にしているとき、 Shift キーを押しな...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
無いより増しかな…： オフインデントのマクロ&lt;br /&gt;
&lt;br /&gt;
「自動インデントを有効にする」にしているとき、&lt;br /&gt;
Shift キーを押しながら Enter キーを押す（Shift+Enter）と、&lt;br /&gt;
インデントをしないで次の行頭にカーソルが移動するマクロ。&lt;br /&gt;
&lt;br /&gt;
オフインデント(Shift+Enter).js&lt;br /&gt;
&lt;br /&gt;
下の内容を、上の名前のファイルにして、My Macros に置く。&lt;br /&gt;
そこから Mery で開いて、マクロ - これを選択、&lt;br /&gt;
ツール - オプション - キーボード の マクロ で Shift+Enter に割り当て。&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
([http://www.haijin-boys.com/index.php?fuseaction=weblog.entryInquire&amp;amp;entry_id=5041fb10749ab2.98527205 ブログのコメント] より転載)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
// オフインデント(Shift+Enter)&lt;br /&gt;
// revised  inuuik  2012-09-02&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection;&lt;br /&gt;
  Redraw = false;&lt;br /&gt;
  s.NewLine(1);&lt;br /&gt;
  s.StartOfLine(true, mePosLogical);&lt;br /&gt;
  if (!s.IsEmpty) {&lt;br /&gt;
    s.Text = &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  Redraw = true;&lt;br /&gt;
}&lt;br /&gt;
// - ------------------------ --------------------------------------------------&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=407</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=407"/>
		<updated>2012-09-04T01:53:50Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: リンク追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ここは Mery で使用できるマクロを集めたライブラリです&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat)&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat)&lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント(Shift+Enter)]] (inuuik)&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=404</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=404"/>
		<updated>2012-08-23T15:01:21Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
&lt;br /&gt;
*使い方&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#初回起動の場合、タグファイルの作成を待つ&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
*カスタマイズ&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! 名前 !! 初期設定 !! 効果&lt;br /&gt;
|-&lt;br /&gt;
| TAGS || &amp;quot;.merytags&amp;quot; || タグファイルの名前&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS || &amp;quot;ctags.exe&amp;quot; || ctags.exeの名前&lt;br /&gt;
&lt;br /&gt;
相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
|-&lt;br /&gt;
| CTAGS_FLAGS || &amp;quot;--excmd=number --recurse --fields=+S&amp;quot; || ctagsに与える引数&lt;br /&gt;
&lt;br /&gt;
初期設定の意味は左から&lt;br /&gt;
* 位置を行番号で記憶 (タグジャンプに必要)&lt;br /&gt;
* フォルダを再帰的に処理&lt;br /&gt;
* 関数の引数を記憶&lt;br /&gt;
|-&lt;br /&gt;
| WHOLE_WORD || true || 単語の途中で補完する際の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
&lt;br /&gt;
falseにするとカーソルより左から補完します&lt;br /&gt;
|-&lt;br /&gt;
| CASE_INSENSITIVE || true || 単語の検索の挙動&lt;br /&gt;
&lt;br /&gt;
trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
&lt;br /&gt;
falseにすると区別します&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_TAGS_DIR || &amp;quot;.&amp;quot; || タグを作るフォルダ&lt;br /&gt;
&lt;br /&gt;
&amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
|-&lt;br /&gt;
| CONFIRM_CREATE_TAGS || false || タグファイルがない場合の挙動&lt;br /&gt;
&lt;br /&gt;
trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
&lt;br /&gt;
falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r6&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の ctags ctags5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=403</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=403"/>
		<updated>2012-08-23T13:57:23Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
&lt;br /&gt;
*初回起動&lt;br /&gt;
&lt;br /&gt;
#指定したディレクトリ以下のソースファイル全てが再帰的にタグファイルに登録される&lt;br /&gt;
#「タグファイルの作成が完了しました」とステータスバーに出るまで待つ&lt;br /&gt;
&lt;br /&gt;
*タグファイルの作成後&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
*カスタマイズ&lt;br /&gt;
&lt;br /&gt;
変数を変えることで、挙動がいくらかカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r6&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の ctags ctags5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=402</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=402"/>
		<updated>2012-08-23T13:53:37Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: r6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
&lt;br /&gt;
*初回起動&lt;br /&gt;
&lt;br /&gt;
#タグファイルが生成されていないので、どこに生成するか尋ねられる&lt;br /&gt;
#指定したディレクトリ以下のソースファイル全てが再帰的にタグファイルに登録される&lt;br /&gt;
#「タグファイルの作成が完了しました」とステータスバーに出るまで待つ&lt;br /&gt;
&lt;br /&gt;
*タグファイルの作成後&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r6&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
// http://hp.vector.co.jp/authors/VA025040/ctags/ の ctags ctags5.8J2 で動作確認しています&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
TAGS = &amp;quot;.merytags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合はmery本体のあるディレクトリのものを使います&lt;br /&gt;
// &amp;quot;c:\\bin\\ctags.exe&amp;quot; のように絶対パスも指定できます&lt;br /&gt;
CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
// タグを作るフォルダ&lt;br /&gt;
// &amp;quot;.&amp;quot; にすると、編集中のファイルのあるフォルダでタグを作ります&lt;br /&gt;
// &amp;quot;..&amp;quot; などにすると、編集中のファイルの一つ上のフォルダからタグを作ります&lt;br /&gt;
DEFAULT_TAGS_DIR = &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// タグファイルがない場合の挙動&lt;br /&gt;
// trueにするとタグを作成するフォルダを尋ねます&lt;br /&gt;
// falseにするとフォルダを尋ねずに無言で作成を始めます&lt;br /&gt;
CONFIRM_CREATE_TAGS = false&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(&#039;&amp;quot;&#039; + ctags + &#039;&amp;quot; -o &#039; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return CTAGS&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return ctags&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = FileSystem.BuildPath(document.Path, DEFAULT_TAGS_DIR)&lt;br /&gt;
    &lt;br /&gt;
    if (CONFIRM_CREATE_TAGS)&lt;br /&gt;
    {&lt;br /&gt;
      dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, dir)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=401</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=401"/>
		<updated>2012-08-22T05:55:04Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
&lt;br /&gt;
*初回起動&lt;br /&gt;
&lt;br /&gt;
#タグファイルが生成されていないので、どこに生成するか尋ねられる&lt;br /&gt;
#指定したディレクトリ以下のソースファイル全てが再帰的にタグファイルに登録される&lt;br /&gt;
#「タグファイルの作成が完了しました」とステータスバーに出るまで待つ&lt;br /&gt;
&lt;br /&gt;
*タグファイルの作成後&lt;br /&gt;
&lt;br /&gt;
#補完したい単語にカーソルを置き、マクロを起動する&lt;br /&gt;
#すでに単語が完全な場合、メニューを選ぶとその定義にジャンプする&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r5&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
var TAGS = &amp;quot;tags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合は以下のディレクトリから順に探します&lt;br /&gt;
//   ・mery本体と同じディレクトリ&lt;br /&gt;
var CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
var CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
var WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
var CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(ctags + &amp;quot; -o &amp;quot; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + CTAGS + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + ctags + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, document.Path)&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=400</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=400"/>
		<updated>2012-08-01T06:42:53Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
&lt;br /&gt;
*初回起動&lt;br /&gt;
&lt;br /&gt;
#タグファイルが生成されていないので、どこに生成するか尋ねられる&lt;br /&gt;
#指定したディレクトリ以下のソースファイル全てが再帰的にタグファイルに登録される&lt;br /&gt;
#「タグファイルの作成が完了しました」とステータスバーに出るまで待つ&lt;br /&gt;
&lt;br /&gt;
*タグファイルの作成後&lt;br /&gt;
&lt;br /&gt;
#補完したい単語の右にカーソルを置き、マクロを起動する&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r5&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
var TAGS = &amp;quot;tags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合は以下のディレクトリから順に探します&lt;br /&gt;
//   ・mery本体と同じディレクトリ&lt;br /&gt;
var CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
var CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
var WHOLE_WORD = true&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
var CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(ctags + &amp;quot; -o &amp;quot; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + CTAGS + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + ctags + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, document.Path)&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=399</id>
		<title>タグファイルから補完</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&amp;diff=399"/>
		<updated>2012-08-01T06:40:43Z</updated>

		<summary type="html">&lt;p&gt;Snipsnipsnip: r5に更新&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ctagsの生成したtagsファイルから検索して単語のメニューを出します。&lt;br /&gt;
&lt;br /&gt;
項目を選ぶとその単語が挿入されます。&lt;br /&gt;
&lt;br /&gt;
単語が完全な形の場合、タグジャンプを行います。&lt;br /&gt;
&lt;br /&gt;
kazyさんの[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]]とあわせてお使いください。(単独で使ってもタグジャンプ機能はあります)&lt;br /&gt;
&lt;br /&gt;
*インストール&lt;br /&gt;
&lt;br /&gt;
#下のスクリプトをコピーして、MeryのMy Macroフォルダなどに保存&lt;br /&gt;
#マクロを登録し、Ctrl+→やCtrl+Shift+SpaceやCtrl+Qキーなどにお好みで設定する&lt;br /&gt;
#Mery.exeのあるフォルダに[[http://hp.vector.co.jp/authors/VA025040/ctags/ ctags.exe]]を置く&lt;br /&gt;
&lt;br /&gt;
*初回起動&lt;br /&gt;
&lt;br /&gt;
#タグファイルが生成されていないので、どこに生成するか尋ねられる&lt;br /&gt;
#指定したディレクトリ以下のソースファイル全てが再帰的にタグファイルに登録される&lt;br /&gt;
#「タグファイルの作成が完了しました」とステータスバーに出るまで待つ&lt;br /&gt;
&lt;br /&gt;
*タグファイルの作成後&lt;br /&gt;
&lt;br /&gt;
#補完したい単語の右にカーソルを置き、マクロを起動する&lt;br /&gt;
#メニューの項目を選ぶと、その単語が挿入される&lt;br /&gt;
#メニューの最後の「タグファイルを更新する」を選ぶと、タグファイルを作り直すことができる&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// タグファイルから補完.js r5&lt;br /&gt;
// http://www.haijin-boys.com/wiki/%E3%82%BF%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E8%A3%9C%E5%AE%8C&lt;br /&gt;
&lt;br /&gt;
/** 設定 **/&lt;br /&gt;
&lt;br /&gt;
// タグファイルの名前&lt;br /&gt;
var TAGS = &amp;quot;tags&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctags.exeの名前&lt;br /&gt;
// 相対パスの場合は以下のディレクトリから順に探します&lt;br /&gt;
//   ・mery本体と同じディレクトリ&lt;br /&gt;
var CTAGS = &amp;quot;ctags.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ctagsに与える引数 (初期設定：位置を行番号で記憶(必須)、フォルダを再帰的に処理、関数の引数を記憶)&lt;br /&gt;
var CTAGS_FLAGS = &amp;quot;--excmd=number --recurse --fields=+S&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// 単語の途中で補完する際の挙動&lt;br /&gt;
// trueにするとカーソルの置かれた単語全体から補完&lt;br /&gt;
// falseにするとカーソルより左から補完します&lt;br /&gt;
var WHOLE_WORD = false&lt;br /&gt;
&lt;br /&gt;
// 単語の検索の挙動&lt;br /&gt;
// trueにすると検索時大文字と小文字を区別しません&lt;br /&gt;
// falseにすると区別します&lt;br /&gt;
var CASE_INSENSITIVE = true&lt;br /&gt;
&lt;br /&gt;
/** 本体 **/&lt;br /&gt;
&lt;br /&gt;
var FileSystem = new ActiveXObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
var Shell = new ActiveXObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
function main()&lt;br /&gt;
{&lt;br /&gt;
  var ctags = makeCtags()&lt;br /&gt;
  var tags = makeTags(ctags)&lt;br /&gt;
  var query = getQueryWord()&lt;br /&gt;
  var result = tags.lookup(query)&lt;br /&gt;
  var word = chooseWord(result)&lt;br /&gt;
  &lt;br /&gt;
  if (&amp;quot;string&amp;quot; === typeof word)&lt;br /&gt;
  {&lt;br /&gt;
    writeWord(word)&lt;br /&gt;
  }&lt;br /&gt;
  else if (word === false)&lt;br /&gt;
  {&lt;br /&gt;
    tags.update()&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    jumpToDefinition(word)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeCtags()&lt;br /&gt;
{&lt;br /&gt;
  return { run: run }&lt;br /&gt;
&lt;br /&gt;
  function run(dir)&lt;br /&gt;
  {&lt;br /&gt;
    var ctags = findCtags()&lt;br /&gt;
    &lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      Shell.CurrentDirectory = dir&lt;br /&gt;
      window.Status = &#039;タグファイルを作成しています お待ちください&#039;&lt;br /&gt;
      Shell.Run(ctags + &amp;quot; -o &amp;quot; + TAGS + &amp;quot; &amp;quot; + CTAGS_FLAGS, 0, true)&lt;br /&gt;
    }&lt;br /&gt;
    catch (e)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    window.Status = &#039;タグファイルを作成しました&#039;&lt;br /&gt;
    return FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findCtags()&lt;br /&gt;
  {&lt;br /&gt;
    if (FileSystem.FileExists(CTAGS))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + CTAGS + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    var dir = FileSystem.GetParentFolderName(editor.FullName)&lt;br /&gt;
    var ctags = FileSystem.BuildPath(dir, CTAGS)&lt;br /&gt;
    &lt;br /&gt;
    if (FileSystem.FileExists(ctags))&lt;br /&gt;
    {&lt;br /&gt;
      return &#039;&amp;quot;&#039; + ctags + &#039;&amp;quot;&#039;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    throw new Error(&amp;quot;ctags.exeが見つかりませんでした\nMery本体のディレクトリに置くか、絶対パスを設定してください&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function makeTags(ctags)&lt;br /&gt;
{&lt;br /&gt;
  var fullname = findTagfile()&lt;br /&gt;
  var text = loadTagfile()&lt;br /&gt;
  &lt;br /&gt;
  return { lookup: lookup, update: update }&lt;br /&gt;
  &lt;br /&gt;
  function getPath()&lt;br /&gt;
  {&lt;br /&gt;
    return FileSystem.GetParentFolderName(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function lookup(word)&lt;br /&gt;
  {&lt;br /&gt;
    if (/^\s*$/.test(word)) { return }&lt;br /&gt;
    &lt;br /&gt;
    word = reEscape(word)&lt;br /&gt;
    &lt;br /&gt;
    var re = new RegExp(&amp;quot;^&amp;quot; + word + &amp;quot;.*$&amp;quot;, CASE_INSENSITIVE ? &amp;quot;igm&amp;quot; : &amp;quot;gm&amp;quot;)&lt;br /&gt;
    var lines = text.match(re)&lt;br /&gt;
    &lt;br /&gt;
    if (!lines) { return [] }&lt;br /&gt;
    &lt;br /&gt;
    return calcWords().concat(calcDefinitions(word))&lt;br /&gt;
    &lt;br /&gt;
    function calcWords()&lt;br /&gt;
    {&lt;br /&gt;
      if (lines.length === 1) { return [] }&lt;br /&gt;
      &lt;br /&gt;
      var words = new Array(lines.length)&lt;br /&gt;
      &lt;br /&gt;
      words[0] = lines[0].substring(0, lines[0].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
      &lt;br /&gt;
      var n = 0&lt;br /&gt;
      for (var i = 1; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var word = lines[i].substring(0, lines[i].indexOf(&amp;quot;\t&amp;quot;))&lt;br /&gt;
        &lt;br /&gt;
        if (words[n] !== word)&lt;br /&gt;
        {&lt;br /&gt;
          n++&lt;br /&gt;
          words[n] = word&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      words.length = n + 1&lt;br /&gt;
&lt;br /&gt;
      words.sort(function(a, b)&lt;br /&gt;
      {&lt;br /&gt;
        return a.localeCompare(b)&lt;br /&gt;
      })&lt;br /&gt;
      &lt;br /&gt;
      return words&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function calcDefinitions(word)&lt;br /&gt;
    {&lt;br /&gt;
      var defs = new Array(lines.length)&lt;br /&gt;
      var n = 0&lt;br /&gt;
      &lt;br /&gt;
      for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        var tab1 = lines[i].indexOf(&amp;quot;\t&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if (tab1 !== word.length) { continue }&lt;br /&gt;
        &lt;br /&gt;
        var tab2 = lines[i].indexOf(&amp;quot;\t&amp;quot;, tab1 + 1)&lt;br /&gt;
        var endnum = lines[i].indexOf(&amp;quot;;&amp;quot;, tab2 + 1)&lt;br /&gt;
        var sig = lines[i].indexOf(&amp;quot;signature:&amp;quot;, endnum + 1)&lt;br /&gt;
        &lt;br /&gt;
        var name = lines[i].substring(0, tab1)&lt;br /&gt;
        var filename = lines[i].substring(tab1 + 1, tab2)&lt;br /&gt;
        var line = lines[i].substring(tab2 + 1, endnum)&lt;br /&gt;
        var signature = sig &amp;lt; 0 ? &amp;quot;&amp;quot; : lines[i].substring(sig + &amp;quot;signature:&amp;quot;.length)&lt;br /&gt;
        &lt;br /&gt;
        var fullname = FileSystem.BuildPath(getPath(), filename)&lt;br /&gt;
        &lt;br /&gt;
        defs[n] = [fullname, line, filename, name + signature]&lt;br /&gt;
        defs[n].toString = joinme&lt;br /&gt;
        n++&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      defs.length = n&lt;br /&gt;
      &lt;br /&gt;
      return defs&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function joinme()&lt;br /&gt;
    {&lt;br /&gt;
      return this[3] + &amp;quot; (&amp;quot; + this[2] + &amp;quot; : &amp;quot; + this[1] + &amp;quot;)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function reEscape(w)&lt;br /&gt;
  {&lt;br /&gt;
    return w.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, &amp;quot;\\$&amp;amp;&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function loadTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    if (!fullname)&lt;br /&gt;
    {&lt;br /&gt;
      fullname = makeTagfile()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return slurp(fullname)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function findTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = document.Path&lt;br /&gt;
    &lt;br /&gt;
    while (FileSystem.FolderExists(dir))&lt;br /&gt;
    {&lt;br /&gt;
      var file = FileSystem.BuildPath(dir, TAGS)&lt;br /&gt;
      if (FileSystem.FileExists(file)) { return file }&lt;br /&gt;
      dir = FileSystem.GetParentFolderName(dir)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function makeTagfile()&lt;br /&gt;
  {&lt;br /&gt;
    var dir = window.Prompt(&amp;quot;タグファイル作成フォルダ&amp;quot;, document.Path)&lt;br /&gt;
    &lt;br /&gt;
    if (!dir)&lt;br /&gt;
    {&lt;br /&gt;
      window.Quit()&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    return ctags.run(dir)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function update()&lt;br /&gt;
  {&lt;br /&gt;
    return ctags.run(getPath())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function slurp(filename)&lt;br /&gt;
  {&lt;br /&gt;
    var f = FileSystem.OpenTextFile(filename)&lt;br /&gt;
    var text = f.ReadAll()&lt;br /&gt;
    f.Close()&lt;br /&gt;
    return text&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getQueryWord()&lt;br /&gt;
{&lt;br /&gt;
  var s = document.selection&lt;br /&gt;
  &lt;br /&gt;
  if (!s.IsEmpty) { return s.Text }&lt;br /&gt;
  &lt;br /&gt;
  if (WHOLE_WORD)&lt;br /&gt;
  {&lt;br /&gt;
    s.SelectWord()&lt;br /&gt;
    &lt;br /&gt;
    // hoge|(); → hogeFuga|(); のように補完 &lt;br /&gt;
    if (s.Text.length == 1 &amp;amp;&amp;amp; !/\w/.test(s.Text))&lt;br /&gt;
    {&lt;br /&gt;
      s.Collapse(meCollapseStart)&lt;br /&gt;
      s.WordLeft(true)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    s.WordLeft(true)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (/\A\s+\z/.test(s.Text))&lt;br /&gt;
  {&lt;br /&gt;
    s.Collapse(meCollapseEnd)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return s.Text&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function chooseWord(words)&lt;br /&gt;
{&lt;br /&gt;
  if (words &amp;amp;&amp;amp; words.length === 1 &amp;amp;&amp;amp; typeof words[0] === &amp;quot;string&amp;quot;)&lt;br /&gt;
  {&lt;br /&gt;
    return words[0]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  var menu = makeMenu()&lt;br /&gt;
  var i = menu.Track(0)&lt;br /&gt;
  &lt;br /&gt;
  return i === -1 ? false : words &amp;amp;&amp;amp; words[i - 1]&lt;br /&gt;
  &lt;br /&gt;
  function makeMenu()&lt;br /&gt;
  {&lt;br /&gt;
    var menu = window.CreatePopupMenu()&lt;br /&gt;
    initMenu(menu)&lt;br /&gt;
    menu.Add(&amp;quot;タグファイルを更新する&amp;quot;, -1)&lt;br /&gt;
    return menu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function initMenu(menu)&lt;br /&gt;
  {&lt;br /&gt;
    if (!words || words.length == 0) { return }&lt;br /&gt;
    &lt;br /&gt;
    var n = 0&lt;br /&gt;
    function addHotkey(word)&lt;br /&gt;
    {&lt;br /&gt;
      if (n &amp;gt; 34) { return word }&lt;br /&gt;
      n++&lt;br /&gt;
      return &amp;quot;&amp;amp;&amp;quot; + n.toString(36) + &amp;quot;. &amp;quot; + word&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (var i = 0; i &amp;lt; words.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
      menu.Add(addHotkey(words[i]), i + 1)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menu.Add(undefined, 0, meMenuSeparator)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function jumpToDefinition(def)&lt;br /&gt;
{&lt;br /&gt;
  if (!def) { return }&lt;br /&gt;
  window.Status = def + &amp;quot;にジャンプします&amp;quot;&lt;br /&gt;
  var file = def[0]&lt;br /&gt;
  var line = def[1]&lt;br /&gt;
  &lt;br /&gt;
  editor.OpenFile(file, 0, meOpenAllowNewWindow)&lt;br /&gt;
  editor.ActiveDocument.selection.SetActivePoint(mePosLogical, 1, line, false)&lt;br /&gt;
  editor.ActiveDocument.Activate()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeWord(word)&lt;br /&gt;
{&lt;br /&gt;
  if (word)&lt;br /&gt;
  {&lt;br /&gt;
    document.selection.Text = word&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Snipsnipsnip</name></author>
	</entry>
</feed>