src/Pure/Tools/keywords.scala
author wenzelm
Mon, 24 Jun 2013 23:33:14 +0200
changeset 52439 4cf3f6153eb8
child 52442 d3c5195b7399
permissions -rw-r--r--
improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first; tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52439
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/keywords.scala
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     3
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     4
Generate keyword files for Emacs Proof General.
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     5
*/
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     6
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     7
package isabelle
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     8
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
     9
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    10
import scala.collection.mutable
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    11
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    12
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    13
object Keywords
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    14
{
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    15
  /* keywords */
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    16
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    17
  private val convert_kinds = Map(
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    18
    "thy_begin" -> "theory-begin",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    19
    "thy_end" -> "theory-end",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    20
    "thy_heading1" -> "theory-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    21
    "thy_heading2" -> "theory-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    22
    "thy_heading3" -> "theory-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    23
    "thy_heading4" -> "theory-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    24
    "thy_load" -> "theory-decl",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    25
    "thy_decl" -> "theory-decl",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    26
    "thy_script" -> "theory-script",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    27
    "thy_goal" -> "theory-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    28
    "qed_block" -> "qed-block",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    29
    "qed_global" -> "qed-global",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    30
    "prf_heading2" -> "proof-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    31
    "prf_heading3" -> "proof-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    32
    "prf_heading4" -> "proof-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    33
    "prf_goal" -> "proof-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    34
    "prf_block" -> "proof-block",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    35
    "prf_open" -> "proof-open",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    36
    "prf_close" -> "proof-close",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    37
    "prf_chain" -> "proof-chain",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    38
    "prf_decl" -> "proof-decl",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    39
    "prf_asm" -> "proof-asm",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    40
    "prf_asm_goal" -> "proof-asm-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    41
    "prf_script" -> "proof-script"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    42
  ).withDefault((s: String) => s)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    43
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    44
  private val emacs_kinds = List(
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    45
    "major",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    46
    "minor",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    47
    "control",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    48
    "diag",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    49
    "theory-begin",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    50
    "theory-switch",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    51
    "theory-end",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    52
    "theory-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    53
    "theory-decl",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    54
    "theory-script",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    55
    "theory-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    56
    "qed",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    57
    "qed-block",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    58
    "qed-global",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    59
    "proof-heading",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    60
    "proof-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    61
    "proof-block",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    62
    "proof-open",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    63
    "proof-close",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    64
    "proof-chain",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    65
    "proof-decl",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    66
    "proof-asm",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    67
    "proof-asm-goal",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    68
    "proof-script")
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    69
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    70
  def keywords(
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    71
    options: Options,
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    72
    name: String = "",
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    73
    dirs: List[Path] = Nil,
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    74
    sessions: List[String] = Nil)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    75
  {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    76
    val deps = Build.session_dependencies(options, false, dirs, sessions).deps
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    77
    val keywords =
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    78
    {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    79
      var keywords = Map.empty[String, String]
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    80
      for {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    81
        (_, dep) <- deps
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    82
        (name, kind_spec, _) <- dep.keywords
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    83
        kind = kind_spec match { case Some(((kind, _), _)) => kind case None => "minor" }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    84
        k = convert_kinds(kind)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    85
      } {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    86
        keywords.get(name) match {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    87
          case Some(k1) if k1 != k && k1 != "minor" && k != "minor" =>
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    88
            error("Inconsistent declaration of keyword " + quote(name) + ": " + k1 + " vs " + k)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    89
          case _ =>
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    90
        }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    91
        keywords += (name -> k)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    92
      }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    93
      keywords
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    94
    }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    95
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    96
    val output =
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    97
    {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    98
      val out = new mutable.StringBuilder
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
    99
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   100
      out ++= ";;\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   101
      out ++= ";; Generated keyword classification tables for Isabelle/Isar.\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   102
      out ++= ";; *** DO NOT EDIT *** DO NOT EDIT *** DO NOT EDIT ***\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   103
      out ++= ";;\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   104
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   105
      for (kind <- emacs_kinds) {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   106
        val names =
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   107
          (for {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   108
            (name, k) <- keywords.iterator
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   109
            if (if (kind == "major") k != "minor" else k == kind)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   110
            if kind != "minor" || Symbol.is_ascii_identifier(name)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   111
          } yield name).toList.sorted
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   112
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   113
        out ++= "\n(defconst isar-keywords-" + kind
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   114
        out ++= "\n  '("
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   115
        out ++=
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   116
          names.map(name => quote("""[\.\*\+\?\[\]\^\$]""".r replaceAllIn (name, """\\\\$0""")))
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   117
            .mkString("\n    ")
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   118
        out ++= "))\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   119
      }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   120
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   121
      out ++= "\n(provide 'isar-keywords)\n"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   122
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   123
      out.toString
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   124
    }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   125
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   126
    val file = if (name == "") "isar-keywords.el" else "isar-keywords-" + name + ".el"
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   127
    java.lang.System.err.println(file)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   128
    File.write(Path.explode(file), output)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   129
  }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   130
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   131
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   132
  /* administrative update_keywords */
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   133
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   134
  def update_keywords(options: Options)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   135
  {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   136
    val tree = Build.find_sessions(options, Nil)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   137
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   138
    def chapter(ch: String): List[String] =
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   139
      for ((name, info) <- tree.topological_order if info.chapter == ch) yield name
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   140
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   141
    keywords(options, sessions = chapter("HOL"))
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   142
    keywords(options, name = "ZF", sessions = chapter("ZF"))
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   143
  }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   144
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   145
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   146
  /* command line entry point */
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   147
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   148
  def main(args: Array[String])
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   149
  {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   150
    Command_Line.tool {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   151
      args.toList match {
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   152
        case "keywords" :: name :: Command_Line.Chunks(dirs, sessions) =>
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   153
          keywords(Options.init(), name, dirs.map(Path.explode), sessions)
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   154
          0
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   155
        case "update_keywords" :: Nil =>
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   156
          update_keywords(Options.init())
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   157
          0
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   158
        case _ => error("Bad arguments:\n" + cat_lines(args))
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   159
      }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   160
    }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   161
  }
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   162
}
4cf3f6153eb8 improved "isabelle keywords" and "isabelle update_keywords" based on Isabelle/Scala, without requiring to build sessions first;
wenzelm
parents:
diff changeset
   163