System options with external string representation.
*/
package Spec(a, value case Properties.Eq(
objectcase Propertiesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
: >aisDefined b, e f }
object Spec : String val syntax
def parse(content: def inline(: String: Options=Parsers val parser = Parsers.repsep(Parsers.option_spec ~d(prefsString> option_entry
TokenTokenjava.lang.StringIndexOutOfBoundsException: Range [9, 7) out of bounds for length 15
arsers(parser ) matchb include$ISABELLE_BUILD_OPTIONS def( case bad => error
lclassprivate
}
efoptionsMap .Entry=.empty
Spec
sStringjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
}
def print_value
s match {
ase.(_ s case Value.Long(_) => s
Options.eqnamedef (ame: String, :Boolean Options putname OptionsoolValueBoolean))) case _ => java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
def print(name: String, value: String
defjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 val =efupdate(: String, x:Int:Options putname OptionsInt Value.(x if else {
it.map(opt => "defcheck_namename: String) Options.Entry =
}
}
}
sealedcaseval real:OptionsAccessDouble] = overridedef toString: String = name + if_proper(value, "=" + value.get)
ef print case Someopt) option" +(name)" : +opt.print java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 3
value match { case nameprivatedef get[](name: String, typ Options.Type, parse = Option[]): A {
error cae Somex)>x
}
} case None =>
sealedcaseclass Change(name: String,java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 0 def spec: Spec = Spec.eq(name, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
def print_prefs
namevalopt
}
/* typed access *//* internal lookup and update */
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0 def case Options >intthis java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 def update(name: String def change(name: String applycaseOptions.tring=>string)this
}
class Access_Variable[A]( val options:defapplyname String x:: ) Options=
val pure_access
) { defvalint Options.Access[Int] = defnew new Optionsname String: Boolean
.change> pure_accessoptions).update) def change(name: String, f: A => A): Unit = update(name, f(apply(name)))
}
/* representation */
class {
:OptionOptionString,
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 caseobject Bool extendsTypedefjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ase objectInt()>newOptions.defapply((name Stringlarationjava.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 85 caseReal Type caseobject String extendsType caseobject
val TAG_CONTENT = "content" // formal theory content valjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
TAG_BUILD= build /relevant isabelle" val TAG_BUILD_SYNC = "build_sync" // relevant for distributed "isabelle build" val int> (name ,: String): Optionsput(name OptionsStringx) val TAG_CONNECTION = "connection" // private information val TAG_COLOR_DIALOG ="color_dialog" // special color selection dialog case"real" = Options
al TAG_VSCODE(:Options .update"threads,threads()java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 21
valjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 def theme_suffix()/* external updates */
def title( val words = val name = spec.name val words1 =
words match { case word :: rest if word == defdeclare casev opt meStringjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
}
Word.implode(words1.map(Word.perhaps_capitalized))
} def title_jedit: String = title(typ_nameString,
def def unknown
def for_tag(tag: String): Boolean = tags: ListString, def java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 def: = for_tagor_tagTAG_DOCUMENT def for_color_dialog: Boolean = get(nametags: [String], def for_build_sync: Boolean = (other) > def for_vscode: Boolean = for_tag(TAG_VSCODE)
private val SECTION = "section" private val PUBLIC = "public" private val OPTION = "option" private val STANDARD = "standard" private val FOR = "for" private val OPTIONS = Path.explode("etc/options") private val PREFS = Path.explode("$ISABELLE_HOME_USER/etc/preferences")
val prefs_syntax: Outer_Syntax = Outer_Syntax.empty + "="
trait Parsers extends Parse.Parsers { val option_name: Parser[String] = atom("option name", _.is_name) val option_type: Parser[String] = atom("option type", _.is_name) val option_value: Parser[String] = opt(token("-", tok => tok.is_sym_ident && tok.content == "-")) ~ atom("nat", _.is_nat) ^^ { case s ~ n => if (s.isDefined) "-" + n else n } | atom("option value", tok => tok.is_name || tok.is_float) val option_standard: Parser[Option[String]] = $$$("(") ~! $$$(STANDARD) ~ opt(option_value) ~ $$$(")") ^^ { case _ ~ _ ~ a ~ _ => a } val option_tag: Parser[String] = atom("option tag", _.is_name) val option_tags: Parser[List[String]] = $$$(FOR) ~! rep(option_tag) ^^ { case _ ~ x => x } | success(Nil) val option_spec: Parser[Spec] = option_name ~ opt($$$("=") ~! option_value ^^ { case _ ~ x => x }) ^^ { case x ~ y => Options.Spec(x, value = y) } }
def init(prefs: String = read_prefs(file = PREFS), specs: List[Spec] = Nil): Options = { var options = empty for { dir <- Components.directories() file = dir + OPTIONS if file.is_file } { options = Parsers.parse_file(options, file.implode, File.read(file)) } Parsers.parse_prefs(options, prefs) ++ specs }
def init0(): Options = init(prefs = "")
/* Isabelle tool wrapper */
val isabelle_tool = Isabelle_Tool("options", "print Isabelle system options",
Scala_Project.here,
{ args => var build_options = false var get_option = "" var list_options = false var list_tags = List.empty[String] var export_file = ""
val getopts = Getopts("""
Usage: isabelle options [OPTIONS] [MORE_OPTIONS ...]
Options are:
-b include $ISABELLE_BUILD_OPTIONS
-g OPTION get value of OPTION
-l list options
-t TAGS restrict list to given tags (comma-separated)
-x FILE export options to FILE in YXML format
Report Isabelle system options, augmented by MORE_OPTIONS given as
arguments NAME=VAL or NAME. """, "b" -> (_ => build_options = true), "g:" -> (arg => get_option = arg), "l" -> (_ => list_options = true), "t:" -> (arg => list_tags = space_explode(',', arg)), "x:" -> (arg => export_file = arg))
val more_options = getopts(args) if (get_option == "" && !list_options && export_file == "") getopts.usage()
val options = { val options0 = Options.init() val options1 = if (build_options) options0 ++ Options.Spec.ISABELLE_BUILD_OPTIONS else options0
more_options.foldLeft(options1)(_ + _)
}
if (get_option != "") {
Output.writeln(options.check_name(get_option).value, stdout = true)
}
if (export_file != "") {
File.write(Path.explode(export_file), YXML.string_of_body(options.encode))
}
privatedef check_value(name: String): Options = { val opt = check_name(name)
opt.typ match { case Options.Bool => bool(name); this case Options.Int => int(name); this case Options.Real => real(name); this case Options.String => string(name); this case Options.Unknown => this
}
}
def declare(
public: Boolean,
pos: Position.T,
name: String,
typ_name: String,
value: String,
standard: Option[Option[String]],
tags: List[String],
description: String
): Options = {
get(name) match { case Some(other) =>
error("Duplicate declaration of option " + quote(name) + Position.here(pos) +
Position.here(other.pos)) case None => val typ =
typ_name match { case"bool" => Options.Bool case"int" => Options.Int case"real" => Options.Real case"string" => Options.String case _ =>
error("Unknown type for option " + quote(name) + " : " + quote(typ_name) +
Position.here(pos))
} val standard_value =
standard match { case None => None case Some(_) if typ == Options.Bool =>
error("Illegal standard value for option " + quote(name) + " : " + typ_name +
Position.here) case Some(s) => Some(s.getOrElse(value))
} val opt =
Options.Entry(
public, pos, name, typ, value, value, standard_value, tags, description, section)
(new Options(options + (name -> opt), section)).check_value(name)
}
}
def + (spec: Options.Spec): Options = { val name = spec.name if (spec.permissive && !defined(name)) { val value = spec.value.getOrElse("") val opt =
Options.Entry(false, Position.none, name, Options.Unknown, value, value, None, Nil, "", "") new Options(options + (name -> opt), section)
} else { val opt = check_name(name) def put(value: String): Options =
(new Options(options + (name -> opt.copy(value = value)), section)).check_value(name)
spec.value orElse opt.standard_value match { case Some(value) => put(value) case None if opt.typ == Options.Bool => put("true") case None => error("Missing value for option " + quote(name) + " : " + opt.typ.print)
}
}
}
def + (s: String): Options = this + Options.Spec.make(s)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.