clarified module name (again);
authorwenzelm
Sat Nov 24 15:03:42 2018 +0100 (19 months ago)
changeset 693396baa37cbf70b
parent 69338 0e3e66197a18
child 69340 f8f8270188b4
clarified module name (again);
src/Pure/Admin/build_fonts.scala
src/Pure/Admin/isabelle_fonts.scala
src/Pure/System/isabelle_tool.scala
src/Pure/build-jars
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/Pure/Admin/build_fonts.scala	Sat Nov 24 15:03:42 2018 +0100
     1.3 @@ -0,0 +1,265 @@
     1.4 +/*  Title:      Pure/Admin/build_fonts.scala
     1.5 +    Author:     Makarius
     1.6 +
     1.7 +Build of Isabelle fonts: Deja Vu + special symbols.
     1.8 +*/
     1.9 +
    1.10 +package isabelle
    1.11 +
    1.12 +
    1.13 +object Build_Fonts
    1.14 +{
    1.15 +  /* relevant codepoint ranges */
    1.16 +
    1.17 +  object Range
    1.18 +  {
    1.19 +    def base_font: Seq[Int] =
    1.20 +      (0x0020 to 0x007e) ++  // ASCII
    1.21 +      (0x00a0 to 0x024f) ++  // Latin Extended-A/B
    1.22 +      (0x0400 to 0x04ff) ++  // Cyrillic
    1.23 +      (0x0600 to 0x06ff) ++  // Arabic
    1.24 +      Seq(
    1.25 +        0x2018,  // single quote
    1.26 +        0x2019,  // single quote
    1.27 +        0x201a,  // single quote
    1.28 +        0x201c,  // double quote
    1.29 +        0x201d,  // double quote
    1.30 +        0x201e,  // double quote
    1.31 +        0x2039,  // single guillemet
    1.32 +        0x203a,  // single guillemet
    1.33 +        0x204b,  // FOOTNOTE
    1.34 +        0x20ac,  // Euro
    1.35 +        0xfb01,  // ligature fi
    1.36 +        0xfb02,  // ligature fl
    1.37 +        0xfffd,  // replacement character
    1.38 +      )
    1.39 +
    1.40 +    def isabelle_font: Seq[Int] =
    1.41 +      Seq(
    1.42 +        0x05,  // X
    1.43 +        0x06,  // Y
    1.44 +        0x07,  // EOF
    1.45 +        0x7f,  // DEL
    1.46 +        0xac,  // logicalnot
    1.47 +        0xb0,  // degree
    1.48 +        0xb1,  // plusminus
    1.49 +        0xb7,  // periodcentered
    1.50 +        0xd7,  // multiply
    1.51 +        0xf7,  // divide
    1.52 +      ) ++
    1.53 +      (0x0370 to 0x03ff) ++  // Greek (pseudo math)
    1.54 +      (0x0590 to 0x05ff) ++  // Hebrew (non-mono)
    1.55 +      Seq(
    1.56 +        0x2010,  // hyphen
    1.57 +        0x2013,  // dash
    1.58 +        0x2014,  // dash
    1.59 +        0x2015,  // dash
    1.60 +        0x2020,  // dagger
    1.61 +        0x2021,  // double dagger
    1.62 +        0x2022,  // bullet
    1.63 +        0x2026,  // ellipsis
    1.64 +        0x2030,  // perthousand
    1.65 +        0x2032,  // minute
    1.66 +        0x2033,  // second
    1.67 +        0x2038,  // caret
    1.68 +        0x20cd,  // currency symbol
    1.69 +      ) ++
    1.70 +      (0x2100 to 0x214f) ++  // Letterlike Symbols
    1.71 +      (0x2190 to 0x21ff) ++  // Arrows
    1.72 +      (0x2200 to 0x22ff) ++  // Mathematical Operators
    1.73 +      (0x2300 to 0x23ff) ++  // Miscellaneous Technical
    1.74 +      Seq(
    1.75 +        0x2423,  // graphic for space
    1.76 +        0x2500,  // box drawing
    1.77 +        0x2501,  // box drawing
    1.78 +        0x2508,  // box drawing
    1.79 +        0x2509,  // box drawing
    1.80 +        0x2550,  // box drawing
    1.81 +      ) ++
    1.82 +      (0x25a0 to 0x25ff) ++  // Geometric Shapes
    1.83 +      Seq(
    1.84 +        0x261b,  // ACTION
    1.85 +        0x2660,  // spade suit
    1.86 +        0x2661,  // heart suit
    1.87 +        0x2662,  // diamond suit
    1.88 +        0x2663,  // club suit
    1.89 +        0x266d,  // musical flat
    1.90 +        0x266e,  // musical natural
    1.91 +        0x266f,  // musical sharp
    1.92 +        0x2756,  // UNDEFINED
    1.93 +        0x2759,  // BOLD
    1.94 +        0x27a7,  // DESCR
    1.95 +        0x27e6,  // left white square bracket
    1.96 +        0x27e7,  // right white square bracket
    1.97 +        0x27e8,  // left angle bracket
    1.98 +        0x27e9,  // right angle bracket
    1.99 +      ) ++
   1.100 +      (0x27f0 to 0x27ff) ++  // Supplemental Arrows-A
   1.101 +      (0x2900 to 0x297f) ++  // Supplemental Arrows-B
   1.102 +      (0x2980 to 0x29ff) ++  // Miscellaneous Mathematical Symbols-B
   1.103 +      (0x2a00 to 0x2aff) ++  // Supplemental Mathematical Operators
   1.104 +      Seq(0x2b1a) ++  // VERBATIM
   1.105 +      (0x1d400 to 0x1d7ff) ++  // Mathematical Alphanumeric Symbols
   1.106 +      Seq(
   1.107 +        0x1f310,  // globe with meridians (Symbola font)
   1.108 +        0x1f4d3,  // notebook (Symbola font)
   1.109 +        0x1f5c0,  // folder (Symbola font)
   1.110 +        0x1f5cf,  // page (Symbola font)
   1.111 +      )
   1.112 +  }
   1.113 +
   1.114 +
   1.115 +  /* font families */
   1.116 +
   1.117 +  sealed case class Family(
   1.118 +    plain: String = "",
   1.119 +    bold: String = "",
   1.120 +    italic: String = "",
   1.121 +    bold_italic: String = "")
   1.122 +  {
   1.123 +    val fonts: List[String] =
   1.124 +      proper_string(plain).toList :::
   1.125 +      proper_string(bold).toList :::
   1.126 +      proper_string(italic).toList :::
   1.127 +      proper_string(bold_italic).toList
   1.128 +
   1.129 +    def get(index: Int): String = fonts(index % fonts.length)
   1.130 +  }
   1.131 +
   1.132 +  object Family
   1.133 +  {
   1.134 +    def isabelle_text: Family =
   1.135 +      Family(
   1.136 +        plain = "IsabelleText.sfd",
   1.137 +        bold = "IsabelleTextBold.sfd")
   1.138 +
   1.139 +    def deja_vu_sans_mono: Family =
   1.140 +      Family(
   1.141 +        plain = "DejaVuSansMono.ttf",
   1.142 +        bold = "DejaVuSansMono-Bold.ttf",
   1.143 +        italic = "DejaVuSansMono-Oblique.ttf",
   1.144 +        bold_italic = "DejaVuSansMono-BoldOblique.ttf")
   1.145 +
   1.146 +    def deja_vu_sans: Family =
   1.147 +      Family(
   1.148 +        plain = "DejaVuSans.ttf",
   1.149 +        bold = "DejaVuSans-Bold.ttf",
   1.150 +        italic = "DejaVuSans-Oblique.ttf",
   1.151 +        bold_italic = "DejaVuSans-BoldOblique.ttf")
   1.152 +
   1.153 +    def deja_vu_serif: Family =
   1.154 +      Family(
   1.155 +        plain = "DejaVuSerif.ttf",
   1.156 +        bold = "DejaVuSerif-Bold.ttf",
   1.157 +        italic = "DejaVuSerif-Italic.ttf",
   1.158 +        bold_italic = "DejaVuSerif-BoldItalic.ttf")
   1.159 +  }
   1.160 +
   1.161 +
   1.162 +  /* build fonts */
   1.163 +
   1.164 +  private def find_file(dirs: List[Path], name: String): Path =
   1.165 +  {
   1.166 +    val path = Path.explode(name)
   1.167 +    dirs.collectFirst({ case dir if (dir + path).is_file => dir + path }) match {
   1.168 +      case Some(file) => file
   1.169 +      case None =>
   1.170 +        error(cat_lines(
   1.171 +          ("Failed to find font file " + path + " in directories:") ::
   1.172 +            dirs.map(dir => "  " + dir.toString)))
   1.173 +    }
   1.174 +  }
   1.175 +
   1.176 +  val default_sources: List[Family] =
   1.177 +    List(Family.deja_vu_sans_mono, Family.deja_vu_sans, Family.deja_vu_serif)
   1.178 +
   1.179 +  def build_fonts(
   1.180 +    sources: List[Family] = default_sources,
   1.181 +    source_dirs: List[Path] = Nil,
   1.182 +    target_prefix: String = "Isabelle",
   1.183 +    target_version: String = "",
   1.184 +    target_dir: Path = Path.current,
   1.185 +    progress: Progress = No_Progress)
   1.186 +  {
   1.187 +    Isabelle_System.mkdirs(target_dir)
   1.188 +
   1.189 +    val font_dirs = source_dirs ::: List(Path.explode("~~/lib/fonts"))
   1.190 +
   1.191 +    for (isabelle_font <- Family.isabelle_text.fonts) {
   1.192 +      val isabelle_file = find_file(font_dirs, isabelle_font)
   1.193 +      val isabelle_names = Fontforge.font_names(isabelle_file)
   1.194 +
   1.195 +      val target_names = isabelle_names.update(version = target_version)
   1.196 +      val target_file = target_dir + target_names.ttf
   1.197 +
   1.198 +      progress.echo("Creating " + target_file.toString + " ...")
   1.199 +      Fontforge.execute(
   1.200 +        Fontforge.commands(
   1.201 +          Fontforge.open(isabelle_file),
   1.202 +          target_names.set,
   1.203 +          Fontforge.generate(target_file),
   1.204 +          Fontforge.close
   1.205 +        )
   1.206 +      ).check
   1.207 +    }
   1.208 +
   1.209 +    for { source <- sources; (source_font, index) <- source.fonts.zipWithIndex } {
   1.210 +      val isabelle_file = find_file(font_dirs, Family.isabelle_text.get(index))
   1.211 +
   1.212 +      val source_file = find_file(font_dirs, source_font)
   1.213 +      val source_names = Fontforge.font_names(source_file)
   1.214 +
   1.215 +      val target_names = source_names.update(prefix = target_prefix, version = target_version)
   1.216 +      val target_file = target_dir + target_names.ttf
   1.217 +
   1.218 +      progress.echo("Creating " + target_file.toString + " ...")
   1.219 +      Fontforge.execute(
   1.220 +        Fontforge.commands(
   1.221 +          Fontforge.open(isabelle_file),
   1.222 +          Fontforge.select(Range.isabelle_font),
   1.223 +          Fontforge.copy,
   1.224 +          Fontforge.close,
   1.225 +
   1.226 +          Fontforge.open(source_file),
   1.227 +          Fontforge.select(Range.base_font),
   1.228 +          Fontforge.select_invert,
   1.229 +          Fontforge.clear,
   1.230 +          Fontforge.select(Range.isabelle_font),
   1.231 +          Fontforge.paste,
   1.232 +
   1.233 +          target_names.set,
   1.234 +          Fontforge.generate(target_file),
   1.235 +          Fontforge.close)
   1.236 +      ).check
   1.237 +    }
   1.238 +  }
   1.239 +
   1.240 +
   1.241 +  /* Isabelle tool wrapper */
   1.242 +
   1.243 +  val isabelle_tool =
   1.244 +    Isabelle_Tool("build_fonts", "construct Isabelle fonts", args =>
   1.245 +    {
   1.246 +      var source_dirs: List[Path] = Nil
   1.247 +      var target_dir = Path.current
   1.248 +
   1.249 +      val getopts = Getopts("""
   1.250 +Usage: isabelle build_fonts [OPTIONS]
   1.251 +
   1.252 +  Options are:
   1.253 +    -D DIR       target directory (default ".")
   1.254 +    -d DIR       additional source directory
   1.255 +
   1.256 +  Construct Isabelle fonts from Deja Vu font families and Isabelle symbols.
   1.257 +""",
   1.258 +        "D:" -> (arg => target_dir = Path.explode(arg)),
   1.259 +        "d:" -> (arg => source_dirs = source_dirs ::: List(Path.explode(arg))))
   1.260 +
   1.261 +      val more_args = getopts(args)
   1.262 +      if (more_args.nonEmpty) getopts.usage()
   1.263 +
   1.264 +      val progress = new Console_Progress
   1.265 +
   1.266 +      build_fonts(source_dirs = source_dirs, target_dir = target_dir, progress = progress)
   1.267 +    })
   1.268 +}
     2.1 --- a/src/Pure/Admin/isabelle_fonts.scala	Fri Nov 23 22:55:08 2018 +0100
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,265 +0,0 @@
     2.4 -/*  Title:      Pure/Admin/isabelle_fonts.scala
     2.5 -    Author:     Makarius
     2.6 -
     2.7 -Construction of Isabelle fonts.
     2.8 -*/
     2.9 -
    2.10 -package isabelle
    2.11 -
    2.12 -
    2.13 -object Isabelle_Fonts
    2.14 -{
    2.15 -  /* relevant codepoint ranges */
    2.16 -
    2.17 -  object Range
    2.18 -  {
    2.19 -    def base_font: Seq[Int] =
    2.20 -      (0x0020 to 0x007e) ++  // ASCII
    2.21 -      (0x00a0 to 0x024f) ++  // Latin Extended-A/B
    2.22 -      (0x0400 to 0x04ff) ++  // Cyrillic
    2.23 -      (0x0600 to 0x06ff) ++  // Arabic
    2.24 -      Seq(
    2.25 -        0x2018,  // single quote
    2.26 -        0x2019,  // single quote
    2.27 -        0x201a,  // single quote
    2.28 -        0x201c,  // double quote
    2.29 -        0x201d,  // double quote
    2.30 -        0x201e,  // double quote
    2.31 -        0x2039,  // single guillemet
    2.32 -        0x203a,  // single guillemet
    2.33 -        0x204b,  // FOOTNOTE
    2.34 -        0x20ac,  // Euro
    2.35 -        0xfb01,  // ligature fi
    2.36 -        0xfb02,  // ligature fl
    2.37 -        0xfffd,  // replacement character
    2.38 -      )
    2.39 -
    2.40 -    def isabelle_font: Seq[Int] =
    2.41 -      Seq(
    2.42 -        0x05,  // X
    2.43 -        0x06,  // Y
    2.44 -        0x07,  // EOF
    2.45 -        0x7f,  // DEL
    2.46 -        0xac,  // logicalnot
    2.47 -        0xb0,  // degree
    2.48 -        0xb1,  // plusminus
    2.49 -        0xb7,  // periodcentered
    2.50 -        0xd7,  // multiply
    2.51 -        0xf7,  // divide
    2.52 -      ) ++
    2.53 -      (0x0370 to 0x03ff) ++  // Greek (pseudo math)
    2.54 -      (0x0590 to 0x05ff) ++  // Hebrew (non-mono)
    2.55 -      Seq(
    2.56 -        0x2010,  // hyphen
    2.57 -        0x2013,  // dash
    2.58 -        0x2014,  // dash
    2.59 -        0x2015,  // dash
    2.60 -        0x2020,  // dagger
    2.61 -        0x2021,  // double dagger
    2.62 -        0x2022,  // bullet
    2.63 -        0x2026,  // ellipsis
    2.64 -        0x2030,  // perthousand
    2.65 -        0x2032,  // minute
    2.66 -        0x2033,  // second
    2.67 -        0x2038,  // caret
    2.68 -        0x20cd,  // currency symbol
    2.69 -      ) ++
    2.70 -      (0x2100 to 0x214f) ++  // Letterlike Symbols
    2.71 -      (0x2190 to 0x21ff) ++  // Arrows
    2.72 -      (0x2200 to 0x22ff) ++  // Mathematical Operators
    2.73 -      (0x2300 to 0x23ff) ++  // Miscellaneous Technical
    2.74 -      Seq(
    2.75 -        0x2423,  // graphic for space
    2.76 -        0x2500,  // box drawing
    2.77 -        0x2501,  // box drawing
    2.78 -        0x2508,  // box drawing
    2.79 -        0x2509,  // box drawing
    2.80 -        0x2550,  // box drawing
    2.81 -      ) ++
    2.82 -      (0x25a0 to 0x25ff) ++  // Geometric Shapes
    2.83 -      Seq(
    2.84 -        0x261b,  // ACTION
    2.85 -        0x2660,  // spade suit
    2.86 -        0x2661,  // heart suit
    2.87 -        0x2662,  // diamond suit
    2.88 -        0x2663,  // club suit
    2.89 -        0x266d,  // musical flat
    2.90 -        0x266e,  // musical natural
    2.91 -        0x266f,  // musical sharp
    2.92 -        0x2756,  // UNDEFINED
    2.93 -        0x2759,  // BOLD
    2.94 -        0x27a7,  // DESCR
    2.95 -        0x27e6,  // left white square bracket
    2.96 -        0x27e7,  // right white square bracket
    2.97 -        0x27e8,  // left angle bracket
    2.98 -        0x27e9,  // right angle bracket
    2.99 -      ) ++
   2.100 -      (0x27f0 to 0x27ff) ++  // Supplemental Arrows-A
   2.101 -      (0x2900 to 0x297f) ++  // Supplemental Arrows-B
   2.102 -      (0x2980 to 0x29ff) ++  // Miscellaneous Mathematical Symbols-B
   2.103 -      (0x2a00 to 0x2aff) ++  // Supplemental Mathematical Operators
   2.104 -      Seq(0x2b1a) ++  // VERBATIM
   2.105 -      (0x1d400 to 0x1d7ff) ++  // Mathematical Alphanumeric Symbols
   2.106 -      Seq(
   2.107 -        0x1f310,  // globe with meridians (Symbola font)
   2.108 -        0x1f4d3,  // notebook (Symbola font)
   2.109 -        0x1f5c0,  // folder (Symbola font)
   2.110 -        0x1f5cf,  // page (Symbola font)
   2.111 -      )
   2.112 -  }
   2.113 -
   2.114 -
   2.115 -  /* font families */
   2.116 -
   2.117 -  sealed case class Family(
   2.118 -    plain: String = "",
   2.119 -    bold: String = "",
   2.120 -    italic: String = "",
   2.121 -    bold_italic: String = "")
   2.122 -  {
   2.123 -    val fonts: List[String] =
   2.124 -      proper_string(plain).toList :::
   2.125 -      proper_string(bold).toList :::
   2.126 -      proper_string(italic).toList :::
   2.127 -      proper_string(bold_italic).toList
   2.128 -
   2.129 -    def get(index: Int): String = fonts(index % fonts.length)
   2.130 -  }
   2.131 -
   2.132 -  object Family
   2.133 -  {
   2.134 -    def isabelle_text: Family =
   2.135 -      Family(
   2.136 -        plain = "IsabelleText.sfd",
   2.137 -        bold = "IsabelleTextBold.sfd")
   2.138 -
   2.139 -    def deja_vu_sans_mono: Family =
   2.140 -      Family(
   2.141 -        plain = "DejaVuSansMono.ttf",
   2.142 -        bold = "DejaVuSansMono-Bold.ttf",
   2.143 -        italic = "DejaVuSansMono-Oblique.ttf",
   2.144 -        bold_italic = "DejaVuSansMono-BoldOblique.ttf")
   2.145 -
   2.146 -    def deja_vu_sans: Family =
   2.147 -      Family(
   2.148 -        plain = "DejaVuSans.ttf",
   2.149 -        bold = "DejaVuSans-Bold.ttf",
   2.150 -        italic = "DejaVuSans-Oblique.ttf",
   2.151 -        bold_italic = "DejaVuSans-BoldOblique.ttf")
   2.152 -
   2.153 -    def deja_vu_serif: Family =
   2.154 -      Family(
   2.155 -        plain = "DejaVuSerif.ttf",
   2.156 -        bold = "DejaVuSerif-Bold.ttf",
   2.157 -        italic = "DejaVuSerif-Italic.ttf",
   2.158 -        bold_italic = "DejaVuSerif-BoldItalic.ttf")
   2.159 -  }
   2.160 -
   2.161 -
   2.162 -  /* build fonts */
   2.163 -
   2.164 -  private def find_file(dirs: List[Path], name: String): Path =
   2.165 -  {
   2.166 -    val path = Path.explode(name)
   2.167 -    dirs.collectFirst({ case dir if (dir + path).is_file => dir + path }) match {
   2.168 -      case Some(file) => file
   2.169 -      case None =>
   2.170 -        error(cat_lines(
   2.171 -          ("Failed to find font file " + path + " in directories:") ::
   2.172 -            dirs.map(dir => "  " + dir.toString)))
   2.173 -    }
   2.174 -  }
   2.175 -
   2.176 -  val default_sources: List[Family] =
   2.177 -    List(Family.deja_vu_sans_mono, Family.deja_vu_sans, Family.deja_vu_serif)
   2.178 -
   2.179 -  def build_fonts(
   2.180 -    sources: List[Family] = default_sources,
   2.181 -    source_dirs: List[Path] = Nil,
   2.182 -    target_prefix: String = "Isabelle",
   2.183 -    target_version: String = "",
   2.184 -    target_dir: Path = Path.current,
   2.185 -    progress: Progress = No_Progress)
   2.186 -  {
   2.187 -    Isabelle_System.mkdirs(target_dir)
   2.188 -
   2.189 -    val font_dirs = source_dirs ::: List(Path.explode("~~/lib/fonts"))
   2.190 -
   2.191 -    for (isabelle_font <- Family.isabelle_text.fonts) {
   2.192 -      val isabelle_file = find_file(font_dirs, isabelle_font)
   2.193 -      val isabelle_names = Fontforge.font_names(isabelle_file)
   2.194 -
   2.195 -      val target_names = isabelle_names.update(version = target_version)
   2.196 -      val target_file = target_dir + target_names.ttf
   2.197 -
   2.198 -      progress.echo("Creating " + target_file.toString + " ...")
   2.199 -      Fontforge.execute(
   2.200 -        Fontforge.commands(
   2.201 -          Fontforge.open(isabelle_file),
   2.202 -          target_names.set,
   2.203 -          Fontforge.generate(target_file),
   2.204 -          Fontforge.close
   2.205 -        )
   2.206 -      ).check
   2.207 -    }
   2.208 -
   2.209 -    for { source <- sources; (source_font, index) <- source.fonts.zipWithIndex } {
   2.210 -      val isabelle_file = find_file(font_dirs, Family.isabelle_text.get(index))
   2.211 -
   2.212 -      val source_file = find_file(font_dirs, source_font)
   2.213 -      val source_names = Fontforge.font_names(source_file)
   2.214 -
   2.215 -      val target_names = source_names.update(prefix = target_prefix, version = target_version)
   2.216 -      val target_file = target_dir + target_names.ttf
   2.217 -
   2.218 -      progress.echo("Creating " + target_file.toString + " ...")
   2.219 -      Fontforge.execute(
   2.220 -        Fontforge.commands(
   2.221 -          Fontforge.open(isabelle_file),
   2.222 -          Fontforge.select(Range.isabelle_font),
   2.223 -          Fontforge.copy,
   2.224 -          Fontforge.close,
   2.225 -
   2.226 -          Fontforge.open(source_file),
   2.227 -          Fontforge.select(Range.base_font),
   2.228 -          Fontforge.select_invert,
   2.229 -          Fontforge.clear,
   2.230 -          Fontforge.select(Range.isabelle_font),
   2.231 -          Fontforge.paste,
   2.232 -
   2.233 -          target_names.set,
   2.234 -          Fontforge.generate(target_file),
   2.235 -          Fontforge.close)
   2.236 -      ).check
   2.237 -    }
   2.238 -  }
   2.239 -
   2.240 -
   2.241 -  /* Isabelle tool wrapper */
   2.242 -
   2.243 -  val isabelle_tool =
   2.244 -    Isabelle_Tool("build_fonts", "construct Isabelle fonts", args =>
   2.245 -    {
   2.246 -      var source_dirs: List[Path] = Nil
   2.247 -      var target_dir = Path.current
   2.248 -
   2.249 -      val getopts = Getopts("""
   2.250 -Usage: isabelle build_fonts [OPTIONS]
   2.251 -
   2.252 -  Options are:
   2.253 -    -D DIR       target directory (default ".")
   2.254 -    -d DIR       additional source directory
   2.255 -
   2.256 -  Construct Isabelle fonts from Deja Vu font families and Isabelle symbols.
   2.257 -""",
   2.258 -        "D:" -> (arg => target_dir = Path.explode(arg)),
   2.259 -        "d:" -> (arg => source_dirs = source_dirs ::: List(Path.explode(arg))))
   2.260 -
   2.261 -      val more_args = getopts(args)
   2.262 -      if (more_args.nonEmpty) getopts.usage()
   2.263 -
   2.264 -      val progress = new Console_Progress
   2.265 -
   2.266 -      build_fonts(source_dirs = source_dirs, target_dir = target_dir, progress = progress)
   2.267 -    })
   2.268 -}
     3.1 --- a/src/Pure/System/isabelle_tool.scala	Fri Nov 23 22:55:08 2018 +0100
     3.2 +++ b/src/Pure/System/isabelle_tool.scala	Sat Nov 24 15:03:42 2018 +0100
     3.3 @@ -166,11 +166,11 @@
     3.4  class Admin_Tools extends Isabelle_Scala_Tools(
     3.5    Build_Cygwin.isabelle_tool,
     3.6    Build_Doc.isabelle_tool,
     3.7 +  Build_Fonts.isabelle_tool,
     3.8    Build_JDK.isabelle_tool,
     3.9    Build_PolyML.isabelle_tool1,
    3.10    Build_PolyML.isabelle_tool2,
    3.11    Build_Status.isabelle_tool,
    3.12    Check_Sources.isabelle_tool,
    3.13 -  Isabelle_Fonts.isabelle_tool,
    3.14    Remote_DMG.isabelle_tool,
    3.15    isabelle.vscode.Build_VSCode.isabelle_tool)
     4.1 --- a/src/Pure/build-jars	Fri Nov 23 22:55:08 2018 +0100
     4.2 +++ b/src/Pure/build-jars	Sat Nov 24 15:03:42 2018 +0100
     4.3 @@ -12,6 +12,7 @@
     4.4    Admin/afp.scala
     4.5    Admin/build_cygwin.scala
     4.6    Admin/build_doc.scala
     4.7 +  Admin/build_fonts.scala
     4.8    Admin/build_history.scala
     4.9    Admin/build_jdk.scala
    4.10    Admin/build_log.scala
    4.11 @@ -22,7 +23,6 @@
    4.12    Admin/ci_profile.scala
    4.13    Admin/isabelle_cronjob.scala
    4.14    Admin/isabelle_devel.scala
    4.15 -  Admin/isabelle_fonts.scala
    4.16    Admin/jenkins.scala
    4.17    Admin/other_isabelle.scala
    4.18    Admin/remote_dmg.scala