   return new RegExp(re, regexp_option)
 
 #
-# Remove trailing ``-->(...)''
+# Remove trailing ``-->(...)'' from STRING.
 #
 removeTrailer = (string) ->
   string.replace(/(．)? *--(>|&gt;)\(.*\) */, '')
 
-getIndentLevel = (string) ->
+
+# Get the minimum indent level of LINES.
+# LINES has multiple lines separated by "\n".
+#
+# For example, if LINES has these three lines:
+#
+# |    first line
+# |      second line
+# |  third line
+#
+# this function returns the minimum indent level as 2.
+# calculated from the third line.
+#
+getIndentLevel = (lines) ->
   indent = 9999
-  for line in string.split("\n")
+  for line in lines.split("\n")
     match = /^ */.exec(line)
     if match && match[0].length < indent
       indent = match[0].length
   return indent
 
-chopIndentLevel = (string, level) ->
-  return string if level == 0
+# Decrease indents of LINES by LEVEL.
+# LINES has multiple lines separated by "\n".
+#
+# For example, if you call this function with LEVEL is 2 and LINES has
+# these three lines:
+#
+# |    first line
+# |      second line
+# |  third line
+#
+# this function returns:
+#
+# |  first line
+# |    second line
+# |third line
+#
+chopIndentLevel = (lines, level) ->
+  return lines if level == 0
   space = new RegExp("^#{' '.repeat(level)}")
   result = ''
-  for line in string.split("\n")
+  for line in lines.split("\n")
     result += line.replace(space, '') + "\n"
   return result
 
-chopIndent = (string) ->
-  chopIndentLevel(string, getIndentLevel(string))
+# Decrease indents of LINES to zero.
+#
+chopIndent = (lines) ->
+  chopIndentLevel(lines, getIndentLevel(lines))
+
+# Find words listed in KEYWORDS by scanning the LINES.
+#
+# If LINES has a string enumerated in KEYWORDS the sting will
+# be counted up as a candidate.
+#
+# For example,
+#
+# LINES:
+# | nomlab/foo is great, but nomlab/bar is not.
+# | blah blah...
+#
+# KEYWORDS:
+#   ["nomlab/foo", "nomlab/bar", "nomlab/baz"]
+#
+# returns:
+#   ["nomlab/foo", "nomlab/bar"]
+#
+# FIXME: this function breaks original KEYWORDS
+#
+findKeywords = (lines, keywords) ->
+  regexp = array_to_regexp(keywords, "g")
+  repos = lines.match(regexp)
+  keywords = repos.filter((x, i, self) ->
+    self.indexOf(x) == i
+  )
+  keywords
+
+# Extract lines from line number FST to LST.
+#
+extractLines = (lines, fst, lst) ->
+    lines.split("\n")[fst-1 .. lst-1].join("\n")
 
 # Open new github issue draft
 #   repos: yoshinari-nomura/sandbox

  repos = []
  for r in res.responseJSON
    repos.push (if full then r.full_name else r.name)
  # alert "REPOS:" + repos.join("\n")
  return repos

# Get User's Github *public* repositories in ORGANIZATION
# https://developer.github.com/v3/repos/#list-organization-repositories
# JSONP should be async
getGithubPublicRepositoriesJSONP = (organization, full, callback) ->
  res = $.ajax
    url: "https://api.github.com/orgs/#{organization}/repos"

                       <td>#{minute.title || ""}</td>\
                       <td>#{minute.dtstart || ""}</td>\
                       <td>#{minute.location || ""}</td>\
                       <td>#{minute.author?.name || ""}</td>\
                       <td><a href='/minutes/#{minute.id}'>Show</a></td>\
                       <td><a href='/minutes/#{minute.id}/edit'>Edit</a></td>\
                       <td><a href='/minutes/#{minute.id}' data-method='delete' rel='nofollow' data-confirm='Are you sure?'>Destroy</a></td>\
