From 5799d3f0743bafaf2badd91073bd70711a9e3755 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 02:38:45 +0900 Subject: [PATCH 001/381] begin to develop `saphe` --- bin-saphe/dune | 7 +++ bin-saphe/main.ml | 13 +++++ bin-saphe/saphe.ml | 132 +++++++++++++++++++++++++++++++++++++++++++++ bin/satysfi.ml | 30 ----------- 4 files changed, 152 insertions(+), 30 deletions(-) create mode 100644 bin-saphe/dune create mode 100644 bin-saphe/main.ml create mode 100644 bin-saphe/saphe.ml diff --git a/bin-saphe/dune b/bin-saphe/dune new file mode 100644 index 000000000..4c576ae3c --- /dev/null +++ b/bin-saphe/dune @@ -0,0 +1,7 @@ +(executable + (name saphe) + (public_name saphe) + (libraries + cmdliner) + (preprocess no_preprocessing) +) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml new file mode 100644 index 000000000..bccf2f26e --- /dev/null +++ b/bin-saphe/main.ml @@ -0,0 +1,13 @@ + + +let version = + "Saphe version 0.0.1 alpha" + + +let solve + ~fpath_in:(_ : string) + ~show_full_path:(_ : bool) + ~config_paths_str_opt:(_ : string option) + ~no_default_config:(_ : bool) += + failwith "TODO: migrate `solve` from `satysfi`" diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml new file mode 100644 index 000000000..0419a0617 --- /dev/null +++ b/bin-saphe/saphe.ml @@ -0,0 +1,132 @@ + +let solve + fpath_in + show_full_path + config_paths_str_opt + no_default_config += + Main.solve + ~fpath_in + ~show_full_path + ~config_paths_str_opt + ~no_default_config + + +let arg_in : string Cmdliner.Term.t = + let open Cmdliner in + Arg.(required (pos 0 (some file) None (info []))) + + +let flag_output : (string option) Cmdliner.Term.t = + let open Cmdliner in + let doc = "Specify output path." in + Arg.(value (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) + + +let flag_config = + let open Cmdliner in + let doc = "Add colon-separated paths to configuration search path" in + Arg.(value (opt (some string) None (info [ "C"; "config" ] ~docv:"PATHS" ~doc))) + + +let flag_text_mode = + let open Cmdliner in + let doc = "Set text mode" in + Arg.(value (opt (some string) None (info [ "text-mode" ] ~docv:"FORMATS" ~doc))) + + +let flag_page_number_limit : int Cmdliner.Term.t = + let open Cmdliner in + let doc = "Set the page number limit (default: 10000)" in + Arg.(value (opt int 10000 (info [ "page-number-limit" ] ~docv:"INT" ~doc))) + + +let make_boolean_flag_spec ~(flags : string list) ~(doc : string) : bool Cmdliner.Term.t = + let open Cmdliner in + Arg.(value (flag (info flags ~doc))) + + +let flag_full_path = + make_boolean_flag_spec + ~flags:[ "full-path" ] + ~doc:"Displays paths in full-path style" + + +let flag_debug_show_bbox = + make_boolean_flag_spec + ~flags:[ "debug-show-bbox" ] + ~doc:"Outputs bounding boxes for glyphs" + + +let flag_debug_show_space = + make_boolean_flag_spec + ~flags:[ "debug-show-space" ] + ~doc:"Outputs boxes for spaces" + + +let flag_debug_show_block_bbox = + make_boolean_flag_spec + ~flags:[ "debug-show-block-bbox" ] + ~doc:"Outputs bounding boxes for blocks" + + +let flag_debug_show_block_space = + make_boolean_flag_spec + ~flags:[ "debug-show-block-space" ] + ~doc:"Outputs visualized block spaces" + + +let flag_debug_show_overfull = + make_boolean_flag_spec + ~flags:[ "debug-show-overfull" ] + ~doc:"Outputs visualized overfull or underfull lines" + + +let flag_type_check_only = + make_boolean_flag_spec + ~flags:[ "t"; "type-check-only" ] + ~doc:"Stops after type checking" + + +let flag_bytecomp = + make_boolean_flag_spec + ~flags:[ "b"; "bytecomp" ] + ~doc:"Use bytecode compiler" + + +let flag_no_default_config = + make_boolean_flag_spec + ~flags:[ "no-default-config" ] + ~doc:"Does not use default configuration search path" + + +let command_solve = + let open Cmdliner in + let term : unit Term.t = + Term.(const solve + $ arg_in + $ flag_full_path + $ flag_config + $ flag_no_default_config + ) + in + let info : Cmd.info = + Cmd.info "solve" + in + Cmd.v info term + + +let () = + let open Cmdliner in + let term : unit Term.t = + Term.(ret (const (`Error(true, "No subcommand specified.")))) + in + let info : Cmd.info = + Cmd.info ~version:Main.version "saphe" + in + let subcommands = + [ + command_solve; + ] + in + Stdlib.exit (Cmd.eval (Cmd.group ~default:term info subcommands)) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index 5173ea55d..c3c885f9f 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -47,19 +47,6 @@ let test ~no_default_config -let solve - fpath_in - show_full_path - config_paths_str_opt - no_default_config -= - Main.solve - ~fpath_in - ~show_full_path - ~config_paths_str_opt - ~no_default_config - - let arg_in : string Cmdliner.Term.t = let open Cmdliner in Arg.(required (pos 0 (some file) None (info []))) @@ -191,22 +178,6 @@ let command_test = Cmd.v info term -let command_solve = - let open Cmdliner in - let term : unit Term.t = - Term.(const solve - $ arg_in - $ flag_full_path - $ flag_config - $ flag_no_default_config - ) - in - let info : Cmd.info = - Cmd.info "solve" - in - Cmd.v info term - - let () = let open Cmdliner in let term : unit Term.t = @@ -219,7 +190,6 @@ let () = [ command_build; command_test; - command_solve; ] in Stdlib.exit (Cmd.eval (Cmd.group ~default:term info subcommands)) From d5699288c0dff90a584577c04bfbb76fc276f3c7 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 06:34:24 +0900 Subject: [PATCH 002/381] FIRST SUCCESS IN SEPARATING `saphe` FROM `satysfi` --- .../canonicalRegistryUrl.ml | 0 bin-saphe/configError.ml | 116 +++ {src/frontend => bin-saphe}/configUtil.ml | 0 bin-saphe/constant.ml | 43 ++ bin-saphe/dune | 6 +- .../libraryRootConfig.ml | 0 {src/frontend => bin-saphe}/lockConfig.ml | 4 +- {src/frontend => bin-saphe}/lockFetcher.ml | 0 {src/frontend => bin-saphe}/lockFetcher.mli | 0 bin-saphe/logging.ml | 50 ++ bin-saphe/logging.mli | 17 + bin-saphe/main.ml | 612 +++++++++++++++- {src/frontend => bin-saphe}/packageConfig.ml | 21 +- {src/frontend => bin-saphe}/packageConfig.mli | 14 +- .../packageConstraintSolver.ml | 1 + .../packageConstraintSolver.mli | 0 .../packageRegistryConfig.ml | 0 .../packageRegistryFetcher.ml | 0 .../packageSystemBase.ml | 0 {src/frontend => bin-saphe}/shellCommand.ml | 0 {src/frontend => bin-saphe}/shellCommand.mli | 0 bin/dune | 1 + saphe.opam | 44 ++ satysfi-util.opam | 35 + {src => src-util}/alist.ml | 0 {src => src-util}/alist.mli | 0 {src/frontend => src-util}/dependencyGraph.ml | 12 +- .../frontend => src-util}/dependencyGraph.mli | 10 +- src-util/dune | 13 + {src => src-util}/myUtil.ml | 5 + {src => src-util}/myUtil.mli | 2 + {src => src-util}/optionMonad.ml | 0 {src => src-util}/optionMonad.mli | 0 {src => src-util}/resultMonad.ml | 0 {src => src-util}/resultMonad.mli | 0 {src/frontend => src-util}/semanticVersion.ml | 0 .../frontend => src-util}/semanticVersion.mli | 0 {src/frontend => src-util}/tupleList.ml | 0 {src/frontend => src-util}/tupleList.mli | 0 {src/frontend => src-util}/yamlDecoder.ml | 0 {src/frontend => src-util}/yamlDecoder.mli | 0 src/dune | 3 +- src/frontend/closedFileDependencyResolver.ml | 1 + src/frontend/closedLockDependencyResolver.ml | 60 +- src/frontend/configError.ml | 119 +--- src/frontend/constant.ml | 31 +- src/frontend/depsConfig.ml | 20 + src/frontend/documentAttribute.ml | 4 +- src/frontend/documentAttribute.mli | 4 +- src/frontend/envelopeConfig.ml | 44 ++ .../{packageReader.ml => envelopeReader.ml} | 33 +- .../{packageReader.mli => envelopeReader.mli} | 2 +- src/frontend/envelopeSystemBase.ml | 15 + src/frontend/logging.ml | 47 -- src/frontend/logging.mli | 15 - src/frontend/main.ml | 663 ++---------------- src/frontend/main.mli | 7 - src/frontend/openFileDependencyResolver.ml | 9 +- src/frontend/openFileDependencyResolver.mli | 4 +- src/frontend/packageChecker.ml | 8 +- src/frontend/packageChecker.mli | 2 +- src/frontend/primitives.cppo.ml | 18 +- src/frontend/primitives.mli | 5 +- src/frontend/synonymDependencyGraph.ml | 1 + src/frontend/synonymDependencyGraph.mli | 1 + src/frontend/typeError.ml | 1 + src/frontend/types.cppo.ml | 16 +- src/md/markdownParser.ml | 3 +- src/md/markdownParser.mli | 3 +- 69 files changed, 1238 insertions(+), 907 deletions(-) rename {src/frontend => bin-saphe}/canonicalRegistryUrl.ml (100%) create mode 100644 bin-saphe/configError.ml rename {src/frontend => bin-saphe}/configUtil.ml (100%) create mode 100644 bin-saphe/constant.ml rename {src/frontend => bin-saphe}/libraryRootConfig.ml (100%) rename {src/frontend => bin-saphe}/lockConfig.ml (94%) rename {src/frontend => bin-saphe}/lockFetcher.ml (100%) rename {src/frontend => bin-saphe}/lockFetcher.mli (100%) create mode 100644 bin-saphe/logging.ml create mode 100644 bin-saphe/logging.mli rename {src/frontend => bin-saphe}/packageConfig.ml (96%) rename {src/frontend => bin-saphe}/packageConfig.mli (78%) rename {src/frontend => bin-saphe}/packageConstraintSolver.ml (99%) rename {src/frontend => bin-saphe}/packageConstraintSolver.mli (100%) rename {src/frontend => bin-saphe}/packageRegistryConfig.ml (100%) rename {src/frontend => bin-saphe}/packageRegistryFetcher.ml (100%) rename {src/frontend => bin-saphe}/packageSystemBase.ml (100%) rename {src/frontend => bin-saphe}/shellCommand.ml (100%) rename {src/frontend => bin-saphe}/shellCommand.mli (100%) create mode 100644 saphe.opam create mode 100644 satysfi-util.opam rename {src => src-util}/alist.ml (100%) rename {src => src-util}/alist.mli (100%) rename {src/frontend => src-util}/dependencyGraph.ml (93%) rename {src/frontend => src-util}/dependencyGraph.mli (92%) create mode 100644 src-util/dune rename {src => src-util}/myUtil.ml (89%) rename {src => src-util}/myUtil.mli (91%) rename {src => src-util}/optionMonad.ml (100%) rename {src => src-util}/optionMonad.mli (100%) rename {src => src-util}/resultMonad.ml (100%) rename {src => src-util}/resultMonad.mli (100%) rename {src/frontend => src-util}/semanticVersion.ml (100%) rename {src/frontend => src-util}/semanticVersion.mli (100%) rename {src/frontend => src-util}/tupleList.ml (100%) rename {src/frontend => src-util}/tupleList.mli (100%) rename {src/frontend => src-util}/yamlDecoder.ml (100%) rename {src/frontend => src-util}/yamlDecoder.mli (100%) create mode 100644 src/frontend/depsConfig.ml create mode 100644 src/frontend/envelopeConfig.ml rename src/frontend/{packageReader.ml => envelopeReader.ml} (70%) rename src/frontend/{packageReader.mli => envelopeReader.mli} (63%) create mode 100644 src/frontend/envelopeSystemBase.ml diff --git a/src/frontend/canonicalRegistryUrl.ml b/bin-saphe/canonicalRegistryUrl.ml similarity index 100% rename from src/frontend/canonicalRegistryUrl.ml rename to bin-saphe/canonicalRegistryUrl.ml diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml new file mode 100644 index 000000000..e94bdbec6 --- /dev/null +++ b/bin-saphe/configError.ml @@ -0,0 +1,116 @@ + +open MyUtil +open PackageSystemBase + + +type yaml_error = + | ParseError of string + | FieldNotFound of YamlDecoder.context * string + | NotAFloat of YamlDecoder.context + | NotAString of YamlDecoder.context + | NotABool of YamlDecoder.context + | NotAnArray of YamlDecoder.context + | NotAnObject of YamlDecoder.context + | UnexpectedTag of YamlDecoder.context * string + | UnexpectedLanguage of string + | NotASemanticVersion of YamlDecoder.context * string + | NotAVersionRequirement of YamlDecoder.context * string + | InvalidPackageName of YamlDecoder.context * string + | MultiplePackageDefinition of { + context : YamlDecoder.context; + package_name : string; + } + | DuplicateRegistryLocalName of { + context : YamlDecoder.context; + registry_local_name : registry_local_name; + } + | DuplicateRegistryHashValue of { + context : YamlDecoder.context; + registry_hash_value : registry_hash_value; + } + | CannotBeUsedAsAName of YamlDecoder.context * string + | UnsupportedConfigFormat of string + | NotACommand of { + context : YamlDecoder.context; + prefix : char; + string : string; + } + +module YamlError = struct + type t = yaml_error + let parse_error s = ParseError(s) + let field_not_found context s = FieldNotFound(context, s) + let not_a_float context = NotAFloat(context) + let not_a_string context = NotAString(context) + let not_a_bool context = NotABool(context) + let not_an_array context = NotAnArray(context) + let not_an_object context = NotAnObject(context) +end + +type config_error = + | PackageDirectoryNotFound of string list + | PackageConfigNotFound of abs_path + | PackageConfigError of abs_path * yaml_error + | LockConfigNotFound of abs_path + | LockConfigError of abs_path * yaml_error + | RegistryConfigNotFound of abs_path + | RegistryConfigNotFoundIn of lib_path * abs_path list + | RegistryConfigError of abs_path * yaml_error + | LibraryRootConfigNotFound of abs_path + | LibraryRootConfigError of abs_path * yaml_error + | LockNameConflict of lock_name + | LockedPackageNotFound of lib_path * abs_path list + | DependencyOnUnknownLock of { + depending : lock_name; + depended : lock_name; + } +(* + | CyclicLockDependency of (lock_name * untyped_package) cycle +*) + | CannotFindLibraryFile of lib_path * abs_path list + | CannotSolvePackageConstraints +(* + | DocumentAttributeError of DocumentAttribute.error + | MarkdownClassNotFound of module_name + | NoMarkdownConversion of module_name + | MoreThanOneMarkdownConversion of module_name + | MarkdownError of MarkdownParser.error +*) + | FailedToFetchTarball of { + lock_name : lock_name; + exit_status : int; + command : string; + } + | FailedToExtractTarball of { + lock_name : lock_name; + exit_status : int; + command : string; + } + | FailedToFetchExternalZip of { + url : string; + exit_status : int; + command : string; + } + | ExternalZipChecksumMismatch of { + url : string; + path : abs_path; + expected : string; + got : string; + } + | TarGzipChecksumMismatch of { + lock_name : lock_name; + url : string; + path : abs_path; + expected : string; + got : string; + } + | FailedToExtractExternalZip of { + exit_status : int; + command : string; + } + | FailedToCopyFile of { + exit_status : int; + command : string; + } + | PackageRegistryFetcherError of PackageRegistryFetcher.error + | CanonicalRegistryUrlError of CanonicalRegistryUrl.error diff --git a/src/frontend/configUtil.ml b/bin-saphe/configUtil.ml similarity index 100% rename from src/frontend/configUtil.ml rename to bin-saphe/configUtil.ml diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml new file mode 100644 index 000000000..251200dba --- /dev/null +++ b/bin-saphe/constant.ml @@ -0,0 +1,43 @@ + +open MyUtil +open PackageSystemBase + + +(* TODO: remove this *) +let current_language_version = + match SemanticVersion.parse "0.1.0" with + | Some(semver) -> semver + | None -> assert false + + +let lock_tarball_name (package_name : package_name) (locked_version : SemanticVersion.t) : lock_name = + Printf.sprintf "%s.%s" package_name (SemanticVersion.to_string locked_version) + + +let lock_directory (lock : Lock.t) : lib_path = + let Lock.{ registry_hash_value; package_name; locked_version } = lock in + make_lib_path + (Printf.sprintf "packages/%s/%s/%s" + registry_hash_value + package_name + (lock_tarball_name package_name locked_version)) + + +let registry_root_directory (registry_hash_value : registry_hash_value) : lib_path = + make_lib_path (Printf.sprintf "registries/%s" registry_hash_value) + + +let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : lib_path = + make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) + + +let package_config_file_name = + "satysfi.yaml" + + +let library_root_config_file = + make_lib_path "satysfi-library-root.yaml" + + +let package_registry_config_file_name = + "satysfi-registry.yaml" diff --git a/bin-saphe/dune b/bin-saphe/dune index 4c576ae3c..e64a474b5 100644 --- a/bin-saphe/dune +++ b/bin-saphe/dune @@ -1,7 +1,11 @@ (executable (name saphe) (public_name saphe) + (package saphe) (libraries - cmdliner) + 0install-solver + cmdliner + satysfi-util + uri) (preprocess no_preprocessing) ) diff --git a/src/frontend/libraryRootConfig.ml b/bin-saphe/libraryRootConfig.ml similarity index 100% rename from src/frontend/libraryRootConfig.ml rename to bin-saphe/libraryRootConfig.ml diff --git a/src/frontend/lockConfig.ml b/bin-saphe/lockConfig.ml similarity index 94% rename from src/frontend/lockConfig.ml rename to bin-saphe/lockConfig.ml index c3630da39..034643561 100644 --- a/src/frontend/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -96,12 +96,12 @@ let load (abspath_lock_config : abs_path) : t ok = |> Result.map_error (fun e -> LockConfigError(abspath_lock_config, e)) -let write (display_config : Logging.config) (abspath_lock_config : abs_path) (lock_config : t) : unit = +let write (abspath_lock_config : abs_path) (lock_config : t) : unit = let yaml = lock_config_encoder lock_config in match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with | Ok(data) -> Core.Out_channel.write_all (get_abs_path_string abspath_lock_config) ~data; - Logging.end_lock_output display_config abspath_lock_config + Logging.end_lock_output abspath_lock_config | Error(_) -> assert false diff --git a/src/frontend/lockFetcher.ml b/bin-saphe/lockFetcher.ml similarity index 100% rename from src/frontend/lockFetcher.ml rename to bin-saphe/lockFetcher.ml diff --git a/src/frontend/lockFetcher.mli b/bin-saphe/lockFetcher.mli similarity index 100% rename from src/frontend/lockFetcher.mli rename to bin-saphe/lockFetcher.mli diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml new file mode 100644 index 000000000..59f834bf9 --- /dev/null +++ b/bin-saphe/logging.ml @@ -0,0 +1,50 @@ + +open MyUtil +open PackageSystemBase + + +let show_package_dependency_before_solving (dependencies_with_flags : (dependency_flag * package_dependency) list) = + Printf.printf " package dependencies to solve:\n"; + dependencies_with_flags |> List.iter (fun (flag, dep) -> + let PackageDependency{ package_name; spec } = dep in + match spec with + | RegisteredDependency{ version_requirement; _ } -> + let s_restr = SemanticVersion.requirement_to_string version_requirement in + let s_test_only = + match flag with + | SourceDependency -> "" + | TestOnlyDependency -> ", test_only" + in + Printf.printf " - %s (%s%s)\n" package_name s_restr s_test_only; + ) + + +let show_package_dependency_solutions (solutions : package_solution list) = + Printf.printf " package dependency solutions:\n"; + solutions |> List.iter (fun solution -> + let Lock.{ package_name; locked_version; _ } = solution.lock in + Printf.printf " - %s %s\n" package_name (SemanticVersion.to_string locked_version) + ) + + +let end_lock_output (file_name_out : abs_path) = + print_endline (" ---- ---- ---- ----"); + print_endline (" output written on '" ^ (get_abs_path_string file_name_out) ^ "'.") + + +let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = + Printf.printf " '%s': already installed at '%s'\n" lock_name (get_abs_path_string absdir) + + +let lock_cache_exists (lock_name : lock_name) (abspath_tarball : abs_path) = + Printf.printf " cache for '%s' exists at '%s'\n" lock_name (get_abs_path_string abspath_tarball) + + +let downloading_lock (lock_name : lock_name) (absdir : abs_path) = + Printf.printf " downloading '%s' to '%s'...\n" lock_name (get_abs_path_string absdir) + + +let report_canonicalized_url ~(url : string) ~(canonicalized_url : string) ~(hash_value : registry_hash_value) = + Printf.printf " registry URL: '%s'\n" url; + Printf.printf " canonicalized: '%s'\n" canonicalized_url; + Printf.printf " hash value: '%s'\n" hash_value diff --git a/bin-saphe/logging.mli b/bin-saphe/logging.mli new file mode 100644 index 000000000..faf4376f3 --- /dev/null +++ b/bin-saphe/logging.mli @@ -0,0 +1,17 @@ + +open MyUtil +open PackageSystemBase + +val show_package_dependency_before_solving : (dependency_flag * package_dependency) list -> unit + +val show_package_dependency_solutions : package_solution list -> unit + +val end_lock_output : abs_path -> unit + +val lock_already_installed : lock_name -> abs_path -> unit + +val lock_cache_exists : lock_name -> abs_path -> unit + +val downloading_lock : lock_name -> abs_path -> unit + +val report_canonicalized_url : url:string -> canonicalized_url:string -> hash_value:registry_hash_value -> unit diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index bccf2f26e..61d906fa9 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -1,13 +1,621 @@ +open MyUtil +open PackageSystemBase +open ConfigError + + +exception ConfigError of config_error + let version = "Saphe version 0.0.1 alpha" +type line = + | NormalLine of string + | DisplayLine of string + +let report_error (lines : line list) = + print_string "! "; + lines |> List.fold_left (fun (is_first : bool) (line : line) -> + begin + match line with + | NormalLine(s) -> + if is_first then + print_endline s + else + print_endline (" " ^ s) + + | DisplayLine(s) -> + if is_first then + print_endline ("\n " ^ s) + else + print_endline (" " ^ s) + end; + false + ) true |> ignore; + exit 1 + + +let show_yaml_context (context : YamlDecoder.context) = + match context with + | [] -> + "" + + | _ :: _ -> + let s_context = + let open YamlDecoder in + context |> List.map (function + | Field(field) -> Printf.sprintf ".%s" field + | Index(index) -> Printf.sprintf ".[%d]" index + ) |> String.concat "" + in + Printf.sprintf " (context: %s)" s_context + + +let make_yaml_error_lines : yaml_error -> line list = function + | ParseError(s) -> + [ NormalLine(Printf.sprintf "parse error: %s" s) ] + + | FieldNotFound(yctx, field) -> + [ NormalLine(Printf.sprintf "field '%s' not found%s" field (show_yaml_context yctx)) ] + + | NotAFloat(yctx) -> + [ NormalLine(Printf.sprintf "not a float value%s" (show_yaml_context yctx)) ] + + | NotAString(yctx) -> + [ NormalLine(Printf.sprintf "not a string value%s" (show_yaml_context yctx)) ] + + | NotABool(yctx) -> + [ NormalLine(Printf.sprintf "not a Boolean value%s" (show_yaml_context yctx)) ] + + | NotAnArray(yctx) -> + [ NormalLine(Printf.sprintf "not an array%s" (show_yaml_context yctx)) ] + + | NotAnObject(yctx) -> + [ NormalLine(Printf.sprintf "not an object%s" (show_yaml_context yctx)) ] + + | UnexpectedTag(yctx, tag) -> + [ NormalLine(Printf.sprintf "unexpected type tag '%s'%s" tag (show_yaml_context yctx)) ] + + | UnexpectedLanguage(s_language_version) -> + [ NormalLine(Printf.sprintf "unexpected language version '%s'" s_language_version) ] + + | NotASemanticVersion(yctx, s) -> + [ NormalLine(Printf.sprintf "not a semantic version: '%s'%s" s (show_yaml_context yctx)) ] + + | NotAVersionRequirement(yctx, s) -> + [ NormalLine(Printf.sprintf "not a version requirement: '%s'%s" s (show_yaml_context yctx)) ] + + | InvalidPackageName(yctx, s) -> + [ NormalLine(Printf.sprintf "not a package name: '%s'%s" s (show_yaml_context yctx)) ] + + | MultiplePackageDefinition{ context = yctx; package_name } -> + [ NormalLine(Printf.sprintf "More than one definition for package '%s'%s" package_name (show_yaml_context yctx)) ] + + | DuplicateRegistryLocalName{ context = yctx; registry_local_name } -> + [ NormalLine(Printf.sprintf "More than one definition for registry local name '%s'%s" registry_local_name (show_yaml_context yctx)) ] + + | DuplicateRegistryHashValue{ context = yctx; registry_hash_value } -> + [ NormalLine(Printf.sprintf "More than one definition for registry hash value '%s'%s" registry_hash_value (show_yaml_context yctx)) ] + + | CannotBeUsedAsAName(yctx, s) -> + [ NormalLine(Printf.sprintf "'%s' cannot be used as a name%s" s (show_yaml_context yctx)) ] + + | UnsupportedConfigFormat(format) -> + [ NormalLine(Printf.sprintf "unsupported config format '%s'" format) ] + + | NotACommand{ context = yctx; prefix = _; string = s } -> + [ NormalLine(Printf.sprintf "not a command: '%s'%s" s (show_yaml_context yctx)) ] + + +let report_config_error = function + | PackageDirectoryNotFound(candidate_paths) -> + let lines = + candidate_paths |> List.map (fun path -> + DisplayLine(Printf.sprintf "- %s" path) + ) + in + report_error + (NormalLine("cannot find package directory. candidates:") :: lines) + + | PackageConfigNotFound(abspath) -> + report_error [ + NormalLine("cannot find a package config at:"); + DisplayLine(get_abs_path_string abspath); + ] + + | PackageConfigError(abspath, e) -> + report_error (List.concat [ + [ NormalLine(Printf.sprintf "in %s: package config error;" (get_abs_path_string abspath)) ]; + make_yaml_error_lines e; + ]) + + | LockConfigNotFound(abspath) -> + report_error [ + NormalLine("cannot find a lock config at:"); + DisplayLine(get_abs_path_string abspath); + ] + + | LockConfigError(abspath, e) -> + report_error (List.concat [ + [ NormalLine(Printf.sprintf "in %s: lock config error;" (get_abs_path_string abspath)) ]; + make_yaml_error_lines e; + ]) + + | RegistryConfigNotFound(abspath) -> + report_error [ + NormalLine("cannot find a registry config at:"); + DisplayLine(get_abs_path_string abspath); + ] + + | RegistryConfigNotFoundIn(libpath, candidates) -> + let lines = + candidates |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + report_error (List.concat [ + [ NormalLine(Printf.sprintf "cannot find a registry config '%s'. candidates:" (get_lib_path_string libpath)) ]; + lines; + ]) + + | RegistryConfigError(abspath, e) -> + report_error (List.concat [ + [ NormalLine(Printf.sprintf "in %s: registry config error;" (get_abs_path_string abspath)) ]; + make_yaml_error_lines e; + ]) + + | LibraryRootConfigNotFound(abspath) -> + report_error [ + NormalLine("cannot find a library root config at:"); + DisplayLine(get_abs_path_string abspath); + ] + + | LibraryRootConfigError(abspath, e) -> + report_error (List.concat [ + [ NormalLine(Printf.sprintf "in %s: library root config error;" (get_abs_path_string abspath)) ]; + make_yaml_error_lines e; + ]) + + | LockNameConflict(lock_name) -> + report_error [ + NormalLine(Printf.sprintf "lock name conflict: '%s'" lock_name); + ] + + | LockedPackageNotFound(libpath, candidates) -> + let lines = + candidates |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + report_error + (NormalLine(Printf.sprintf "package '%s' not found. candidates:" (get_lib_path_string libpath)) :: lines) + + | DependencyOnUnknownLock{ depending; depended } -> + report_error [ + NormalLine(Printf.sprintf "unknown depended lock '%s' of '%s'." depended depending); + ] +(* + | CyclicLockDependency(cycle) -> + let pairs = + match cycle with + | Loop(pair) -> [ pair ] + | Cycle(pairs) -> pairs |> TupleList.to_list + in + let lines = + pairs |> List.map (fun (modnm, _lock) -> + DisplayLine(Printf.sprintf "- '%s'" modnm) + ) + in + report_error + (NormalLine("the following packages are cyclic:") :: lines) +*) + | CannotFindLibraryFile(libpath, candidate_paths) -> + let lines = + candidate_paths |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + report_error + (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) + + | CannotSolvePackageConstraints -> + report_error [ + NormalLine("cannot solve package constraints."); + ] +(* + | DocumentAttributeError(e) -> + report_document_attribute_error e + + | MarkdownClassNotFound(modnm) -> + report_error [ + NormalLine(Printf.sprintf "package '%s' not found; required for converting Markdown documents." modnm); + ] + + | NoMarkdownConversion(modnm) -> + report_error [ + NormalLine(Printf.sprintf "package '%s' contains no Markdown conversion rule." modnm); + ] + + | MoreThanOneMarkdownConversion(modnm) -> + report_error [ + NormalLine(Printf.sprintf "package '%s' contains more than one Markdown conversion rule." modnm); + ] + + | MarkdownError(e) -> + begin + match e with + | InvalidHeaderComment -> + report_error [ + NormalLine("invalid or missing header comment of a Markdown document."); + ] + + | InvalidExtraExpression -> + report_error [ + NormalLine("cannot parse an extra expression in a Markdown document."); + ] + + | FailedToMakeDocumentAttribute(de) -> + report_document_attribute_error de + end +*) + | FailedToFetchTarball{ lock_name; exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to fetch '%s' (exit status: %d). command:" lock_name exit_status); + DisplayLine(command); + ] + + | FailedToExtractTarball{ lock_name; exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to extract the tarball of '%s' (exit status: %d). command:" lock_name exit_status); + DisplayLine(command); + ] + + | FailedToFetchExternalZip{ url; exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to fetch file from '%s' (exit status: %d). command:" url exit_status); + DisplayLine(command); + ] + + | ExternalZipChecksumMismatch{ url; path; expected; got } -> + report_error [ + NormalLine("checksum mismatch of an external zip file."); + DisplayLine(Printf.sprintf "- fetched from: '%s'" url); + DisplayLine(Printf.sprintf "- path: '%s'" (get_abs_path_string path)); + DisplayLine(Printf.sprintf "- expected: '%s'" expected); + DisplayLine(Printf.sprintf "- got: '%s'" got); + ] + + | TarGzipChecksumMismatch{ lock_name; url; path; expected; got } -> + report_error [ + NormalLine("checksum mismatch of a tarball."); + DisplayLine(Printf.sprintf "- lock name: '%s'" lock_name); + DisplayLine(Printf.sprintf "- fetched from: '%s'" url); + DisplayLine(Printf.sprintf "- path: '%s'" (get_abs_path_string path)); + DisplayLine(Printf.sprintf "- expected: '%s'" expected); + DisplayLine(Printf.sprintf "- got: '%s'" got); + ] + + | FailedToExtractExternalZip{ exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to extract a zip file (exit status: %d). command:" exit_status); + DisplayLine(command); + ] + + | FailedToCopyFile{ exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to copy a file (exit status: %d). command:" exit_status); + DisplayLine(command); + ] + + | PackageRegistryFetcherError(e) -> + begin + match e with + | FailedToUpdateGitRegistry{ exit_status; command } -> + report_error [ + NormalLine(Printf.sprintf "failed to update registry (exit status: %d). command:" exit_status); + DisplayLine(command); + ] + end + + | CanonicalRegistryUrlError(e) -> + begin + match e with + | ContainsQueryParameter{ url } -> + report_error [ + NormalLine("registry URLs must not contain query parameters:"); + DisplayLine(url); + ] + + | NoUriScheme{ url } -> + report_error [ + NormalLine("the registry URL does not contain a scheme:"); + DisplayLine(url); + ] + + | UnexpectedUrlScheme{ url; scheme } -> + report_error [ + NormalLine(Printf.sprintf "unexpected scheme '%s' in a registry URL:" scheme); + DisplayLine(url); + ] + end + + +let error_log_environment (suspended : unit -> unit) : unit = + try + suspended () + with + | ConfigError(e) -> + report_config_error e + + +let make_package_lock_config_path (abspathstr_in : string) = + make_abs_path (Printf.sprintf "%s/package.satysfi-lock" abspathstr_in) + + +let make_document_lock_config_path (basename_without_extension : string) = + make_abs_path (Printf.sprintf "%s.satysfi-lock" basename_without_extension) + + +type solve_input = + | PackageSolveInput of { + root : abs_path; (* The absolute path of a directory used as the package root *) + lock : abs_path; (* A path for writing a resulting lock file *) + } + | DocumentSolveInput of { + path : abs_path; (* The absolute path to the document file *) + lock : abs_path; (* A path for writing a resulting lock file *) + } + + +let make_registry_hash_value (registry_remote : registry_remote) : (registry_hash_value, config_error) result = + let open ResultMonad in + match registry_remote with + | GitRegistry{ url; branch } -> + let* canonicalized_url = + CanonicalRegistryUrl.make url + |> Result.map_error (fun e -> CanonicalRegistryUrlError(e)) + in + let hash_value = + Digest.to_hex (Digest.string (Printf.sprintf "git#%s#%s" canonicalized_url branch)) + in + Logging.report_canonicalized_url ~url ~canonicalized_url ~hash_value; + return hash_value + + +let update_library_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_library_root : abs_path) : unit = + match + registries |> RegistryHashValueMap.find_opt registry_hash_value + with + | None -> + let library_root_config = + LibraryRootConfig.{ + registries = registries |> RegistryHashValueMap.add registry_hash_value registry_remote; + } + in + LibraryRootConfig.write abspath_library_root library_root_config + + | Some(_registry_remote) -> + () + + +let make_lock_name (lock : Lock.t) : lock_name = + let Lock.{ registry_hash_value; package_name; locked_version } = lock in + Printf.sprintf "registered.%s.%s.%s" + registry_hash_value + package_name + (SemanticVersion.to_string locked_version) + + +let convert_solutions_to_lock_config (solutions : package_solution list) : LockConfig.t * implementation_spec list = + let (locked_package_acc, impl_spec_acc) = + solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> + let lock = solution.lock in + let Lock.{ registry_hash_value; package_name; locked_version = version } = lock in + let locked_package = + LockConfig.{ + lock_name = make_lock_name lock; + lock_contents = RegisteredLock{ registry_hash_value; package_name; version }; + lock_dependencies = solution.locked_dependencies |> List.map make_lock_name; + test_only_lock = solution.used_in_test_only; + } + in + let impl_spec = + ImplSpec{ + lock = solution.lock; + source = solution.locked_source; + } + in + (Alist.extend locked_package_acc locked_package, Alist.extend impl_spec_acc impl_spec) + ) (Alist.empty, Alist.empty) + in + let lock_config = LockConfig.{ locked_packages = Alist.to_list locked_package_acc } in + (lock_config, Alist.to_list impl_spec_acc) + + +(* +let extract_attributes_from_document_file (display_config : Logging.config) (input_kind : input_kind) (abspath_in : abs_path) : (DocumentAttribute.t, config_error) result = + let open ResultMonad in + Logging.begin_to_parse_file display_config abspath_in; + match input_kind with + | InputSatysfi -> + let* utsrc = + ParserInterface.process_file abspath_in + |> Result.map_error (fun rng -> FailedToParse(rng)) + in + let* (attrs, _header, _utast) = + match utsrc with + | UTLibraryFile(_) -> err @@ DocumentLacksWholeReturnValue(abspath_in) + | UTDocumentFile(utdoc) -> return utdoc + in + DocumentAttribute.make attrs + |> Result.map_error (fun e -> DocumentAttributeError(e)) + + | InputMarkdown -> + let* (docattr, _main_module_name, _md) = + match read_file abspath_in with + | Ok(data) -> MarkdownParser.decode data |> Result.map_error (fun e -> MarkdownError(e)) + | Error(msg) -> err (CannotReadFileOwingToSystem(msg)) + in + return docattr +*) + let solve - ~fpath_in:(_ : string) + ~(fpath_in : string) ~show_full_path:(_ : bool) ~config_paths_str_opt:(_ : string option) ~no_default_config:(_ : bool) = - failwith "TODO: migrate `solve` from `satysfi`" + error_log_environment (fun () -> + let curdir = Sys.getcwd () in + + let library_root = + if String.equal Sys.os_type "Win32" then + match Sys.getenv_opt "userprofile" with + | None -> failwith "TODO: userprofile is not set" + | Some(s) -> make_abs_path (Filename.concat s ".saphe") + else + match Sys.getenv_opt "HOME" with + | None -> failwith "TODO: HOME is not set" + | Some(s) -> make_abs_path (Filename.concat s ".saphe") + in + let abspath_in = make_absolute_if_relative ~origin:curdir fpath_in in + let solve_input = + let abspathstr_in = get_abs_path_string abspath_in in + if Sys.is_directory abspathstr_in then + (* If the input is a package directory: *) + let abspath_lock_config = make_package_lock_config_path abspathstr_in in + PackageSolveInput{ + root = abspath_in; + lock = abspath_lock_config; + } + else + let abspathstr_in = get_abs_path_string abspath_in in + let basename_without_extension = Filename.remove_extension abspathstr_in in + let abspath_lock_config = make_document_lock_config_path basename_without_extension in + DocumentSolveInput{ + path = abspath_in; + lock = abspath_lock_config; + } + in + + let res = + let open ResultMonad in + let abspath_library_root_config = + make_abs_path + (Filename.concat + (get_abs_path_string library_root) + (get_lib_path_string Constant.library_root_config_file)) + in + let* library_root_config = LibraryRootConfig.load abspath_library_root_config in + let* (dependencies_with_flags, abspath_lock_config, registry_specs) = + match solve_input with + | PackageSolveInput{ + root = absdir_package; + lock = abspath_lock_config; + } -> + let* PackageConfig.{ package_contents; registry_specs; _ } = PackageConfig.load absdir_package in + begin + match package_contents with + | PackageConfig.Library{ dependencies; test_dependencies; _ } -> + let dependencies_with_flags = + List.append + (dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) + in + return (dependencies_with_flags, abspath_lock_config, registry_specs) + + | PackageConfig.Font(_) -> + return ([], abspath_lock_config, registry_specs) + end + + | DocumentSolveInput{ + path = _abspath_in; + lock = _abspath_lock_config; + } -> + failwith "TODO: DocumentSolveInput" +(* + let* DocumentAttribute.{ registry_specs; dependencies } = + extract_attributes_from_document_file display_config input_kind abspath_in + in + let dependencies_with_flags = dependencies |> List.map (fun dep -> (SourceDependency, dep)) in + return (dependencies_with_flags, abspath_lock_config, registry_specs) +*) + in + + Logging.show_package_dependency_before_solving dependencies_with_flags; + + let* registries = + RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> + let* registries = res in + let* registry_hash_value = make_registry_hash_value registry_remote in + + (* Manupulates the library root config: *) + update_library_root_config_if_needed + library_root_config.LibraryRootConfig.registries + registry_hash_value + registry_remote + abspath_library_root_config; + + (* Fetches registry configs: *) + let absdir_registry_repo = + let libpath_registry_root = Constant.registry_root_directory registry_hash_value in + make_abs_path + (Filename.concat + (get_abs_path_string library_root) + (get_lib_path_string libpath_registry_root)) + in + let git_command = "git" in (* TODO: make this changeable *) + let* () = + PackageRegistryFetcher.main ~git_command absdir_registry_repo registry_remote + |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) + in + + let* PackageRegistryConfig.{ packages = packages_in_registry } = + let abspath_registry_config = + make_abs_path + (Filename.concat + (get_abs_path_string absdir_registry_repo) + Constant.package_registry_config_file_name) + in + PackageRegistryConfig.load abspath_registry_config + in + let registry_spec = { packages_in_registry; registry_hash_value } in + return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) + + ) registry_specs (return RegistryLocalNameMap.empty) + in + + let package_context = { registries } in + let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in + begin + match solutions_opt with + | None -> + err CannotSolvePackageConstraints + + | Some(solutions) -> + + Logging.show_package_dependency_solutions solutions; + + let (lock_config, impl_specs) = convert_solutions_to_lock_config solutions in + + let wget_command = "wget" in (* TODO: make this changeable *) + let tar_command = "tar" in (* TODO: make this changeable *) + let unzip_command = "unzip" in (* TODO: make this changeable *) + let* () = + impl_specs |> foldM (fun () impl_spec -> + LockFetcher.main + ~wget_command ~tar_command ~unzip_command ~library_root impl_spec + ) () + in + LockConfig.write abspath_lock_config lock_config; + return () + end + in + begin + match res with + | Ok(()) -> () + | Error(e) -> raise (ConfigError(e)) + end + ) diff --git a/src/frontend/packageConfig.ml b/bin-saphe/packageConfig.ml similarity index 96% rename from src/frontend/packageConfig.ml rename to bin-saphe/packageConfig.ml index ecd76070e..4d1b6d80f 100644 --- a/src/frontend/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -1,6 +1,5 @@ open MyUtil -open Types open ConfigError open ConfigUtil open PackageSystemBase @@ -10,18 +9,25 @@ type 'a ok = ('a, config_error) result type relative_path = string +type font_file_contents = + | OpentypeSingle of string + | OpentypeCollection of string list +[@@deriving show] + type font_file_description = { font_file_path : relative_path; font_file_contents : font_file_contents; used_as_math_font : bool; } -type package_conversion_spec = +type package_conversion_spec = unit (* TODO *) +(* | MarkdownConversion of MarkdownParser.command_record +*) type package_contents = | Library of { - main_module_name : module_name; + main_module_name : string; source_directories : relative_path list; test_directories : relative_path list; dependencies : package_dependency list; @@ -29,7 +35,7 @@ type package_contents = conversion_specs : package_conversion_spec list; } | Font of { - main_module_name : module_name; + main_module_name : string; font_file_descriptions : font_file_description list; } @@ -71,6 +77,7 @@ let font_file_description_decoder : font_file_description ConfigDecoder.t = } +(* let cut_module_names (s : string) : string list * string = match List.rev (String.split_on_char '.' s) with | varnm :: modnms_rev -> (List.rev modnms_rev, varnm) @@ -170,6 +177,12 @@ let conversion_spec_decoder : package_conversion_spec ConfigDecoder.t = ~other:(fun tag -> failure (fun context -> UnexpectedTag(context, tag)) ) +*) + +(* TODO: fix this *) +let conversion_spec_decoder = + let open ConfigDecoder in + succeed () let contents_decoder : package_contents ConfigDecoder.t = diff --git a/src/frontend/packageConfig.mli b/bin-saphe/packageConfig.mli similarity index 78% rename from src/frontend/packageConfig.mli rename to bin-saphe/packageConfig.mli index 567d8de21..5240c45a2 100644 --- a/src/frontend/packageConfig.mli +++ b/bin-saphe/packageConfig.mli @@ -1,23 +1,29 @@ open MyUtil -open Types open ConfigError open PackageSystemBase type relative_path = string +type font_file_contents = + | OpentypeSingle of string + | OpentypeCollection of string list +[@@deriving show { with_path = false }] + type font_file_description = { font_file_path : relative_path; font_file_contents : font_file_contents; used_as_math_font : bool; } -type package_conversion_spec = +type package_conversion_spec = unit (* TODO *) +(* | MarkdownConversion of MarkdownParser.command_record +*) type package_contents = | Library of { - main_module_name : module_name; + main_module_name : string; source_directories : relative_path list; test_directories : relative_path list; dependencies : package_dependency list; @@ -25,7 +31,7 @@ type package_contents = conversion_specs : package_conversion_spec list; } | Font of { - main_module_name : module_name; + main_module_name : string; font_file_descriptions : font_file_description list; } diff --git a/src/frontend/packageConstraintSolver.ml b/bin-saphe/packageConstraintSolver.ml similarity index 99% rename from src/frontend/packageConstraintSolver.ml rename to bin-saphe/packageConstraintSolver.ml index 61ad82632..169e08795 100644 --- a/src/frontend/packageConstraintSolver.ml +++ b/bin-saphe/packageConstraintSolver.ml @@ -192,6 +192,7 @@ module SolverInput = struct impl_records |> List.filter_map (fun impl_record -> let ImplRecord{ version; source; language_requirement; dependencies } = impl_record in if Constant.current_language_version |> SemanticVersion.fulfill language_requirement then + (* TODO: change the condition above *) if String.equal (SemanticVersion.get_compatibility_unit version) compatibility then let dependencies = make_internal_dependency_from_registry registry_local_name context dependencies diff --git a/src/frontend/packageConstraintSolver.mli b/bin-saphe/packageConstraintSolver.mli similarity index 100% rename from src/frontend/packageConstraintSolver.mli rename to bin-saphe/packageConstraintSolver.mli diff --git a/src/frontend/packageRegistryConfig.ml b/bin-saphe/packageRegistryConfig.ml similarity index 100% rename from src/frontend/packageRegistryConfig.ml rename to bin-saphe/packageRegistryConfig.ml diff --git a/src/frontend/packageRegistryFetcher.ml b/bin-saphe/packageRegistryFetcher.ml similarity index 100% rename from src/frontend/packageRegistryFetcher.ml rename to bin-saphe/packageRegistryFetcher.ml diff --git a/src/frontend/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml similarity index 100% rename from src/frontend/packageSystemBase.ml rename to bin-saphe/packageSystemBase.ml diff --git a/src/frontend/shellCommand.ml b/bin-saphe/shellCommand.ml similarity index 100% rename from src/frontend/shellCommand.ml rename to bin-saphe/shellCommand.ml diff --git a/src/frontend/shellCommand.mli b/bin-saphe/shellCommand.mli similarity index 100% rename from src/frontend/shellCommand.mli rename to bin-saphe/shellCommand.mli diff --git a/bin/dune b/bin/dune index 3207d88c1..836002a23 100644 --- a/bin/dune +++ b/bin/dune @@ -1,6 +1,7 @@ (executable (name satysfi) (public_name satysfi) + (package satysfi) (libraries main cmdliner) diff --git a/saphe.opam b/saphe.opam new file mode 100644 index 000000000..27e5f8e8a --- /dev/null +++ b/saphe.opam @@ -0,0 +1,44 @@ +opam-version: "2.0" +name: "saphe" +version: "0.0.1" +maintainer: "Takashi Suwa" +authors: [ + "Takashi Suwa" +] +homepage: "https://github.com/gfngfn/SATySFi" +dev-repo: "git+https://github.com/gfngfn/SATySFi.git" +bug-reports: "https://github.com/gfngfn/SATySFi/issues" +build: [ + ["mkdir" "-p" "temp"] + [make "-f" "Makefile" "PREFIX=%{prefix}%"] +] +install: [ + [make "-f" "Makefile" "install" "PREFIX=%{prefix}%"] +] +remove: [ + [make "-f" "Makefile" "uninstall" "PREFIX=%{prefix}%"] +] +# Packages whose version suffix is "+satysfi" are distributed on satysfi-external-repo. +depends: [ + "ocaml" {>= "4.12.0"} + "batteries" + "cmdliner" {>= "1.1.1"} + "core_kernel" {>= "v0.15"} + "core_unix" {>= "v0.15"} + "dune" {build} + "ocamlfind" {build} + "otfed" {= "0.3.1"} + "ppx_deriving" + "uutf" + "yojson-with-position" {= "1.4.2+satysfi"} + "omd" {= "2.0.0~alpha3"} + "ocamlgraph" + "alcotest" {with-test & >= "1.4.0"} + "yaml" {>= "2.1.0"} + "0install-solver" {>= "2.0" & < "3.0"} + "semver2" {>= "1.2.0"} + "uri" {>= "4.2.0"} +] +synopsis: "" +description: """ +""" diff --git a/satysfi-util.opam b/satysfi-util.opam new file mode 100644 index 000000000..e772ff45e --- /dev/null +++ b/satysfi-util.opam @@ -0,0 +1,35 @@ +opam-version: "2.0" +name: "satysfi-util" +version: "0.0.1" +maintainer: "Takashi Suwa" +authors: [ + "Takashi Suwa" +] +homepage: "https://github.com/gfngfn/SATySFi" +dev-repo: "git+https://github.com/gfngfn/SATySFi.git" +bug-reports: "https://github.com/gfngfn/SATySFi/issues" +build: [ + ["mkdir" "-p" "temp"] + [make "-f" "Makefile" "PREFIX=%{prefix}%"] +] +install: [ + [make "-f" "Makefile" "install" "PREFIX=%{prefix}%"] +] +remove: [ + [make "-f" "Makefile" "uninstall" "PREFIX=%{prefix}%"] +] +# Packages whose version suffix is "+satysfi" are distributed on satysfi-external-repo. +depends: [ + "ocaml" {>= "4.12.0"} + "core_kernel" {>= "v0.15"} + "core_unix" {>= "v0.15"} + "uutf" + "dune" {build} + "ocamlfind" {build} + "ppx_deriving" + "alcotest" {with-test & >= "1.4.0"} + "semver2" {>= "1.2.0"} +] +synopsis: "" +description: """ +""" diff --git a/src/alist.ml b/src-util/alist.ml similarity index 100% rename from src/alist.ml rename to src-util/alist.ml diff --git a/src/alist.mli b/src-util/alist.mli similarity index 100% rename from src/alist.mli rename to src-util/alist.mli diff --git a/src/frontend/dependencyGraph.ml b/src-util/dependencyGraph.ml similarity index 93% rename from src/frontend/dependencyGraph.ml rename to src-util/dependencyGraph.ml index bbb7ed96d..99a0338f2 100644 --- a/src/frontend/dependencyGraph.ml +++ b/src-util/dependencyGraph.ml @@ -1,6 +1,16 @@ -open Types +module Cycle = struct + type 'a cycle = + | Loop of 'a + | Cycle of 'a TupleList.t + [@@deriving show { with_path = false; }] + + let map_cycle f = function + | Loop(v) -> Loop(f v) + | Cycle(vs) -> Cycle(TupleList.map f vs) +end +open Cycle module type ElementType = sig type t diff --git a/src/frontend/dependencyGraph.mli b/src-util/dependencyGraph.mli similarity index 92% rename from src/frontend/dependencyGraph.mli rename to src-util/dependencyGraph.mli index cf355d1b9..6778ccf14 100644 --- a/src/frontend/dependencyGraph.mli +++ b/src-util/dependencyGraph.mli @@ -1,6 +1,14 @@ -open Types +module Cycle : sig + type 'a cycle = + | Loop of 'a + | Cycle of 'a TupleList.t + [@@deriving show] + val map_cycle : ('a -> 'b) -> 'a cycle -> 'b cycle +end + +open Cycle module type ElementType = sig type t diff --git a/src-util/dune b/src-util/dune new file mode 100644 index 000000000..97d5376bd --- /dev/null +++ b/src-util/dune @@ -0,0 +1,13 @@ +(library + (name util) + (public_name satysfi-util) + (flags (:standard -bin-annot -thread -safe-string)) + (wrapped false) + (libraries + core_unix + ocamlgraph + semver2 + uutf + yaml) + (preprocess + (pps ppx_deriving.show))) diff --git a/src/myUtil.ml b/src-util/myUtil.ml similarity index 89% rename from src/myUtil.ml rename to src-util/myUtil.ml index 895209496..228f1d91b 100644 --- a/src/myUtil.ml +++ b/src-util/myUtil.ml @@ -71,6 +71,11 @@ module AbsPath = struct end +let make_absolute_if_relative ~(origin : string) (s : string) : abs_path = + let abspath_str = if Filename.is_relative s then Filename.concat origin s else s in + make_abs_path abspath_str + + let read_file (abspath : abs_path) : (string, string) result = let open ResultMonad in try diff --git a/src/myUtil.mli b/src-util/myUtil.mli similarity index 91% rename from src/myUtil.mli rename to src-util/myUtil.mli index 8071ace9f..201f30c9d 100644 --- a/src/myUtil.mli +++ b/src-util/myUtil.mli @@ -34,4 +34,6 @@ module AbsPath : sig val compare : t -> t -> int end +val make_absolute_if_relative : origin:string -> string -> abs_path + val read_file : abs_path -> (string, string) result diff --git a/src/optionMonad.ml b/src-util/optionMonad.ml similarity index 100% rename from src/optionMonad.ml rename to src-util/optionMonad.ml diff --git a/src/optionMonad.mli b/src-util/optionMonad.mli similarity index 100% rename from src/optionMonad.mli rename to src-util/optionMonad.mli diff --git a/src/resultMonad.ml b/src-util/resultMonad.ml similarity index 100% rename from src/resultMonad.ml rename to src-util/resultMonad.ml diff --git a/src/resultMonad.mli b/src-util/resultMonad.mli similarity index 100% rename from src/resultMonad.mli rename to src-util/resultMonad.mli diff --git a/src/frontend/semanticVersion.ml b/src-util/semanticVersion.ml similarity index 100% rename from src/frontend/semanticVersion.ml rename to src-util/semanticVersion.ml diff --git a/src/frontend/semanticVersion.mli b/src-util/semanticVersion.mli similarity index 100% rename from src/frontend/semanticVersion.mli rename to src-util/semanticVersion.mli diff --git a/src/frontend/tupleList.ml b/src-util/tupleList.ml similarity index 100% rename from src/frontend/tupleList.ml rename to src-util/tupleList.ml diff --git a/src/frontend/tupleList.mli b/src-util/tupleList.mli similarity index 100% rename from src/frontend/tupleList.mli rename to src-util/tupleList.mli diff --git a/src/frontend/yamlDecoder.ml b/src-util/yamlDecoder.ml similarity index 100% rename from src/frontend/yamlDecoder.ml rename to src-util/yamlDecoder.ml diff --git a/src/frontend/yamlDecoder.mli b/src-util/yamlDecoder.mli similarity index 100% rename from src/frontend/yamlDecoder.mli rename to src-util/yamlDecoder.mli diff --git a/src/dune b/src/dune index e38e500a0..fb2be2d05 100644 --- a/src/dune +++ b/src/dune @@ -20,7 +20,8 @@ yaml 0install-solver semver2 - uri) + uri + satysfi-util) (preprocess (pps ppx_deriving.show )) diff --git a/src/frontend/closedFileDependencyResolver.ml b/src/frontend/closedFileDependencyResolver.ml index 9f19b5a39..4a7437d75 100644 --- a/src/frontend/closedFileDependencyResolver.ml +++ b/src/frontend/closedFileDependencyResolver.ml @@ -1,5 +1,6 @@ open MyUtil +open DependencyGraph.Cycle open Types open ConfigError diff --git a/src/frontend/closedLockDependencyResolver.ml b/src/frontend/closedLockDependencyResolver.ml index b71810893..d1e3ef5e9 100644 --- a/src/frontend/closedLockDependencyResolver.ml +++ b/src/frontend/closedLockDependencyResolver.ml @@ -1,74 +1,76 @@ open MyUtil -open PackageSystemBase +open DependencyGraph.Cycle open Types +open EnvelopeSystemBase open ConfigError type 'a ok = ('a, config_error) result -module LockDependencyGraph = DependencyGraph.Make(String) +module EnvelopeDependencyGraph = DependencyGraph.Make(String) -let main (display_config : Logging.config) ~(use_test_only_lock : bool) ~library_root:(absdir_lib_root : abs_path) ~(extensions : string list) (lock_config : LockConfig.t) : ((lock_name * (PackageConfig.t * untyped_package)) list) ok = +let main (display_config : Logging.config) ~(use_test_only_envelope : bool) (* ~library_root:(absdir_lib_root : abs_path) *) ~(extensions : string list) (deps_config : DepsConfig.t) : ((envelope_name * (EnvelopeConfig.t * untyped_envelope)) list) ok = let open ResultMonad in - let locks = lock_config.LockConfig.locked_packages in + let DepsConfig.{ envelopes } = deps_config in (* Add vertices: *) let* (graph, entryacc) = - locks |> foldM (fun (graph, entryacc) (lock : LockConfig.locked_package) -> - let LockConfig.{ lock_name; lock_contents; lock_dependencies; test_only_lock; _ } = lock in - if test_only_lock && not use_test_only_lock then + envelopes |> foldM (fun (graph, entryacc) (envelope : DepsConfig.envelope) -> + let DepsConfig.{ envelope_name; envelope_path; envelope_dependencies; test_only_envelope; _ } = envelope in + if test_only_envelope && not use_test_only_envelope then (* Skips test-only locks when using sources only: *) return (graph, entryacc) else - let absdir_package = - match lock_contents with + let absdir_envelope = make_abs_path envelope_path in +(* + match envelope_contents with | RegisteredLock{ registry_hash_value; package_name; version = locked_version } -> let libdir = Constant.lock_directory Lock.{ registry_hash_value; package_name; locked_version } in make_abs_path (Filename.concat (get_abs_path_string absdir_lib_root) (get_lib_path_string libdir)) - in - let* package_with_config = - PackageReader.main display_config ~use_test_files:use_test_only_lock ~extensions absdir_package +*) + let* envelope_with_config = + EnvelopeReader.main display_config ~use_test_files:use_test_only_envelope ~extensions absdir_envelope in let* (graph, vertex) = - graph |> LockDependencyGraph.add_vertex lock_name package_with_config - |> Result.map_error (fun _ -> LockNameConflict(lock_name)) + graph |> EnvelopeDependencyGraph.add_vertex envelope_name envelope_with_config + |> Result.map_error (fun _ -> EnvelopeNameConflict(envelope_name)) in - let lock_info = + let envelope_info = { - lock_name; - lock_directory = absdir_package; - lock_dependencies; + envelope_name; + envelope_directory = absdir_envelope; + envelope_dependencies; } in - return (graph, Alist.extend entryacc (lock_info, vertex)) - ) (LockDependencyGraph.empty, Alist.empty) + return (graph, Alist.extend entryacc (envelope_info, vertex)) + ) (EnvelopeDependencyGraph.empty, Alist.empty) in (* Add edges: *) let* graph = - entryacc |> Alist.to_list |> foldM (fun graph (lock_info, vertex) -> - lock_info.lock_dependencies |> foldM (fun graph lock_name_dep -> + entryacc |> Alist.to_list |> foldM (fun graph (envelope_info, vertex) -> + envelope_info.envelope_dependencies |> foldM (fun graph envelope_name_dep -> begin - match graph |> LockDependencyGraph.get_vertex lock_name_dep with + match graph |> EnvelopeDependencyGraph.get_vertex envelope_name_dep with | None -> - err @@ DependencyOnUnknownLock{ - depending = lock_info.lock_name; - depended = lock_name_dep; + err @@ DependencyOnUnknownEnvelope{ + depending = envelope_info.envelope_name; + depended = envelope_name_dep; } | Some(vertex_dep) -> - let graph = graph |> LockDependencyGraph.add_edge ~from:vertex ~to_:vertex_dep in + let graph = graph |> EnvelopeDependencyGraph.add_edge ~from:vertex ~to_:vertex_dep in return graph end ) graph ) graph in - LockDependencyGraph.topological_sort graph + EnvelopeDependencyGraph.topological_sort graph |> Result.map_error (fun cycle -> - CyclicLockDependency(cycle |> map_cycle (fun (lock_name, (_config, package)) -> (lock_name, package))) + CyclicEnvelopeDependency(cycle |> map_cycle (fun (envelope_name, (_config, envelope_info)) -> (envelope_name, envelope_info))) ) diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 35f2bee08..494e838ca 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -1,53 +1,10 @@ open MyUtil -open PackageSystemBase +open DependencyGraph.Cycle +open EnvelopeSystemBase open Types -type yaml_error = - | ParseError of string - | FieldNotFound of YamlDecoder.context * string - | NotAFloat of YamlDecoder.context - | NotAString of YamlDecoder.context - | NotABool of YamlDecoder.context - | NotAnArray of YamlDecoder.context - | NotAnObject of YamlDecoder.context - | UnexpectedTag of YamlDecoder.context * string - | UnexpectedLanguage of string - | NotASemanticVersion of YamlDecoder.context * string - | NotAVersionRequirement of YamlDecoder.context * string - | InvalidPackageName of YamlDecoder.context * string - | MultiplePackageDefinition of { - context : YamlDecoder.context; - package_name : string; - } - | DuplicateRegistryLocalName of { - context : YamlDecoder.context; - registry_local_name : registry_local_name; - } - | DuplicateRegistryHashValue of { - context : YamlDecoder.context; - registry_hash_value : registry_hash_value; - } - | CannotBeUsedAsAName of YamlDecoder.context * string - | UnsupportedConfigFormat of string - | NotACommand of { - context : YamlDecoder.context; - prefix : char; - string : string; - } - -module YamlError = struct - type t = yaml_error - let parse_error s = ParseError(s) - let field_not_found context s = FieldNotFound(context, s) - let not_a_float context = NotAFloat(context) - let not_a_string context = NotAString(context) - let not_a_bool context = NotABool(context) - let not_an_array context = NotAnArray(context) - let not_an_object context = NotAnObject(context) -end - type config_error = | CyclicFileDependency of (abs_path * untyped_library_file) cycle | CannotReadFileOwingToSystem of string @@ -60,78 +17,22 @@ type config_error = expected : module_name; got : module_name; } - | PackageDirectoryNotFound of string list - | PackageConfigNotFound of abs_path - | PackageConfigError of abs_path * yaml_error - | LockConfigNotFound of abs_path - | LockConfigError of abs_path * yaml_error - | RegistryConfigNotFound of abs_path - | RegistryConfigNotFoundIn of lib_path * abs_path list - | RegistryConfigError of abs_path * yaml_error - | LibraryRootConfigNotFound of abs_path - | LibraryRootConfigNotFoundIn of lib_path * abs_path list - | LibraryRootConfigError of abs_path * yaml_error - | LockNameConflict of lock_name - | LockedPackageNotFound of lib_path * abs_path list - | DependencyOnUnknownLock of { - depending : lock_name; - depended : lock_name; - } - | CyclicLockDependency of (lock_name * untyped_package) cycle - | NotALibraryFile of abs_path | TypeError of TypeError.type_error + | NotALibraryFile of abs_path | FileModuleNotFound of Range.t * module_name | FileModuleNameConflict of module_name * abs_path * abs_path | NotADocumentFile of abs_path * mono_type | NotAStringFile of abs_path * mono_type | NoMainModule of module_name | UnknownPackageDependency of Range.t * module_name - | CannotFindLibraryFile of lib_path * abs_path list + | EnvelopeNameConflict of envelope_name + | DependencyOnUnknownEnvelope of { + depending : envelope_name; + depended : envelope_name; + } + | CyclicEnvelopeDependency of (envelope_name * untyped_envelope) cycle + | LibraryRootConfigNotFoundIn of lib_path * abs_path list | LocalFileNotFound of { relative : string; candidates : abs_path list; } - | CannotSolvePackageConstraints - | DocumentAttributeError of DocumentAttribute.error - | MarkdownClassNotFound of module_name - | NoMarkdownConversion of module_name - | MoreThanOneMarkdownConversion of module_name - | MarkdownError of MarkdownParser.error - | FailedToFetchTarball of { - lock_name : lock_name; - exit_status : int; - command : string; - } - | FailedToExtractTarball of { - lock_name : lock_name; - exit_status : int; - command : string; - } - | FailedToFetchExternalZip of { - url : string; - exit_status : int; - command : string; - } - | ExternalZipChecksumMismatch of { - url : string; - path : abs_path; - expected : string; - got : string; - } - | TarGzipChecksumMismatch of { - lock_name : lock_name; - url : string; - path : abs_path; - expected : string; - got : string; - } - | FailedToExtractExternalZip of { - exit_status : int; - command : string; - } - | FailedToCopyFile of { - exit_status : int; - command : string; - } - | PackageRegistryFetcherError of PackageRegistryFetcher.error - | CanonicalRegistryUrlError of CanonicalRegistryUrl.error diff --git a/src/frontend/constant.ml b/src/frontend/constant.ml index 992dc92c8..7776c4032 100644 --- a/src/frontend/constant.ml +++ b/src/frontend/constant.ml @@ -1,6 +1,5 @@ open MyUtil -open PackageSystemBase let current_language_version = @@ -9,34 +8,6 @@ let current_language_version = | None -> assert false -let lock_tarball_name (package_name : package_name) (locked_version : SemanticVersion.t) : lock_name = - Printf.sprintf "%s.%s" package_name (SemanticVersion.to_string locked_version) - - -let lock_directory (lock : Lock.t) : lib_path = - let Lock.{ registry_hash_value; package_name; locked_version } = lock in - make_lib_path - (Printf.sprintf "packages/%s/%s/%s" - registry_hash_value - package_name - (lock_tarball_name package_name locked_version)) - - -let registry_root_directory (registry_hash_value : registry_hash_value) : lib_path = - make_lib_path (Printf.sprintf "registries/%s" registry_hash_value) - - -let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : lib_path = - make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) - - -let package_config_file_name = - "satysfi.yaml" - - +(* TODO: remove this *) let library_root_config_file = make_lib_path "satysfi-library-root.yaml" - - -let package_registry_config_file_name = - "satysfi-registry.yaml" diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml new file mode 100644 index 000000000..c9adc11af --- /dev/null +++ b/src/frontend/depsConfig.ml @@ -0,0 +1,20 @@ + +open MyUtil +open EnvelopeSystemBase +open ConfigError + + +type envelope = { + envelope_name : envelope_name; + envelope_path : string; + envelope_dependencies : envelope_name list; + test_only_envelope : bool; +} + +type t = { + envelopes : envelope list; +} + + +let load (_abspath : abs_path) : (t, config_error) result = + failwith "TODO: DepsConfig.load" diff --git a/src/frontend/documentAttribute.ml b/src/frontend/documentAttribute.ml index eadecb87f..86c3c7c93 100644 --- a/src/frontend/documentAttribute.ml +++ b/src/frontend/documentAttribute.ml @@ -1,6 +1,5 @@ - +(* open Types -open PackageSystemBase type error = @@ -191,3 +190,4 @@ let make (attrs : untyped_attribute list) : t ok = | (rng1, _) :: (rng2, _) :: _ -> err @@ DuplicateConfigAttribute(rng1, rng2) +*) diff --git a/src/frontend/documentAttribute.mli b/src/frontend/documentAttribute.mli index f36cbf846..96f014038 100644 --- a/src/frontend/documentAttribute.mli +++ b/src/frontend/documentAttribute.mli @@ -1,6 +1,5 @@ - +(* open Types -open PackageSystemBase type error = @@ -31,3 +30,4 @@ type t = { } val make : untyped_attribute list -> (t, error) result +*) diff --git a/src/frontend/envelopeConfig.ml b/src/frontend/envelopeConfig.ml new file mode 100644 index 000000000..5b67a145f --- /dev/null +++ b/src/frontend/envelopeConfig.ml @@ -0,0 +1,44 @@ + +open MyUtil +open ConfigError + + +type 'a ok = ('a, config_error) result + +type relative_path = string + +type font_file_contents = + | OpentypeSingle of string + | OpentypeCollection of string list +[@@deriving show] + +type font_file_description = { + font_file_path : relative_path; + font_file_contents : font_file_contents; + used_as_math_font : bool; +} + +type envelope_conversion_spec = unit (* TODO *) +(* + | MarkdownConversion of MarkdownParser.command_record +*) + +type envelope_contents = + | Library of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + conversion_specs : envelope_conversion_spec list; + } + | Font of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } + +type t = { + envelope_contents : envelope_contents; +} + + +let load (_abspath : abs_path) : t ok = + failwith "TODO: EnvelopeConfig.load" diff --git a/src/frontend/packageReader.ml b/src/frontend/envelopeReader.ml similarity index 70% rename from src/frontend/packageReader.ml rename to src/frontend/envelopeReader.ml index e13545cae..f319806f7 100644 --- a/src/frontend/packageReader.ml +++ b/src/frontend/envelopeReader.ml @@ -23,17 +23,22 @@ let make_path_list_absolute ~(origin : abs_path) (reldirs : string list) : abs_p ) -let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (absdir_package : abs_path) : (PackageConfig.t * untyped_package) ok = +let convert_font_file_contents = function + | EnvelopeConfig.OpentypeSingle(x) -> OpentypeSingle(x) + | EnvelopeConfig.OpentypeCollection(xs) -> OpentypeCollection(xs) + + +let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (absdir_envelope : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = let open ResultMonad in - let* config = PackageConfig.load absdir_package in - let* package = - match config.package_contents with - | PackageConfig.Library{ main_module_name; source_directories; test_directories; _ } -> - let absdirs_src = source_directories |> make_path_list_absolute ~origin:absdir_package in + let* config = EnvelopeConfig.load absdir_envelope in + let* envelope = + match config.envelope_contents with + | EnvelopeConfig.Library{ main_module_name; source_directories; test_directories; _ } -> + let absdirs_src = source_directories |> make_path_list_absolute ~origin:absdir_envelope in let abspaths_src = absdirs_src |> List.map (listup_sources_in_directory extensions) |> List.concat in let abspaths = if use_test_files then - let absdirs_test = test_directories |> make_path_list_absolute ~origin:absdir_package in + let absdirs_test = test_directories |> make_path_list_absolute ~origin:absdir_envelope in let abspaths_test = absdirs_test |> List.map (listup_sources_in_directory extensions) |> List.concat in List.append abspaths_src abspaths_test else @@ -55,26 +60,26 @@ let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions ) Alist.empty in let modules = Alist.to_list acc in - return @@ UTLibraryPackage{ + return @@ UTLibraryEnvelope{ main_module_name; modules; } - | PackageConfig.Font{ main_module_name; font_file_descriptions } -> + | EnvelopeConfig.Font{ main_module_name; font_file_descriptions } -> let font_files = font_file_descriptions |> List.map (fun font_file_description -> - let PackageConfig.{ font_file_path; font_file_contents; used_as_math_font } = font_file_description in - let abspath = make_abs_path (Filename.concat (get_abs_path_string absdir_package) font_file_path) in + let EnvelopeConfig.{ font_file_path; font_file_contents; used_as_math_font } = font_file_description in + let abspath = make_abs_path (Filename.concat (get_abs_path_string absdir_envelope) font_file_path) in { r_font_file_path = abspath; - r_font_file_contents = font_file_contents; + r_font_file_contents = convert_font_file_contents font_file_contents; r_used_as_math_font = used_as_math_font; } ) in - return @@ UTFontPackage{ + return @@ UTFontEnvelope{ main_module_name; font_files; } in - return (config, package) + return (config, envelope) diff --git a/src/frontend/packageReader.mli b/src/frontend/envelopeReader.mli similarity index 63% rename from src/frontend/packageReader.mli rename to src/frontend/envelopeReader.mli index 0c4e60383..b2ec89317 100644 --- a/src/frontend/packageReader.mli +++ b/src/frontend/envelopeReader.mli @@ -7,4 +7,4 @@ val main : Logging.config -> use_test_files:bool -> extensions:(string list) -> - abs_path -> (PackageConfig.t * untyped_package, config_error) result + abs_path -> (EnvelopeConfig.t * untyped_envelope, config_error) result diff --git a/src/frontend/envelopeSystemBase.ml b/src/frontend/envelopeSystemBase.ml new file mode 100644 index 000000000..6358e0095 --- /dev/null +++ b/src/frontend/envelopeSystemBase.ml @@ -0,0 +1,15 @@ + +open MyUtil + + +type envelope_name = string + +type envelope_info = { + envelope_name : envelope_name; + envelope_directory : abs_path; + envelope_dependencies : envelope_name list; +} + +type input_kind = + | InputSatysfi + | InputMarkdown diff --git a/src/frontend/logging.ml b/src/frontend/logging.ml index cf38d1000..4a50f63cd 100644 --- a/src/frontend/logging.ml +++ b/src/frontend/logging.ml @@ -1,6 +1,5 @@ open MyUtil -open PackageSystemBase type config = { @@ -115,35 +114,6 @@ let begin_to_write_page () = print_endline (" writing pages ...") -let show_package_dependency_before_solving (dependencies_with_flags : (dependency_flag * package_dependency) list) = - Printf.printf " package dependencies to solve:\n"; - dependencies_with_flags |> List.iter (fun (flag, dep) -> - let PackageDependency{ package_name; spec } = dep in - match spec with - | RegisteredDependency{ version_requirement; _ } -> - let s_restr = SemanticVersion.requirement_to_string version_requirement in - let s_test_only = - match flag with - | SourceDependency -> "" - | TestOnlyDependency -> ", test_only" - in - Printf.printf " - %s (%s%s)\n" package_name s_restr s_test_only; - ) - - -let show_package_dependency_solutions (solutions : package_solution list) = - Printf.printf " package dependency solutions:\n"; - solutions |> List.iter (fun solution -> - let Lock.{ package_name; locked_version; _ } = solution.lock in - Printf.printf " - %s %s\n" package_name (SemanticVersion.to_string locked_version) - ) - - -let end_lock_output (config : config) (file_name_out : abs_path) = - print_endline (" ---- ---- ---- ----"); - print_endline (" output written on '" ^ (show_path config file_name_out) ^ "'.") - - let warn_cmyk_image (file_name : abs_path) = let config = { show_full_path = true } in (* TODO: make this changeable *) print_endline (" [Warning] (" ^ (show_path config file_name) ^ ") Jpeg images with CMYK color mode are not fully supported."); @@ -209,23 +179,6 @@ let some_test_failed () = print_endline "! some test has failed." -let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = - Printf.printf " '%s': already installed at '%s'\n" lock_name (get_abs_path_string absdir) - - -let lock_cache_exists (lock_name : lock_name) (abspath_tarball : abs_path) = - Printf.printf " cache for '%s' exists at '%s'\n" lock_name (get_abs_path_string abspath_tarball) - - -let downloading_lock (lock_name : lock_name) (absdir : abs_path) = - Printf.printf " downloading '%s' to '%s'...\n" lock_name (get_abs_path_string absdir) - - -let report_canonicalized_url ~(url : string) ~(canonicalized_url : string) ~(hash_value : registry_hash_value) = - Printf.printf " registry URL: '%s'\n" url; - Printf.printf " canonicalized: '%s'\n" canonicalized_url; - Printf.printf " hash value: '%s'\n" hash_value - let warn_wide_column_cell_overrides_nonempty_cell () = Format.printf " [Warning] a non-empty cell was overridden by a cell that has more than one column span.\n" diff --git a/src/frontend/logging.mli b/src/frontend/logging.mli index afc11d139..54a040a75 100644 --- a/src/frontend/logging.mli +++ b/src/frontend/logging.mli @@ -1,6 +1,5 @@ open MyUtil -open PackageSystemBase type config = { show_full_path : bool; @@ -36,18 +35,12 @@ val dump_file : config -> already_exists:bool -> abs_path -> unit val lock_config_file : config -> abs_path -> unit -val show_package_dependency_before_solving : (dependency_flag * package_dependency) list -> unit - -val show_package_dependency_solutions : package_solution list -> unit - val begin_to_embed_fonts : unit -> unit val begin_to_write_page : unit -> unit val needs_another_trial : unit -> unit -val end_lock_output : config -> abs_path -> unit - val warn_noninjective_cmap : Uchar.t -> Uchar.t -> Otfed.Value.glyph_id -> unit val warn_noninjective_ligature : Otfed.Value.glyph_id -> unit @@ -76,14 +69,6 @@ val all_tests_passed : unit -> unit val some_test_failed : unit -> unit -val lock_already_installed : lock_name -> abs_path -> unit - -val lock_cache_exists : lock_name -> abs_path -> unit - -val downloading_lock : lock_name -> abs_path -> unit - -val report_canonicalized_url : url:string -> canonicalized_url:string -> hash_value:registry_hash_value -> unit - val warn_wide_column_cell_overrides_nonempty_cell : unit -> unit val warn_wide_row_cell_overrides_nonempty_cell : unit -> unit diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 5498bb4a3..9d854b523 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1,14 +1,16 @@ open MyUtil +open EnvelopeSystemBase open Types open StaticEnv -open PackageSystemBase open ConfigError open FontError open TypeError +(* exception NoLibraryRootDesignation +*) exception ShouldSpecifyOutputFile exception UnexpectedExtension of string exception ConfigError of config_error @@ -38,18 +40,13 @@ let initialize ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_c EvalVarID.initialize (); StoreID.initialize (); FontInfo.initialize (); - let res = + let (tyenv, env) = match output_mode with | TextMode(_) -> Primitives.make_text_mode_environments runtime_config | PdfMode -> Primitives.make_pdf_mode_environments runtime_config in - let (tyenv, env) = - match res with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) - in begin if is_bytecomp_mode then Bytecomp.compile_environment env @@ -817,78 +814,7 @@ let report_type_error = function ] -let show_yaml_context (context : YamlDecoder.context) = - match context with - | [] -> - "" - - | _ :: _ -> - let s_context = - let open YamlDecoder in - context |> List.map (function - | Field(field) -> Printf.sprintf ".%s" field - | Index(index) -> Printf.sprintf ".[%d]" index - ) |> String.concat "" - in - Printf.sprintf " (context: %s)" s_context - - -let make_yaml_error_lines : yaml_error -> line list = function - | ParseError(s) -> - [ NormalLine(Printf.sprintf "parse error: %s" s) ] - - | FieldNotFound(yctx, field) -> - [ NormalLine(Printf.sprintf "field '%s' not found%s" field (show_yaml_context yctx)) ] - - | NotAFloat(yctx) -> - [ NormalLine(Printf.sprintf "not a float value%s" (show_yaml_context yctx)) ] - - | NotAString(yctx) -> - [ NormalLine(Printf.sprintf "not a string value%s" (show_yaml_context yctx)) ] - - | NotABool(yctx) -> - [ NormalLine(Printf.sprintf "not a Boolean value%s" (show_yaml_context yctx)) ] - - | NotAnArray(yctx) -> - [ NormalLine(Printf.sprintf "not an array%s" (show_yaml_context yctx)) ] - - | NotAnObject(yctx) -> - [ NormalLine(Printf.sprintf "not an object%s" (show_yaml_context yctx)) ] - - | UnexpectedTag(yctx, tag) -> - [ NormalLine(Printf.sprintf "unexpected type tag '%s'%s" tag (show_yaml_context yctx)) ] - - | UnexpectedLanguage(s_language_version) -> - [ NormalLine(Printf.sprintf "unexpected language version '%s'" s_language_version) ] - - | NotASemanticVersion(yctx, s) -> - [ NormalLine(Printf.sprintf "not a semantic version: '%s'%s" s (show_yaml_context yctx)) ] - - | NotAVersionRequirement(yctx, s) -> - [ NormalLine(Printf.sprintf "not a version requirement: '%s'%s" s (show_yaml_context yctx)) ] - - | InvalidPackageName(yctx, s) -> - [ NormalLine(Printf.sprintf "not a package name: '%s'%s" s (show_yaml_context yctx)) ] - - | MultiplePackageDefinition{ context = yctx; package_name } -> - [ NormalLine(Printf.sprintf "More than one definition for package '%s'%s" package_name (show_yaml_context yctx)) ] - - | DuplicateRegistryLocalName{ context = yctx; registry_local_name } -> - [ NormalLine(Printf.sprintf "More than one definition for registry local name '%s'%s" registry_local_name (show_yaml_context yctx)) ] - - | DuplicateRegistryHashValue{ context = yctx; registry_hash_value } -> - [ NormalLine(Printf.sprintf "More than one definition for registry hash value '%s'%s" registry_hash_value (show_yaml_context yctx)) ] - - | CannotBeUsedAsAName(yctx, s) -> - [ NormalLine(Printf.sprintf "'%s' cannot be used as a name%s" s (show_yaml_context yctx)) ] - - | UnsupportedConfigFormat(format) -> - [ NormalLine(Printf.sprintf "unsupported config format '%s'" format) ] - - | NotACommand{ context = yctx; prefix = _; string = s } -> - [ NormalLine(Printf.sprintf "not a command: '%s'%s" s (show_yaml_context yctx)) ] - - +(* let report_document_attribute_error : DocumentAttribute.error -> unit = function | NoConfigArgument(rng) -> report_error Interface [ @@ -956,6 +882,7 @@ let report_document_attribute_error : DocumentAttribute.error -> unit = function NormalLine(Printf.sprintf "at %s:" (Range.to_string list_range)); NormalLine(Printf.sprintf "this list has more than one registy named '%s'." registry_local_name); ] +*) let module_name_chain_to_string (((_, modnm0), modidents) : module_name_chain) = @@ -965,6 +892,12 @@ let module_name_chain_to_string (((_, modnm0), modidents) : module_name_chain) = let report_config_error (display_config : Logging.config) : config_error -> unit = function + | NotALibraryFile(abspath) -> + report_error Typechecker [ + NormalLine("the following file is expected to be a library file, but is not:"); + DisplayLine(get_abs_path_string abspath); + ] + | NotADocumentFile(abspath_in, ty) -> let fname = Logging.show_path display_config abspath_in in report_error Typechecker [ @@ -1057,105 +990,17 @@ let report_config_error (display_config : Logging.config) : config_error -> unit NormalLine(Printf.sprintf "main module name mismatch; expected '%s' but got '%s'." expected got); ] - | PackageDirectoryNotFound(candidate_paths) -> - let lines = - candidate_paths |> List.map (fun path -> - DisplayLine(Printf.sprintf "- %s" path) - ) - in - report_error Interface - (NormalLine("cannot find package directory. candidates:") :: lines) - - | PackageConfigNotFound(abspath) -> + | EnvelopeNameConflict(envelope_name) -> report_error Interface [ - NormalLine("cannot find a package config at:"); - DisplayLine(get_abs_path_string abspath); + NormalLine(Printf.sprintf "envelope name conflict: '%s'" envelope_name); ] - | PackageConfigError(abspath, e) -> - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "in %s: package config error;" (get_abs_path_string abspath)) ]; - make_yaml_error_lines e; - ]) - - | LockConfigNotFound(abspath) -> + | DependencyOnUnknownEnvelope{ depending; depended } -> report_error Interface [ - NormalLine("cannot find a lock config at:"); - DisplayLine(get_abs_path_string abspath); + NormalLine(Printf.sprintf "unknown depended envelope '%s' of '%s'." depended depending); ] - | LockConfigError(abspath, e) -> - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "in %s: lock config error;" (get_abs_path_string abspath)) ]; - make_yaml_error_lines e; - ]) - - | RegistryConfigNotFound(abspath) -> - report_error Interface [ - NormalLine("cannot find a registry config at:"); - DisplayLine(get_abs_path_string abspath); - ] - - | RegistryConfigNotFoundIn(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "cannot find a registry config '%s'. candidates:" (get_lib_path_string libpath)) ]; - lines; - ]) - - | RegistryConfigError(abspath, e) -> - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "in %s: registry config error;" (get_abs_path_string abspath)) ]; - make_yaml_error_lines e; - ]) - - | LibraryRootConfigNotFound(abspath) -> - report_error Interface [ - NormalLine("cannot find a library root config at:"); - DisplayLine(get_abs_path_string abspath); - ] - - | LibraryRootConfigNotFoundIn(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "cannot find a library root config '%s'. candidates:" (get_lib_path_string libpath)) ]; - lines; - ]) - - | LibraryRootConfigError(abspath, e) -> - report_error Interface (List.concat [ - [ NormalLine(Printf.sprintf "in %s: library root config error;" (get_abs_path_string abspath)) ]; - make_yaml_error_lines e; - ]) - - | LockNameConflict(lock_name) -> - report_error Interface [ - NormalLine(Printf.sprintf "lock name conflict: '%s'" lock_name); - ] - - | LockedPackageNotFound(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - report_error Interface - (NormalLine(Printf.sprintf "package '%s' not found. candidates:" (get_lib_path_string libpath)) :: lines) - - | DependencyOnUnknownLock{ depending; depended } -> - report_error Interface [ - NormalLine(Printf.sprintf "unknown depended lock '%s' of '%s'." depended depending); - ] - - | CyclicLockDependency(cycle) -> + | CyclicEnvelopeDependency(cycle) -> let pairs = match cycle with | Loop(pair) -> [ pair ] @@ -1167,22 +1012,18 @@ let report_config_error (display_config : Logging.config) : config_error -> unit ) in report_error Interface - (NormalLine("the following packages are cyclic:") :: lines) - - | NotALibraryFile(abspath) -> - report_error Interface [ - NormalLine("the following file is expected to be a library file, but is not:"); - DisplayLine(get_abs_path_string abspath); - ] + (NormalLine("the following envelopes are cyclic:") :: lines) - | CannotFindLibraryFile(libpath, candidate_paths) -> + | LibraryRootConfigNotFoundIn(libpath, candidates) -> let lines = - candidate_paths |> List.map (fun abspath -> + candidates |> List.map (fun abspath -> DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) ) in - report_error Interface - (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) + report_error Interface (List.concat [ + [ NormalLine(Printf.sprintf "cannot find a library root config '%s'. candidates:" (get_lib_path_string libpath)) ]; + lines; + ]) | LocalFileNotFound{ relative; candidates } -> let lines = @@ -1193,127 +1034,6 @@ let report_config_error (display_config : Logging.config) : config_error -> unit report_error Interface (NormalLine(Printf.sprintf "cannot find local file '%s'. candidates:" relative) :: lines) - | CannotSolvePackageConstraints -> - report_error Interface [ - NormalLine("cannot solve package constraints."); - ] - - | DocumentAttributeError(e) -> - report_document_attribute_error e - - | MarkdownClassNotFound(modnm) -> - report_error Interface [ - NormalLine(Printf.sprintf "package '%s' not found; required for converting Markdown documents." modnm); - ] - - | NoMarkdownConversion(modnm) -> - report_error Interface [ - NormalLine(Printf.sprintf "package '%s' contains no Markdown conversion rule." modnm); - ] - - | MoreThanOneMarkdownConversion(modnm) -> - report_error Interface [ - NormalLine(Printf.sprintf "package '%s' contains more than one Markdown conversion rule." modnm); - ] - - | MarkdownError(e) -> - begin - match e with - | InvalidHeaderComment -> - report_error Interface [ - NormalLine("invalid or missing header comment of a Markdown document."); - ] - - | InvalidExtraExpression -> - report_error Interface [ - NormalLine("cannot parse an extra expression in a Markdown document."); - ] - - | FailedToMakeDocumentAttribute(de) -> - report_document_attribute_error de - end - - | FailedToFetchTarball{ lock_name; exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to fetch '%s' (exit status: %d). command:" lock_name exit_status); - DisplayLine(command); - ] - - | FailedToExtractTarball{ lock_name; exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to extract the tarball of '%s' (exit status: %d). command:" lock_name exit_status); - DisplayLine(command); - ] - - | FailedToFetchExternalZip{ url; exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to fetch file from '%s' (exit status: %d). command:" url exit_status); - DisplayLine(command); - ] - - | ExternalZipChecksumMismatch{ url; path; expected; got } -> - report_error Interface [ - NormalLine("checksum mismatch of an external zip file."); - DisplayLine(Printf.sprintf "- fetched from: '%s'" url); - DisplayLine(Printf.sprintf "- path: '%s'" (get_abs_path_string path)); - DisplayLine(Printf.sprintf "- expected: '%s'" expected); - DisplayLine(Printf.sprintf "- got: '%s'" got); - ] - - | TarGzipChecksumMismatch{ lock_name; url; path; expected; got } -> - report_error Interface [ - NormalLine("checksum mismatch of a tarball."); - DisplayLine(Printf.sprintf "- lock name: '%s'" lock_name); - DisplayLine(Printf.sprintf "- fetched from: '%s'" url); - DisplayLine(Printf.sprintf "- path: '%s'" (get_abs_path_string path)); - DisplayLine(Printf.sprintf "- expected: '%s'" expected); - DisplayLine(Printf.sprintf "- got: '%s'" got); - ] - - | FailedToExtractExternalZip{ exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to extract a zip file (exit status: %d). command:" exit_status); - DisplayLine(command); - ] - - | FailedToCopyFile{ exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to copy a file (exit status: %d). command:" exit_status); - DisplayLine(command); - ] - - | PackageRegistryFetcherError(e) -> - begin - match e with - | FailedToUpdateGitRegistry{ exit_status; command } -> - report_error Interface [ - NormalLine(Printf.sprintf "failed to update registry (exit status: %d). command:" exit_status); - DisplayLine(command); - ] - end - - | CanonicalRegistryUrlError(e) -> - begin - match e with - | ContainsQueryParameter{ url } -> - report_error Interface [ - NormalLine("registry URLs must not contain query parameters:"); - DisplayLine(url); - ] - - | NoUriScheme{ url } -> - report_error Interface [ - NormalLine("the registry URL does not contain a scheme:"); - DisplayLine(url); - ] - - | UnexpectedUrlScheme{ url; scheme } -> - report_error Interface [ - NormalLine(Printf.sprintf "unexpected scheme '%s' in a registry URL:" scheme); - DisplayLine(url); - ] - end - let report_font_error (display_config : Logging.config) : font_error -> unit = function | FailedToReadFont(abspath, msg) -> @@ -1394,12 +1114,14 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> DisplayLine(msg); ] +(* | NoLibraryRootDesignation -> report_error Interface [ NormalLine("cannot determine where the SATySFi library root is;"); NormalLine("set appropriate environment variables"); NormalLine("or specify configuration search paths with -C option."); ] +*) | ShouldSpecifyOutputFile -> report_error Interface [ @@ -1513,6 +1235,7 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> report_error System [ NormalLine(s); ] +(* let setup_root_dirs ~(no_default_config : bool) ~(extra_config_paths : (string list) option) (curdir : string) : abs_path = let runtime_dirs = if Sys.os_type = "Win32" then @@ -1556,11 +1279,7 @@ let setup_root_dirs ~(no_default_config : bool) ~(extra_config_paths : (string l | Ok(abspath) -> make_abs_path (Filename.dirname (get_abs_path_string abspath)) - - -let make_absolute_if_relative ~(origin : string) (s : string) : abs_path = - let abspath_str = if Filename.is_relative s then Filename.concat origin s else s in - make_abs_path abspath_str +*) let get_candidate_file_extensions (output_mode : output_mode) = @@ -1588,10 +1307,10 @@ let get_input_kind_from_extension (abspathstr_in : string) = | ext -> Error(ext) -let check_depended_packages (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_lock : bool) ~(library_root : abs_path) ~(extensions : string list) (tyenv_prim : Typeenv.t) (lock_config : LockConfig.t) = +let check_depended_packages (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) (* ~(library_root : abs_path) *) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = (* Resolve dependency among locked packages: *) let sorted_packages = - match ClosedLockDependencyResolver.main display_config ~use_test_only_lock ~library_root ~extensions lock_config with + match ClosedLockDependencyResolver.main display_config ~use_test_only_envelope (* ~library_root *) ~extensions deps_config with | Ok(sorted_packages) -> sorted_packages | Error(e) -> raise (ConfigError(e)) in @@ -1601,8 +1320,8 @@ let check_depended_packages (display_config : Logging.config) (typecheck_config sorted_packages |> List.fold_left (fun (genv, configenv, libacc) (_lock_name, (config, package)) -> let main_module_name = match package with - | UTLibraryPackage{ main_module_name; _ } -> main_module_name - | UTFontPackage{ main_module_name; _ } -> main_module_name + | UTLibraryEnvelope{ main_module_name; _ } -> main_module_name + | UTFontEnvelope{ main_module_name; _ } -> main_module_name in let (ssig, libs) = match PackageChecker.main display_config typecheck_config tyenv_prim genv package with @@ -1632,14 +1351,14 @@ let make_output_mode text_mode_formats_str_opt = | Some(s) -> TextMode(String.split_on_char ',' s) -let load_lock_config (abspath_lock_config : abs_path) : LockConfig.t = - match LockConfig.load abspath_lock_config with - | Ok(lock_config) -> lock_config +let load_deps_config (abspath_deps_config : abs_path) : DepsConfig.t = + match DepsConfig.load abspath_deps_config with + | Ok(deps_config) -> deps_config | Error(e) -> raise (ConfigError(e)) -let load_package (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_in : abs_path) = - match PackageReader.main display_config ~use_test_files ~extensions abspath_in with +let load_envelope (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_in : abs_path) = + match EnvelopeReader.main display_config ~use_test_files ~extensions abspath_in with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) @@ -1651,7 +1370,7 @@ let get_job_directory (abspath : abs_path) : string = let build ~(fpath_in : string) ~(fpath_out_opt : string option) - ~(config_paths_str_opt : string option) + ~config_paths_str_opt:(_ : string option) (* TODO: remove this *) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) ~(show_full_path : bool) @@ -1662,7 +1381,7 @@ let build ~(debug_show_overfull : bool) ~(type_check_only : bool) ~(bytecomp : bool) - ~(no_default_config : bool) + ~no_default_config:(_ : bool) (* TODO: remove this *) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> @@ -1671,7 +1390,9 @@ let build let input_file = make_absolute_if_relative ~origin:curdir fpath_in in let job_directory = get_job_directory input_file in let output_file = fpath_out_opt |> Option.map (make_absolute_if_relative ~origin:curdir) in +(* let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in +*) let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = { @@ -1692,7 +1413,9 @@ let build in let runtime_config = { job_directory } in +(* let library_root = setup_root_dirs ~no_default_config ~extra_config_paths curdir in +*) let abspath_in = input_file in let is_bytecomp_mode = bytecomp in let build_input = @@ -1733,19 +1456,19 @@ let build match build_input with | PackageBuildInput{ - lock = abspath_lock_config; + lock = abspath_deps_config; } -> - Logging.lock_config_file display_config abspath_lock_config; - let lock_config = load_lock_config abspath_lock_config in + Logging.lock_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in - let (_config, package) = load_package display_config ~use_test_files:false ~extensions abspath_in in + let (_config, envelope) = load_envelope display_config ~use_test_files:false ~extensions abspath_in in let (genv, _configenv, _libs_dep) = - check_depended_packages display_config typecheck_config ~use_test_only_lock:false ~library_root ~extensions tyenv_prim lock_config + check_depended_packages display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config in begin - match PackageChecker.main display_config typecheck_config tyenv_prim genv package with + match PackageChecker.main display_config typecheck_config tyenv_prim genv envelope with | Ok((_ssig, _libs)) -> () | Error(e) -> raise (ConfigError(e)) end @@ -1757,7 +1480,7 @@ let build dump = abspath_dump; } -> Logging.lock_config_file display_config abspath_lock_config; - let lock_config = load_lock_config abspath_lock_config in + let deps_config = load_deps_config abspath_lock_config in Logging.target_file display_config abspath_out; @@ -1765,7 +1488,7 @@ let build Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; let (genv, configenv, libs) = - check_depended_packages display_config typecheck_config ~use_test_only_lock:false ~library_root ~extensions tyenv_prim lock_config + check_depended_packages display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config in (* Resolve dependency of the document and the local source files: *) @@ -1801,10 +1524,10 @@ type test_input = let test ~(fpath_in : string) - ~(config_paths_str_opt : string option) + ~config_paths_str_opt:(_ : string option) (* TODO: remove this *) ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) - ~(no_default_config : bool) + ~no_default_config:(_ : bool) (* TODO: remove this *) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> @@ -1812,7 +1535,9 @@ let test let input_file_to_test = make_absolute_if_relative ~origin:curdir fpath_in in let job_directory = get_job_directory input_file_to_test in +(* let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in +*) let output_mode_to_test = make_output_mode text_mode_formats_str_opt in let bytecomp = false in let typecheck_config = @@ -1825,7 +1550,9 @@ let test in let runtime_config = { job_directory } in +(* let library_root = setup_root_dirs ~no_default_config ~extra_config_paths curdir in +*) let abspath_in = input_file_to_test in let test_input = let abspathstr_in = get_abs_path_string abspath_in in @@ -1857,15 +1584,15 @@ let test begin match test_input with | PackageTestInput{ - lock = abspath_lock_config; + lock = abspath_deps_config; } -> - Logging.lock_config_file display_config abspath_lock_config; - let lock_config = load_lock_config abspath_lock_config in + Logging.lock_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in - let (_config, package) = load_package display_config ~use_test_files:true ~extensions abspath_in in + let (_config, package) = load_envelope display_config ~use_test_files:true ~extensions abspath_in in let (genv, _configenv, _libs_dep) = - check_depended_packages display_config typecheck_config ~use_test_only_lock:true ~library_root ~extensions tyenv_prim lock_config + check_depended_packages display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config in let libs = @@ -1882,10 +1609,10 @@ let test lock = abspath_lock_config; } -> Logging.lock_config_file display_config abspath_lock_config; - let lock_config = load_lock_config abspath_lock_config in + let deps_config = load_deps_config abspath_lock_config in let (genv, configenv, libs) = - check_depended_packages display_config typecheck_config ~use_test_only_lock:true ~library_root ~extensions tyenv_prim lock_config + check_depended_packages display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config in (* Resolve dependency of the document and the local source files: *) @@ -1922,265 +1649,3 @@ let test () end ) - - -type solve_input = - | PackageSolveInput of { - root : abs_path; (* The absolute path of a directory used as the package root *) - lock : abs_path; (* A path for writing a resulting lock file *) - } - | DocumentSolveInput of { - kind : input_kind; - path : abs_path; (* The absolute path to the document file *) - lock : abs_path; (* A path for writing a resulting lock file *) - } - - -let make_lock_name (lock : Lock.t) : lock_name = - let Lock.{ registry_hash_value; package_name; locked_version } = lock in - Printf.sprintf "registered.%s.%s.%s" - registry_hash_value - package_name - (SemanticVersion.to_string locked_version) - - -let convert_solutions_to_lock_config (solutions : package_solution list) : LockConfig.t * implementation_spec list = - let (locked_package_acc, impl_spec_acc) = - solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> - let lock = solution.lock in - let Lock.{ registry_hash_value; package_name; locked_version = version } = lock in - let locked_package = - LockConfig.{ - lock_name = make_lock_name lock; - lock_contents = RegisteredLock{ registry_hash_value; package_name; version }; - lock_dependencies = solution.locked_dependencies |> List.map make_lock_name; - test_only_lock = solution.used_in_test_only; - } - in - let impl_spec = - ImplSpec{ - lock = solution.lock; - source = solution.locked_source; - } - in - (Alist.extend locked_package_acc locked_package, Alist.extend impl_spec_acc impl_spec) - ) (Alist.empty, Alist.empty) - in - let lock_config = LockConfig.{ locked_packages = Alist.to_list locked_package_acc } in - (lock_config, Alist.to_list impl_spec_acc) - - -let extract_attributes_from_document_file (display_config : Logging.config) (input_kind : input_kind) (abspath_in : abs_path) : (DocumentAttribute.t, config_error) result = - let open ResultMonad in - Logging.begin_to_parse_file display_config abspath_in; - match input_kind with - | InputSatysfi -> - let* utsrc = - ParserInterface.process_file abspath_in - |> Result.map_error (fun rng -> FailedToParse(rng)) - in - let* (attrs, _header, _utast) = - match utsrc with - | UTLibraryFile(_) -> err @@ DocumentLacksWholeReturnValue(abspath_in) - | UTDocumentFile(utdoc) -> return utdoc - in - DocumentAttribute.make attrs - |> Result.map_error (fun e -> DocumentAttributeError(e)) - - | InputMarkdown -> - let* (docattr, _main_module_name, _md) = - match read_file abspath_in with - | Ok(data) -> MarkdownParser.decode data |> Result.map_error (fun e -> MarkdownError(e)) - | Error(msg) -> err (CannotReadFileOwingToSystem(msg)) - in - return docattr - - -let make_registry_hash_value (registry_remote : registry_remote) : (registry_hash_value, config_error) result = - let open ResultMonad in - match registry_remote with - | GitRegistry{ url; branch } -> - let* canonicalized_url = - CanonicalRegistryUrl.make url - |> Result.map_error (fun e -> CanonicalRegistryUrlError(e)) - in - let hash_value = - Digest.to_hex (Digest.string (Printf.sprintf "git#%s#%s" canonicalized_url branch)) - in - Logging.report_canonicalized_url ~url ~canonicalized_url ~hash_value; - return hash_value - - -let update_library_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_library_root : abs_path) : unit = - match - registries |> RegistryHashValueMap.find_opt registry_hash_value - with - | None -> - let library_root_config = - LibraryRootConfig.{ - registries = registries |> RegistryHashValueMap.add registry_hash_value registry_remote; - } - in - LibraryRootConfig.write abspath_library_root library_root_config - - | Some(_registry_remote) -> - () - - -let solve - ~(fpath_in : string) - ~(show_full_path : bool) - ~(config_paths_str_opt : string option) - ~(no_default_config : bool) -= - let display_config = Logging.{ show_full_path } in - error_log_environment display_config (fun () -> - let curdir = Sys.getcwd () in - - let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in - - let library_root = setup_root_dirs ~no_default_config ~extra_config_paths curdir in - let abspath_in = make_absolute_if_relative ~origin:curdir fpath_in in - let solve_input = - let abspathstr_in = get_abs_path_string abspath_in in - if Sys.is_directory abspathstr_in then - (* If the input is a package directory: *) - let abspath_lock_config = make_package_lock_config_path abspathstr_in in - PackageSolveInput{ - root = abspath_in; - lock = abspath_lock_config; - } - else - let abspathstr_in = get_abs_path_string abspath_in in - let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_lock_config = make_document_lock_config_path basename_without_extension in - let input_kind_res = get_input_kind_from_extension abspathstr_in in - match input_kind_res with - | Error(ext) -> - raise (UnexpectedExtension(ext)) - - | Ok(input_kind) -> - DocumentSolveInput{ - kind = input_kind; - path = abspath_in; - lock = abspath_lock_config; - } - in - - let res = - let open ResultMonad in - let abspath_library_root_config = - make_abs_path - (Filename.concat - (get_abs_path_string library_root) - (get_lib_path_string Constant.library_root_config_file)) - in - let* library_root_config = LibraryRootConfig.load abspath_library_root_config in - let* (dependencies_with_flags, abspath_lock_config, registry_specs) = - match solve_input with - | PackageSolveInput{ - root = absdir_package; - lock = abspath_lock_config; - } -> - let* PackageConfig.{ package_contents; registry_specs; _ } = PackageConfig.load absdir_package in - begin - match package_contents with - | PackageConfig.Library{ dependencies; test_dependencies; _ } -> - let dependencies_with_flags = - List.append - (dependencies |> List.map (fun dep -> (SourceDependency, dep))) - (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) - in - return (dependencies_with_flags, abspath_lock_config, registry_specs) - - | PackageConfig.Font(_) -> - return ([], abspath_lock_config, registry_specs) - end - - | DocumentSolveInput{ - kind = input_kind; - path = abspath_in; - lock = abspath_lock_config; - } -> - let* DocumentAttribute.{ registry_specs; dependencies } = - extract_attributes_from_document_file display_config input_kind abspath_in - in - let dependencies_with_flags = dependencies |> List.map (fun dep -> (SourceDependency, dep)) in - return (dependencies_with_flags, abspath_lock_config, registry_specs) - in - - Logging.show_package_dependency_before_solving dependencies_with_flags; - - let* registries = - RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> - let* registries = res in - let* registry_hash_value = make_registry_hash_value registry_remote in - - (* Manupulates the library root config: *) - update_library_root_config_if_needed - library_root_config.LibraryRootConfig.registries - registry_hash_value - registry_remote - abspath_library_root_config; - - (* Fetches registry configs: *) - let absdir_registry_repo = - let libpath_registry_root = Constant.registry_root_directory registry_hash_value in - make_abs_path - (Filename.concat - (get_abs_path_string library_root) - (get_lib_path_string libpath_registry_root)) - in - let git_command = "git" in (* TODO: make this changeable *) - let* () = - PackageRegistryFetcher.main ~git_command absdir_registry_repo registry_remote - |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) - in - - let* PackageRegistryConfig.{ packages = packages_in_registry } = - let abspath_registry_config = - make_abs_path - (Filename.concat - (get_abs_path_string absdir_registry_repo) - Constant.package_registry_config_file_name) - in - PackageRegistryConfig.load abspath_registry_config - in - let registry_spec = { packages_in_registry; registry_hash_value } in - return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) - - ) registry_specs (return RegistryLocalNameMap.empty) - in - - let package_context = { registries } in - let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in - begin - match solutions_opt with - | None -> - err CannotSolvePackageConstraints - - | Some(solutions) -> - - Logging.show_package_dependency_solutions solutions; - - let (lock_config, impl_specs) = convert_solutions_to_lock_config solutions in - - let wget_command = "wget" in (* TODO: make this changeable *) - let tar_command = "tar" in (* TODO: make this changeable *) - let unzip_command = "unzip" in (* TODO: make this changeable *) - let* () = - impl_specs |> foldM (fun () impl_spec -> - LockFetcher.main - ~wget_command ~tar_command ~unzip_command ~library_root impl_spec - ) () - in - LockConfig.write display_config abspath_lock_config lock_config; - return () - end - in - begin - match res with - | Ok(()) -> () - | Error(e) -> raise (ConfigError(e)) - end - ) diff --git a/src/frontend/main.mli b/src/frontend/main.mli index b4d8b8bb3..ed5d43ceb 100644 --- a/src/frontend/main.mli +++ b/src/frontend/main.mli @@ -25,10 +25,3 @@ val test : show_full_path:bool -> no_default_config:bool -> unit - -val solve : - fpath_in:string -> - show_full_path:bool -> - config_paths_str_opt:(string option) -> - no_default_config:bool -> - unit diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index 4e1e48127..d26a8e278 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -1,7 +1,7 @@ open MyUtil open Types -open PackageSystemBase +open EnvelopeSystemBase open ConfigError @@ -107,6 +107,7 @@ let register_document_file (display_config : Logging.config) (extensions : strin return (graph, utdoc) +(* let extract_markdown_command_record ~(module_name : module_name) (config : PackageConfig.t) : MarkdownParser.command_record ok = let open ResultMonad in match config.PackageConfig.package_contents with @@ -154,9 +155,10 @@ let register_markdown_file (display_config : Logging.config) (configenv : Packag in let utdoc = ([], header, utast) in return utdoc +*) -let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (configenv : PackageConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = +let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (_configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = let open ResultMonad in let* (graph, utdoc) = match input_kind with @@ -164,8 +166,11 @@ let main (display_config : Logging.config) ~(extensions : string list) (input_ki register_document_file display_config extensions abspath_in | InputMarkdown -> + failwith "TODO: InputMarkdown" +(* let* utdoc = register_markdown_file display_config configenv abspath_in in return (FileDependencyGraph.empty, utdoc) +*) in let* sorted_locals = FileDependencyGraph.topological_sort graph diff --git a/src/frontend/openFileDependencyResolver.mli b/src/frontend/openFileDependencyResolver.mli index 995136f68..ca0954117 100644 --- a/src/frontend/openFileDependencyResolver.mli +++ b/src/frontend/openFileDependencyResolver.mli @@ -1,7 +1,7 @@ open MyUtil open Types -open PackageSystemBase +open EnvelopeSystemBase open ConfigError -val main : Logging.config -> extensions:(string list) -> input_kind -> PackageConfig.t GlobalTypeenv.t -> abs_path -> ((abs_path * untyped_library_file) list * untyped_document_file, config_error) result +val main : Logging.config -> extensions:(string list) -> input_kind -> EnvelopeConfig.t GlobalTypeenv.t -> abs_path -> ((abs_path * untyped_library_file) list * untyped_document_file, config_error) result diff --git a/src/frontend/packageChecker.ml b/src/frontend/packageChecker.ml index a06b675cd..5efe69085 100644 --- a/src/frontend/packageChecker.ml +++ b/src/frontend/packageChecker.ml @@ -177,12 +177,12 @@ let check_font_package (_main_module_name : module_name) (font_files : font_file return (ssig, Alist.to_list libacc) -let main (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (package : untyped_package) : (StructSig.t * (abs_path * binding list) list) ok = - match package with - | UTLibraryPackage{ main_module_name; modules = utlibs } -> +let main (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (envelope : untyped_envelope) : (StructSig.t * (abs_path * binding list) list) ok = + match envelope with + | UTLibraryEnvelope{ main_module_name; modules = utlibs } -> check_library_package display_config config tyenv_prim genv main_module_name utlibs - | UTFontPackage{ main_module_name; font_files } -> + | UTFontEnvelope{ main_module_name; font_files } -> check_font_package main_module_name font_files diff --git a/src/frontend/packageChecker.mli b/src/frontend/packageChecker.mli index cf7928f42..0b579d926 100644 --- a/src/frontend/packageChecker.mli +++ b/src/frontend/packageChecker.mli @@ -4,6 +4,6 @@ open Types open StaticEnv open ConfigError -val main : Logging.config -> typecheck_config -> type_environment -> global_type_environment -> untyped_package -> (struct_signature * (abs_path * binding list) list, config_error) result +val main : Logging.config -> typecheck_config -> type_environment -> global_type_environment -> untyped_envelope -> (struct_signature * (abs_path * binding list) list, config_error) result val main_document : Logging.config -> typecheck_config -> type_environment -> global_type_environment -> (abs_path * untyped_library_file) list -> abs_path * untyped_document_file -> ((abs_path * binding list) list * abstract_tree, config_error) result diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index 6225dcc96..713d02d79 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -7,7 +7,6 @@ open GraphicBase open SyntaxBase open Types open StaticEnv -open ConfigError (* -- type IDs for predefined data types -- *) @@ -763,17 +762,18 @@ let make_environments (runtime_config : runtime_config) table = let resolve_lib_file (libpath : lib_path) = Config.resolve_lib_file libpath - |> Result.map_error (fun candidates -> CannotFindLibraryFile(libpath, candidates)) +(* TODO: should depend on the current language *) let make_pdf_mode_environments (runtime_config : runtime_config) = - let open ResultMonad in - let* abspath_hyphen = resolve_lib_file (make_lib_path "hyph/english.satysfi-hyph") in - default_hyphen_dictionary := LoadHyph.main abspath_hyphen; - (* TODO: should depend on the current language *) - return @@ make_environments runtime_config pdf_mode_table + match resolve_lib_file (make_lib_path "hyph/english.satysfi-hyph") with + | Error(_) -> + failwith "TODO: failed to load hyphenation dictionary" + + | Ok(abspath_hyphen) -> + default_hyphen_dictionary := LoadHyph.main abspath_hyphen; + make_environments runtime_config pdf_mode_table let make_text_mode_environments (runtime_config : runtime_config) = - let open ResultMonad in - return @@ make_environments runtime_config text_mode_table + make_environments runtime_config text_mode_table diff --git a/src/frontend/primitives.mli b/src/frontend/primitives.mli index ede1f85cb..0ab300078 100644 --- a/src/frontend/primitives.mli +++ b/src/frontend/primitives.mli @@ -1,7 +1,6 @@ open Types open StaticEnv -open ConfigError open LengthInterface val option_type : ('a, 'b) typ -> ('a, 'b) typ @@ -10,8 +9,8 @@ val itemize_type : unit -> ('a, 'b) typ val get_pdf_mode_initial_context : length -> HorzBox.context_main -val make_pdf_mode_environments : runtime_config -> (Typeenv.t * environment, config_error) result +val make_pdf_mode_environments : runtime_config -> Typeenv.t * environment -val make_text_mode_environments : runtime_config -> (Typeenv.t * environment, config_error) result +val make_text_mode_environments : runtime_config -> Typeenv.t * environment val default_radical : HorzBox.radical diff --git a/src/frontend/synonymDependencyGraph.ml b/src/frontend/synonymDependencyGraph.ml index c0674ab81..9a5f6b20f 100644 --- a/src/frontend/synonymDependencyGraph.ml +++ b/src/frontend/synonymDependencyGraph.ml @@ -1,5 +1,6 @@ open Types +open DependencyGraph.Cycle module Impl = DependencyGraph.Make(String) diff --git a/src/frontend/synonymDependencyGraph.mli b/src/frontend/synonymDependencyGraph.mli index 270c91de5..02d288146 100644 --- a/src/frontend/synonymDependencyGraph.mli +++ b/src/frontend/synonymDependencyGraph.mli @@ -1,5 +1,6 @@ open Types +open DependencyGraph.Cycle type data = { position : Range.t; diff --git a/src/frontend/typeError.ml b/src/frontend/typeError.ml index bbd86eb38..6e7fe78c4 100644 --- a/src/frontend/typeError.ml +++ b/src/frontend/typeError.ml @@ -1,5 +1,6 @@ open Types +open DependencyGraph.Cycle open StaticEnv open SyntaxBase diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index d23137b89..0f8dabc0a 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -620,12 +620,12 @@ type font_file_record = { } [@@deriving show { with_path = false }] -type untyped_package = - | UTLibraryPackage of { +type untyped_envelope = + | UTLibraryEnvelope of { main_module_name : module_name; modules : (abs_path * untyped_library_file) list; } - | UTFontPackage of { + | UTFontEnvelope of { main_module_name : module_name; font_files : font_file_record list; } @@ -1290,16 +1290,6 @@ type code_rec_or_nonrec = | CdNonRec of CodeSymbol.t * code_value | CdMutable of CodeSymbol.t * code_value -type 'a cycle = - | Loop of 'a - | Cycle of 'a TupleList.t -[@@deriving show { with_path = false; }] - - -let map_cycle f = function - | Loop(v) -> Loop(f v) - | Cycle(vs) -> Cycle(TupleList.map f vs) - module GlobalTypeenv = Map.Make(String) diff --git a/src/md/markdownParser.ml b/src/md/markdownParser.ml index f9710ccb4..7ead25336 100644 --- a/src/md/markdownParser.ml +++ b/src/md/markdownParser.ml @@ -1,4 +1,4 @@ - +(* open Types type error = @@ -434,3 +434,4 @@ let convert (cmdr : command_record) (md : t) = in let utast_extra = md.extra_expression in (dummy_range, UTApply([], (dummy_range, UTApply([], utast_doccmd, utast_extra)), utast_body)) +*) diff --git a/src/md/markdownParser.mli b/src/md/markdownParser.mli index e38cbacb3..d8aa2bdd9 100644 --- a/src/md/markdownParser.mli +++ b/src/md/markdownParser.mli @@ -1,4 +1,4 @@ - +(* open Types type error = @@ -37,3 +37,4 @@ type t val decode : string -> (DocumentAttribute.t * module_name * t, error) result val convert : command_record -> t -> untyped_abstract_tree +*) From 5562302b42d12394f12fd168b2d2b3a3470b54c9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 15:17:46 +0900 Subject: [PATCH 003/381] slight refactoring --- src/frontend/openFileDependencyResolver.ml | 22 ++++----- src/frontend/packageChecker.ml | 53 +++++++++++++--------- 2 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index d26a8e278..8105117e5 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -14,16 +14,16 @@ type graph = untyped_library_file FileDependencyGraph.t type vertex = FileDependencyGraph.Vertex.t -type local_or_package = - | Local of module_name_chain ranged * abs_path - | Package of module_name_chain ranged +type local_or_envelope = + | Local of module_name_chain ranged * abs_path + | Envelope of module_name_chain ranged -let get_header (extensions : string list) (curdir : string) (headerelem : header_element) : local_or_package ok = +let get_header (extensions : string list) (curdir : string) (headerelem : header_element) : local_or_envelope ok = let open ResultMonad in match headerelem with | HeaderUsePackage{ mod_chain; _ } -> - return @@ Package(mod_chain) + return @@ Envelope(mod_chain) | HeaderUse{ mod_chain; _ } -> err @@ CannotUseHeaderUse(mod_chain) @@ -69,9 +69,9 @@ let rec register_library_file (display_config : Logging.config) (extensions : st | Some(vertex_prev) -> graph |> FileDependencyGraph.add_edge ~from:vertex_prev ~to_:vertex in header |> foldM (fun graph headerelem -> - let* local_or_package = get_header extensions curdir headerelem in - match local_or_package with - | Package((_, _main_module_name)) -> + let* local_or_envelope = get_header extensions curdir headerelem in + match local_or_envelope with + | Envelope((_, _main_module_name)) -> return graph | Local(_modident_sub, abspath_sub) -> @@ -95,9 +95,9 @@ let register_document_file (display_config : Logging.config) (extensions : strin let (_attrs, header, _) = utdoc in let* graph = header |> foldM (fun (graph) headerelem -> - let* local_or_package = get_header extensions curdir headerelem in - match local_or_package with - | Package((_, _main_module_name)) -> + let* local_or_envelope = get_header extensions curdir headerelem in + match local_or_envelope with + | Envelope((_, _main_module_name)) -> return graph | Local(_, abspath_sub) -> diff --git a/src/frontend/packageChecker.ml b/src/frontend/packageChecker.ml index 5efe69085..44f4ce8ac 100644 --- a/src/frontend/packageChecker.ml +++ b/src/frontend/packageChecker.ml @@ -7,23 +7,23 @@ open TypeError type 'a ok = ('a, config_error) result -type dependency_kind = PackageDependency | LocalDependency +type dependency_kind = EnvelopeDependency | LocalDependency -let add_dependency_to_type_environment ~(package_only : bool) (header : header_element list) (genv : global_type_environment) (tyenv : Typeenv.t) : Typeenv.t ok = +let add_dependency_to_type_environment ~(import_envelope_only : bool) (header : header_element list) (genv : global_type_environment) (tyenv : Typeenv.t) : Typeenv.t ok = let open ResultMonad in header |> foldM (fun tyenv headerelem -> let opt = match headerelem with | HeaderUse{ opening; mod_chain } | HeaderUseOf{ opening; mod_chain; _ } -> - if package_only then + if import_envelope_only then None else Some((LocalDependency, opening, mod_chain)) | HeaderUsePackage{ opening; mod_chain } -> - Some((PackageDependency, opening, mod_chain)) + Some((EnvelopeDependency, opening, mod_chain)) in match opt with | None -> @@ -35,7 +35,7 @@ let add_dependency_to_type_environment ~(package_only : bool) (header : header_e | (LocalDependency, None) -> assert false (* Local dependency must be resolved beforehand. *) - | (PackageDependency, None) -> + | (EnvelopeDependency, None) -> err @@ UnknownPackageDependency(rng0, modnm0) | (_, Some(ssig)) -> @@ -96,28 +96,34 @@ let typecheck_document_file (display_config : Logging.config) (config : typechec err (NotADocumentFile(abspath_in, ty)) -let check_library_package (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (main_module_name : module_name) (utlibs : (abs_path * untyped_library_file) list) = +let check_library_envelope (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (main_module_name : module_name) (utlibs : (abs_path * untyped_library_file) list) = let open ResultMonad in - (* Resolve dependency among the source files in the package: *) + (* Resolve dependency among the source files in the envelope: *) let* sorted_utlibs = ClosedFileDependencyResolver.main utlibs in (* Typecheck each source file: *) let* (_genv, libacc, ssig_opt) = sorted_utlibs |> foldM (fun (genv, libacc, ssig_opt) (abspath, utlib) -> let (_attrs, header, (modident, utsig_opt, utbinds)) = utlib in - let* tyenv_for_struct = tyenv_prim |> add_dependency_to_type_environment ~package_only:false header genv in + let* tyenv_for_struct = + tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + in let (_, modnm) = modident in if String.equal modnm main_module_name then let* ((_quant, ssig), binds) = - let* tyenv_for_sig = tyenv_prim |> add_dependency_to_type_environment ~package_only:true header genv in - typecheck_library_file display_config config ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_sig abspath utsig_opt utbinds + let* tyenv_for_sig = + tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:true header genv + in + typecheck_library_file display_config config + ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_sig abspath utsig_opt utbinds in let genv = genv |> GlobalTypeenv.add modnm ssig in return (genv, Alist.extend libacc (abspath, binds), Some(ssig)) else let* ((_quant, ssig), binds) = - typecheck_library_file display_config config ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_struct abspath utsig_opt utbinds + typecheck_library_file display_config config + ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_struct abspath utsig_opt utbinds in let genv = genv |> GlobalTypeenv.add modnm ssig in return (genv, Alist.extend libacc (abspath, binds), ssig_opt) @@ -130,7 +136,7 @@ let check_library_package (display_config : Logging.config) (config : typecheck_ | None -> err @@ NoMainModule(main_module_name) -let check_font_package (_main_module_name : module_name) (font_files : font_file_record list) = +let check_font_envelope (_main_module_name : module_name) (font_files : font_file_record list) = let open ResultMonad in let stage = Persistent0 in let (ssig, libacc) = @@ -144,12 +150,12 @@ let check_font_package (_main_module_name : module_name) (font_files : font_file in match font_file_contents with | OpentypeSingle(varnm) -> - let evid = EvalVarID.fresh (Range.dummy "font-package 1", varnm) in + let evid = EvalVarID.fresh (Range.dummy "font-envelope 1", varnm) in let bind = Bind(stage, NonRec(evid, LoadSingleFont{ path; used_as_math_font })) in let ventry = { val_name = Some(evid); - val_type = Poly(Range.dummy "font-package 2", BaseType(FontType)); + val_type = Poly(Range.dummy "font-envelope 2", BaseType(FontType)); val_stage = stage; } in @@ -158,12 +164,12 @@ let check_font_package (_main_module_name : module_name) (font_files : font_file | OpentypeCollection(varnms) -> let (ssig, bindacc, _) = varnms |> List.fold_left (fun (ssig, bindacc, index) varnm -> - let evid = EvalVarID.fresh (Range.dummy "font-package 3", varnm) in + let evid = EvalVarID.fresh (Range.dummy "font-envelope 3", varnm) in let bind = Bind(stage, NonRec(evid, LoadCollectionFont{ path; index; used_as_math_font })) in let ventry = { val_name = Some(evid); - val_type = Poly(Range.dummy "font-package 4", BaseType(FontType)); + val_type = Poly(Range.dummy "font-envelope 4", BaseType(FontType)); val_stage = stage; } in @@ -180,10 +186,10 @@ let check_font_package (_main_module_name : module_name) (font_files : font_file let main (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (envelope : untyped_envelope) : (StructSig.t * (abs_path * binding list) list) ok = match envelope with | UTLibraryEnvelope{ main_module_name; modules = utlibs } -> - check_library_package display_config config tyenv_prim genv main_module_name utlibs + check_library_envelope display_config config tyenv_prim genv main_module_name utlibs | UTFontEnvelope{ main_module_name; font_files } -> - check_font_package main_module_name font_files + check_font_envelope main_module_name font_files let main_document (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (sorted_locals : (abs_path * untyped_library_file) list) (abspath_and_utdoc : abs_path * untyped_document_file) : ((abs_path * binding list) list * abstract_tree) ok = @@ -193,8 +199,11 @@ let main_document (display_config : Logging.config) (config : typecheck_config) let (_attrs, header, (modident, utsig_opt, utbinds)) = utlib in let (_, modnm) = modident in let* ((_quant, ssig), binds) = - let* tyenv = tyenv_prim |> add_dependency_to_type_environment ~package_only:false header genv in - typecheck_library_file display_config config ~for_struct:tyenv ~for_sig:tyenv abspath utsig_opt utbinds + let* tyenv = + tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + in + typecheck_library_file display_config config + ~for_struct:tyenv ~for_sig:tyenv abspath utsig_opt utbinds in let genv = genv |> GlobalTypeenv.add modnm ssig in return (genv, Alist.extend libacc (abspath, binds)) @@ -205,7 +214,9 @@ let main_document (display_config : Logging.config) (config : typecheck_config) (* Typecheck the document: *) let* ast_doc = let (abspath, (_attrs, header, utast)) = abspath_and_utdoc in - let* tyenv = tyenv_prim |> add_dependency_to_type_environment ~package_only:false header genv in + let* tyenv = + tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + in typecheck_document_file display_config config tyenv abspath utast in From bbee19183e880bf8fd38fd8457df1ab0209b1a46 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 15:53:57 +0900 Subject: [PATCH 004/381] slight changes on the two `Main`s --- bin-saphe/main.ml | 18 ++++---- bin-saphe/saphe.ml | 103 ++----------------------------------------- src/frontend/main.ml | 9 ---- 3 files changed, 13 insertions(+), 117 deletions(-) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 61d906fa9..974b8d498 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -4,6 +4,7 @@ open PackageSystemBase open ConfigError +exception NoLibraryRootDesignation exception ConfigError of config_error @@ -346,6 +347,12 @@ let error_log_environment (suspended : unit -> unit) : unit = try suspended () with + | NoLibraryRootDesignation -> + report_error [ + NormalLine("cannot determine where the SATySFi library root is;"); + NormalLine("set appropriate environment variables."); + ] + | ConfigError(e) -> report_config_error e @@ -461,23 +468,18 @@ let extract_attributes_from_document_file (display_config : Logging.config) (inp return docattr *) -let solve - ~(fpath_in : string) - ~show_full_path:(_ : bool) - ~config_paths_str_opt:(_ : string option) - ~no_default_config:(_ : bool) -= +let solve ~(fpath_in : string) = error_log_environment (fun () -> let curdir = Sys.getcwd () in let library_root = if String.equal Sys.os_type "Win32" then match Sys.getenv_opt "userprofile" with - | None -> failwith "TODO: userprofile is not set" + | None -> raise NoLibraryRootDesignation | Some(s) -> make_abs_path (Filename.concat s ".saphe") else match Sys.getenv_opt "HOME" with - | None -> failwith "TODO: HOME is not set" + | None -> raise NoLibraryRootDesignation | Some(s) -> make_abs_path (Filename.concat s ".saphe") in let abspath_in = make_absolute_if_relative ~origin:curdir fpath_in in diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml index 0419a0617..79cebd4ba 100644 --- a/bin-saphe/saphe.ml +++ b/bin-saphe/saphe.ml @@ -1,15 +1,6 @@ -let solve - fpath_in - show_full_path - config_paths_str_opt - no_default_config -= - Main.solve - ~fpath_in - ~show_full_path - ~config_paths_str_opt - ~no_default_config +let solve fpath_in = + Main.solve ~fpath_in let arg_in : string Cmdliner.Term.t = @@ -17,98 +8,10 @@ let arg_in : string Cmdliner.Term.t = Arg.(required (pos 0 (some file) None (info []))) -let flag_output : (string option) Cmdliner.Term.t = - let open Cmdliner in - let doc = "Specify output path." in - Arg.(value (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) - - -let flag_config = - let open Cmdliner in - let doc = "Add colon-separated paths to configuration search path" in - Arg.(value (opt (some string) None (info [ "C"; "config" ] ~docv:"PATHS" ~doc))) - - -let flag_text_mode = - let open Cmdliner in - let doc = "Set text mode" in - Arg.(value (opt (some string) None (info [ "text-mode" ] ~docv:"FORMATS" ~doc))) - - -let flag_page_number_limit : int Cmdliner.Term.t = - let open Cmdliner in - let doc = "Set the page number limit (default: 10000)" in - Arg.(value (opt int 10000 (info [ "page-number-limit" ] ~docv:"INT" ~doc))) - - -let make_boolean_flag_spec ~(flags : string list) ~(doc : string) : bool Cmdliner.Term.t = - let open Cmdliner in - Arg.(value (flag (info flags ~doc))) - - -let flag_full_path = - make_boolean_flag_spec - ~flags:[ "full-path" ] - ~doc:"Displays paths in full-path style" - - -let flag_debug_show_bbox = - make_boolean_flag_spec - ~flags:[ "debug-show-bbox" ] - ~doc:"Outputs bounding boxes for glyphs" - - -let flag_debug_show_space = - make_boolean_flag_spec - ~flags:[ "debug-show-space" ] - ~doc:"Outputs boxes for spaces" - - -let flag_debug_show_block_bbox = - make_boolean_flag_spec - ~flags:[ "debug-show-block-bbox" ] - ~doc:"Outputs bounding boxes for blocks" - - -let flag_debug_show_block_space = - make_boolean_flag_spec - ~flags:[ "debug-show-block-space" ] - ~doc:"Outputs visualized block spaces" - - -let flag_debug_show_overfull = - make_boolean_flag_spec - ~flags:[ "debug-show-overfull" ] - ~doc:"Outputs visualized overfull or underfull lines" - - -let flag_type_check_only = - make_boolean_flag_spec - ~flags:[ "t"; "type-check-only" ] - ~doc:"Stops after type checking" - - -let flag_bytecomp = - make_boolean_flag_spec - ~flags:[ "b"; "bytecomp" ] - ~doc:"Use bytecode compiler" - - -let flag_no_default_config = - make_boolean_flag_spec - ~flags:[ "no-default-config" ] - ~doc:"Does not use default configuration search path" - - let command_solve = let open Cmdliner in let term : unit Term.t = - Term.(const solve - $ arg_in - $ flag_full_path - $ flag_config - $ flag_no_default_config - ) + Term.(const solve $ arg_in) in let info : Cmd.info = Cmd.info "solve" diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 9d854b523..aa40bf88e 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1114,15 +1114,6 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> DisplayLine(msg); ] -(* - | NoLibraryRootDesignation -> - report_error Interface [ - NormalLine("cannot determine where the SATySFi library root is;"); - NormalLine("set appropriate environment variables"); - NormalLine("or specify configuration search paths with -C option."); - ] -*) - | ShouldSpecifyOutputFile -> report_error Interface [ NormalLine("should specify output file for text mode."); From c73f222023353b77a50b0460703d08aa73011692 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 16:09:23 +0900 Subject: [PATCH 005/381] refactoring about `cycle` --- src-util/dependencyGraph.ml | 12 +----------- src-util/dependencyGraph.mli | 11 +---------- src-util/myUtil.ml | 11 +++++++++++ src-util/myUtil.mli | 7 +++++++ src/frontend/closedFileDependencyResolver.ml | 1 - src/frontend/closedLockDependencyResolver.ml | 1 - src/frontend/configError.ml | 1 - src/frontend/synonymDependencyGraph.ml | 2 +- src/frontend/synonymDependencyGraph.mli | 2 +- src/frontend/typeError.ml | 2 +- 10 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src-util/dependencyGraph.ml b/src-util/dependencyGraph.ml index 99a0338f2..7213fed9a 100644 --- a/src-util/dependencyGraph.ml +++ b/src-util/dependencyGraph.ml @@ -1,16 +1,6 @@ -module Cycle = struct - type 'a cycle = - | Loop of 'a - | Cycle of 'a TupleList.t - [@@deriving show { with_path = false; }] - - let map_cycle f = function - | Loop(v) -> Loop(f v) - | Cycle(vs) -> Cycle(TupleList.map f vs) -end +open MyUtil -open Cycle module type ElementType = sig type t diff --git a/src-util/dependencyGraph.mli b/src-util/dependencyGraph.mli index 6778ccf14..c35a29c19 100644 --- a/src-util/dependencyGraph.mli +++ b/src-util/dependencyGraph.mli @@ -1,14 +1,5 @@ -module Cycle : sig - type 'a cycle = - | Loop of 'a - | Cycle of 'a TupleList.t - [@@deriving show] - - val map_cycle : ('a -> 'b) -> 'a cycle -> 'b cycle -end - -open Cycle +open MyUtil module type ElementType = sig type t diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 228f1d91b..898e1c747 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -83,3 +83,14 @@ let read_file (abspath : abs_path) : (string, string) result = with | Sys_error(s) -> err s + + +type 'a cycle = + | Loop of 'a + | Cycle of 'a TupleList.t +[@@deriving show { with_path = false; }] + + +let map_cycle f = function + | Loop(v) -> Loop(f v) + | Cycle(vs) -> Cycle(TupleList.map f vs) diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index 201f30c9d..1189938f7 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -37,3 +37,10 @@ end val make_absolute_if_relative : origin:string -> string -> abs_path val read_file : abs_path -> (string, string) result + +type 'a cycle = + | Loop of 'a + | Cycle of 'a TupleList.t +[@@deriving show] + +val map_cycle : ('a -> 'b) -> 'a cycle -> 'b cycle diff --git a/src/frontend/closedFileDependencyResolver.ml b/src/frontend/closedFileDependencyResolver.ml index 4a7437d75..9f19b5a39 100644 --- a/src/frontend/closedFileDependencyResolver.ml +++ b/src/frontend/closedFileDependencyResolver.ml @@ -1,6 +1,5 @@ open MyUtil -open DependencyGraph.Cycle open Types open ConfigError diff --git a/src/frontend/closedLockDependencyResolver.ml b/src/frontend/closedLockDependencyResolver.ml index d1e3ef5e9..50c46a773 100644 --- a/src/frontend/closedLockDependencyResolver.ml +++ b/src/frontend/closedLockDependencyResolver.ml @@ -1,6 +1,5 @@ open MyUtil -open DependencyGraph.Cycle open Types open EnvelopeSystemBase open ConfigError diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 494e838ca..f8c3a8386 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -1,6 +1,5 @@ open MyUtil -open DependencyGraph.Cycle open EnvelopeSystemBase open Types diff --git a/src/frontend/synonymDependencyGraph.ml b/src/frontend/synonymDependencyGraph.ml index 9a5f6b20f..8e69b8841 100644 --- a/src/frontend/synonymDependencyGraph.ml +++ b/src/frontend/synonymDependencyGraph.ml @@ -1,6 +1,6 @@ +open MyUtil open Types -open DependencyGraph.Cycle module Impl = DependencyGraph.Make(String) diff --git a/src/frontend/synonymDependencyGraph.mli b/src/frontend/synonymDependencyGraph.mli index 02d288146..2dc472a6d 100644 --- a/src/frontend/synonymDependencyGraph.mli +++ b/src/frontend/synonymDependencyGraph.mli @@ -1,6 +1,6 @@ +open MyUtil open Types -open DependencyGraph.Cycle type data = { position : Range.t; diff --git a/src/frontend/typeError.ml b/src/frontend/typeError.ml index 6e7fe78c4..cdca07d6c 100644 --- a/src/frontend/typeError.ml +++ b/src/frontend/typeError.ml @@ -1,6 +1,6 @@ +open MyUtil open Types -open DependencyGraph.Cycle open StaticEnv open SyntaxBase From 7017a97f06145eaa60915cf1740359f1c44c3139 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 16:31:01 +0900 Subject: [PATCH 006/381] rename values and modules --- ...ml => closedEnvelopeDependencyResolver.ml} | 4 +- .../{packageChecker.ml => envelopeChecker.ml} | 0 ...packageChecker.mli => envelopeChecker.mli} | 0 src/frontend/logging.ml | 4 +- src/frontend/logging.mli | 2 +- src/frontend/main.ml | 100 +++++++++--------- 6 files changed, 55 insertions(+), 55 deletions(-) rename src/frontend/{closedLockDependencyResolver.ml => closedEnvelopeDependencyResolver.ml} (91%) rename src/frontend/{packageChecker.ml => envelopeChecker.ml} (100%) rename src/frontend/{packageChecker.mli => envelopeChecker.mli} (100%) diff --git a/src/frontend/closedLockDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml similarity index 91% rename from src/frontend/closedLockDependencyResolver.ml rename to src/frontend/closedEnvelopeDependencyResolver.ml index 50c46a773..fcf707396 100644 --- a/src/frontend/closedLockDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -11,7 +11,7 @@ type 'a ok = ('a, config_error) result module EnvelopeDependencyGraph = DependencyGraph.Make(String) -let main (display_config : Logging.config) ~(use_test_only_envelope : bool) (* ~library_root:(absdir_lib_root : abs_path) *) ~(extensions : string list) (deps_config : DepsConfig.t) : ((envelope_name * (EnvelopeConfig.t * untyped_envelope)) list) ok = +let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(extensions : string list) (deps_config : DepsConfig.t) : ((envelope_name * (EnvelopeConfig.t * untyped_envelope)) list) ok = let open ResultMonad in let DepsConfig.{ envelopes } = deps_config in @@ -21,7 +21,7 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) (* ~ envelopes |> foldM (fun (graph, entryacc) (envelope : DepsConfig.envelope) -> let DepsConfig.{ envelope_name; envelope_path; envelope_dependencies; test_only_envelope; _ } = envelope in if test_only_envelope && not use_test_only_envelope then - (* Skips test-only locks when using sources only: *) + (* Skips test-only envelopes when using sources only: *) return (graph, entryacc) else let absdir_envelope = make_abs_path envelope_path in diff --git a/src/frontend/packageChecker.ml b/src/frontend/envelopeChecker.ml similarity index 100% rename from src/frontend/packageChecker.ml rename to src/frontend/envelopeChecker.ml diff --git a/src/frontend/packageChecker.mli b/src/frontend/envelopeChecker.mli similarity index 100% rename from src/frontend/packageChecker.mli rename to src/frontend/envelopeChecker.mli diff --git a/src/frontend/logging.ml b/src/frontend/logging.ml index 4a50f63cd..0967d183b 100644 --- a/src/frontend/logging.ml +++ b/src/frontend/logging.ml @@ -100,8 +100,8 @@ let dump_file (config : config) ~(already_exists : bool) (dump_file : abs_path) print_endline (" dump file: '" ^ (show_path config dump_file) ^ "' (will be created)") -let lock_config_file (config : config) (abspath_lock_config : abs_path) = - Printf.printf " lock file: '%s'\n" (show_path config abspath_lock_config) +let deps_config_file (config : config) (abspath_deps_config : abs_path) = + Printf.printf " deps file: '%s'\n" (show_path config abspath_deps_config) let begin_to_embed_fonts () = diff --git a/src/frontend/logging.mli b/src/frontend/logging.mli index 54a040a75..e1d60794d 100644 --- a/src/frontend/logging.mli +++ b/src/frontend/logging.mli @@ -33,7 +33,7 @@ val target_file : config -> abs_path -> unit val dump_file : config -> already_exists:bool -> abs_path -> unit -val lock_config_file : config -> abs_path -> unit +val deps_config_file : config -> abs_path -> unit val begin_to_embed_fonts : unit -> unit diff --git a/src/frontend/main.ml b/src/frontend/main.ml index aa40bf88e..abcebbb30 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1007,7 +1007,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit | Cycle(pairs) -> pairs |> TupleList.to_list in let lines = - pairs |> List.map (fun (modnm, _lock) -> + pairs |> List.map (fun (modnm, _envelope) -> DisplayLine(Printf.sprintf "- '%s'" modnm) ) in @@ -1280,12 +1280,12 @@ let get_candidate_file_extensions (output_mode : output_mode) = type build_input = - | PackageBuildInput of { - lock : abs_path; + | EnvelopeBuildInput of { + deps : abs_path; } | DocumentBuildInput of { kind : input_kind; - lock : abs_path; + deps : abs_path; out : abs_path; dump : abs_path; } @@ -1298,24 +1298,24 @@ let get_input_kind_from_extension (abspathstr_in : string) = | ext -> Error(ext) -let check_depended_packages (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) (* ~(library_root : abs_path) *) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = - (* Resolve dependency among locked packages: *) - let sorted_packages = - match ClosedLockDependencyResolver.main display_config ~use_test_only_envelope (* ~library_root *) ~extensions deps_config with - | Ok(sorted_packages) -> sorted_packages +let check_depended_envelopes (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = + (* Resolve dependency among envelopes: *) + let sorted_envelopes = + match ClosedEnvelopeDependencyResolver.main display_config ~use_test_only_envelope ~extensions deps_config with + | Ok(sorted_envelopes) -> sorted_envelopes | Error(e) -> raise (ConfigError(e)) in - (* Typecheck every locked package: *) + (* Typecheck every depended envelope: *) let (genv, configenv, libacc) = - sorted_packages |> List.fold_left (fun (genv, configenv, libacc) (_lock_name, (config, package)) -> + sorted_envelopes |> List.fold_left (fun (genv, configenv, libacc) (_envelope_name, (config, envelope)) -> let main_module_name = - match package with + match envelope with | UTLibraryEnvelope{ main_module_name; _ } -> main_module_name | UTFontEnvelope{ main_module_name; _ } -> main_module_name in let (ssig, libs) = - match PackageChecker.main display_config typecheck_config tyenv_prim genv package with + match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) in @@ -1328,12 +1328,12 @@ let check_depended_packages (display_config : Logging.config) (typecheck_config (genv, configenv, Alist.to_list libacc) -let make_package_lock_config_path (abspathstr_in : string) = - make_abs_path (Printf.sprintf "%s/package.satysfi-lock" abspathstr_in) +let make_package_deps_config_path (abspathstr_in : string) = + make_abs_path (Printf.sprintf "%s/package.satysfi-deps.yaml" abspathstr_in) -let make_document_lock_config_path (basename_without_extension : string) = - make_abs_path (Printf.sprintf "%s.satysfi-lock" basename_without_extension) +let make_document_deps_config_path (basename_without_extension : string) = + make_abs_path (Printf.sprintf "%s.satysfi-deps.yaml" basename_without_extension) let make_output_mode text_mode_formats_str_opt = @@ -1413,9 +1413,9 @@ let build let abspathstr_in = get_abs_path_string abspath_in in if Sys.is_directory abspathstr_in then (* If the input is a package directory: *) - let abspath_lock_config = make_package_lock_config_path abspathstr_in in - PackageBuildInput{ - lock = abspath_lock_config; + let abspath_deps_config = make_package_deps_config_path abspathstr_in in + EnvelopeBuildInput{ + deps = abspath_deps_config; } else (* If the input is a document file: *) @@ -1426,7 +1426,7 @@ let build | Ok(input_kind) -> let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_lock_config = make_document_lock_config_path basename_without_extension in + let abspath_deps_config = make_document_deps_config_path basename_without_extension in let abspath_out = match (output_mode, output_file) with | (_, Some(abspath_out)) -> abspath_out @@ -1436,7 +1436,7 @@ let build let abspath_dump = make_abs_path (Printf.sprintf "%s.satysfi-aux" basename_without_extension) in DocumentBuildInput{ kind = input_kind; - lock = abspath_lock_config; + deps = abspath_deps_config; out = abspath_out; dump = abspath_dump; } @@ -1446,32 +1446,32 @@ let build let (tyenv_prim, env) = initialize ~is_bytecomp_mode output_mode runtime_config in match build_input with - | PackageBuildInput{ - lock = abspath_deps_config; + | EnvelopeBuildInput{ + deps = abspath_deps_config; } -> - Logging.lock_config_file display_config abspath_deps_config; + Logging.deps_config_file display_config abspath_deps_config; let deps_config = load_deps_config abspath_deps_config in let (_config, envelope) = load_envelope display_config ~use_test_files:false ~extensions abspath_in in let (genv, _configenv, _libs_dep) = - check_depended_packages display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config + check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config in begin - match PackageChecker.main display_config typecheck_config tyenv_prim genv envelope with + match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with | Ok((_ssig, _libs)) -> () | Error(e) -> raise (ConfigError(e)) end | DocumentBuildInput{ kind = input_kind; - lock = abspath_lock_config; + deps = abspath_deps_config; out = abspath_out; dump = abspath_dump; } -> - Logging.lock_config_file display_config abspath_lock_config; - let deps_config = load_deps_config abspath_lock_config in + Logging.deps_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in Logging.target_file display_config abspath_out; @@ -1479,7 +1479,7 @@ let build Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; let (genv, configenv, libs) = - check_depended_packages display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config + check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config in (* Resolve dependency of the document and the local source files: *) @@ -1491,7 +1491,7 @@ let build (* Typechecking and elaboration: *) let (libs_local, ast_doc) = - match PackageChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with + match EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) in @@ -1504,12 +1504,12 @@ let build type test_input = - | PackageTestInput of { - lock : abs_path; + | EnvelopeTestInput of { + deps : abs_path; } | DocumentTestInput of { kind : input_kind; - lock : abs_path; + deps : abs_path; } @@ -1549,9 +1549,9 @@ let test let abspathstr_in = get_abs_path_string abspath_in in if Sys.is_directory abspathstr_in then (* If the input is a package directory: *) - let abspath_lock_config = make_package_lock_config_path abspathstr_in in - PackageTestInput{ - lock = abspath_lock_config; + let abspath_deps_config = make_package_deps_config_path abspathstr_in in + EnvelopeTestInput{ + deps = abspath_deps_config; } else (* If the input is a document file: *) @@ -1562,10 +1562,10 @@ let test | Ok(input_kind) -> let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_lock_config = make_document_lock_config_path basename_without_extension in + let abspath_deps_config = make_document_deps_config_path basename_without_extension in DocumentTestInput{ kind = input_kind; - lock = abspath_lock_config; + deps = abspath_deps_config; } in @@ -1574,20 +1574,20 @@ let test begin match test_input with - | PackageTestInput{ - lock = abspath_deps_config; + | EnvelopeTestInput{ + deps = abspath_deps_config; } -> - Logging.lock_config_file display_config abspath_deps_config; + Logging.deps_config_file display_config abspath_deps_config; let deps_config = load_deps_config abspath_deps_config in let (_config, package) = load_envelope display_config ~use_test_files:true ~extensions abspath_in in let (genv, _configenv, _libs_dep) = - check_depended_packages display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config + check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config in let libs = - match PackageChecker.main display_config typecheck_config tyenv_prim genv package with + match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package with | Ok((_ssig, libs)) -> libs | Error(e) -> raise (ConfigError(e)) in @@ -1597,13 +1597,13 @@ let test | DocumentTestInput{ kind = input_kind; - lock = abspath_lock_config; + deps = abspath_deps_config; } -> - Logging.lock_config_file display_config abspath_lock_config; - let deps_config = load_deps_config abspath_lock_config in + Logging.deps_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in let (genv, configenv, libs) = - check_depended_packages display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config + check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config in (* Resolve dependency of the document and the local source files: *) @@ -1615,7 +1615,7 @@ let test (* Typechecking and elaboration: *) let (libs_local, _ast_doc) = - match PackageChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with + match EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) in From 193416af669b70efde7aa187ee8e04d9e0fac5ac Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 18:48:27 +0900 Subject: [PATCH 007/381] handle language/ecosystem versions --- bin-saphe/configError.ml | 5 +---- bin-saphe/configUtil.ml | 8 ++++---- bin-saphe/constant.ml | 5 ++--- bin-saphe/libraryRootConfig.ml | 6 +++--- bin-saphe/lockConfig.ml | 4 ++-- bin-saphe/main.ml | 27 ++++++++++++++++++++------- bin-saphe/packageConfig.ml | 14 ++++++++------ bin-saphe/packageConfig.mli | 11 ++++++----- bin-saphe/packageConstraintSolver.ml | 3 +-- bin-saphe/packageSystemBase.ml | 3 ++- 10 files changed, 49 insertions(+), 37 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index e94bdbec6..3c5281299 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -12,7 +12,7 @@ type yaml_error = | NotAnArray of YamlDecoder.context | NotAnObject of YamlDecoder.context | UnexpectedTag of YamlDecoder.context * string - | UnexpectedLanguage of string + | BreaksVersionRequirement of YamlDecoder.context * SemanticVersion.requirement | NotASemanticVersion of YamlDecoder.context * string | NotAVersionRequirement of YamlDecoder.context * string | InvalidPackageName of YamlDecoder.context * string @@ -64,9 +64,6 @@ type config_error = depending : lock_name; depended : lock_name; } -(* - | CyclicLockDependency of (lock_name * untyped_package) cycle -*) | CannotFindLibraryFile of lib_path * abs_path list | CannotSolvePackageConstraints (* diff --git a/bin-saphe/configUtil.ml b/bin-saphe/configUtil.ml index cfa5113e3..5b6b12646 100644 --- a/bin-saphe/configUtil.ml +++ b/bin-saphe/configUtil.ml @@ -39,13 +39,13 @@ let requirement_decoder : SemanticVersion.requirement ConfigDecoder.t = | Some(verreq) -> succeed verreq -let language_version_checker : unit ConfigDecoder.t = +let version_checker (version : SemanticVersion.t) : unit ConfigDecoder.t = let open ConfigDecoder in - requirement_decoder >>= fun verreq -> - if Constant.current_language_version |> SemanticVersion.fulfill verreq then + requirement_decoder >>= fun requirement -> + if version |> SemanticVersion.fulfill requirement then succeed () else - failure (fun _yctx -> UnexpectedLanguage(verreq |> SemanticVersion.requirement_to_string)) + failure (fun yctx -> BreaksVersionRequirement(yctx, requirement)) let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 251200dba..63d4ba18c 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -3,9 +3,8 @@ open MyUtil open PackageSystemBase -(* TODO: remove this *) -let current_language_version = - match SemanticVersion.parse "0.1.0" with +let current_ecosystem_version = + match SemanticVersion.parse "0.0.1" with | Some(semver) -> semver | None -> assert false diff --git a/bin-saphe/libraryRootConfig.ml b/bin-saphe/libraryRootConfig.ml index db8c1c35f..546f6d0e3 100644 --- a/bin-saphe/libraryRootConfig.ml +++ b/bin-saphe/libraryRootConfig.ml @@ -49,7 +49,7 @@ let registry_spec_encoder (registry_hash_value, registry_remote) = let config_decoder : t ConfigDecoder.t = let open ConfigDecoder in - get "language" language_version_checker >>= fun () -> + get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "registries" (list registry_spec_decoder) >>= fun registries -> registries |> List.fold_left (fun res (registry_hash_value, registry_remote) -> res >>= fun map -> @@ -62,12 +62,12 @@ let config_decoder : t ConfigDecoder.t = let config_encoder (library_root_config : t) : Yaml.value = - let language = SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_language_version))) in + let language = SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))) in let registry_specs = library_root_config.registries |> RegistryHashValueMap.bindings |> List.map registry_spec_encoder in `O[ - ("language", `String(language)); + ("ecosystem", `String(language)); ("registries", `A(registry_specs)); ] diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index 034643561..ef8c94227 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -72,7 +72,7 @@ let lock_encoder (lock : locked_package) : Yaml.value = let lock_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in - get "language" language_version_checker >>= fun () -> + get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> succeed { locked_packages; @@ -81,7 +81,7 @@ let lock_config_decoder : t ConfigDecoder.t = let lock_config_encoder (lock_config : t) : Yaml.value = `O([ - ("language", `String("^0.1.0")); + ("ecosystem", `String(SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))))); ("locks", `A(lock_config.locked_packages |> List.map lock_encoder)); ]) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 974b8d498..6c18ada07 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -79,8 +79,8 @@ let make_yaml_error_lines : yaml_error -> line list = function | UnexpectedTag(yctx, tag) -> [ NormalLine(Printf.sprintf "unexpected type tag '%s'%s" tag (show_yaml_context yctx)) ] - | UnexpectedLanguage(s_language_version) -> - [ NormalLine(Printf.sprintf "unexpected language version '%s'" s_language_version) ] + | BreaksVersionRequirement(yctx, requirement) -> + [ NormalLine(Printf.sprintf "breaks the requrement '%s'%s" (SemanticVersion.requirement_to_string requirement)(show_yaml_context yctx)) ] | NotASemanticVersion(yctx, s) -> [ NormalLine(Printf.sprintf "not a semantic version: '%s'%s" s (show_yaml_context yctx)) ] @@ -511,13 +511,26 @@ let solve ~(fpath_in : string) = (get_lib_path_string Constant.library_root_config_file)) in let* library_root_config = LibraryRootConfig.load abspath_library_root_config in - let* (dependencies_with_flags, abspath_lock_config, registry_specs) = + let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = match solve_input with | PackageSolveInput{ root = absdir_package; lock = abspath_lock_config; } -> - let* PackageConfig.{ package_contents; registry_specs; _ } = PackageConfig.load absdir_package in + let* + PackageConfig.{ + language_requirement; + package_contents; + registry_specs; + _ + } = PackageConfig.load absdir_package + in + let language_version = + match language_requirement with + | SemanticVersion.CompatibleWith(semver) -> semver + (* Selects the minimum version according to the user's designation for the moment. + TODO: take dependencies into account when selecting a language version *) + in begin match package_contents with | PackageConfig.Library{ dependencies; test_dependencies; _ } -> @@ -526,10 +539,10 @@ let solve ~(fpath_in : string) = (dependencies |> List.map (fun dep -> (SourceDependency, dep))) (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) in - return (dependencies_with_flags, abspath_lock_config, registry_specs) + return (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) | PackageConfig.Font(_) -> - return ([], abspath_lock_config, registry_specs) + return (language_version, [], abspath_lock_config, registry_specs) end | DocumentSolveInput{ @@ -589,7 +602,7 @@ let solve ~(fpath_in : string) = ) registry_specs (return RegistryLocalNameMap.empty) in - let package_context = { registries } in + let package_context = { registries; language_version } in let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in begin match solutions_opt with diff --git a/bin-saphe/packageConfig.ml b/bin-saphe/packageConfig.ml index 4d1b6d80f..bad0d748d 100644 --- a/bin-saphe/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -40,11 +40,12 @@ type package_contents = } type t = { - package_name : package_name; - package_authors : string list; - external_sources : (string * external_source) list; - package_contents : package_contents; - registry_specs : registry_remote RegistryLocalNameMap.t; + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_authors : string list; + external_sources : (string * external_source) list; + package_contents : package_contents; + registry_specs : registry_remote RegistryLocalNameMap.t; } @@ -250,7 +251,7 @@ let external_source_decoder : (string * external_source) ConfigDecoder.t = let config_decoder : t ConfigDecoder.t = let open ConfigDecoder in - get "language" language_version_checker >>= fun () -> + get "language" requirement_decoder >>= fun language_requirement -> get "name" package_name_decoder >>= fun package_name -> get "authors" (list string) >>= fun package_authors -> get_or_else "registries" (list registry_spec_decoder) [] >>= fun registry_specs -> @@ -264,6 +265,7 @@ let config_decoder : t ConfigDecoder.t = succeed (map |> RegistryLocalNameMap.add registry_local_name registry_remote) ) (succeed RegistryLocalNameMap.empty) >>= fun registry_specs -> succeed @@ { + language_requirement; package_name; package_authors; external_sources; diff --git a/bin-saphe/packageConfig.mli b/bin-saphe/packageConfig.mli index 5240c45a2..372e70c5e 100644 --- a/bin-saphe/packageConfig.mli +++ b/bin-saphe/packageConfig.mli @@ -36,11 +36,12 @@ type package_contents = } type t = { - package_name : package_name; - package_authors : string list; - external_sources : (string * external_source) list; - package_contents : package_contents; - registry_specs : registry_remote RegistryLocalNameMap.t; + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_authors : string list; + external_sources : (string * external_source) list; + package_contents : package_contents; + registry_specs : registry_remote RegistryLocalNameMap.t; } val load : abs_path -> (t, config_error) result diff --git a/bin-saphe/packageConstraintSolver.ml b/bin-saphe/packageConstraintSolver.ml index 169e08795..81c22d4d1 100644 --- a/bin-saphe/packageConstraintSolver.ml +++ b/bin-saphe/packageConstraintSolver.ml @@ -191,8 +191,7 @@ module SolverInput = struct let impls = impl_records |> List.filter_map (fun impl_record -> let ImplRecord{ version; source; language_requirement; dependencies } = impl_record in - if Constant.current_language_version |> SemanticVersion.fulfill language_requirement then - (* TODO: change the condition above *) + if context.language_version |> SemanticVersion.fulfill language_requirement then if String.equal (SemanticVersion.get_compatibility_unit version) compatibility then let dependencies = make_internal_dependency_from_registry registry_local_name context dependencies diff --git a/bin-saphe/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml index 834c4a01f..c3ec5c71e 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/bin-saphe/packageSystemBase.ml @@ -91,7 +91,8 @@ type registry_spec = { } type package_context = { - registries : registry_spec RegistryLocalNameMap.t; + language_version : SemanticVersion.t; + registries : registry_spec RegistryLocalNameMap.t; } type package_solution = { From a7c5a20c5ffb8a11f083f6f24428585ecd96e082 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 21:24:04 +0900 Subject: [PATCH 008/381] slight changes --- .gitignore | 1 + Makefile | 17 +++++++++++------ bin-saphe/main.ml | 5 +++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index c2dc6fde3..fbb73640b 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ obsolete/*.txt old/ *.png satysfi +saphe *.ttf *.otf *.ttc diff --git a/Makefile b/Makefile index bb2775d5a..2681c708b 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ PREFIX=/usr/local LIBDIR=$(PREFIX)/share/satysfi -TARGET=satysfi +SATYSFI=satysfi +SAPHE=saphe BINDIR=$(PREFIX)/bin RM=rm -f DUNE=dune @@ -9,7 +10,8 @@ DUNE=dune all: $(DUNE) build --root . - cp _build/install/default/bin/$(TARGET) . + cp _build/install/default/bin/$(SATYSFI) . + cp _build/install/default/bin/$(SAPHE) . test: $(DUNE) runtest @@ -17,17 +19,20 @@ test: test-packages: ./check-packages.sh -install: $(TARGET) +install: $(SATYSFI) mkdir -p $(BINDIR) - install $(TARGET) $(BINDIR) + install $(SATYSFI) $(BINDIR) + install $(SAPHE) $(BINDIR) #preliminary: # [ -d .git ] && git submodule update -i || echo "Skip git submodule update -i" uninstall: - rm -rf $(BINDIR)/$(TARGET) + rm -rf $(BINDIR)/$(SATYSFI) + rm -rf $(BINDIR)/$(SAPHE) rm -rf $(LIBDIR) clean: $(DUNE) clean - $(RM) satysfi + $(RM) $(SATYSFI) + $(RM) $(SAPHE) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 6c18ada07..b9cf88845 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -9,7 +9,8 @@ exception ConfigError of config_error let version = - "Saphe version 0.0.1 alpha" + Printf.sprintf "Saphe version %s alpha" + (SemanticVersion.to_string Constant.current_ecosystem_version) type line = @@ -486,7 +487,7 @@ let solve ~(fpath_in : string) = let solve_input = let abspathstr_in = get_abs_path_string abspath_in in if Sys.is_directory abspathstr_in then - (* If the input is a package directory: *) + (* If the input is a directory that forms a package: *) let abspath_lock_config = make_package_lock_config_path abspathstr_in in PackageSolveInput{ root = abspath_in; From 88eeb0cd256b8f568eb4ce790ebfad143c3b1396 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 22:46:31 +0900 Subject: [PATCH 009/381] various fixes and refactoring --- bin-saphe/configError.ml | 1 - bin-saphe/constant.ml | 12 ++++++++---- bin-saphe/libraryRootConfig.ml | 1 + bin-saphe/lockFetcher.ml | 10 +++++----- bin-saphe/main.ml | 36 ++++++++++++---------------------- bin-saphe/packageConfig.ml | 7 +++---- 6 files changed, 30 insertions(+), 37 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index 3c5281299..415ff024d 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -54,7 +54,6 @@ type config_error = | LockConfigNotFound of abs_path | LockConfigError of abs_path * yaml_error | RegistryConfigNotFound of abs_path - | RegistryConfigNotFoundIn of lib_path * abs_path list | RegistryConfigError of abs_path * yaml_error | LibraryRootConfigNotFound of abs_path | LibraryRootConfigError of abs_path * yaml_error diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 63d4ba18c..2e9acf69c 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -30,13 +30,17 @@ let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : l make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) -let package_config_file_name = - "satysfi.yaml" +let library_package_config_path (absdir_library : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.yaml") let library_root_config_file = - make_lib_path "satysfi-library-root.yaml" + make_lib_path "saphe-library-root.yaml" let package_registry_config_file_name = - "satysfi-registry.yaml" + "saphe-registry.yaml" + + +let library_lock_config_file_name = + "saphe.lock.yaml" diff --git a/bin-saphe/libraryRootConfig.ml b/bin-saphe/libraryRootConfig.ml index 546f6d0e3..a44279724 100644 --- a/bin-saphe/libraryRootConfig.ml +++ b/bin-saphe/libraryRootConfig.ml @@ -72,6 +72,7 @@ let config_encoder (library_root_config : t) : Yaml.value = ] +(* TODO: automatically initialize a registry config if non-existent *) let load (abspath_config : abs_path) : (t, config_error) result = let open ResultMonad in let* s = diff --git a/bin-saphe/lockFetcher.ml b/bin-saphe/lockFetcher.ml index c4616284e..87059bb3d 100644 --- a/bin-saphe/lockFetcher.ml +++ b/bin-saphe/lockFetcher.ml @@ -73,10 +73,8 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri (* Creates the directory if non-existent, or does nothing otherwise: *) ShellCommand.mkdir_p absdir_lock; - let abspathstr_config = - Filename.concat (get_abs_path_string absdir_lock) Constant.package_config_file_name - in - if Sys.file_exists abspathstr_config then begin + let abspath_config = Constant.library_package_config_path absdir_lock in + if Sys.file_exists (get_abs_path_string abspath_config) then begin (* If the lock has already been fetched: *) Logging.lock_already_installed lock_tarball_name absdir_lock; return () @@ -125,7 +123,9 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri in (* Fetches external sources according to the package config: *) - let* PackageConfig.{ external_sources; _ } = PackageConfig.load absdir_lock in + let* PackageConfig.{ external_sources; _ } = + PackageConfig.load (Constant.library_package_config_path absdir_lock) + in let* () = external_sources |> foldM (fun () (name, external_source) -> match external_source with diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index b9cf88845..3af63eb20 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -121,10 +121,10 @@ let report_config_error = function report_error (NormalLine("cannot find package directory. candidates:") :: lines) - | PackageConfigNotFound(abspath) -> + | PackageConfigNotFound(abspath_package_config) -> report_error [ - NormalLine("cannot find a package config at:"); - DisplayLine(get_abs_path_string abspath); + NormalLine("cannot find a package config:"); + DisplayLine(get_abs_path_string abspath_package_config); ] | PackageConfigError(abspath, e) -> @@ -145,23 +145,12 @@ let report_config_error = function make_yaml_error_lines e; ]) - | RegistryConfigNotFound(abspath) -> + | RegistryConfigNotFound(abspath_registry_config) -> report_error [ - NormalLine("cannot find a registry config at:"); - DisplayLine(get_abs_path_string abspath); + NormalLine("cannot find a registry config:"); + DisplayLine(get_abs_path_string abspath_registry_config); ] - | RegistryConfigNotFoundIn(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - report_error (List.concat [ - [ NormalLine(Printf.sprintf "cannot find a registry config '%s'. candidates:" (get_lib_path_string libpath)) ]; - lines; - ]) - | RegistryConfigError(abspath, e) -> report_error (List.concat [ [ NormalLine(Printf.sprintf "in %s: registry config error;" (get_abs_path_string abspath)) ]; @@ -359,11 +348,11 @@ let error_log_environment (suspended : unit -> unit) : unit = let make_package_lock_config_path (abspathstr_in : string) = - make_abs_path (Printf.sprintf "%s/package.satysfi-lock" abspathstr_in) + make_abs_path (Printf.sprintf "%s/%s" abspathstr_in Constant.library_lock_config_file_name) -let make_document_lock_config_path (basename_without_extension : string) = - make_abs_path (Printf.sprintf "%s.satysfi-lock" basename_without_extension) +let make_document_lock_config_path (path_without_extension : string) = + make_abs_path (Printf.sprintf "%s.satysfi-lock" path_without_extension) type solve_input = @@ -495,8 +484,8 @@ let solve ~(fpath_in : string) = } else let abspathstr_in = get_abs_path_string abspath_in in - let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_lock_config = make_document_lock_config_path basename_without_extension in + let path_without_extension = Filename.remove_extension abspathstr_in in + let abspath_lock_config = make_document_lock_config_path path_without_extension in DocumentSolveInput{ path = abspath_in; lock = abspath_lock_config; @@ -518,13 +507,14 @@ let solve ~(fpath_in : string) = root = absdir_package; lock = abspath_lock_config; } -> + let abspath_config = Constant.library_package_config_path absdir_package in let* PackageConfig.{ language_requirement; package_contents; registry_specs; _ - } = PackageConfig.load absdir_package + } = PackageConfig.load abspath_config in let language_version = match language_requirement with diff --git a/bin-saphe/packageConfig.ml b/bin-saphe/packageConfig.ml index bad0d748d..2aa4a4725 100644 --- a/bin-saphe/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -251,6 +251,7 @@ let external_source_decoder : (string * external_source) ConfigDecoder.t = let config_decoder : t ConfigDecoder.t = let open ConfigDecoder in + get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "language" requirement_decoder >>= fun language_requirement -> get "name" package_name_decoder >>= fun package_name -> get "authors" (list string) >>= fun package_authors -> @@ -274,11 +275,9 @@ let config_decoder : t ConfigDecoder.t = } -let load (absdir_package : abs_path) : t ok = +let load (abspath_config : abs_path) : t ok = + print_endline @@ "!!!! LOAD: " ^ get_abs_path_string abspath_config; let open ResultMonad in - let abspath_config = - make_abs_path (Filename.concat (get_abs_path_string absdir_package) Constant.package_config_file_name) - in let* s = read_file abspath_config |> Result.map_error (fun _ -> PackageConfigNotFound(abspath_config)) From 2e728e233ad5683ef865e84719e09e3ef9d2a869 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 23:22:50 +0900 Subject: [PATCH 010/381] begin to migrate `testing` and `stdlib` to Saphe --- check-packages.sh | 9 ++++--- lib-satysfi/packages/.gitignore | 1 + .../package.satysfi-lock-expected | 10 ------- .../stdlib.0.0.1/saphe.lock.yaml.expected | 10 +++++++ .../packages/stdlib/stdlib.0.0.1/saphe.yaml | 26 +++++++++++++++++++ .../packages/stdlib/stdlib.0.0.1/satysfi.yaml | 2 +- .../package.satysfi-lock-expected | 2 -- .../testing.0.0.1/saphe.lock.yaml.expected | 2 ++ .../packages/testing/testing.0.0.1/saphe.yaml | 11 ++++++++ 9 files changed, 56 insertions(+), 17 deletions(-) delete mode 100644 lib-satysfi/packages/stdlib/stdlib.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml delete mode 100644 lib-satysfi/packages/testing/testing.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml diff --git a/check-packages.sh b/check-packages.sh index 1041e795f..1bfc9fea1 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -1,11 +1,12 @@ #!/bin/sh FAILED=0 -for FILE in $(find lib-satysfi -name satysfi.yaml); do +for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" - satysfi solve "$DIR" - if diff "$DIR/package.satysfi-lock" "$DIR/package.satysfi-lock-expected"; then - satysfi build "$DIR" + saphe solve "$DIR" + if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then + echo "TODO: build" + #saphe build "$DIR" else echo "! FAILED: $DIR" FAILED=1 diff --git a/lib-satysfi/packages/.gitignore b/lib-satysfi/packages/.gitignore index 28e8ef900..fe519a3ee 100644 --- a/lib-satysfi/packages/.gitignore +++ b/lib-satysfi/packages/.gitignore @@ -1 +1,2 @@ *.satysfi-lock +saphe.lock.yaml diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 5ba8cdf16..000000000 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.testing.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: testing - version: 0.0.1 - dependencies: [] - test_only: true diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..1803a8cd6 --- /dev/null +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,10 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.testing.0.0.1 + contents: + type: registered + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: testing + version: 0.0.1 + dependencies: [] + test_only: true diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml new file mode 100644 index 000000000..88da146a7 --- /dev/null +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml @@ -0,0 +1,26 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "stdlib" +authors: + - "Takashi Suwa <@gfngfn>" + - "yozu <@yasuo-ozu>" +registries: + - name: "default" + remote: + type: "git" + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + type: "library" + main_module: "Stdlib" + source_directories: + - "./src" + test_directories: + - "./test" + dependencies: [] + test_dependencies: + - name: "testing" + spec: + type: "registered" + registry: "default" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml index c560fa662..6efe97745 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml @@ -8,7 +8,7 @@ registries: remote: type: "git" url: "https://github.com/SATySFi/default-registry" - branch: "format-1" + branch: "temp-dev-saphe" contents: type: "library" main_module: "Stdlib" diff --git a/lib-satysfi/packages/testing/testing.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/testing/testing.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index cac2e8573..000000000 --- a/lib-satysfi/packages/testing/testing.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,2 +0,0 @@ -language: ^0.1.0 -locks: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..bcfd40049 --- /dev/null +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,2 @@ +ecosystem: ^0.0.1 +locks: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml new file mode 100644 index 000000000..c7b82c6e4 --- /dev/null +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml @@ -0,0 +1,11 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "testing" +authors: + - "Takashi Suwa <@gfngfn>" +contents: + type: "library" + main_module: "Testing" + source_directories: + - "./src" + dependencies: [] From 77009fe794c9a67d7e75805f8756c23cf2bc7b3f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 27 Dec 2023 23:30:30 +0900 Subject: [PATCH 011/381] disable debug prints --- bin-saphe/packageConfig.ml | 1 - 1 file changed, 1 deletion(-) diff --git a/bin-saphe/packageConfig.ml b/bin-saphe/packageConfig.ml index 2aa4a4725..07cf0eb6f 100644 --- a/bin-saphe/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -276,7 +276,6 @@ let config_decoder : t ConfigDecoder.t = let load (abspath_config : abs_path) : t ok = - print_endline @@ "!!!! LOAD: " ^ get_abs_path_string abspath_config; let open ResultMonad in let* s = read_file abspath_config From a408faf9ee43724845d5937fe804a88cfb40219d Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 28 Dec 2023 02:02:19 +0900 Subject: [PATCH 012/381] develop how to handle paths of configs --- bin-saphe/constant.ml | 27 ++++++++++++++---- bin-saphe/main.ml | 66 +++++++++++++++++++------------------------ 2 files changed, 50 insertions(+), 43 deletions(-) diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 2e9acf69c..ea5fe0322 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -30,17 +30,32 @@ let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : l make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) +let library_root_config_path (absdir_library_root : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_library_root) "saphe-library-root.yaml") + + +let package_registry_config_file_name = + "saphe-registry.yaml" + + let library_package_config_path (absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.yaml") -let library_root_config_file = - make_lib_path "saphe-library-root.yaml" +let document_package_config_path (abspath_doc : abs_path) : abs_path = + let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in + make_abs_path (Printf.sprintf "%s.saphe.yaml" path_without_extension) -let package_registry_config_file_name = - "saphe-registry.yaml" +let library_lock_config_path (absdir_library : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.lock.yaml") + + +let document_lock_config_path (abspath_doc : abs_path) : abs_path = + let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in + make_abs_path (Printf.sprintf "%s.saphe.lock.yaml" path_without_extension) -let library_lock_config_file_name = - "saphe.lock.yaml" +(* Should be in sync with SATySFi *) +let envelope_config_path (absdir_library : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_library) "satysfi-envelope.yaml") diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 3af63eb20..740ad2764 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -347,22 +347,16 @@ let error_log_environment (suspended : unit -> unit) : unit = report_config_error e -let make_package_lock_config_path (abspathstr_in : string) = - make_abs_path (Printf.sprintf "%s/%s" abspathstr_in Constant.library_lock_config_file_name) - - -let make_document_lock_config_path (path_without_extension : string) = - make_abs_path (Printf.sprintf "%s.satysfi-lock" path_without_extension) - - type solve_input = | PackageSolveInput of { - root : abs_path; (* The absolute path of a directory used as the package root *) - lock : abs_path; (* A path for writing a resulting lock file *) + root : abs_path; (* The absolute path of a directory used as the package root *) + lock : abs_path; (* A path for writing a resulting lock config file *) + envelope : abs_path; (* A path for writing a resulting envelope config file *) } | DocumentSolveInput of { - path : abs_path; (* The absolute path to the document file *) - lock : abs_path; (* A path for writing a resulting lock file *) + doc : abs_path; (* The absolute path to the document file *) + config : abs_path; (* The absolute path to the config file *) + lock : abs_path; (* A path for writing a resulting lock file *) } @@ -462,7 +456,7 @@ let solve ~(fpath_in : string) = error_log_environment (fun () -> let curdir = Sys.getcwd () in - let library_root = + let absdir_library_root = if String.equal Sys.os_type "Win32" then match Sys.getenv_opt "userprofile" with | None -> raise NoLibraryRootDesignation @@ -474,47 +468,44 @@ let solve ~(fpath_in : string) = in let abspath_in = make_absolute_if_relative ~origin:curdir fpath_in in let solve_input = - let abspathstr_in = get_abs_path_string abspath_in in - if Sys.is_directory abspathstr_in then + if Sys.is_directory (get_abs_path_string abspath_in) then (* If the input is a directory that forms a package: *) - let abspath_lock_config = make_package_lock_config_path abspathstr_in in + let abspath_lock_config = Constant.library_lock_config_path abspath_in in + let abspath_envelope_config = Constant.envelope_config_path abspath_in in PackageSolveInput{ - root = abspath_in; - lock = abspath_lock_config; + root = abspath_in; + lock = abspath_lock_config; + envelope = abspath_envelope_config; } else - let abspathstr_in = get_abs_path_string abspath_in in - let path_without_extension = Filename.remove_extension abspathstr_in in - let abspath_lock_config = make_document_lock_config_path path_without_extension in + let abspath_package_config = Constant.document_package_config_path abspath_in in + let abspath_lock_config = Constant.document_lock_config_path abspath_in in DocumentSolveInput{ - path = abspath_in; - lock = abspath_lock_config; + doc = abspath_in; + config = abspath_package_config; + lock = abspath_lock_config; } in let res = let open ResultMonad in - let abspath_library_root_config = - make_abs_path - (Filename.concat - (get_abs_path_string library_root) - (get_lib_path_string Constant.library_root_config_file)) - in + let abspath_library_root_config = Constant.library_root_config_path absdir_library_root in let* library_root_config = LibraryRootConfig.load abspath_library_root_config in let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = match solve_input with | PackageSolveInput{ - root = absdir_package; - lock = abspath_lock_config; + root = absdir_package; + lock = abspath_lock_config; + envelope = _abspath_envelope_config; (* TODO: use this *) } -> - let abspath_config = Constant.library_package_config_path absdir_package in + let abspath_package_config = Constant.library_package_config_path absdir_package in let* PackageConfig.{ language_requirement; package_contents; registry_specs; _ - } = PackageConfig.load abspath_config + } = PackageConfig.load abspath_package_config in let language_version = match language_requirement with @@ -537,8 +528,9 @@ let solve ~(fpath_in : string) = end | DocumentSolveInput{ - path = _abspath_in; - lock = _abspath_lock_config; + doc = _abspath_doc; + config = _abspath_package_config; + lock = _abspath_lock_config; } -> failwith "TODO: DocumentSolveInput" (* @@ -569,7 +561,7 @@ let solve ~(fpath_in : string) = let libpath_registry_root = Constant.registry_root_directory registry_hash_value in make_abs_path (Filename.concat - (get_abs_path_string library_root) + (get_abs_path_string absdir_library_root) (get_lib_path_string libpath_registry_root)) in let git_command = "git" in (* TODO: make this changeable *) @@ -612,7 +604,7 @@ let solve ~(fpath_in : string) = let* () = impl_specs |> foldM (fun () impl_spec -> LockFetcher.main - ~wget_command ~tar_command ~unzip_command ~library_root impl_spec + ~wget_command ~tar_command ~unzip_command ~library_root:absdir_library_root impl_spec ) () in LockConfig.write abspath_lock_config lock_config; From 070f4d7e641b31baf502af9e021dacd87acc3d52 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 28 Dec 2023 04:08:21 +0900 Subject: [PATCH 013/381] suppress the version of `camlimages` --- satysfi.opam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satysfi.opam b/satysfi.opam index 2c804583d..e461ce0e6 100644 --- a/satysfi.opam +++ b/satysfi.opam @@ -22,7 +22,7 @@ remove: [ depends: [ "ocaml" {>= "4.12.0"} "batteries" - "camlimages" {>= "5.0.1"} + "camlimages" {>= "5.0.1" & < "5.0.5"} "camlpdf" {= "2.3.1+satysfi"} "cmdliner" {>= "1.1.1"} "core_kernel" {>= "v0.15"} From b99509cd1bd89a08a719a5eb40a97a3d2d14fb79 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 03:19:09 +0900 Subject: [PATCH 014/381] write `satysfi-envelope.yaml` for libraries during `saphe solve` --- bin-saphe/envelopeConfig.ml | 85 +++++++++++++++++++++++++++++++++ bin-saphe/logging.ml | 7 ++- bin-saphe/logging.mli | 2 + bin-saphe/main.ml | 60 ++++++++++++++++++++++- lib-satysfi/packages/.gitignore | 1 + 5 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 bin-saphe/envelopeConfig.ml diff --git a/bin-saphe/envelopeConfig.ml b/bin-saphe/envelopeConfig.ml new file mode 100644 index 000000000..babd01ba7 --- /dev/null +++ b/bin-saphe/envelopeConfig.ml @@ -0,0 +1,85 @@ + +open MyUtil + + +type relative_path = string + +type font_file_contents = + | OpentypeSingle of string + | OpentypeCollection of string list +[@@deriving show] + +type font_file_description = { + font_file_path : relative_path; + font_file_contents : font_file_contents; + used_as_math_font : bool; +} + +type package_conversion_spec = unit (* TODO *) + +type envelope_contents = + | Library of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + conversion_specs : package_conversion_spec list; + } + | Font of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } + +type t = { + envelope_contents : envelope_contents; +} + + +let font_file_contents_encoder (contents : font_file_contents) : Yaml.value = + match contents with + | OpentypeSingle(name) -> + `O([ + ("type", `String("opentype_single")); + ("name", `String(name)); + ]) + + | OpentypeCollection(names) -> + `O([ + ("type", `String("opentype_collection")); + ("names", `A(names |> List.map (fun name -> `String(name)))); + ]) + + +let font_file_description_encoder (descr : font_file_description) : Yaml.value = + `O([ + ("path", `String(descr.font_file_path)); + ("math", `Bool(descr.used_as_math_font)); + ("contents", font_file_contents_encoder descr.font_file_contents); + ]) + + +let envelope_config_encoder (envelope_config : t) : Yaml.value = + match envelope_config.envelope_contents with + | Library{ main_module_name; source_directories; test_directories; _ } -> + (* TODO: encode conversion specs *) + `O([ + ("main_module", `String(main_module_name)); + ("source_directories", `A(source_directories |> List.map (fun s -> `String(s)))); + ("test_directories", `A(test_directories |> List.map (fun s -> `String(s)))); + ]) + + | Font{ main_module_name; font_file_descriptions } -> + `O([ + ("main_module", `String(main_module_name)); + ("fonts", `A(font_file_descriptions |> List.map font_file_description_encoder)); + ]) + + +let write (abspath_envelope_config : abs_path) (envelope_config : t) : unit = + let yaml = envelope_config_encoder envelope_config in + match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with + | Ok(data) -> + Core.Out_channel.write_all (get_abs_path_string abspath_envelope_config) ~data; + Logging.end_envelope_output abspath_envelope_config + + | Error(_) -> + assert false diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 59f834bf9..3fc527a9a 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -28,8 +28,11 @@ let show_package_dependency_solutions (solutions : package_solution list) = let end_lock_output (file_name_out : abs_path) = - print_endline (" ---- ---- ---- ----"); - print_endline (" output written on '" ^ (get_abs_path_string file_name_out) ^ "'.") + print_endline (" lock config written on '" ^ (get_abs_path_string file_name_out) ^ "'.") + + +let end_envelope_output (file_name_out : abs_path) = + print_endline (" envelope config written on '" ^ (get_abs_path_string file_name_out) ^ "'.") let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = diff --git a/bin-saphe/logging.mli b/bin-saphe/logging.mli index faf4376f3..2235b3d19 100644 --- a/bin-saphe/logging.mli +++ b/bin-saphe/logging.mli @@ -8,6 +8,8 @@ val show_package_dependency_solutions : package_solution list -> unit val end_lock_output : abs_path -> unit +val end_envelope_output : abs_path -> unit + val lock_already_installed : lock_name -> abs_path -> unit val lock_cache_exists : lock_name -> abs_path -> unit diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 740ad2764..e6e89ada6 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -452,6 +452,62 @@ let extract_attributes_from_document_file (display_config : Logging.config) (inp return docattr *) + +let make_envelope_config (package_contents : PackageConfig.package_contents) : EnvelopeConfig.t = + match package_contents with + | PackageConfig.Library{ + main_module_name; + source_directories; + test_directories; + _ + } -> + EnvelopeConfig.{ + envelope_contents = + Library{ + main_module_name; + source_directories; + test_directories; + conversion_specs = []; (* TODO *) + }; + } + + | PackageConfig.Font{ + main_module_name; + font_file_descriptions = descrs; + } -> + let font_file_descriptions = + descrs |> List.map (fun descr -> + let + PackageConfig.{ + font_file_path; + font_file_contents; + used_as_math_font; + } = descr + in + let font_file_contents = + match font_file_contents with + | PackageConfig.OpentypeSingle(name) -> + EnvelopeConfig.OpentypeSingle(name) + + | PackageConfig.OpentypeCollection(names) -> + EnvelopeConfig.OpentypeCollection(names) + in + EnvelopeConfig.{ + font_file_path; + font_file_contents; + used_as_math_font; + } + ) + in + EnvelopeConfig.{ + envelope_contents = + Font{ + main_module_name; + font_file_descriptions; + }; + } + + let solve ~(fpath_in : string) = error_log_environment (fun () -> let curdir = Sys.getcwd () in @@ -496,7 +552,7 @@ let solve ~(fpath_in : string) = | PackageSolveInput{ root = absdir_package; lock = abspath_lock_config; - envelope = _abspath_envelope_config; (* TODO: use this *) + envelope = abspath_envelope_config; } -> let abspath_package_config = Constant.library_package_config_path absdir_package in let* @@ -513,6 +569,8 @@ let solve ~(fpath_in : string) = (* Selects the minimum version according to the user's designation for the moment. TODO: take dependencies into account when selecting a language version *) in + let envelope_config = make_envelope_config package_contents in + EnvelopeConfig.write abspath_envelope_config envelope_config; begin match package_contents with | PackageConfig.Library{ dependencies; test_dependencies; _ } -> diff --git a/lib-satysfi/packages/.gitignore b/lib-satysfi/packages/.gitignore index fe519a3ee..3e6540676 100644 --- a/lib-satysfi/packages/.gitignore +++ b/lib-satysfi/packages/.gitignore @@ -1,2 +1,3 @@ *.satysfi-lock saphe.lock.yaml +satysfi-envelope.yaml From c457cd9b48ae118671839e38f8fd883a595a85f6 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 17:17:26 +0900 Subject: [PATCH 015/381] slight refactoring of `Logging` --- bin-saphe/envelopeConfig.ml | 2 +- bin-saphe/lockConfig.ml | 2 +- bin-saphe/logging.ml | 8 ++++---- bin-saphe/logging.mli | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bin-saphe/envelopeConfig.ml b/bin-saphe/envelopeConfig.ml index babd01ba7..3303bf02f 100644 --- a/bin-saphe/envelopeConfig.ml +++ b/bin-saphe/envelopeConfig.ml @@ -79,7 +79,7 @@ let write (abspath_envelope_config : abs_path) (envelope_config : t) : unit = match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with | Ok(data) -> Core.Out_channel.write_all (get_abs_path_string abspath_envelope_config) ~data; - Logging.end_envelope_output abspath_envelope_config + Logging.end_envelope_config_output abspath_envelope_config | Error(_) -> assert false diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index ef8c94227..4c600ee90 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -101,7 +101,7 @@ let write (abspath_lock_config : abs_path) (lock_config : t) : unit = match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with | Ok(data) -> Core.Out_channel.write_all (get_abs_path_string abspath_lock_config) ~data; - Logging.end_lock_output abspath_lock_config + Logging.end_lock_config_output abspath_lock_config | Error(_) -> assert false diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 3fc527a9a..c0d10095c 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -27,12 +27,12 @@ let show_package_dependency_solutions (solutions : package_solution list) = ) -let end_lock_output (file_name_out : abs_path) = - print_endline (" lock config written on '" ^ (get_abs_path_string file_name_out) ^ "'.") +let end_lock_config_output (file_name_out : abs_path) = + Printf.printf " lock config written on '%s'." (get_abs_path_string file_name_out) -let end_envelope_output (file_name_out : abs_path) = - print_endline (" envelope config written on '" ^ (get_abs_path_string file_name_out) ^ "'.") +let end_envelope_config_output (file_name_out : abs_path) = + Printf.printf " envelope config written on '%s'." (get_abs_path_string file_name_out) let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = diff --git a/bin-saphe/logging.mli b/bin-saphe/logging.mli index 2235b3d19..98c0e59b6 100644 --- a/bin-saphe/logging.mli +++ b/bin-saphe/logging.mli @@ -6,9 +6,9 @@ val show_package_dependency_before_solving : (dependency_flag * package_dependen val show_package_dependency_solutions : package_solution list -> unit -val end_lock_output : abs_path -> unit +val end_lock_config_output : abs_path -> unit -val end_envelope_output : abs_path -> unit +val end_envelope_config_output : abs_path -> unit val lock_already_installed : lock_name -> abs_path -> unit From d09b84791f3f83dd48d7a2115cac6a525ff58172 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 17:51:02 +0900 Subject: [PATCH 016/381] refactor `bin-saphe/main.ml` by removing exceptions --- bin-saphe/configError.ml | 1 + bin-saphe/main.ml | 304 +++++++++++++++++++-------------------- 2 files changed, 147 insertions(+), 158 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index 415ff024d..f0441fba8 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -48,6 +48,7 @@ module YamlError = struct end type config_error = + | CannotDetermineStoreRoot of { envvar : string } | PackageDirectoryNotFound of string list | PackageConfigNotFound of abs_path | PackageConfigError of abs_path * yaml_error diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index e6e89ada6..339128bd2 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -4,10 +4,6 @@ open PackageSystemBase open ConfigError -exception NoLibraryRootDesignation -exception ConfigError of config_error - - let version = Printf.sprintf "Saphe version %s alpha" (SemanticVersion.to_string Constant.current_ecosystem_version) @@ -17,7 +13,8 @@ type line = | NormalLine of string | DisplayLine of string -let report_error (lines : line list) = + +let report_error (lines : line list) : unit = print_string "! "; lines |> List.fold_left (fun (is_first : bool) (line : line) -> begin @@ -35,11 +32,10 @@ let report_error (lines : line list) = print_endline (" " ^ s) end; false - ) true |> ignore; - exit 1 + ) true |> ignore -let show_yaml_context (context : YamlDecoder.context) = +let show_yaml_context (context : YamlDecoder.context) : string = match context with | [] -> "" @@ -112,6 +108,12 @@ let make_yaml_error_lines : yaml_error -> line list = function let report_config_error = function + | CannotDetermineStoreRoot{ envvar } -> + report_error [ + NormalLine("cannot determine where the SATySFi library root is;"); + NormalLine(Printf.sprintf "set environment variable '%s'." envvar); + ] + | PackageDirectoryNotFound(candidate_paths) -> let lines = candidate_paths |> List.map (fun path -> @@ -333,20 +335,6 @@ let report_config_error = function end -let error_log_environment (suspended : unit -> unit) : unit = - try - suspended () - with - | NoLibraryRootDesignation -> - report_error [ - NormalLine("cannot determine where the SATySFi library root is;"); - NormalLine("set appropriate environment variables."); - ] - - | ConfigError(e) -> - report_config_error e - - type solve_input = | PackageSolveInput of { root : abs_path; (* The absolute path of a directory used as the package root *) @@ -508,21 +496,26 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E } +let get_library_root () : (abs_path, config_error) result = + let open ResultMonad in + let envvar_home = + if String.equal Sys.os_type "Win32" then + "userprofile" + else + "HOME" + in + match Sys.getenv_opt envvar_home with + | None -> err @@ CannotDetermineStoreRoot { envvar = envvar_home } + | Some(home) -> return @@ make_abs_path (Filename.concat home ".saphe") + + let solve ~(fpath_in : string) = - error_log_environment (fun () -> - let curdir = Sys.getcwd () in - - let absdir_library_root = - if String.equal Sys.os_type "Win32" then - match Sys.getenv_opt "userprofile" with - | None -> raise NoLibraryRootDesignation - | Some(s) -> make_abs_path (Filename.concat s ".saphe") - else - match Sys.getenv_opt "HOME" with - | None -> raise NoLibraryRootDesignation - | Some(s) -> make_abs_path (Filename.concat s ".saphe") - in - let abspath_in = make_absolute_if_relative ~origin:curdir fpath_in in + let absdir_current = Sys.getcwd () in + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + + let res = + let open ResultMonad in + let* absdir_library_root = get_library_root () in let solve_input = if Sys.is_directory (get_abs_path_string abspath_in) then (* If the input is a directory that forms a package: *) @@ -543,135 +536,130 @@ let solve ~(fpath_in : string) = } in - let res = - let open ResultMonad in - let abspath_library_root_config = Constant.library_root_config_path absdir_library_root in - let* library_root_config = LibraryRootConfig.load abspath_library_root_config in - let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = - match solve_input with - | PackageSolveInput{ - root = absdir_package; - lock = abspath_lock_config; - envelope = abspath_envelope_config; - } -> - let abspath_package_config = Constant.library_package_config_path absdir_package in - let* - PackageConfig.{ - language_requirement; - package_contents; - registry_specs; - _ - } = PackageConfig.load abspath_package_config - in - let language_version = - match language_requirement with - | SemanticVersion.CompatibleWith(semver) -> semver - (* Selects the minimum version according to the user's designation for the moment. - TODO: take dependencies into account when selecting a language version *) - in - let envelope_config = make_envelope_config package_contents in - EnvelopeConfig.write abspath_envelope_config envelope_config; - begin - match package_contents with - | PackageConfig.Library{ dependencies; test_dependencies; _ } -> - let dependencies_with_flags = - List.append - (dependencies |> List.map (fun dep -> (SourceDependency, dep))) - (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) - in - return (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) - - | PackageConfig.Font(_) -> - return (language_version, [], abspath_lock_config, registry_specs) - end - - | DocumentSolveInput{ - doc = _abspath_doc; - config = _abspath_package_config; - lock = _abspath_lock_config; - } -> - failwith "TODO: DocumentSolveInput" + let abspath_library_root_config = Constant.library_root_config_path absdir_library_root in + let* library_root_config = LibraryRootConfig.load abspath_library_root_config in + let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = + match solve_input with + | PackageSolveInput{ + root = absdir_package; + lock = abspath_lock_config; + envelope = abspath_envelope_config; + } -> + let abspath_package_config = Constant.library_package_config_path absdir_package in + let* + PackageConfig.{ + language_requirement; + package_contents; + registry_specs; + _ + } = PackageConfig.load abspath_package_config + in + let language_version = + match language_requirement with + | SemanticVersion.CompatibleWith(semver) -> semver + (* Selects the minimum version according to the user's designation for the moment. + TODO: take dependencies into account when selecting a language version *) + in + let envelope_config = make_envelope_config package_contents in + EnvelopeConfig.write abspath_envelope_config envelope_config; + begin + match package_contents with + | PackageConfig.Library{ dependencies; test_dependencies; _ } -> + let dependencies_with_flags = + List.append + (dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) + in + return (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) + + | PackageConfig.Font(_) -> + return (language_version, [], abspath_lock_config, registry_specs) + end + + | DocumentSolveInput{ + doc = _abspath_doc; + config = _abspath_package_config; + lock = _abspath_lock_config; + } -> + failwith "TODO: DocumentSolveInput" (* - let* DocumentAttribute.{ registry_specs; dependencies } = - extract_attributes_from_document_file display_config input_kind abspath_in - in - let dependencies_with_flags = dependencies |> List.map (fun dep -> (SourceDependency, dep)) in - return (dependencies_with_flags, abspath_lock_config, registry_specs) + let* DocumentAttribute.{ registry_specs; dependencies } = + extract_attributes_from_document_file display_config input_kind abspath_in + in + let dependencies_with_flags = dependencies |> List.map (fun dep -> (SourceDependency, dep)) in + return (dependencies_with_flags, abspath_lock_config, registry_specs) *) - in - - Logging.show_package_dependency_before_solving dependencies_with_flags; - - let* registries = - RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> - let* registries = res in - let* registry_hash_value = make_registry_hash_value registry_remote in - - (* Manupulates the library root config: *) - update_library_root_config_if_needed - library_root_config.LibraryRootConfig.registries - registry_hash_value - registry_remote - abspath_library_root_config; + in - (* Fetches registry configs: *) - let absdir_registry_repo = - let libpath_registry_root = Constant.registry_root_directory registry_hash_value in + Logging.show_package_dependency_before_solving dependencies_with_flags; + + let* registries = + RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> + let* registries = res in + let* registry_hash_value = make_registry_hash_value registry_remote in + + (* Manupulates the library root config: *) + update_library_root_config_if_needed + library_root_config.LibraryRootConfig.registries + registry_hash_value + registry_remote + abspath_library_root_config; + + (* Fetches registry configs: *) + let absdir_registry_repo = + let libpath_registry_root = Constant.registry_root_directory registry_hash_value in + make_abs_path + (Filename.concat + (get_abs_path_string absdir_library_root) + (get_lib_path_string libpath_registry_root)) + in + let git_command = "git" in (* TODO: make this changeable *) + let* () = + PackageRegistryFetcher.main ~git_command absdir_registry_repo registry_remote + |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) + in + + let* PackageRegistryConfig.{ packages = packages_in_registry } = + let abspath_registry_config = make_abs_path (Filename.concat - (get_abs_path_string absdir_library_root) - (get_lib_path_string libpath_registry_root)) - in - let git_command = "git" in (* TODO: make this changeable *) - let* () = - PackageRegistryFetcher.main ~git_command absdir_registry_repo registry_remote - |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) - in - - let* PackageRegistryConfig.{ packages = packages_in_registry } = - let abspath_registry_config = - make_abs_path - (Filename.concat - (get_abs_path_string absdir_registry_repo) - Constant.package_registry_config_file_name) - in - PackageRegistryConfig.load abspath_registry_config + (get_abs_path_string absdir_registry_repo) + Constant.package_registry_config_file_name) in - let registry_spec = { packages_in_registry; registry_hash_value } in - return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) + PackageRegistryConfig.load abspath_registry_config + in + let registry_spec = { packages_in_registry; registry_hash_value } in + return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) - ) registry_specs (return RegistryLocalNameMap.empty) - in - - let package_context = { registries; language_version } in - let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in - begin - match solutions_opt with - | None -> - err CannotSolvePackageConstraints - - | Some(solutions) -> - - Logging.show_package_dependency_solutions solutions; - - let (lock_config, impl_specs) = convert_solutions_to_lock_config solutions in - - let wget_command = "wget" in (* TODO: make this changeable *) - let tar_command = "tar" in (* TODO: make this changeable *) - let unzip_command = "unzip" in (* TODO: make this changeable *) - let* () = - impl_specs |> foldM (fun () impl_spec -> - LockFetcher.main - ~wget_command ~tar_command ~unzip_command ~library_root:absdir_library_root impl_spec - ) () - in - LockConfig.write abspath_lock_config lock_config; - return () - end + ) registry_specs (return RegistryLocalNameMap.empty) in + + let package_context = { registries; language_version } in + let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in begin - match res with - | Ok(()) -> () - | Error(e) -> raise (ConfigError(e)) + match solutions_opt with + | None -> + err CannotSolvePackageConstraints + + | Some(solutions) -> + + Logging.show_package_dependency_solutions solutions; + + let (lock_config, impl_specs) = convert_solutions_to_lock_config solutions in + + let wget_command = "wget" in (* TODO: make this changeable *) + let tar_command = "tar" in (* TODO: make this changeable *) + let unzip_command = "unzip" in (* TODO: make this changeable *) + let* () = + impl_specs |> foldM (fun () impl_spec -> + LockFetcher.main + ~wget_command ~tar_command ~unzip_command ~library_root:absdir_library_root impl_spec + ) () + in + LockConfig.write abspath_lock_config lock_config; + return () end - ) + in + match res with + | Ok(()) -> () + | Error(e) -> report_config_error e; exit 1 From fb00ea35bc9ebb4524ecd02c84fdf5852ad95949 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 18:17:36 +0900 Subject: [PATCH 017/381] rename the library root to the store root --- bin-saphe/configError.ml | 4 +- bin-saphe/constant.ml | 4 +- bin-saphe/lockFetcher.ml | 6 +-- bin-saphe/lockFetcher.mli | 2 +- bin-saphe/main.ml | 38 +++++++++---------- ...ibraryRootConfig.ml => storeRootConfig.ml} | 4 +- 6 files changed, 29 insertions(+), 29 deletions(-) rename bin-saphe/{libraryRootConfig.ml => storeRootConfig.ml} (94%) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index f0441fba8..9d75cad31 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -56,8 +56,8 @@ type config_error = | LockConfigError of abs_path * yaml_error | RegistryConfigNotFound of abs_path | RegistryConfigError of abs_path * yaml_error - | LibraryRootConfigNotFound of abs_path - | LibraryRootConfigError of abs_path * yaml_error + | StoreRootConfigNotFound of abs_path + | StoreRootConfigError of abs_path * yaml_error | LockNameConflict of lock_name | LockedPackageNotFound of lib_path * abs_path list | DependencyOnUnknownLock of { diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index ea5fe0322..844a26ad1 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -30,8 +30,8 @@ let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : l make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) -let library_root_config_path (absdir_library_root : abs_path) : abs_path = - make_abs_path (Filename.concat (get_abs_path_string absdir_library_root) "saphe-library-root.yaml") +let store_root_config_path (absdir_store_root : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_store_root) "saphe-store-root.yaml") let package_registry_config_file_name = diff --git a/bin-saphe/lockFetcher.ml b/bin-saphe/lockFetcher.ml index 87059bb3d..77d32cb42 100644 --- a/bin-saphe/lockFetcher.ml +++ b/bin-saphe/lockFetcher.ml @@ -49,7 +49,7 @@ let extract_external_zip ~(unzip_command : string) ~(zip : abs_path) ~(output_co err @@ FailedToExtractExternalZip{ exit_status; command } -let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~library_root:(absdir_lib_root : abs_path) (impl_spec : implementation_spec) : unit ok = +let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~store_root:(absdir_store_root : abs_path) (impl_spec : implementation_spec) : unit ok = let open ResultMonad in let ImplSpec{ lock; source } = impl_spec in let Lock.{ registry_hash_value; package_name; locked_version } = lock in @@ -57,13 +57,13 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri let absdir_lock = let libdir_lock = Constant.lock_directory lock in make_abs_path - (Filename.concat (get_abs_path_string absdir_lib_root) (get_lib_path_string libdir_lock)) + (Filename.concat (get_abs_path_string absdir_store_root) (get_lib_path_string libdir_lock)) in let absdir_lock_tarball_cache = let libpath_lock_tarball_cache = Constant.lock_tarball_cache_directory registry_hash_value in make_abs_path (Filename.concat - (get_abs_path_string absdir_lib_root) + (get_abs_path_string absdir_store_root) (get_lib_path_string libpath_lock_tarball_cache)) in diff --git a/bin-saphe/lockFetcher.mli b/bin-saphe/lockFetcher.mli index 7982f8ff0..0f5f7213e 100644 --- a/bin-saphe/lockFetcher.mli +++ b/bin-saphe/lockFetcher.mli @@ -7,5 +7,5 @@ val main : wget_command:string -> tar_command:string -> unzip_command:string -> - library_root:abs_path -> + store_root:abs_path -> implementation_spec -> (unit, config_error) result diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 339128bd2..4537a6780 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -110,7 +110,7 @@ let make_yaml_error_lines : yaml_error -> line list = function let report_config_error = function | CannotDetermineStoreRoot{ envvar } -> report_error [ - NormalLine("cannot determine where the SATySFi library root is;"); + NormalLine("cannot determine where the store root is;"); NormalLine(Printf.sprintf "set environment variable '%s'." envvar); ] @@ -159,15 +159,15 @@ let report_config_error = function make_yaml_error_lines e; ]) - | LibraryRootConfigNotFound(abspath) -> + | StoreRootConfigNotFound(abspath) -> report_error [ - NormalLine("cannot find a library root config at:"); + NormalLine("cannot find a store root config at:"); DisplayLine(get_abs_path_string abspath); ] - | LibraryRootConfigError(abspath, e) -> + | StoreRootConfigError(abspath, e) -> report_error (List.concat [ - [ NormalLine(Printf.sprintf "in %s: library root config error;" (get_abs_path_string abspath)) ]; + [ NormalLine(Printf.sprintf "in %s: store root config error;" (get_abs_path_string abspath)) ]; make_yaml_error_lines e; ]) @@ -363,17 +363,17 @@ let make_registry_hash_value (registry_remote : registry_remote) : (registry_has return hash_value -let update_library_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_library_root : abs_path) : unit = +let update_store_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_store_root : abs_path) : unit = match registries |> RegistryHashValueMap.find_opt registry_hash_value with | None -> - let library_root_config = - LibraryRootConfig.{ + let store_root_config = + StoreRootConfig.{ registries = registries |> RegistryHashValueMap.add registry_hash_value registry_remote; } in - LibraryRootConfig.write abspath_library_root library_root_config + StoreRootConfig.write abspath_store_root store_root_config | Some(_registry_remote) -> () @@ -496,7 +496,7 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E } -let get_library_root () : (abs_path, config_error) result = +let get_store_root () : (abs_path, config_error) result = let open ResultMonad in let envvar_home = if String.equal Sys.os_type "Win32" then @@ -515,7 +515,7 @@ let solve ~(fpath_in : string) = let res = let open ResultMonad in - let* absdir_library_root = get_library_root () in + let* absdir_store_root = get_store_root () in let solve_input = if Sys.is_directory (get_abs_path_string abspath_in) then (* If the input is a directory that forms a package: *) @@ -536,8 +536,8 @@ let solve ~(fpath_in : string) = } in - let abspath_library_root_config = Constant.library_root_config_path absdir_library_root in - let* library_root_config = LibraryRootConfig.load abspath_library_root_config in + let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in + let* store_root_config = StoreRootConfig.load abspath_store_root_config in let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = match solve_input with | PackageSolveInput{ @@ -598,19 +598,19 @@ let solve ~(fpath_in : string) = let* registries = res in let* registry_hash_value = make_registry_hash_value registry_remote in - (* Manupulates the library root config: *) - update_library_root_config_if_needed - library_root_config.LibraryRootConfig.registries + (* Manupulates the store root config: *) + update_store_root_config_if_needed + store_root_config.StoreRootConfig.registries registry_hash_value registry_remote - abspath_library_root_config; + abspath_store_root_config; (* Fetches registry configs: *) let absdir_registry_repo = let libpath_registry_root = Constant.registry_root_directory registry_hash_value in make_abs_path (Filename.concat - (get_abs_path_string absdir_library_root) + (get_abs_path_string absdir_store_root) (get_lib_path_string libpath_registry_root)) in let git_command = "git" in (* TODO: make this changeable *) @@ -653,7 +653,7 @@ let solve ~(fpath_in : string) = let* () = impl_specs |> foldM (fun () impl_spec -> LockFetcher.main - ~wget_command ~tar_command ~unzip_command ~library_root:absdir_library_root impl_spec + ~wget_command ~tar_command ~unzip_command ~store_root:absdir_store_root impl_spec ) () in LockConfig.write abspath_lock_config lock_config; diff --git a/bin-saphe/libraryRootConfig.ml b/bin-saphe/storeRootConfig.ml similarity index 94% rename from bin-saphe/libraryRootConfig.ml rename to bin-saphe/storeRootConfig.ml index a44279724..21dd0c37f 100644 --- a/bin-saphe/libraryRootConfig.ml +++ b/bin-saphe/storeRootConfig.ml @@ -77,10 +77,10 @@ let load (abspath_config : abs_path) : (t, config_error) result = let open ResultMonad in let* s = read_file abspath_config - |> Result.map_error (fun _ -> LibraryRootConfigNotFound(abspath_config)) + |> Result.map_error (fun _ -> StoreRootConfigNotFound(abspath_config)) in ConfigDecoder.run config_decoder s - |> Result.map_error (fun e -> LibraryRootConfigError(abspath_config, e)) + |> Result.map_error (fun e -> StoreRootConfigError(abspath_config, e)) let write (abspath_config : abs_path) (library_root_config : t) : unit = From 1e8cc8da3e2835947dc3b50fa369a3257244f38e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 19:07:59 +0900 Subject: [PATCH 018/381] begin to add the `saphe build` command --- bin-saphe/constant.ml | 19 ++++++ bin-saphe/main.ml | 140 +++++++++++++++++++++++++++++++++++++++--- bin-saphe/saphe.ml | 124 +++++++++++++++++++++++++++++++++++++ src-util/myUtil.ml | 4 ++ src-util/myUtil.mli | 2 + 5 files changed, 282 insertions(+), 7 deletions(-) diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 844a26ad1..41ef75ee6 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -51,11 +51,30 @@ let library_lock_config_path (absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.lock.yaml") +let library_deps_config_path (absdir_library : abs_path) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir_library) "satysfi-deps.yaml") + + let document_lock_config_path (abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.saphe.lock.yaml" path_without_extension) +let document_deps_config_path (abspath_doc : abs_path) : abs_path = + let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in + make_abs_path (Printf.sprintf "%s.satysfi-deps.yaml" path_without_extension) + + +let default_output_path (abspath_doc : abs_path) : abs_path = + let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in + make_abs_path (Printf.sprintf "%s.pdf" path_without_extension) + + +let dump_path (abspath_doc : abs_path) : abs_path = + let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in + make_abs_path (Printf.sprintf "%s.satysfi-aux" path_without_extension) + + (* Should be in sync with SATySFi *) let envelope_config_path (absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "satysfi-envelope.yaml") diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 4537a6780..1d074bde6 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -510,14 +510,14 @@ let get_store_root () : (abs_path, config_error) result = let solve ~(fpath_in : string) = - let absdir_current = Sys.getcwd () in - let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in - let res = let open ResultMonad in - let* absdir_store_root = get_store_root () in + + (* Constructs the input: *) let solve_input = - if Sys.is_directory (get_abs_path_string abspath_in) then + let absdir_current = Sys.getcwd () in + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + if is_directory abspath_in then (* If the input is a directory that forms a package: *) let abspath_lock_config = Constant.library_lock_config_path abspath_in in let abspath_envelope_config = Constant.envelope_config_path abspath_in in @@ -536,8 +536,6 @@ let solve ~(fpath_in : string) = } in - let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in - let* store_root_config = StoreRootConfig.load abspath_store_root_config in let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = match solve_input with | PackageSolveInput{ @@ -593,6 +591,10 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; + let* absdir_store_root = get_store_root () in + let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in + let* store_root_config = StoreRootConfig.load abspath_store_root_config in + let* registries = RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> let* registries = res in @@ -663,3 +665,127 @@ let solve ~(fpath_in : string) = match res with | Ok(()) -> () | Error(e) -> report_config_error e; exit 1 + + +type build_option = { + text_mode : string option; + page_number_limit : int; + show_full_path : bool; + debug_show_bbox : bool; + debug_show_space : bool; + debug_show_block_bbox : bool; + debug_show_block_space : bool; + debug_show_overfull : bool; + type_check_only : bool; + bytecomp : bool; +} + + +type build_input = + | PackageBuildInput of { + root : abs_path; + lock : abs_path; + deps : abs_path; + envelope : abs_path; + options : build_option; + } + | DocumentBuildInput of { + lock : abs_path; + deps : abs_path; + out : abs_path; + dump : abs_path; + options : build_option; + } + + +let build + ~(fpath_in : string) + ~(fpath_out_opt : string option) + ~(text_mode_formats_str_opt : string option) + ~(page_number_limit : int) + ~(show_full_path : bool) + ~(debug_show_bbox : bool) + ~(debug_show_space : bool) + ~(debug_show_block_bbox : bool) + ~(debug_show_block_space : bool) + ~(debug_show_overfull : bool) + ~(type_check_only : bool) + ~(bytecomp : bool) += + let res = + let open ResultMonad in + + (* Constructs the input: *) + let build_input = + let build_option = + { + text_mode = text_mode_formats_str_opt; + page_number_limit; + show_full_path; + debug_show_bbox; + debug_show_space; + debug_show_block_bbox; + debug_show_block_space; + debug_show_overfull; + type_check_only; + bytecomp; + } + in + let absdir_current = Sys.getcwd () in + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + if is_directory abspath_in then + let abspath_lock_config = Constant.library_lock_config_path abspath_in in + let abspath_deps_config = Constant.library_deps_config_path abspath_in in + let abspath_envelope_config = Constant.envelope_config_path abspath_in in + PackageBuildInput{ + root = abspath_in; + lock = abspath_lock_config; + deps = abspath_deps_config; + envelope = abspath_envelope_config; + options = build_option; + } + else + let abspath_lock_config = Constant.document_lock_config_path abspath_in in + let abspath_deps_config = Constant.document_deps_config_path abspath_in in + let abspath_out = + match fpath_out_opt with + | None -> + Constant.default_output_path abspath_in + + | Some(fpath_out) -> + make_absolute_if_relative ~origin:absdir_current fpath_out + in + let abspath_dump = Constant.dump_path abspath_in in + DocumentBuildInput{ + lock = abspath_lock_config; + deps = abspath_deps_config; + out = abspath_out; + dump = abspath_dump; + options = build_option; + } + in + + match build_input with + | PackageBuildInput{ + root = _absdir_package; + lock = abspath_lock_config; + deps = _abspath_deps_config; + envelope = _abspath_envelope_config; + options = _build_option; + } -> + let* _lock_config = LockConfig.load abspath_lock_config in + failwith "TODO: PackageBuildInput" + + | DocumentBuildInput{ + lock = abspath_lock_config; + deps = _abspath_deps_config; + out = _abspath_out; + dump = _abspath_dump; + options = _build_option; + } -> + let* _lock_config = LockConfig.load abspath_lock_config in + failwith "TODO: DocumentBuildInput" + in + match res with + | Ok(()) -> () + | Error(e) -> report_config_error e; exit 1 diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml index 79cebd4ba..8e78e6169 100644 --- a/bin-saphe/saphe.ml +++ b/bin-saphe/saphe.ml @@ -3,11 +3,135 @@ let solve fpath_in = Main.solve ~fpath_in +let build + fpath_in + fpath_out_opt + text_mode_formats_str_opt + page_number_limit + show_full_path + debug_show_bbox + debug_show_space + debug_show_block_bbox + debug_show_block_space + debug_show_overfull + type_check_only + bytecomp += + Main.build + ~fpath_in + ~fpath_out_opt + ~text_mode_formats_str_opt + ~page_number_limit + ~show_full_path + ~debug_show_bbox + ~debug_show_space + ~debug_show_block_bbox + ~debug_show_block_space + ~debug_show_overfull + ~type_check_only + ~bytecomp + + let arg_in : string Cmdliner.Term.t = let open Cmdliner in Arg.(required (pos 0 (some file) None (info []))) +let flag_output : (string option) Cmdliner.Term.t = + let open Cmdliner in + let doc = "Specify output path." in + Arg.(value (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) + + +let flag_text_mode = + let open Cmdliner in + let doc = "Set text mode" in + Arg.(value (opt (some string) None (info [ "text-mode" ] ~docv:"FORMATS" ~doc))) + + +let flag_page_number_limit : int Cmdliner.Term.t = + let open Cmdliner in + let doc = "Set the page number limit (default: 10000)" in + Arg.(value (opt int 10000 (info [ "page-number-limit" ] ~docv:"INT" ~doc))) + + +let make_boolean_flag_spec ~(flags : string list) ~(doc : string) : bool Cmdliner.Term.t = + let open Cmdliner in + Arg.(value (flag (info flags ~doc))) + + +let flag_full_path = + make_boolean_flag_spec + ~flags:[ "full-path" ] + ~doc:"Displays paths in full-path style" + + +let flag_debug_show_bbox = + make_boolean_flag_spec + ~flags:[ "debug-show-bbox" ] + ~doc:"Outputs bounding boxes for glyphs" + + +let flag_debug_show_space = + make_boolean_flag_spec + ~flags:[ "debug-show-space" ] + ~doc:"Outputs boxes for spaces" + + +let flag_debug_show_block_bbox = + make_boolean_flag_spec + ~flags:[ "debug-show-block-bbox" ] + ~doc:"Outputs bounding boxes for blocks" + + +let flag_debug_show_block_space = + make_boolean_flag_spec + ~flags:[ "debug-show-block-space" ] + ~doc:"Outputs visualized block spaces" + + +let flag_debug_show_overfull = + make_boolean_flag_spec + ~flags:[ "debug-show-overfull" ] + ~doc:"Outputs visualized overfull or underfull lines" + + +let flag_type_check_only = + make_boolean_flag_spec + ~flags:[ "t"; "type-check-only" ] + ~doc:"Stops after type checking" + + +let flag_bytecomp = + make_boolean_flag_spec + ~flags:[ "b"; "bytecomp" ] + ~doc:"Use bytecode compiler" + + +let command_build = + let open Cmdliner in + let term : unit Term.t = + Term.(const build + $ arg_in + $ flag_output + $ flag_text_mode + $ flag_page_number_limit + $ flag_full_path + $ flag_debug_show_bbox + $ flag_debug_show_space + $ flag_debug_show_block_bbox + $ flag_debug_show_block_space + $ flag_debug_show_overfull + $ flag_type_check_only + $ flag_bytecomp + ) + in + let info : Cmd.info = + Cmd.info "build" + in + Cmd.v info term + + let command_solve = let open Cmdliner in let term : unit Term.t = diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 898e1c747..3c940382f 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -85,6 +85,10 @@ let read_file (abspath : abs_path) : (string, string) result = err s +let is_directory (abspath : abs_path) : bool = + Sys.is_directory (get_abs_path_string abspath) + + type 'a cycle = | Loop of 'a | Cycle of 'a TupleList.t diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index 1189938f7..c250fe3f9 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -36,6 +36,8 @@ end val make_absolute_if_relative : origin:string -> string -> abs_path +val is_directory : abs_path -> bool + val read_file : abs_path -> (string, string) result type 'a cycle = From 2e06c69c3236ab570e0bc772abe89c2cec712ff6 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 19:42:40 +0900 Subject: [PATCH 019/381] slight changes about writing files --- bin-saphe/configError.ml | 4 ++++ bin-saphe/envelopeConfig.ml | 18 ++++++++++-------- bin-saphe/lockConfig.ml | 10 +++------- bin-saphe/main.ml | 11 ++++++++++- src-util/myUtil.ml | 6 ++++++ src-util/myUtil.mli | 2 ++ 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index 9d75cad31..a6b85fba5 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -111,3 +111,7 @@ type config_error = } | PackageRegistryFetcherError of PackageRegistryFetcher.error | CanonicalRegistryUrlError of CanonicalRegistryUrl.error + | CannotWriteEnvelopeConfig of { + message : string; + path : abs_path; + } diff --git a/bin-saphe/envelopeConfig.ml b/bin-saphe/envelopeConfig.ml index 3303bf02f..c49f69e62 100644 --- a/bin-saphe/envelopeConfig.ml +++ b/bin-saphe/envelopeConfig.ml @@ -1,5 +1,6 @@ open MyUtil +open ConfigError type relative_path = string @@ -74,12 +75,13 @@ let envelope_config_encoder (envelope_config : t) : Yaml.value = ]) -let write (abspath_envelope_config : abs_path) (envelope_config : t) : unit = +let write (abspath_envelope_config : abs_path) (envelope_config : t) : (unit, config_error) result = + let open ResultMonad in let yaml = envelope_config_encoder envelope_config in - match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with - | Ok(data) -> - Core.Out_channel.write_all (get_abs_path_string abspath_envelope_config) ~data; - Logging.end_envelope_config_output abspath_envelope_config - - | Error(_) -> - assert false + let data = encode_yaml yaml in + try + Core.Out_channel.write_all (get_abs_path_string abspath_envelope_config) ~data; + return () + with + | Sys_error(message) -> + err @@ CannotWriteEnvelopeConfig{ message; path = abspath_envelope_config } diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index 4c600ee90..03b507e72 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -98,10 +98,6 @@ let load (abspath_lock_config : abs_path) : t ok = let write (abspath_lock_config : abs_path) (lock_config : t) : unit = let yaml = lock_config_encoder lock_config in - match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with - | Ok(data) -> - Core.Out_channel.write_all (get_abs_path_string abspath_lock_config) ~data; - Logging.end_lock_config_output abspath_lock_config - - | Error(_) -> - assert false + let data = encode_yaml yaml in + Core.Out_channel.write_all (get_abs_path_string abspath_lock_config) ~data; + Logging.end_lock_config_output abspath_lock_config diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 1d074bde6..d185d0d99 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -334,6 +334,11 @@ let report_config_error = function ] end + | CannotWriteEnvelopeConfig{ message; path } -> + report_error [ + NormalLine(Printf.sprintf "cannot output the envelope config to '%s' (message: '%s')" (get_abs_path_string path) message); + ] + type solve_input = | PackageSolveInput of { @@ -558,8 +563,12 @@ let solve ~(fpath_in : string) = (* Selects the minimum version according to the user's designation for the moment. TODO: take dependencies into account when selecting a language version *) in + + (* Writes the envelope config: *) let envelope_config = make_envelope_config package_contents in - EnvelopeConfig.write abspath_envelope_config envelope_config; + let* () = EnvelopeConfig.write abspath_envelope_config envelope_config in + Logging.end_envelope_config_output abspath_envelope_config; + begin match package_contents with | PackageConfig.Library{ dependencies; test_dependencies; _ } -> diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 3c940382f..39bbe13e0 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -89,6 +89,12 @@ let is_directory (abspath : abs_path) : bool = Sys.is_directory (get_abs_path_string abspath) +let encode_yaml (yaml : Yaml.value) : string = + match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with + | Ok(data) -> data + | Error(_) -> assert false + + type 'a cycle = | Loop of 'a | Cycle of 'a TupleList.t diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index c250fe3f9..6eb07b0f3 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -38,6 +38,8 @@ val make_absolute_if_relative : origin:string -> string -> abs_path val is_directory : abs_path -> bool +val encode_yaml : Yaml.value -> string + val read_file : abs_path -> (string, string) result type 'a cycle = From 08fba85ad7be0f3cb655810602f102b5349d43b3 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 22:18:00 +0900 Subject: [PATCH 020/381] slight changes about writing files (2) --- bin-saphe/configError.ml | 4 ++++ bin-saphe/envelopeConfig.ml | 11 ++++------- bin-saphe/lockConfig.ml | 8 +++++--- bin-saphe/main.ml | 10 ++++++++-- src-util/myUtil.ml | 10 ++++++++++ src-util/myUtil.mli | 2 ++ 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index a6b85fba5..203378e59 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -115,3 +115,7 @@ type config_error = message : string; path : abs_path; } + | CannotWriteLockConfig of { + message : string; + path : abs_path; + } diff --git a/bin-saphe/envelopeConfig.ml b/bin-saphe/envelopeConfig.ml index c49f69e62..6225ebc6d 100644 --- a/bin-saphe/envelopeConfig.ml +++ b/bin-saphe/envelopeConfig.ml @@ -76,12 +76,9 @@ let envelope_config_encoder (envelope_config : t) : Yaml.value = let write (abspath_envelope_config : abs_path) (envelope_config : t) : (unit, config_error) result = - let open ResultMonad in let yaml = envelope_config_encoder envelope_config in let data = encode_yaml yaml in - try - Core.Out_channel.write_all (get_abs_path_string abspath_envelope_config) ~data; - return () - with - | Sys_error(message) -> - err @@ CannotWriteEnvelopeConfig{ message; path = abspath_envelope_config } + write_file abspath_envelope_config data + |> Result.map_error (fun message -> + CannotWriteEnvelopeConfig{ message; path = abspath_envelope_config } + ) diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index 03b507e72..8234ec69c 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -96,8 +96,10 @@ let load (abspath_lock_config : abs_path) : t ok = |> Result.map_error (fun e -> LockConfigError(abspath_lock_config, e)) -let write (abspath_lock_config : abs_path) (lock_config : t) : unit = +let write (abspath_lock_config : abs_path) (lock_config : t) : (unit, config_error) result = let yaml = lock_config_encoder lock_config in let data = encode_yaml yaml in - Core.Out_channel.write_all (get_abs_path_string abspath_lock_config) ~data; - Logging.end_lock_config_output abspath_lock_config + write_file abspath_lock_config data + |> Result.map_error (fun message -> + CannotWriteLockConfig{ message; path = abspath_lock_config } + ) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index d185d0d99..b6637ba8a 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -336,7 +336,12 @@ let report_config_error = function | CannotWriteEnvelopeConfig{ message; path } -> report_error [ - NormalLine(Printf.sprintf "cannot output the envelope config to '%s' (message: '%s')" (get_abs_path_string path) message); + NormalLine(Printf.sprintf "cannot write an envelope config to '%s' (message: '%s')" (get_abs_path_string path) message); + ] + + | CannotWriteLockConfig{ message; path } -> + report_error [ + NormalLine(Printf.sprintf "cannot write a lock config to '%s' (message: '%s')" (get_abs_path_string path) message); ] @@ -667,7 +672,8 @@ let solve ~(fpath_in : string) = ~wget_command ~tar_command ~unzip_command ~store_root:absdir_store_root impl_spec ) () in - LockConfig.write abspath_lock_config lock_config; + let* () = LockConfig.write abspath_lock_config lock_config in + Logging.end_lock_config_output abspath_lock_config; return () end in diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 39bbe13e0..00e377a98 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -85,6 +85,16 @@ let read_file (abspath : abs_path) : (string, string) result = err s +let write_file (abspath : abs_path) (data : string) : (unit, string) result = + let open ResultMonad in + try + Core.Out_channel.write_all (get_abs_path_string abspath) ~data; + return () + with + | Sys_error(s) -> + err s + + let is_directory (abspath : abs_path) : bool = Sys.is_directory (get_abs_path_string abspath) diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index 6eb07b0f3..d93872ff8 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -42,6 +42,8 @@ val encode_yaml : Yaml.value -> string val read_file : abs_path -> (string, string) result +val write_file : abs_path -> string -> (unit, string) result + type 'a cycle = | Loop of 'a | Cycle of 'a TupleList.t From 54edab45f11b5bae58e628e2f1d09321dbd5fcc8 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 31 Dec 2023 22:28:49 +0900 Subject: [PATCH 021/381] slight refactoring --- bin-saphe/constant.ml | 6 ++++-- bin-saphe/main.ml | 6 +----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 41ef75ee6..581146a77 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -22,8 +22,10 @@ let lock_directory (lock : Lock.t) : lib_path = (lock_tarball_name package_name locked_version)) -let registry_root_directory (registry_hash_value : registry_hash_value) : lib_path = - make_lib_path (Printf.sprintf "registries/%s" registry_hash_value) +let registry_root_directory_path (absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = + make_abs_path (Filename.concat + (get_abs_path_string absdir_store_root) + (Printf.sprintf "registries/%s" registry_hash_value)) let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : lib_path = diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index b6637ba8a..08483f65a 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -623,11 +623,7 @@ let solve ~(fpath_in : string) = (* Fetches registry configs: *) let absdir_registry_repo = - let libpath_registry_root = Constant.registry_root_directory registry_hash_value in - make_abs_path - (Filename.concat - (get_abs_path_string absdir_store_root) - (get_lib_path_string libpath_registry_root)) + Constant.registry_root_directory_path absdir_store_root registry_hash_value in let git_command = "git" in (* TODO: make this changeable *) let* () = From d9322bede06290fdaec4aeaf9558ffc05c6035bf Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 1 Jan 2024 00:55:27 +0900 Subject: [PATCH 022/381] develop `used_as` --- bin-saphe/configUtil.ml | 3 ++- bin-saphe/depsConfig.ml | 18 +++++++++++++ bin-saphe/lockConfig.ml | 31 ++++++++++++++++++++--- bin-saphe/logging.ml | 4 +-- bin-saphe/main.ml | 26 ++++++++++++++++--- bin-saphe/packageConstraintSolver.ml | 38 +++++++++++++++++++++------- bin-saphe/packageRegistryConfig.ml | 2 ++ bin-saphe/packageSystemBase.ml | 9 ++++++- 8 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 bin-saphe/depsConfig.ml diff --git a/bin-saphe/configUtil.ml b/bin-saphe/configUtil.ml index 5b6b12646..b2390b7ec 100644 --- a/bin-saphe/configUtil.ml +++ b/bin-saphe/configUtil.ml @@ -64,9 +64,10 @@ let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = let dependency_decoder : package_dependency ConfigDecoder.t = let open ConfigDecoder in + get "used_as" string >>= fun used_as -> get "name" package_name_decoder >>= fun package_name -> get "spec" dependency_spec_decoder >>= fun spec -> - succeed @@ PackageDependency{ package_name; spec } + succeed @@ PackageDependency{ package_name; used_as; spec } let registry_remote_decoder : registry_remote ConfigDecoder.t = diff --git a/bin-saphe/depsConfig.ml b/bin-saphe/depsConfig.ml new file mode 100644 index 000000000..e08bf66b8 --- /dev/null +++ b/bin-saphe/depsConfig.ml @@ -0,0 +1,18 @@ + +type envelope_name = string + +type envelope_dependency = { + dependency_name : envelope_name; + dependency_used_as : string; +} + +type envelope_spec = { + envelope_name : envelope_name; + envelope_path : string; + envelope_dependencies : envelope_dependency list; +} + +type t = { + envelopes : envelope_spec list; + direct_dependencies : envelope_dependency list; +} diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index 8234ec69c..b5bb1d5ed 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -14,15 +14,21 @@ type lock_contents = version : SemanticVersion.t; } +type lock_dependency = { + depended_lock_name : lock_name; + used_as : string; +} + type locked_package = { lock_name : lock_name; lock_contents : lock_contents; - lock_dependencies : lock_name list; + lock_dependencies : lock_dependency list; test_only_lock : bool; } type t = { - locked_packages : locked_package list; + locked_packages : locked_package list; + direct_dependencies : lock_dependency list; } @@ -52,20 +58,34 @@ let lock_contents_encoder (contents : lock_contents) : Yaml.value = ]) +let lock_dependency_decoder : lock_dependency ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun depended_lock_name -> + get "used_as" string >>= fun used_as -> + succeed { depended_lock_name; used_as } + + let lock_decoder : locked_package ConfigDecoder.t = let open ConfigDecoder in get "name" string >>= fun lock_name -> get "contents" lock_contents_decoder >>= fun lock_contents -> - get_or_else "dependencies" (list string) [] >>= fun lock_dependencies -> + get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun lock_dependencies -> get_or_else "test_only" bool false >>= fun test_only_lock -> succeed { lock_name; lock_contents; lock_dependencies; test_only_lock } +let lock_dependency_encoder (dep : lock_dependency) : Yaml.value = + `O([ + ("name", `String(dep.depended_lock_name)); + ("used_as", `String(dep.used_as)); + ]) + + let lock_encoder (lock : locked_package) : Yaml.value = `O([ ("name", `String(lock.lock_name)); ("contents", lock_contents_encoder lock.lock_contents); - ("dependencies", `A(lock.lock_dependencies |> List.map (fun lock_name -> `String(lock_name)))); + ("dependencies", `A(lock.lock_dependencies |> List.map lock_dependency_encoder)); ("test_only", `Bool(lock.test_only_lock)); ]) @@ -74,8 +94,10 @@ let lock_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> + get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun direct_dependencies -> succeed { locked_packages; + direct_dependencies; } @@ -83,6 +105,7 @@ let lock_config_encoder (lock_config : t) : Yaml.value = `O([ ("ecosystem", `String(SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))))); ("locks", `A(lock_config.locked_packages |> List.map lock_encoder)); + ("dependencies", `A(lock_config.direct_dependencies |> List.map lock_dependency_encoder)); ]) diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index c0d10095c..85105327c 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -6,7 +6,7 @@ open PackageSystemBase let show_package_dependency_before_solving (dependencies_with_flags : (dependency_flag * package_dependency) list) = Printf.printf " package dependencies to solve:\n"; dependencies_with_flags |> List.iter (fun (flag, dep) -> - let PackageDependency{ package_name; spec } = dep in + let PackageDependency{ used_as; package_name; spec } = dep in match spec with | RegisteredDependency{ version_requirement; _ } -> let s_restr = SemanticVersion.requirement_to_string version_requirement in @@ -15,7 +15,7 @@ let show_package_dependency_before_solving (dependencies_with_flags : (dependenc | SourceDependency -> "" | TestOnlyDependency -> ", test_only" in - Printf.printf " - %s (%s%s)\n" package_name s_restr s_test_only; + Printf.printf " - %s (%s%s) used as %s\n" package_name s_restr s_test_only used_as; ) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 08483f65a..90716c43d 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -397,6 +397,13 @@ let make_lock_name (lock : Lock.t) : lock_name = (SemanticVersion.to_string locked_version) +let make_lock_dependency (dep : locked_dependency) : LockConfig.lock_dependency = + { + depended_lock_name = make_lock_name dep.depended_lock; + used_as = dep.dependency_used_as; + } + + let convert_solutions_to_lock_config (solutions : package_solution list) : LockConfig.t * implementation_spec list = let (locked_package_acc, impl_spec_acc) = solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> @@ -406,7 +413,7 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC LockConfig.{ lock_name = make_lock_name lock; lock_contents = RegisteredLock{ registry_hash_value; package_name; version }; - lock_dependencies = solution.locked_dependencies |> List.map make_lock_name; + lock_dependencies = solution.locked_dependencies |> List.map make_lock_dependency; test_only_lock = solution.used_in_test_only; } in @@ -419,7 +426,12 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC (Alist.extend locked_package_acc locked_package, Alist.extend impl_spec_acc impl_spec) ) (Alist.empty, Alist.empty) in - let lock_config = LockConfig.{ locked_packages = Alist.to_list locked_package_acc } in + let lock_config = + LockConfig.{ + locked_packages = Alist.to_list locked_package_acc; + direct_dependencies = failwith "TODO: lock_config, direct_dependencies" + } + in (lock_config, Alist.to_list impl_spec_acc) @@ -709,6 +721,13 @@ type build_input = } +let make_deps_config (_lock_config : LockConfig.t) : DepsConfig.t = + DepsConfig.{ + envelopes = failwith "TODO: DepsConfig"; + direct_dependencies = []; + } + + let build ~(fpath_in : string) ~(fpath_out_opt : string option) @@ -784,7 +803,8 @@ let build envelope = _abspath_envelope_config; options = _build_option; } -> - let* _lock_config = LockConfig.load abspath_lock_config in + let* lock_config = LockConfig.load abspath_lock_config in + let _deps_config = make_deps_config lock_config in failwith "TODO: PackageBuildInput" | DocumentBuildInput{ diff --git a/bin-saphe/packageConstraintSolver.ml b/bin-saphe/packageConstraintSolver.ml index 81c22d4d1..571013ea8 100644 --- a/bin-saphe/packageConstraintSolver.ml +++ b/bin-saphe/packageConstraintSolver.ml @@ -55,6 +55,7 @@ module SolverInput = struct type dependency = | Dependency of { role : Role.t; + used_as : string; version_requirement : SemanticVersion.requirement; } @@ -147,19 +148,27 @@ module SolverInput = struct let make_internal_dependency_from_registry (registry_local_name : registry_local_name) (context : package_context) (requires : package_dependency_in_registry list) : dependency list = requires |> List.map (function - | PackageDependencyInRegistry{ package_name; version_requirement } -> + | PackageDependencyInRegistry{ package_name; used_as; version_requirement } -> let compatibility = match version_requirement with | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in - Dependency{ role = Role{ package_name; registry_local_name; compatibility; context }; version_requirement } + let role = + Role.Role{ + package_name; + registry_local_name; + compatibility; + context; + } + in + Dependency{ role; used_as; version_requirement } ) let make_internal_dependency (context : package_context) (requires : package_dependency list) : dependency list = requires |> List.map (fun dep -> - let PackageDependency{ package_name; spec } = dep in + let PackageDependency{ used_as; package_name; spec } = dep in match spec with | RegisteredDependency{ registry_local_name; version_requirement } -> let compatibility = @@ -167,10 +176,15 @@ module SolverInput = struct | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in - Dependency{ - role = Role{ package_name; registry_local_name; compatibility; context }; - version_requirement; - } + let role = + Role.Role{ + package_name; + registry_local_name; + compatibility; + context; + } + in + Dependency{ role; used_as; version_requirement } ) @@ -357,7 +371,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let (lock, source, dependencies, vertex) = quint in let (locked_dependency_acc, graph) = dependencies |> List.fold_left (fun (locked_dependency_acc, graph) dep -> - let Dependency{ role = role_dep; _ } = dep in + let Dependency{ role = role_dep; used_as; _ } = dep in match role_dep with | Role{ package_name = package_name_dep; _ } -> let lock_dep = @@ -376,7 +390,13 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla registry_hash_value = registry_hash_value_dep; } in - let locked_dependency_acc = Alist.extend locked_dependency_acc lock_dep in + let lock_dependency = + { + depended_lock = lock_dep; + dependency_used_as = used_as; + } + in + let locked_dependency_acc = Alist.extend locked_dependency_acc lock_dependency in let vertex_dep = match lock_to_vertex_map |> LockMap.find_opt lock_dep with | None -> assert false diff --git a/bin-saphe/packageRegistryConfig.ml b/bin-saphe/packageRegistryConfig.ml index 3d6aa1d83..1110c9f24 100644 --- a/bin-saphe/packageRegistryConfig.ml +++ b/bin-saphe/packageRegistryConfig.ml @@ -28,9 +28,11 @@ let source_decoder : implementation_source ConfigDecoder.t = let dependency_in_registry_config_decoder = let open ConfigDecoder in + get "used_as" string >>= fun used_as -> get "name" package_name_decoder >>= fun package_name -> get "requirement" requirement_decoder >>= fun version_requirement -> succeed @@ PackageDependencyInRegistry{ + used_as; package_name; version_requirement; } diff --git a/bin-saphe/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml index c3ec5c71e..e748f9777 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/bin-saphe/packageSystemBase.ml @@ -58,6 +58,7 @@ type package_dependency_spec = type package_dependency = | PackageDependency of { package_name : package_name; + used_as : string; spec : package_dependency_spec; } [@@deriving show { with_path = false }] @@ -65,6 +66,7 @@ type package_dependency = type package_dependency_in_registry = | PackageDependencyInRegistry of { package_name : package_name; + used_as : string; version_requirement : SemanticVersion.requirement; } [@@deriving show { with_path = false }] @@ -95,10 +97,15 @@ type package_context = { registries : registry_spec RegistryLocalNameMap.t; } +type locked_dependency = { + depended_lock : Lock.t; + dependency_used_as : string; +} + type package_solution = { lock : Lock.t; locked_source : implementation_source; - locked_dependencies : Lock.t list; + locked_dependencies : locked_dependency list; used_in_test_only : bool; } [@@deriving show { with_path = false }] From fcfb24998e76c94915a9c5f9d40f042292e66f8d Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 1 Jan 2024 03:58:06 +0900 Subject: [PATCH 023/381] develop `explicit_dependencies` --- bin-saphe/configError.ml | 7 +-- bin-saphe/configUtil.ml | 10 +++- bin-saphe/constant.ml | 3 +- bin-saphe/lockConfig.ml | 10 ++-- bin-saphe/lockFetcher.ml | 3 +- bin-saphe/logging.ml | 7 ++- bin-saphe/main.ml | 40 ++++++++++--- bin-saphe/packageConstraintSolver.ml | 84 +++++++++++++++++++--------- bin-saphe/packageRegistryConfig.ml | 9 +-- bin-saphe/packageSystemBase.ml | 42 +++++++++----- src-util/dependencyGraph.ml | 8 +++ src-util/dependencyGraph.mli | 5 ++ 12 files changed, 155 insertions(+), 73 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index 203378e59..f83925e2e 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -16,10 +16,6 @@ type yaml_error = | NotASemanticVersion of YamlDecoder.context * string | NotAVersionRequirement of YamlDecoder.context * string | InvalidPackageName of YamlDecoder.context * string - | MultiplePackageDefinition of { - context : YamlDecoder.context; - package_name : string; - } | DuplicateRegistryLocalName of { context : YamlDecoder.context; registry_local_name : registry_local_name; @@ -119,3 +115,6 @@ type config_error = message : string; path : abs_path; } + | MultiplePackageDefinition of { + package_name : string; + } diff --git a/bin-saphe/configUtil.ml b/bin-saphe/configUtil.ml index b2390b7ec..7b8ca9420 100644 --- a/bin-saphe/configUtil.ml +++ b/bin-saphe/configUtil.ml @@ -53,8 +53,13 @@ let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = branch "type" [ "registered" ==> begin get "registry" string >>= fun registry_local_name -> + get "name" package_name_decoder >>= fun package_name -> get "requirement" requirement_decoder >>= fun version_requirement -> - succeed @@ RegisteredDependency{ registry_local_name; version_requirement } + succeed @@ RegisteredDependency{ + registry_local_name; + package_name; + version_requirement; + } end; ] ~other:(fun tag -> @@ -65,9 +70,8 @@ let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = let dependency_decoder : package_dependency ConfigDecoder.t = let open ConfigDecoder in get "used_as" string >>= fun used_as -> - get "name" package_name_decoder >>= fun package_name -> get "spec" dependency_spec_decoder >>= fun spec -> - succeed @@ PackageDependency{ package_name; used_as; spec } + succeed @@ PackageDependency{ used_as; spec } let registry_remote_decoder : registry_remote ConfigDecoder.t = diff --git a/bin-saphe/constant.ml b/bin-saphe/constant.ml index 581146a77..757ac263e 100644 --- a/bin-saphe/constant.ml +++ b/bin-saphe/constant.ml @@ -14,7 +14,8 @@ let lock_tarball_name (package_name : package_name) (locked_version : SemanticVe let lock_directory (lock : Lock.t) : lib_path = - let Lock.{ registry_hash_value; package_name; locked_version } = lock in + let Lock.{ package_id; locked_version } = lock in + let PackageId.{ registry_hash_value; package_name } = package_id in make_lib_path (Printf.sprintf "packages/%s/%s/%s" registry_hash_value diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index b5bb1d5ed..ab6157df1 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -27,8 +27,8 @@ type locked_package = { } type t = { - locked_packages : locked_package list; - direct_dependencies : lock_dependency list; + locked_packages : locked_package list; + explicit_dependencies : lock_dependency list; } @@ -94,10 +94,10 @@ let lock_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> - get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun direct_dependencies -> + get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun explicit_dependencies -> succeed { locked_packages; - direct_dependencies; + explicit_dependencies; } @@ -105,7 +105,7 @@ let lock_config_encoder (lock_config : t) : Yaml.value = `O([ ("ecosystem", `String(SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))))); ("locks", `A(lock_config.locked_packages |> List.map lock_encoder)); - ("dependencies", `A(lock_config.direct_dependencies |> List.map lock_dependency_encoder)); + ("dependencies", `A(lock_config.explicit_dependencies |> List.map lock_dependency_encoder)); ]) diff --git a/bin-saphe/lockFetcher.ml b/bin-saphe/lockFetcher.ml index 77d32cb42..ba304ff84 100644 --- a/bin-saphe/lockFetcher.ml +++ b/bin-saphe/lockFetcher.ml @@ -52,7 +52,8 @@ let extract_external_zip ~(unzip_command : string) ~(zip : abs_path) ~(output_co let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~store_root:(absdir_store_root : abs_path) (impl_spec : implementation_spec) : unit ok = let open ResultMonad in let ImplSpec{ lock; source } = impl_spec in - let Lock.{ registry_hash_value; package_name; locked_version } = lock in + let Lock.{ package_id; locked_version } = lock in + let PackageId.{ registry_hash_value; package_name } = package_id in let lock_tarball_name = Constant.lock_tarball_name package_name locked_version in let absdir_lock = let libdir_lock = Constant.lock_directory lock in diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 85105327c..501ddadbe 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -6,9 +6,9 @@ open PackageSystemBase let show_package_dependency_before_solving (dependencies_with_flags : (dependency_flag * package_dependency) list) = Printf.printf " package dependencies to solve:\n"; dependencies_with_flags |> List.iter (fun (flag, dep) -> - let PackageDependency{ used_as; package_name; spec } = dep in + let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ version_requirement; _ } -> + | RegisteredDependency{ package_name; version_requirement; _ } -> let s_restr = SemanticVersion.requirement_to_string version_requirement in let s_test_only = match flag with @@ -22,7 +22,8 @@ let show_package_dependency_before_solving (dependencies_with_flags : (dependenc let show_package_dependency_solutions (solutions : package_solution list) = Printf.printf " package dependency solutions:\n"; solutions |> List.iter (fun solution -> - let Lock.{ package_name; locked_version; _ } = solution.lock in + let Lock.{ package_id; locked_version; _ } = solution.lock in + let PackageId.{ package_name; _ } = package_id in Printf.printf " - %s %s\n" package_name (SemanticVersion.to_string locked_version) ) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 90716c43d..76cdcbd66 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -88,9 +88,6 @@ let make_yaml_error_lines : yaml_error -> line list = function | InvalidPackageName(yctx, s) -> [ NormalLine(Printf.sprintf "not a package name: '%s'%s" s (show_yaml_context yctx)) ] - | MultiplePackageDefinition{ context = yctx; package_name } -> - [ NormalLine(Printf.sprintf "More than one definition for package '%s'%s" package_name (show_yaml_context yctx)) ] - | DuplicateRegistryLocalName{ context = yctx; registry_local_name } -> [ NormalLine(Printf.sprintf "More than one definition for registry local name '%s'%s" registry_local_name (show_yaml_context yctx)) ] @@ -344,6 +341,11 @@ let report_config_error = function NormalLine(Printf.sprintf "cannot write a lock config to '%s' (message: '%s')" (get_abs_path_string path) message); ] + | MultiplePackageDefinition{ package_name } -> + report_error [ + NormalLine(Printf.sprintf "More than one definition for package '%s'." package_name) + ] + type solve_input = | PackageSolveInput of { @@ -390,7 +392,8 @@ let update_store_root_config_if_needed (registries : registry_remote RegistryHas let make_lock_name (lock : Lock.t) : lock_name = - let Lock.{ registry_hash_value; package_name; locked_version } = lock in + let Lock.{ package_id; locked_version } = lock in + let PackageId.{ registry_hash_value; package_name } = package_id in Printf.sprintf "registered.%s.%s.%s" registry_hash_value package_name @@ -408,7 +411,8 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC let (locked_package_acc, impl_spec_acc) = solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> let lock = solution.lock in - let Lock.{ registry_hash_value; package_name; locked_version = version } = lock in + let Lock.{ package_id; locked_version = version } = lock in + let PackageId.{ registry_hash_value; package_name } = package_id in let locked_package = LockConfig.{ lock_name = make_lock_name lock; @@ -426,10 +430,20 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC (Alist.extend locked_package_acc locked_package, Alist.extend impl_spec_acc impl_spec) ) (Alist.empty, Alist.empty) in + let explicit_dependencies = + solutions |> List.filter_map (fun solution -> + solution.explicitly_depended |> Option.map (fun used_as -> + LockConfig.{ + depended_lock_name = make_lock_name solution.lock; + used_as; + } + ) + ) + in let lock_config = LockConfig.{ - locked_packages = Alist.to_list locked_package_acc; - direct_dependencies = failwith "TODO: lock_config, direct_dependencies" + locked_packages = Alist.to_list locked_package_acc; + explicit_dependencies; } in (lock_config, Alist.to_list impl_spec_acc) @@ -643,7 +657,7 @@ let solve ~(fpath_in : string) = |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) in - let* PackageRegistryConfig.{ packages = packages_in_registry } = + let* PackageRegistryConfig.{ packages = packages } = let abspath_registry_config = make_abs_path (Filename.concat @@ -652,6 +666,16 @@ let solve ~(fpath_in : string) = in PackageRegistryConfig.load abspath_registry_config in + let* packages_in_registry = + packages |> List.fold_left (fun res (package_name, impls) -> + let* map = res in + let package_id = PackageId.{ registry_hash_value; package_name } in + if map |> PackageIdMap.mem package_id then + err @@ MultiplePackageDefinition{ package_name } + else + return (map |> PackageIdMap.add package_id impls) + ) (return PackageIdMap.empty) + in let registry_spec = { packages_in_registry; registry_hash_value } in return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) diff --git a/bin-saphe/packageConstraintSolver.ml b/bin-saphe/packageConstraintSolver.ml index 571013ea8..87e13733c 100644 --- a/bin-saphe/packageConstraintSolver.ml +++ b/bin-saphe/packageConstraintSolver.ml @@ -12,8 +12,8 @@ module SolverInput = struct context : package_context; } | Role of { - package_name : package_name; registry_local_name : registry_local_name; + package_name : package_name; compatibility : string; context : package_context; } @@ -168,9 +168,9 @@ module SolverInput = struct let make_internal_dependency (context : package_context) (requires : package_dependency list) : dependency list = requires |> List.map (fun dep -> - let PackageDependency{ used_as; package_name; spec } = dep in + let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ registry_local_name; version_requirement } -> + | RegisteredDependency{ registry_local_name; package_name; version_requirement } -> let compatibility = match version_requirement with | SemanticVersion.CompatibleWith(semver) -> @@ -194,13 +194,15 @@ module SolverInput = struct begin match context.registries |> RegistryLocalNameMap.find_opt registry_local_name with | None -> + (* TODO: emit warning *) { replacement = None; impls = [] } | Some(registry_spec) -> let registry_hash_value = registry_spec.registry_hash_value in + let package_id = PackageId.{ registry_hash_value; package_name } in let impl_records = registry_spec.packages_in_registry - |> PackageNameMap.find_opt package_name |> Option.value ~default:[] + |> PackageIdMap.find_opt package_id |> Option.value ~default:[] in let impls = impl_records |> List.filter_map (fun impl_record -> @@ -309,19 +311,32 @@ module LockDependencyGraph = DependencyGraph.Make(Lock) module VertexSet = LockDependencyGraph.VertexSet +module VertexMap = LockDependencyGraph.VertexMap + let solve (context : package_context) (dependencies_with_flags : (dependency_flag * package_dependency) list) : (package_solution list) option = let (explicit_source_dependencies, dependency_acc) = dependencies_with_flags |> List.fold_left (fun (explicit_source_dependencies, dependency_acc) (flag, dep) -> match dep with - | PackageDependency{ package_name; _ } -> - let explicit_source_dependencies = - match flag with - | SourceDependency -> explicit_source_dependencies |> PackageNameSet.add package_name - | TestOnlyDependency -> explicit_source_dependencies - in - (explicit_source_dependencies, Alist.extend dependency_acc dep) - ) (PackageNameSet.empty, Alist.empty) + | PackageDependency{ spec; used_as } -> + let RegisteredDependency{ registry_local_name; package_name; _ } = spec in + begin + match context.registries |> RegistryLocalNameMap.find_opt registry_local_name with + | None -> + (* TODO: emit warning *) + (explicit_source_dependencies, dependency_acc) + + | Some(registry_spec) -> + let registry_hash_value = registry_spec.registry_hash_value in + let package_id = PackageId.{ registry_hash_value; package_name } in + let explicit_source_dependencies = + match flag with + | SourceDependency -> explicit_source_dependencies |> PackageIdMap.add package_id used_as + | TestOnlyDependency -> explicit_source_dependencies + in + (explicit_source_dependencies, Alist.extend dependency_acc dep) + end + ) (PackageIdMap.empty, Alist.empty) in let requires = Alist.to_list dependency_acc in let output_opt = @@ -335,7 +350,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla (* Adds vertices to the graph: *) let rolemap = output |> Output.to_map in - let (quad_acc, graph, explicit_vertices, lock_to_vertex_map) = + let (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) = Output.RoleMap.fold (fun _role impl acc -> let impl = Output.unwrap impl in match impl with @@ -343,24 +358,27 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla acc | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> - let lock = Lock.{ package_name; locked_version; registry_hash_value } in - let (quad_acc, graph, explicit_vertices, lock_to_vertex_map) = acc in + let package_id = PackageId.{ registry_hash_value; package_name } in + let lock = Lock.{ package_id; locked_version } in + let (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) = acc in let (graph, vertex) = match graph |> LockDependencyGraph.add_vertex lock () with | Error(_) -> assert false | Ok(pair) -> pair in let quad_acc = Alist.extend quad_acc (lock, source, dependencies, vertex) in - let explicit_vertices = - if explicit_source_dependencies |> PackageNameSet.mem package_name then - explicit_vertices |> VertexSet.add vertex - else - explicit_vertices + let explicit_vertex_to_used_as = + match explicit_source_dependencies |> PackageIdMap.find_opt package_id with + | Some(used_as) -> + explicit_vertex_to_used_as |> VertexMap.add vertex used_as + + | None -> + explicit_vertex_to_used_as in let lock_to_vertex_map = lock_to_vertex_map |> LockMap.add lock vertex in - (quad_acc, graph, explicit_vertices, lock_to_vertex_map) + (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) - ) rolemap (Alist.empty, LockDependencyGraph.empty, VertexSet.empty, LockMap.empty) + ) rolemap (Alist.empty, LockDependencyGraph.empty, VertexMap.empty, LockMap.empty) in (* Add edges to the graph: *) @@ -384,19 +402,24 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla registry_hash_value = registry_hash_value_dep; _ }) -> + let package_id_dep = + PackageId.{ + registry_hash_value = registry_hash_value_dep; + package_name = package_name_dep; + } + in Lock.{ - package_name = package_name_dep; - locked_version = version_dep; - registry_hash_value = registry_hash_value_dep; + package_id = package_id_dep; + locked_version = version_dep; } in - let lock_dependency = + let locked_dependency = { depended_lock = lock_dep; dependency_used_as = used_as; } in - let locked_dependency_acc = Alist.extend locked_dependency_acc lock_dependency in + let locked_dependency_acc = Alist.extend locked_dependency_acc locked_dependency in let vertex_dep = match lock_to_vertex_map |> LockMap.find_opt lock_dep with | None -> assert false @@ -419,6 +442,9 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla (* Computes the set of source dependencies: *) let resulting_source_dependencies = + let explicit_vertices = + LockDependencyGraph.map_domain explicit_vertex_to_used_as + in LockDependencyGraph.reachability_closure graph explicit_vertices in @@ -430,11 +456,15 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla | Some(v) -> v in let used_in_test_only = not (resulting_source_dependencies |> VertexSet.mem vertex) in + let explicitly_depended = + explicit_vertex_to_used_as |> VertexMap.find_opt vertex + in Alist.extend solution_acc { lock; locked_source; locked_dependencies; used_in_test_only; + explicitly_depended; } ) solmap Alist.empty in diff --git a/bin-saphe/packageRegistryConfig.ml b/bin-saphe/packageRegistryConfig.ml index 1110c9f24..e15f1a978 100644 --- a/bin-saphe/packageRegistryConfig.ml +++ b/bin-saphe/packageRegistryConfig.ml @@ -8,7 +8,7 @@ open PackageSystemBase type 'a ok = ('a, config_error) result type t = { - packages : (implementation_record list) PackageNameMap.t; + packages : (package_name * (implementation_record list)) list; } @@ -59,13 +59,6 @@ let registry_config_decoder : t ConfigDecoder.t = get "format" string >>= function | "1" -> get "packages" (list package_decoder) >>= fun packages -> - packages |> List.fold_left (fun res (package_name, impls) -> - res >>= fun map -> - if map |> PackageNameMap.mem package_name then - failure (fun yctx -> MultiplePackageDefinition{ context = yctx; package_name }) - else - succeed (map |> PackageNameMap.add package_name impls) - ) (succeed PackageNameMap.empty) >>= fun packages -> succeed { packages } | format -> diff --git a/bin-saphe/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml index e748f9777..b73c9c374 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/bin-saphe/packageSystemBase.ml @@ -13,9 +13,22 @@ type lock_info = { type package_name = string [@@deriving show { with_path = false }] -module PackageNameMap = Map.Make(String) +module PackageId = struct + type t = { + registry_hash_value : string; + package_name : package_name; + } + [@@deriving show { with_path = false }] + + let compare (pkgid1 : t) (pkgid2 : t) = + let { registry_hash_value = h1; package_name = p1 } = pkgid1 in + let { registry_hash_value = h2; package_name = p2 } = pkgid2 in + List.compare String.compare [ h1; p1 ] [ h2; p2 ] +end + +module PackageIdMap = Map.Make(PackageId) -module PackageNameSet = Set.Make(String) +module PackageIdSet = Set.Make(PackageId) (* The type for names that stand for a package registry. Names of this type are supposed to be valid @@ -33,23 +46,26 @@ module RegistryHashValueMap = Map.Make(String) module Lock = struct type t = { - package_name : package_name; - locked_version : SemanticVersion.t; - registry_hash_value : registry_hash_value; + package_id : PackageId.t; + locked_version : SemanticVersion.t; } [@@deriving show { with_path = false }] let compare (lock1 : t) (lock2 : t) : int = - let { registry_hash_value = h1; package_name = p1; locked_version = v1 } = lock1 in - let { registry_hash_value = h2; package_name = p2; locked_version = v2 } = lock2 in - List.compare String.compare - [ h1; p1; SemanticVersion.to_string v1 ] [ h2; p2; SemanticVersion.to_string v2 ] + let { package_id = pkgid1; locked_version = v1 } = lock1 in + let { package_id = pkgid2; locked_version = v2 } = lock2 in + let comp_pkgid = PackageId.compare pkgid1 pkgid2 in + if comp_pkgid <> 0 then + comp_pkgid + else + SemanticVersion.compare v1 v2 end module LockMap = Map.Make(Lock) type package_dependency_spec = | RegisteredDependency of { + package_name : package_name; registry_local_name : registry_local_name; version_requirement : SemanticVersion.requirement; } @@ -57,9 +73,8 @@ type package_dependency_spec = type package_dependency = | PackageDependency of { - package_name : package_name; - used_as : string; - spec : package_dependency_spec; + used_as : string; + spec : package_dependency_spec; } [@@deriving show { with_path = false }] @@ -88,7 +103,7 @@ type implementation_record = } type registry_spec = { - packages_in_registry : (implementation_record list) PackageNameMap.t; + packages_in_registry : (implementation_record list) PackageIdMap.t; registry_hash_value : registry_hash_value; } @@ -107,6 +122,7 @@ type package_solution = { locked_source : implementation_source; locked_dependencies : locked_dependency list; used_in_test_only : bool; + explicitly_depended : string option; } [@@deriving show { with_path = false }] diff --git a/src-util/dependencyGraph.ml b/src-util/dependencyGraph.ml index 7213fed9a..6e606fbad 100644 --- a/src-util/dependencyGraph.ml +++ b/src-util/dependencyGraph.ml @@ -43,6 +43,8 @@ module Make (Element : ElementType) = struct module VertexSet = Set.Make(Vertex) + module VertexMap = Map.Make(Vertex) + type 'a t = { labels : ('a * Vertex.t) ElementMap.t; main : GraphImpl.t; @@ -131,6 +133,12 @@ module Make (Element : ElementType) = struct end + let map_domain (map : 'a VertexMap.t) : VertexSet.t = + VertexMap.fold (fun vertex _ set -> + set |> VertexSet.add vertex + ) map VertexSet.empty + + let reachability_closure (graph : 'a t) (vertices_origin : VertexSet.t) : VertexSet.t = let g = graph.main in let is_reachable = ReachabilityImpl.analyze (fun v -> vertices_origin |> VertexSet.mem v) g in diff --git a/src-util/dependencyGraph.mli b/src-util/dependencyGraph.mli index c35a29c19..249bb34d6 100644 --- a/src-util/dependencyGraph.mli +++ b/src-util/dependencyGraph.mli @@ -33,6 +33,9 @@ module Make (Element : ElementType) : sig (** Equals [Set.Make(Vertex)]. *) module VertexSet : Set.S with type elt = Vertex.t + (** Equals [Map.Make(Vertex)]. *) + module VertexMap : Map.S with type key = Vertex.t + (** The type for graphs. *) type 'a t @@ -60,6 +63,8 @@ module Make (Element : ElementType) : sig {- [Ok sorted_vertices] if the sorting succeeds.}} *) val topological_sort : 'a t -> ((element * 'a) list, (element * 'a) cycle) result + val map_domain : 'a VertexMap.t -> VertexSet.t + (** [reachability_closure g vertices] computes the set of vertices reachable from at least one vertex contained in [vertices]. *) val reachability_closure : 'a t -> VertexSet.t -> VertexSet.t From d4aebf3031e09305d78a9bf5253bc6ca090289ca Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 2 Jan 2024 03:30:54 +0900 Subject: [PATCH 024/381] modify how to specify `math` in config files --- bin-saphe/envelopeConfig.ml | 23 +++++----- bin-saphe/logging.ml | 4 +- bin-saphe/main.ml | 10 ----- bin-saphe/packageConfig.ml | 23 +++++----- bin-saphe/packageConfig.mli | 6 --- bin-saphe/packageSystemBase.ml | 11 +++++ .../font-junicode.0.0.1/saphe.yaml | 42 +++++++++++++++++++ .../font-latin-modern-math.0.0.1/saphe.yaml | 22 ++++++++++ 8 files changed, 100 insertions(+), 41 deletions(-) create mode 100644 lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml diff --git a/bin-saphe/envelopeConfig.ml b/bin-saphe/envelopeConfig.ml index 6225ebc6d..fbfbe1971 100644 --- a/bin-saphe/envelopeConfig.ml +++ b/bin-saphe/envelopeConfig.ml @@ -1,19 +1,14 @@ open MyUtil open ConfigError +open PackageSystemBase type relative_path = string -type font_file_contents = - | OpentypeSingle of string - | OpentypeCollection of string list -[@@deriving show] - type font_file_description = { font_file_path : relative_path; font_file_contents : font_file_contents; - used_as_math_font : bool; } type package_conversion_spec = unit (* TODO *) @@ -35,25 +30,31 @@ type t = { } +let font_spec_encoder (font_spec : font_spec) : Yaml.value = + `O([ + ("name", `String(font_spec.font_item_name)); + ("math", `Bool(font_spec.used_as_math_font)); + ]) + + let font_file_contents_encoder (contents : font_file_contents) : Yaml.value = match contents with - | OpentypeSingle(name) -> + | OpentypeSingle(font_spec) -> `O([ ("type", `String("opentype_single")); - ("name", `String(name)); + ("contents", font_spec_encoder font_spec) ]) - | OpentypeCollection(names) -> + | OpentypeCollection(font_specs) -> `O([ ("type", `String("opentype_collection")); - ("names", `A(names |> List.map (fun name -> `String(name)))); + ("contents", `A(font_specs |> List.map font_spec_encoder)); ]) let font_file_description_encoder (descr : font_file_description) : Yaml.value = `O([ ("path", `String(descr.font_file_path)); - ("math", `Bool(descr.used_as_math_font)); ("contents", font_file_contents_encoder descr.font_file_contents); ]) diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 501ddadbe..8358ed8c2 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -29,11 +29,11 @@ let show_package_dependency_solutions (solutions : package_solution list) = let end_lock_config_output (file_name_out : abs_path) = - Printf.printf " lock config written on '%s'." (get_abs_path_string file_name_out) + Printf.printf " lock config written on '%s'.\n" (get_abs_path_string file_name_out) let end_envelope_config_output (file_name_out : abs_path) = - Printf.printf " envelope config written on '%s'." (get_abs_path_string file_name_out) + Printf.printf " envelope config written on '%s'.\n" (get_abs_path_string file_name_out) let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 76cdcbd66..e1ec2b5e2 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -505,21 +505,11 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E PackageConfig.{ font_file_path; font_file_contents; - used_as_math_font; } = descr in - let font_file_contents = - match font_file_contents with - | PackageConfig.OpentypeSingle(name) -> - EnvelopeConfig.OpentypeSingle(name) - - | PackageConfig.OpentypeCollection(names) -> - EnvelopeConfig.OpentypeCollection(names) - in EnvelopeConfig.{ font_file_path; font_file_contents; - used_as_math_font; } ) in diff --git a/bin-saphe/packageConfig.ml b/bin-saphe/packageConfig.ml index 07cf0eb6f..6fc3f94d1 100644 --- a/bin-saphe/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -9,15 +9,9 @@ type 'a ok = ('a, config_error) result type relative_path = string -type font_file_contents = - | OpentypeSingle of string - | OpentypeCollection of string list -[@@deriving show] - type font_file_description = { font_file_path : relative_path; font_file_contents : font_file_contents; - used_as_math_font : bool; } type package_conversion_spec = unit (* TODO *) @@ -49,16 +43,23 @@ type t = { } +let font_spec_decoder : font_spec ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun font_item_name -> + get_or_else "math" bool false >>= fun used_as_math_font -> + succeed { font_item_name; used_as_math_font } + + let font_file_contents_decoder : font_file_contents ConfigDecoder.t = let open ConfigDecoder in branch "type" [ "opentype_single" ==> begin - get "name" string >>= fun name -> - succeed @@ OpentypeSingle(name) + get "contents" font_spec_decoder >>= fun font_spec -> + succeed @@ OpentypeSingle(font_spec) end; "opentype_collection" ==> begin - get "names" (list string) >>= fun names -> - succeed @@ OpentypeCollection(names) + get "contents" (list font_spec_decoder) >>= fun font_specs -> + succeed @@ OpentypeCollection(font_specs) end; ] ~other:(fun tag -> @@ -69,12 +70,10 @@ let font_file_contents_decoder : font_file_contents ConfigDecoder.t = let font_file_description_decoder : font_file_description ConfigDecoder.t = let open ConfigDecoder in get "path" string >>= fun font_file_path -> - get_or_else "math" bool false >>= fun used_as_math_font -> get "contents" font_file_contents_decoder >>= fun font_file_contents -> succeed @@ { font_file_path; font_file_contents; - used_as_math_font; } diff --git a/bin-saphe/packageConfig.mli b/bin-saphe/packageConfig.mli index 372e70c5e..cd625153c 100644 --- a/bin-saphe/packageConfig.mli +++ b/bin-saphe/packageConfig.mli @@ -5,15 +5,9 @@ open PackageSystemBase type relative_path = string -type font_file_contents = - | OpentypeSingle of string - | OpentypeCollection of string list -[@@deriving show { with_path = false }] - type font_file_description = { font_file_path : relative_path; font_file_contents : font_file_contents; - used_as_math_font : bool; } type package_conversion_spec = unit (* TODO *) diff --git a/bin-saphe/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml index b73c9c374..46b233469 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/bin-saphe/packageSystemBase.ml @@ -158,3 +158,14 @@ type external_source = checksum : string; extractions : extraction list; } + +type font_spec = { + font_item_name : string; + used_as_math_font : bool; +} +[@@deriving show] + +type font_file_contents = + | OpentypeSingle of font_spec + | OpentypeCollection of font_spec list +[@@deriving show] diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml new file mode 100644 index 000000000..b07a194af --- /dev/null +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml @@ -0,0 +1,42 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "font-junicode" +authors: [] +external_sources: + - name: "junicode-1.002" + type: "zip" + url: "http://downloads.sourceforge.net/project/junicode/junicode/junicode-1.002/junicode-1.002.zip" + checksum: "b1d6ed8796d8d1eacd733c0d568d939f" + extractions: + - from: "Junicode.ttf" + to: "./fonts/Junicode.ttf" + - from: "Junicode-Bold.ttf" + to: "./fonts/Junicode-Bold.ttf" + - from: "Junicode-Italic.ttf" + to: "./fonts/Junicode-Italic.ttf" + - from: "Junicode-BoldItalic.ttf" + to: "./fonts/Junicode-BoldItalic.ttf" +contents: + type: "font" + main_module: "FontJunicode" + elements: + - path: "./fonts/Junicode.ttf" + contents: + type: "opentype_single" + contents: + name: "normal" + - path: "./fonts/Junicode-Bold.ttf" + contents: + type: "opentype_single" + contents: + name: "bold" + - path: "./fonts/Junicode-Italic.ttf" + contents: + type: "opentype_single" + contents: + name: "italic" + - path: "./fonts/Junicode-BoldItalic.ttf" + contents: + type: "opentype_single" + contents: + name: "bold-italic" diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml new file mode 100644 index 000000000..f7233a324 --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml @@ -0,0 +1,22 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "font-latin-modern-math" +authors: [] +external_sources: + - name: "latinmodern-math-1959" + type: "zip" + url: "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" + checksum: "bc82f6d4184ec0ea3ba2c0798e6be719" + extractions: + - from: "latinmodern-math-1959/otf/latinmodern-math.otf" + to: "./fonts/latinmodern-math.otf" +contents: + type: "font" + main_module: "FontLatinModernMath" + elements: + - path: "./fonts/latinmodern-math.otf" + contents: + type: "opentype_single" + contents: + name: "main" + math: true From 91aa4828ad6409be5ba04531f9ec8a2103e58614 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 2 Jan 2024 03:48:38 +0900 Subject: [PATCH 025/381] develop `DepsConfig` and its use --- bin-saphe/depsConfig.ml | 12 ++++++++++-- bin-saphe/lockConfig.ml | 1 + bin-saphe/main.ml | 41 ++++++++++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/bin-saphe/depsConfig.ml b/bin-saphe/depsConfig.ml index e08bf66b8..037803af2 100644 --- a/bin-saphe/depsConfig.ml +++ b/bin-saphe/depsConfig.ml @@ -1,4 +1,8 @@ +open MyUtil +open ConfigError + + type envelope_name = string type envelope_dependency = { @@ -13,6 +17,10 @@ type envelope_spec = { } type t = { - envelopes : envelope_spec list; - direct_dependencies : envelope_dependency list; + envelopes : envelope_spec list; + explicit_dependencies : envelope_dependency list; } + + +let write (_abspath_deps_config : abs_path) (_deps_config : t) : (unit, config_error) result = + failwith "TODO: DepsConfig.write" diff --git a/bin-saphe/lockConfig.ml b/bin-saphe/lockConfig.ml index ab6157df1..1ccd3988b 100644 --- a/bin-saphe/lockConfig.ml +++ b/bin-saphe/lockConfig.ml @@ -19,6 +19,7 @@ type lock_dependency = { used_as : string; } +(* TODO: make `locked_package` keep registry, package name, and version *) type locked_package = { lock_name : lock_name; lock_contents : lock_contents; diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index e1ec2b5e2..7d569a29d 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -735,13 +735,35 @@ type build_input = } -let make_deps_config (_lock_config : LockConfig.t) : DepsConfig.t = +let make_envelope_dependency (lock_dep : LockConfig.lock_dependency) : DepsConfig.envelope_dependency = DepsConfig.{ - envelopes = failwith "TODO: DepsConfig"; - direct_dependencies = []; + dependency_name = lock_dep.depended_lock_name; + dependency_used_as = lock_dep.used_as; } +let make_envelope_spec (locked_package : LockConfig.locked_package) : DepsConfig.envelope_spec = + let envelope_dependencies = + locked_package.lock_dependencies |> List.map make_envelope_dependency + in + DepsConfig.{ + envelope_name = locked_package.lock_name; + envelope_path = failwith "TODO: make_envelope_spec, envelope_path"; + envelope_dependencies; + } + + +let make_deps_config (lock_config : LockConfig.t) : DepsConfig.t = + let envelopes = + lock_config.LockConfig.locked_packages |> List.map make_envelope_spec + in + let explicit_dependencies = + lock_config.LockConfig.explicit_dependencies + |> List.map make_envelope_dependency + in + DepsConfig.{ envelopes; explicit_dependencies } + + let build ~(fpath_in : string) ~(fpath_out_opt : string option) @@ -813,22 +835,27 @@ let build | PackageBuildInput{ root = _absdir_package; lock = abspath_lock_config; - deps = _abspath_deps_config; + deps = abspath_deps_config; envelope = _abspath_envelope_config; options = _build_option; } -> let* lock_config = LockConfig.load abspath_lock_config in - let _deps_config = make_deps_config lock_config in + let deps_config = make_deps_config lock_config in + + let* () = DepsConfig.write abspath_deps_config deps_config in failwith "TODO: PackageBuildInput" | DocumentBuildInput{ lock = abspath_lock_config; - deps = _abspath_deps_config; + deps = abspath_deps_config; out = _abspath_out; dump = _abspath_dump; options = _build_option; } -> - let* _lock_config = LockConfig.load abspath_lock_config in + let* lock_config = LockConfig.load abspath_lock_config in + let deps_config = make_deps_config lock_config in + + let* () = DepsConfig.write abspath_deps_config deps_config in failwith "TODO: DocumentBuildInput" in match res with From 8f081145872595e8df97623cc484d22fdc8cd284 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 2 Jan 2024 20:45:11 +0900 Subject: [PATCH 026/381] develop `saphe build` --- bin-saphe/logging.ml | 12 ++++--- bin-saphe/logging.mli | 2 ++ bin-saphe/main.ml | 70 ++++++++++++++++++++----------------- bin-saphe/satysfiCommand.ml | 35 +++++++++++++++++++ 4 files changed, 83 insertions(+), 36 deletions(-) create mode 100644 bin-saphe/satysfiCommand.ml diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 8358ed8c2..1bc962193 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -28,12 +28,16 @@ let show_package_dependency_solutions (solutions : package_solution list) = ) -let end_lock_config_output (file_name_out : abs_path) = - Printf.printf " lock config written on '%s'.\n" (get_abs_path_string file_name_out) +let end_lock_config_output (abspath_lock_config : abs_path) = + Printf.printf " lock config written on '%s'.\n" (get_abs_path_string abspath_lock_config) -let end_envelope_config_output (file_name_out : abs_path) = - Printf.printf " envelope config written on '%s'.\n" (get_abs_path_string file_name_out) +let end_envelope_config_output (abspath_envelope_config : abs_path) = + Printf.printf " envelope config written on '%s'.\n" (get_abs_path_string abspath_envelope_config) + + +let end_deps_config_output (abspath_deps_config : abs_path) = + Printf.printf " deps config written on '%s'.\n" (get_abs_path_string abspath_deps_config) let lock_already_installed (lock_name : lock_name) (absdir : abs_path) = diff --git a/bin-saphe/logging.mli b/bin-saphe/logging.mli index 98c0e59b6..ede4742f3 100644 --- a/bin-saphe/logging.mli +++ b/bin-saphe/logging.mli @@ -10,6 +10,8 @@ val end_lock_config_output : abs_path -> unit val end_envelope_config_output : abs_path -> unit +val end_deps_config_output : abs_path -> unit + val lock_already_installed : lock_name -> abs_path -> unit val lock_cache_exists : lock_name -> abs_path -> unit diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 7d569a29d..eeba9ba39 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -704,34 +704,21 @@ let solve ~(fpath_in : string) = | Error(e) -> report_config_error e; exit 1 -type build_option = { - text_mode : string option; - page_number_limit : int; - show_full_path : bool; - debug_show_bbox : bool; - debug_show_space : bool; - debug_show_block_bbox : bool; - debug_show_block_space : bool; - debug_show_overfull : bool; - type_check_only : bool; - bytecomp : bool; -} - - type build_input = | PackageBuildInput of { root : abs_path; lock : abs_path; deps : abs_path; envelope : abs_path; - options : build_option; + options : SatysfiCommand.build_option; } | DocumentBuildInput of { + doc : abs_path; lock : abs_path; deps : abs_path; out : abs_path; dump : abs_path; - options : build_option; + options : SatysfiCommand.build_option; } @@ -783,8 +770,8 @@ let build (* Constructs the input: *) let build_input = - let build_option = - { + let options = + SatysfiCommand.{ text_mode = text_mode_formats_str_opt; page_number_limit; show_full_path; @@ -808,7 +795,7 @@ let build lock = abspath_lock_config; deps = abspath_deps_config; envelope = abspath_envelope_config; - options = build_option; + options; } else let abspath_lock_config = Constant.document_lock_config_path abspath_in in @@ -823,40 +810,59 @@ let build in let abspath_dump = Constant.dump_path abspath_in in DocumentBuildInput{ + doc = abspath_in; lock = abspath_lock_config; deps = abspath_deps_config; out = abspath_out; dump = abspath_dump; - options = build_option; + options; } in match build_input with | PackageBuildInput{ - root = _absdir_package; + root = absdir_package; lock = abspath_lock_config; deps = abspath_deps_config; - envelope = _abspath_envelope_config; - options = _build_option; + envelope = abspath_envelope_config; + options; } -> let* lock_config = LockConfig.load abspath_lock_config in let deps_config = make_deps_config lock_config in - let* () = DepsConfig.write abspath_deps_config deps_config in - failwith "TODO: PackageBuildInput" + Logging.end_deps_config_output abspath_deps_config; + + SatysfiCommand.(build + ~input:(PackageInput{ + root = absdir_package; + envelope = abspath_envelope_config; + }) + ~deps:abspath_deps_config + ~options); + return () | DocumentBuildInput{ - lock = abspath_lock_config; - deps = abspath_deps_config; - out = _abspath_out; - dump = _abspath_dump; - options = _build_option; + doc = abspath_doc; + lock = abspath_lock_config; + deps = abspath_deps_config; + out = abspath_out; + dump = abspath_dump; + options; } -> let* lock_config = LockConfig.load abspath_lock_config in let deps_config = make_deps_config lock_config in - let* () = DepsConfig.write abspath_deps_config deps_config in - failwith "TODO: DocumentBuildInput" + Logging.end_deps_config_output abspath_deps_config; + + SatysfiCommand.(build + ~input:(DocumentInput{ + doc = abspath_doc; + out = abspath_out; + dump = abspath_dump; + }) + ~deps:abspath_deps_config + ~options); + return () in match res with | Ok(()) -> () diff --git a/bin-saphe/satysfiCommand.ml b/bin-saphe/satysfiCommand.ml new file mode 100644 index 000000000..6f0f9d241 --- /dev/null +++ b/bin-saphe/satysfiCommand.ml @@ -0,0 +1,35 @@ + +open MyUtil + + +type build_option = { + text_mode : string option; + page_number_limit : int; + show_full_path : bool; + debug_show_bbox : bool; + debug_show_space : bool; + debug_show_block_bbox : bool; + debug_show_block_space : bool; + debug_show_overfull : bool; + type_check_only : bool; + bytecomp : bool; +} + +type input = + | PackageInput of { + root : abs_path; + envelope : abs_path; + } + | DocumentInput of { + doc : abs_path; + out : abs_path; + dump : abs_path; + } + + +let build + ~input:(_ : input) + ~deps:(_abspath_deps_config : abs_path) + ~options:(_ : build_option) : unit += + failwith "TODO: SatysfiCommand.build" From d0585565e2ff24d58fda70743a9f23e46f92e449 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 3 Jan 2024 00:52:14 +0900 Subject: [PATCH 027/381] implement `DepsConfig.write` --- bin-saphe/configError.ml | 4 ++++ bin-saphe/depsConfig.ml | 33 +++++++++++++++++++++++++++++++-- bin-saphe/main.ml | 5 +++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index f83925e2e..eb9970886 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -115,6 +115,10 @@ type config_error = message : string; path : abs_path; } + | CannotWriteDepsConfig of { + message : string; + path : abs_path; + } | MultiplePackageDefinition of { package_name : string; } diff --git a/bin-saphe/depsConfig.ml b/bin-saphe/depsConfig.ml index 037803af2..108ff223f 100644 --- a/bin-saphe/depsConfig.ml +++ b/bin-saphe/depsConfig.ml @@ -22,5 +22,34 @@ type t = { } -let write (_abspath_deps_config : abs_path) (_deps_config : t) : (unit, config_error) result = - failwith "TODO: DepsConfig.write" +let envelope_dependency_encoder (dep : envelope_dependency) : Yaml.value = + let { dependency_name; dependency_used_as } = dep in + `O([ + ("name", `String(dependency_name)); + ("used_as", `String(dependency_used_as)); + ]) + + +let envelope_spec_encoder (spec : envelope_spec) : Yaml.value = + let { envelope_name; envelope_path; envelope_dependencies } = spec in + `O([ + ("name", `String(envelope_name)); + ("path", `String(envelope_path)); + ("dependencies", `A(envelope_dependencies |> List.map envelope_dependency_encoder)); + ]) + +let deps_config_encoder (deps_config : t) : Yaml.value = + let { envelopes; explicit_dependencies } = deps_config in + `O([ + ("envelopes", `A(envelopes |> List.map envelope_spec_encoder)); + ("dependencies", `A(explicit_dependencies |> List.map envelope_dependency_encoder)); + ]) + + +let write (abspath_deps_config : abs_path) (deps_config : t) : (unit, config_error) result = + let yaml = deps_config_encoder deps_config in + let data = encode_yaml yaml in + write_file abspath_deps_config data + |> Result.map_error (fun message -> + CannotWriteDepsConfig{ message; path = abspath_deps_config } + ) diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index eeba9ba39..8f9b047bd 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -341,6 +341,11 @@ let report_config_error = function NormalLine(Printf.sprintf "cannot write a lock config to '%s' (message: '%s')" (get_abs_path_string path) message); ] + | CannotWriteDepsConfig{ message; path } -> + report_error [ + NormalLine(Printf.sprintf "cannot write a deps config to '%s' (message: '%s')" (get_abs_path_string path) message); + ] + | MultiplePackageDefinition{ package_name } -> report_error [ NormalLine(Printf.sprintf "More than one definition for package '%s'." package_name) From 95f07ed7acb66c127c200bb179bd3911620df703 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 3 Jan 2024 04:00:45 +0900 Subject: [PATCH 028/381] refactor `PackageConstraintSolver` and `PackageConfig` about `registry_local_name` --- bin-saphe/configError.ml | 10 +- bin-saphe/configUtil.ml | 25 ++- bin-saphe/logging.ml | 3 +- bin-saphe/main.ml | 73 ++++----- bin-saphe/packageConfig.ml | 146 ++++++++++++++++-- bin-saphe/packageConfig.mli | 2 +- bin-saphe/packageConstraintSolver.ml | 130 ++++++---------- bin-saphe/packageSystemBase.ml | 43 ++++-- .../packages/stdlib/stdlib.0.0.1/saphe.yaml | 3 +- 9 files changed, 269 insertions(+), 166 deletions(-) diff --git a/bin-saphe/configError.ml b/bin-saphe/configError.ml index eb9970886..6cea97fd1 100644 --- a/bin-saphe/configError.ml +++ b/bin-saphe/configError.ml @@ -16,10 +16,6 @@ type yaml_error = | NotASemanticVersion of YamlDecoder.context * string | NotAVersionRequirement of YamlDecoder.context * string | InvalidPackageName of YamlDecoder.context * string - | DuplicateRegistryLocalName of { - context : YamlDecoder.context; - registry_local_name : registry_local_name; - } | DuplicateRegistryHashValue of { context : YamlDecoder.context; registry_hash_value : registry_hash_value; @@ -122,3 +118,9 @@ type config_error = | MultiplePackageDefinition of { package_name : string; } + | DuplicateRegistryLocalName of { + registry_local_name : registry_local_name; + } + | UndefinedRegistryLocalName of { + registry_local_name : registry_local_name; + } diff --git a/bin-saphe/configUtil.ml b/bin-saphe/configUtil.ml index 7b8ca9420..7c66998ee 100644 --- a/bin-saphe/configUtil.ml +++ b/bin-saphe/configUtil.ml @@ -48,14 +48,14 @@ let version_checker (version : SemanticVersion.t) : unit ConfigDecoder.t = failure (fun yctx -> BreaksVersionRequirement(yctx, requirement)) -let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = +let dependency_spec_decoder : parsed_package_dependency_spec ConfigDecoder.t = let open ConfigDecoder in branch "type" [ "registered" ==> begin get "registry" string >>= fun registry_local_name -> get "name" package_name_decoder >>= fun package_name -> get "requirement" requirement_decoder >>= fun version_requirement -> - succeed @@ RegisteredDependency{ + succeed @@ ParsedRegisteredDependency{ registry_local_name; package_name; version_requirement; @@ -67,11 +67,11 @@ let dependency_spec_decoder : package_dependency_spec ConfigDecoder.t = ) -let dependency_decoder : package_dependency ConfigDecoder.t = +let dependency_decoder : parsed_package_dependency ConfigDecoder.t = let open ConfigDecoder in get "used_as" string >>= fun used_as -> get "spec" dependency_spec_decoder >>= fun spec -> - succeed @@ PackageDependency{ used_as; spec } + succeed @@ ParsedPackageDependency{ used_as; spec } let registry_remote_decoder : registry_remote ConfigDecoder.t = @@ -95,3 +95,20 @@ let name_decoder : string ConfigDecoder.t = failure (fun context -> CannotBeUsedAsAName(context, s)) else succeed s + + +let make_registry_hash_value (registry_remote : registry_remote) : (registry_hash_value, config_error) result = + let open ResultMonad in + match registry_remote with + | GitRegistry{ url; branch } -> + let* canonicalized_url = + CanonicalRegistryUrl.make url + |> Result.map_error (fun e -> CanonicalRegistryUrlError(e)) + in + let hash_value = + Digest.to_hex (Digest.string (Printf.sprintf "git#%s#%s" canonicalized_url branch)) + in +(* + Logging.report_canonicalized_url ~url ~canonicalized_url ~hash_value; +*) + return hash_value diff --git a/bin-saphe/logging.ml b/bin-saphe/logging.ml index 1bc962193..ee81c8c73 100644 --- a/bin-saphe/logging.ml +++ b/bin-saphe/logging.ml @@ -8,7 +8,8 @@ let show_package_dependency_before_solving (dependencies_with_flags : (dependenc dependencies_with_flags |> List.iter (fun (flag, dep) -> let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ package_name; version_requirement; _ } -> + | RegisteredDependency{ package_id; version_requirement; _ } -> + let PackageId.{ package_name; _ } = package_id in let s_restr = SemanticVersion.requirement_to_string version_requirement in let s_test_only = match flag with diff --git a/bin-saphe/main.ml b/bin-saphe/main.ml index 8f9b047bd..c7cc2a115 100644 --- a/bin-saphe/main.ml +++ b/bin-saphe/main.ml @@ -88,9 +88,6 @@ let make_yaml_error_lines : yaml_error -> line list = function | InvalidPackageName(yctx, s) -> [ NormalLine(Printf.sprintf "not a package name: '%s'%s" s (show_yaml_context yctx)) ] - | DuplicateRegistryLocalName{ context = yctx; registry_local_name } -> - [ NormalLine(Printf.sprintf "More than one definition for registry local name '%s'%s" registry_local_name (show_yaml_context yctx)) ] - | DuplicateRegistryHashValue{ context = yctx; registry_hash_value } -> [ NormalLine(Printf.sprintf "More than one definition for registry hash value '%s'%s" registry_hash_value (show_yaml_context yctx)) ] @@ -351,6 +348,16 @@ let report_config_error = function NormalLine(Printf.sprintf "More than one definition for package '%s'." package_name) ] + | DuplicateRegistryLocalName{ registry_local_name } -> + report_error [ + NormalLine(Printf.sprintf "more than one definition for registry local name '%s'" registry_local_name) + ] + + | UndefinedRegistryLocalName{ registry_local_name } -> + report_error [ + NormalLine(Printf.sprintf "undefined registry local name '%s'" registry_local_name) + ] + type solve_input = | PackageSolveInput of { @@ -365,21 +372,6 @@ type solve_input = } -let make_registry_hash_value (registry_remote : registry_remote) : (registry_hash_value, config_error) result = - let open ResultMonad in - match registry_remote with - | GitRegistry{ url; branch } -> - let* canonicalized_url = - CanonicalRegistryUrl.make url - |> Result.map_error (fun e -> CanonicalRegistryUrlError(e)) - in - let hash_value = - Digest.to_hex (Digest.string (Printf.sprintf "git#%s#%s" canonicalized_url branch)) - in - Logging.report_canonicalized_url ~url ~canonicalized_url ~hash_value; - return hash_value - - let update_store_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_store_root : abs_path) : unit = match registries |> RegistryHashValueMap.find_opt registry_hash_value @@ -567,7 +559,7 @@ let solve ~(fpath_in : string) = } in - let* (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) = + let* (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) = match solve_input with | PackageSolveInput{ root = absdir_package; @@ -579,7 +571,7 @@ let solve ~(fpath_in : string) = PackageConfig.{ language_requirement; package_contents; - registry_specs; + registry_remotes; _ } = PackageConfig.load abspath_package_config in @@ -595,19 +587,17 @@ let solve ~(fpath_in : string) = let* () = EnvelopeConfig.write abspath_envelope_config envelope_config in Logging.end_envelope_config_output abspath_envelope_config; - begin + let dependencies_with_flags = match package_contents with | PackageConfig.Library{ dependencies; test_dependencies; _ } -> - let dependencies_with_flags = - List.append - (dependencies |> List.map (fun dep -> (SourceDependency, dep))) - (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) - in - return (language_version, dependencies_with_flags, abspath_lock_config, registry_specs) + List.append + (dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) | PackageConfig.Font(_) -> - return (language_version, [], abspath_lock_config, registry_specs) - end + [] + in + return (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) | DocumentSolveInput{ doc = _abspath_doc; @@ -630,10 +620,10 @@ let solve ~(fpath_in : string) = let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in let* store_root_config = StoreRootConfig.load abspath_store_root_config in - let* registries = - RegistryLocalNameMap.fold (fun registry_local_name registry_remote res -> - let* registries = res in - let* registry_hash_value = make_registry_hash_value registry_remote in + let* package_id_to_impl_list = + registry_remotes |> List.fold_left (fun res registry_remote -> + let* package_id_to_impl_list = res in + let* registry_hash_value = ConfigUtil.make_registry_hash_value registry_remote in (* Manupulates the store root config: *) update_store_root_config_if_needed @@ -661,23 +651,22 @@ let solve ~(fpath_in : string) = in PackageRegistryConfig.load abspath_registry_config in - let* packages_in_registry = + let* package_id_to_impl_list = packages |> List.fold_left (fun res (package_name, impls) -> - let* map = res in + let* package_id_to_impl_list = res in let package_id = PackageId.{ registry_hash_value; package_name } in - if map |> PackageIdMap.mem package_id then + if package_id_to_impl_list |> PackageIdMap.mem package_id then err @@ MultiplePackageDefinition{ package_name } else - return (map |> PackageIdMap.add package_id impls) - ) (return PackageIdMap.empty) + return (package_id_to_impl_list |> PackageIdMap.add package_id impls) + ) (return package_id_to_impl_list) in - let registry_spec = { packages_in_registry; registry_hash_value } in - return (registries |> RegistryLocalNameMap.add registry_local_name registry_spec) + return package_id_to_impl_list - ) registry_specs (return RegistryLocalNameMap.empty) + ) (return PackageIdMap.empty) in - let package_context = { registries; language_version } in + let package_context = { language_version; package_id_to_impl_list } in let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in begin match solutions_opt with diff --git a/bin-saphe/packageConfig.ml b/bin-saphe/packageConfig.ml index 6fc3f94d1..02d123119 100644 --- a/bin-saphe/packageConfig.ml +++ b/bin-saphe/packageConfig.ml @@ -19,6 +19,31 @@ type package_conversion_spec = unit (* TODO *) | MarkdownConversion of MarkdownParser.command_record *) +type parsed_package_contents = + | ParsedLibrary of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : parsed_package_dependency list; + test_dependencies : parsed_package_dependency list; + conversion_specs : package_conversion_spec list; + } + | ParsedFont of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } + +module Internal = struct + type t = { + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_authors : string list; + external_sources : (string * external_source) list; + package_contents : parsed_package_contents; + registry_specs : (registry_local_name * registry_remote) list; + } +end + type package_contents = | Library of { main_module_name : string; @@ -39,7 +64,7 @@ type t = { package_authors : string list; external_sources : (string * external_source) list; package_contents : package_contents; - registry_specs : registry_remote RegistryLocalNameMap.t; + registry_remotes : registry_remote list; } @@ -185,7 +210,7 @@ let conversion_spec_decoder = succeed () -let contents_decoder : package_contents ConfigDecoder.t = +let contents_decoder : parsed_package_contents ConfigDecoder.t = let open ConfigDecoder in branch "type" [ "library" ==> begin @@ -195,7 +220,7 @@ let contents_decoder : package_contents ConfigDecoder.t = get_or_else "dependencies" (list dependency_decoder) [] >>= fun dependencies -> get_or_else "test_dependencies" (list dependency_decoder) [] >>= fun test_dependencies -> get_or_else "conversion" (list conversion_spec_decoder) [] >>= fun conversion_specs -> - succeed @@ Library { + succeed @@ ParsedLibrary { main_module_name; source_directories; test_directories; @@ -207,7 +232,7 @@ let contents_decoder : package_contents ConfigDecoder.t = "font" ==> begin get "main_module" string >>= fun main_module_name -> get "elements" (list font_file_description_decoder) >>= fun font_file_descriptions -> - succeed @@ Font { + succeed @@ ParsedFont { main_module_name; font_file_descriptions; } @@ -248,7 +273,7 @@ let external_source_decoder : (string * external_source) ConfigDecoder.t = ) -let config_decoder : t ConfigDecoder.t = +let config_decoder : Internal.t ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "language" requirement_decoder >>= fun language_requirement -> @@ -257,14 +282,7 @@ let config_decoder : t ConfigDecoder.t = get_or_else "registries" (list registry_spec_decoder) [] >>= fun registry_specs -> get_or_else "external_sources" (list external_source_decoder) [] >>= fun external_sources -> get "contents" contents_decoder >>= fun package_contents -> - registry_specs |> List.fold_left (fun res (registry_local_name, registry_remote) -> - res >>= fun map -> - if map |> RegistryLocalNameMap.mem registry_local_name then - failure (fun context -> DuplicateRegistryLocalName{ context; registry_local_name }) - else - succeed (map |> RegistryLocalNameMap.add registry_local_name registry_remote) - ) (succeed RegistryLocalNameMap.empty) >>= fun registry_specs -> - succeed @@ { + succeed @@ Internal.{ language_requirement; package_name; package_authors; @@ -274,11 +292,109 @@ let config_decoder : t ConfigDecoder.t = } +let validate_dependency (localmap : registry_remote RegistryLocalNameMap.t) (dep : parsed_package_dependency) : package_dependency ok = + let open ResultMonad in + let ParsedPackageDependency{ used_as; spec } = dep in + let* spec = + match spec with + | ParsedRegisteredDependency{ + package_name; + registry_local_name; + version_requirement; + } -> + let* registry_hash_value = + match localmap |> RegistryLocalNameMap.find_opt registry_local_name with + | None -> + err @@ UndefinedRegistryLocalName{ registry_local_name } + + | Some(registry_remote) -> + ConfigUtil.make_registry_hash_value registry_remote + in + let package_id = PackageId.{ package_name; registry_hash_value } in + return @@ RegisteredDependency{ + package_id; + version_requirement; + } + in + return @@ PackageDependency{ used_as; spec } + + +let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) (contents : parsed_package_contents) : package_contents ok = + let open ResultMonad in + match contents with + | ParsedLibrary{ + main_module_name; + source_directories; + test_directories; + dependencies; + test_dependencies; + conversion_specs; + } -> + let* dependencies = mapM (validate_dependency localmap) dependencies in + let* test_dependencies = mapM (validate_dependency localmap) test_dependencies in + return @@ Library{ + main_module_name; + source_directories; + test_directories; + dependencies; + test_dependencies; + conversion_specs; + } + + | ParsedFont{ + main_module_name; + font_file_descriptions; + } -> + return @@ Font{ + main_module_name; + font_file_descriptions; + } + + +let validate (package_config : Internal.t) : t ok = + let open ResultMonad in + let + Internal.{ + language_requirement; + package_name; + package_authors; + external_sources; + package_contents; + registry_specs; + } = package_config + in + let* (localmap, registry_remote_acc) = + registry_specs |> List.fold_left (fun res (registry_local_name, registry_remote) -> + let* (localmap, registry_remote_acc) = res in + if localmap |> RegistryLocalNameMap.mem registry_local_name then + err @@ DuplicateRegistryLocalName{ registry_local_name } + else + let localmap = localmap |> RegistryLocalNameMap.add registry_local_name registry_remote in + let registry_remote_acc = Alist.extend registry_remote_acc registry_remote in + return (localmap, registry_remote_acc) + ) (return (RegistryLocalNameMap.empty, Alist.empty)) + in + let* package_contents = + validate_contents_spec localmap package_contents + in + return { + language_requirement; + package_name; + package_authors; + external_sources; + package_contents; + registry_remotes = Alist.to_list registry_remote_acc; + } + + let load (abspath_config : abs_path) : t ok = let open ResultMonad in let* s = read_file abspath_config |> Result.map_error (fun _ -> PackageConfigNotFound(abspath_config)) in - ConfigDecoder.run config_decoder s - |> Result.map_error (fun e -> PackageConfigError(abspath_config, e)) + let* internal = + ConfigDecoder.run config_decoder s + |> Result.map_error (fun e -> PackageConfigError(abspath_config, e)) + in + validate internal diff --git a/bin-saphe/packageConfig.mli b/bin-saphe/packageConfig.mli index cd625153c..ea4d495b0 100644 --- a/bin-saphe/packageConfig.mli +++ b/bin-saphe/packageConfig.mli @@ -35,7 +35,7 @@ type t = { package_authors : string list; external_sources : (string * external_source) list; package_contents : package_contents; - registry_specs : registry_remote RegistryLocalNameMap.t; + registry_remotes : registry_remote list; } val load : abs_path -> (t, config_error) result diff --git a/bin-saphe/packageConstraintSolver.ml b/bin-saphe/packageConstraintSolver.ml index 87e13733c..098916ebe 100644 --- a/bin-saphe/packageConstraintSolver.ml +++ b/bin-saphe/packageConstraintSolver.ml @@ -12,17 +12,20 @@ module SolverInput = struct context : package_context; } | Role of { - registry_local_name : registry_local_name; - package_name : package_name; - compatibility : string; - context : package_context; + package_id : PackageId.t; + compatibility : string; + context : package_context; } let pp ppf (role : t) = match role with - | Role{ package_name; _ } -> Format.fprintf ppf "%s" package_name - | LocalRole(_) -> Format.fprintf ppf "local" + | Role{ package_id; _ } -> + let PackageId.{ package_name; _ } = package_id in + Format.fprintf ppf "%s" package_name + + | LocalRole(_) -> + Format.fprintf ppf "local" let compare (role1 : t) (role2 : t) = @@ -32,11 +35,11 @@ module SolverInput = struct | (_, LocalRole(_)) -> -1 | ( - Role{ package_name = name1; compatibility = c1; _ }, - Role{ package_name = name2; compatibility = c2; _ } + Role{ package_id = pkgid1; compatibility = c1; _ }, + Role{ package_id = pkgid2; compatibility = c2; _ } ) -> begin - match String.compare name1 name2 with + match PackageId.compare pkgid1 pkgid2 with | 0 -> String.compare c1 c2 | nonzero -> nonzero end @@ -146,7 +149,7 @@ module SolverInput = struct ([], []) - let make_internal_dependency_from_registry (registry_local_name : registry_local_name) (context : package_context) (requires : package_dependency_in_registry list) : dependency list = + let make_internal_dependency_from_registry (registry_hash_value : string) (context : package_context) (requires : package_dependency_in_registry list) : dependency list = requires |> List.map (function | PackageDependencyInRegistry{ package_name; used_as; version_requirement } -> let compatibility = @@ -154,10 +157,10 @@ module SolverInput = struct | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in + let package_id = PackageId.{ package_name; registry_hash_value } in let role = Role.Role{ - package_name; - registry_local_name; + package_id; compatibility; context; } @@ -170,57 +173,42 @@ module SolverInput = struct requires |> List.map (fun dep -> let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ registry_local_name; package_name; version_requirement } -> + | RegisteredDependency{ package_id; version_requirement } -> let compatibility = match version_requirement with | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in - let role = - Role.Role{ - package_name; - registry_local_name; - compatibility; - context; - } - in + let role = Role.Role{ package_id; compatibility; context } in Dependency{ role; used_as; version_requirement } ) let implementations (role : Role.t) : role_information = match role with - | Role{ package_name; registry_local_name; compatibility; context } -> - begin - match context.registries |> RegistryLocalNameMap.find_opt registry_local_name with - | None -> - (* TODO: emit warning *) - { replacement = None; impls = [] } - - | Some(registry_spec) -> - let registry_hash_value = registry_spec.registry_hash_value in - let package_id = PackageId.{ registry_hash_value; package_name } in - let impl_records = - registry_spec.packages_in_registry - |> PackageIdMap.find_opt package_id |> Option.value ~default:[] - in - let impls = - impl_records |> List.filter_map (fun impl_record -> - let ImplRecord{ version; source; language_requirement; dependencies } = impl_record in - if context.language_version |> SemanticVersion.fulfill language_requirement then - if String.equal (SemanticVersion.get_compatibility_unit version) compatibility then - let dependencies = - make_internal_dependency_from_registry registry_local_name context dependencies - in - Some(Impl{ package_name; version; registry_hash_value; source; dependencies }) - else - None - else - None - ) - in - { replacement = None; impls } - end + | Role{ package_id; compatibility; context } -> + let PackageId.{ package_name; registry_hash_value } = package_id in + let impl_records = + context.package_id_to_impl_list + |> PackageIdMap.find_opt package_id + |> Option.value ~default:[] + in + let impls = + impl_records |> List.filter_map (fun impl_record -> + let ImplRecord{ version; source; language_requirement; dependencies } = impl_record in + if context.language_version |> SemanticVersion.fulfill language_requirement then + if String.equal (SemanticVersion.get_compatibility_unit version) compatibility then + let dependencies = + make_internal_dependency_from_registry registry_hash_value context dependencies + in + Some(Impl{ package_name; version; registry_hash_value; source; dependencies }) + else + None + else + None + ) + in + { replacement = None; impls } | LocalRole{ requires; context } -> let dependencies = make_internal_dependency context requires in @@ -319,23 +307,13 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla dependencies_with_flags |> List.fold_left (fun (explicit_source_dependencies, dependency_acc) (flag, dep) -> match dep with | PackageDependency{ spec; used_as } -> - let RegisteredDependency{ registry_local_name; package_name; _ } = spec in - begin - match context.registries |> RegistryLocalNameMap.find_opt registry_local_name with - | None -> - (* TODO: emit warning *) - (explicit_source_dependencies, dependency_acc) - - | Some(registry_spec) -> - let registry_hash_value = registry_spec.registry_hash_value in - let package_id = PackageId.{ registry_hash_value; package_name } in - let explicit_source_dependencies = - match flag with - | SourceDependency -> explicit_source_dependencies |> PackageIdMap.add package_id used_as - | TestOnlyDependency -> explicit_source_dependencies - in - (explicit_source_dependencies, Alist.extend dependency_acc dep) - end + let RegisteredDependency{ package_id; _ } = spec in + let explicit_source_dependencies = + match flag with + | SourceDependency -> explicit_source_dependencies |> PackageIdMap.add package_id used_as + | TestOnlyDependency -> explicit_source_dependencies + in + (explicit_source_dependencies, Alist.extend dependency_acc dep) ) (PackageIdMap.empty, Alist.empty) in let requires = Alist.to_list dependency_acc in @@ -391,23 +369,13 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla dependencies |> List.fold_left (fun (locked_dependency_acc, graph) dep -> let Dependency{ role = role_dep; used_as; _ } = dep in match role_dep with - | Role{ package_name = package_name_dep; _ } -> + | Role{ package_id = package_id_dep; _ } -> let lock_dep = match rolemap |> Output.RoleMap.find_opt role_dep |> Option.map Output.unwrap with | None | Some(DummyImpl) | Some(LocalImpl(_)) -> assert false - | Some(Impl{ - version = version_dep; - registry_hash_value = registry_hash_value_dep; - _ - }) -> - let package_id_dep = - PackageId.{ - registry_hash_value = registry_hash_value_dep; - package_name = package_name_dep; - } - in + | Some(Impl{ version = version_dep; _ }) -> Lock.{ package_id = package_id_dep; locked_version = version_dep; diff --git a/bin-saphe/packageSystemBase.ml b/bin-saphe/packageSystemBase.ml index 46b233469..c72898bcd 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/bin-saphe/packageSystemBase.ml @@ -13,6 +13,29 @@ type lock_info = { type package_name = string [@@deriving show { with_path = false }] +(* The type for names that stand for a package registry. + Names of this type are supposed to be valid + within the scope of one package config file. *) +type registry_local_name = string +[@@deriving show { with_path = false }] + +module RegistryLocalNameMap = Map.Make(String) + +type parsed_package_dependency_spec = + | ParsedRegisteredDependency of { + package_name : package_name; + registry_local_name : registry_local_name; + version_requirement : SemanticVersion.requirement; + } +[@@deriving show { with_path = false }] + +type parsed_package_dependency = + | ParsedPackageDependency of { + used_as : string; + spec : parsed_package_dependency_spec; + } +[@@deriving show { with_path = false }] + module PackageId = struct type t = { registry_hash_value : string; @@ -30,14 +53,6 @@ module PackageIdMap = Map.Make(PackageId) module PackageIdSet = Set.Make(PackageId) -(* The type for names that stand for a package registry. - Names of this type are supposed to be valid - within the scope of one package config file. *) -type registry_local_name = string -[@@deriving show { with_path = false }] - -module RegistryLocalNameMap = Map.Make(String) - (* The type for MD5 hash values made of a URL and a branch name. *) type registry_hash_value = string [@@deriving show { with_path = false }] @@ -65,8 +80,7 @@ module LockMap = Map.Make(Lock) type package_dependency_spec = | RegisteredDependency of { - package_name : package_name; - registry_local_name : registry_local_name; + package_id : PackageId.t; version_requirement : SemanticVersion.requirement; } [@@deriving show { with_path = false }] @@ -102,14 +116,9 @@ type implementation_record = dependencies : package_dependency_in_registry list; } -type registry_spec = { - packages_in_registry : (implementation_record list) PackageIdMap.t; - registry_hash_value : registry_hash_value; -} - type package_context = { - language_version : SemanticVersion.t; - registries : registry_spec RegistryLocalNameMap.t; + language_version : SemanticVersion.t; + package_id_to_impl_list : (implementation_record list) PackageIdMap.t; } type locked_dependency = { diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml index 88da146a7..15dba4862 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml @@ -19,8 +19,9 @@ contents: - "./test" dependencies: [] test_dependencies: - - name: "testing" + - used_as: "Testing" spec: type: "registered" registry: "default" + name: "testing" requirement: "^0.0.1" From 08e415e0a8195984e095fd78d09b5e5c0374a65c Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 4 Jan 2024 01:53:07 +0900 Subject: [PATCH 029/381] slight fix of `Makefile` --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2681c708b..0e8c837dc 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ test: test-packages: ./check-packages.sh -install: $(SATYSFI) +install: $(SATYSFI) $(SAPHE) mkdir -p $(BINDIR) install $(SATYSFI) $(BINDIR) install $(SAPHE) $(BINDIR) From 66602d6d768b961bcfc4394be2d3f9f1d87cf1fd Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 00:17:40 +0900 Subject: [PATCH 030/381] separate `sapheMain` from `saphe` --- bin-saphe/dune | 9 ++-- bin-saphe/saphe.ml | 6 +-- bin/dune | 7 ++- .../canonicalRegistryUrl.ml | 0 {bin-saphe => src-saphe}/configError.ml | 0 {bin-saphe => src-saphe}/configUtil.ml | 0 {bin-saphe => src-saphe}/constant.ml | 0 {bin-saphe => src-saphe}/depsConfig.ml | 0 src-saphe/dune | 11 +++++ {bin-saphe => src-saphe}/envelopeConfig.ml | 0 {bin-saphe => src-saphe}/lockConfig.ml | 0 {bin-saphe => src-saphe}/lockFetcher.ml | 0 {bin-saphe => src-saphe}/lockFetcher.mli | 0 {bin-saphe => src-saphe}/logging.ml | 0 {bin-saphe => src-saphe}/logging.mli | 0 {bin-saphe => src-saphe}/packageConfig.ml | 0 {bin-saphe => src-saphe}/packageConfig.mli | 0 .../packageConstraintSolver.ml | 0 .../packageConstraintSolver.mli | 0 .../packageRegistryConfig.ml | 0 .../packageRegistryFetcher.ml | 0 {bin-saphe => src-saphe}/packageSystemBase.ml | 1 + bin-saphe/main.ml => src-saphe/sapheMain.ml | 0 {bin-saphe => src-saphe}/satysfiCommand.ml | 0 {bin-saphe => src-saphe}/shellCommand.ml | 0 {bin-saphe => src-saphe}/shellCommand.mli | 0 {bin-saphe => src-saphe}/storeRootConfig.ml | 0 src/dune | 47 +++++++++---------- 28 files changed, 44 insertions(+), 37 deletions(-) rename {bin-saphe => src-saphe}/canonicalRegistryUrl.ml (100%) rename {bin-saphe => src-saphe}/configError.ml (100%) rename {bin-saphe => src-saphe}/configUtil.ml (100%) rename {bin-saphe => src-saphe}/constant.ml (100%) rename {bin-saphe => src-saphe}/depsConfig.ml (100%) create mode 100644 src-saphe/dune rename {bin-saphe => src-saphe}/envelopeConfig.ml (100%) rename {bin-saphe => src-saphe}/lockConfig.ml (100%) rename {bin-saphe => src-saphe}/lockFetcher.ml (100%) rename {bin-saphe => src-saphe}/lockFetcher.mli (100%) rename {bin-saphe => src-saphe}/logging.ml (100%) rename {bin-saphe => src-saphe}/logging.mli (100%) rename {bin-saphe => src-saphe}/packageConfig.ml (100%) rename {bin-saphe => src-saphe}/packageConfig.mli (100%) rename {bin-saphe => src-saphe}/packageConstraintSolver.ml (100%) rename {bin-saphe => src-saphe}/packageConstraintSolver.mli (100%) rename {bin-saphe => src-saphe}/packageRegistryConfig.ml (100%) rename {bin-saphe => src-saphe}/packageRegistryFetcher.ml (100%) rename {bin-saphe => src-saphe}/packageSystemBase.ml (99%) rename bin-saphe/main.ml => src-saphe/sapheMain.ml (100%) rename {bin-saphe => src-saphe}/satysfiCommand.ml (100%) rename {bin-saphe => src-saphe}/shellCommand.ml (100%) rename {bin-saphe => src-saphe}/shellCommand.mli (100%) rename {bin-saphe => src-saphe}/storeRootConfig.ml (100%) diff --git a/bin-saphe/dune b/bin-saphe/dune index e64a474b5..bb85f1589 100644 --- a/bin-saphe/dune +++ b/bin-saphe/dune @@ -3,9 +3,6 @@ (public_name saphe) (package saphe) (libraries - 0install-solver - cmdliner - satysfi-util - uri) - (preprocess no_preprocessing) -) + sapheMain + cmdliner) + (preprocess no_preprocessing)) diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml index 8e78e6169..f524c0fb8 100644 --- a/bin-saphe/saphe.ml +++ b/bin-saphe/saphe.ml @@ -1,6 +1,6 @@ let solve fpath_in = - Main.solve ~fpath_in + SapheMain.solve ~fpath_in let build @@ -17,7 +17,7 @@ let build type_check_only bytecomp = - Main.build + SapheMain.build ~fpath_in ~fpath_out_opt ~text_mode_formats_str_opt @@ -149,7 +149,7 @@ let () = Term.(ret (const (`Error(true, "No subcommand specified.")))) in let info : Cmd.info = - Cmd.info ~version:Main.version "saphe" + Cmd.info ~version:SapheMain.version "saphe" in let subcommands = [ diff --git a/bin/dune b/bin/dune index 836002a23..a2da581b9 100644 --- a/bin/dune +++ b/bin/dune @@ -3,7 +3,6 @@ (public_name satysfi) (package satysfi) (libraries - main - cmdliner) - (preprocess no_preprocessing) -) + cmdliner + main) + (preprocess no_preprocessing)) diff --git a/bin-saphe/canonicalRegistryUrl.ml b/src-saphe/canonicalRegistryUrl.ml similarity index 100% rename from bin-saphe/canonicalRegistryUrl.ml rename to src-saphe/canonicalRegistryUrl.ml diff --git a/bin-saphe/configError.ml b/src-saphe/configError.ml similarity index 100% rename from bin-saphe/configError.ml rename to src-saphe/configError.ml diff --git a/bin-saphe/configUtil.ml b/src-saphe/configUtil.ml similarity index 100% rename from bin-saphe/configUtil.ml rename to src-saphe/configUtil.ml diff --git a/bin-saphe/constant.ml b/src-saphe/constant.ml similarity index 100% rename from bin-saphe/constant.ml rename to src-saphe/constant.ml diff --git a/bin-saphe/depsConfig.ml b/src-saphe/depsConfig.ml similarity index 100% rename from bin-saphe/depsConfig.ml rename to src-saphe/depsConfig.ml diff --git a/src-saphe/dune b/src-saphe/dune new file mode 100644 index 000000000..62c480d5e --- /dev/null +++ b/src-saphe/dune @@ -0,0 +1,11 @@ +(library + (name sapheMain) + (public_name saphe) + (flags (:standard -bin-annot -thread -safe-string)) + (libraries + 0install-solver + cmdliner + satysfi-util + uri) + (preprocess + (pps ppx_deriving.show))) diff --git a/bin-saphe/envelopeConfig.ml b/src-saphe/envelopeConfig.ml similarity index 100% rename from bin-saphe/envelopeConfig.ml rename to src-saphe/envelopeConfig.ml diff --git a/bin-saphe/lockConfig.ml b/src-saphe/lockConfig.ml similarity index 100% rename from bin-saphe/lockConfig.ml rename to src-saphe/lockConfig.ml diff --git a/bin-saphe/lockFetcher.ml b/src-saphe/lockFetcher.ml similarity index 100% rename from bin-saphe/lockFetcher.ml rename to src-saphe/lockFetcher.ml diff --git a/bin-saphe/lockFetcher.mli b/src-saphe/lockFetcher.mli similarity index 100% rename from bin-saphe/lockFetcher.mli rename to src-saphe/lockFetcher.mli diff --git a/bin-saphe/logging.ml b/src-saphe/logging.ml similarity index 100% rename from bin-saphe/logging.ml rename to src-saphe/logging.ml diff --git a/bin-saphe/logging.mli b/src-saphe/logging.mli similarity index 100% rename from bin-saphe/logging.mli rename to src-saphe/logging.mli diff --git a/bin-saphe/packageConfig.ml b/src-saphe/packageConfig.ml similarity index 100% rename from bin-saphe/packageConfig.ml rename to src-saphe/packageConfig.ml diff --git a/bin-saphe/packageConfig.mli b/src-saphe/packageConfig.mli similarity index 100% rename from bin-saphe/packageConfig.mli rename to src-saphe/packageConfig.mli diff --git a/bin-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml similarity index 100% rename from bin-saphe/packageConstraintSolver.ml rename to src-saphe/packageConstraintSolver.ml diff --git a/bin-saphe/packageConstraintSolver.mli b/src-saphe/packageConstraintSolver.mli similarity index 100% rename from bin-saphe/packageConstraintSolver.mli rename to src-saphe/packageConstraintSolver.mli diff --git a/bin-saphe/packageRegistryConfig.ml b/src-saphe/packageRegistryConfig.ml similarity index 100% rename from bin-saphe/packageRegistryConfig.ml rename to src-saphe/packageRegistryConfig.ml diff --git a/bin-saphe/packageRegistryFetcher.ml b/src-saphe/packageRegistryFetcher.ml similarity index 100% rename from bin-saphe/packageRegistryFetcher.ml rename to src-saphe/packageRegistryFetcher.ml diff --git a/bin-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml similarity index 99% rename from bin-saphe/packageSystemBase.ml rename to src-saphe/packageSystemBase.ml index c72898bcd..197f3ed50 100644 --- a/bin-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -125,6 +125,7 @@ type locked_dependency = { depended_lock : Lock.t; dependency_used_as : string; } +[@@deriving show { with_path = false }] type package_solution = { lock : Lock.t; diff --git a/bin-saphe/main.ml b/src-saphe/sapheMain.ml similarity index 100% rename from bin-saphe/main.ml rename to src-saphe/sapheMain.ml diff --git a/bin-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml similarity index 100% rename from bin-saphe/satysfiCommand.ml rename to src-saphe/satysfiCommand.ml diff --git a/bin-saphe/shellCommand.ml b/src-saphe/shellCommand.ml similarity index 100% rename from bin-saphe/shellCommand.ml rename to src-saphe/shellCommand.ml diff --git a/bin-saphe/shellCommand.mli b/src-saphe/shellCommand.mli similarity index 100% rename from bin-saphe/shellCommand.mli rename to src-saphe/shellCommand.mli diff --git a/bin-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml similarity index 100% rename from bin-saphe/storeRootConfig.ml rename to src-saphe/storeRootConfig.ml diff --git a/src/dune b/src/dune index fb2be2d05..683b93eb8 100644 --- a/src/dune +++ b/src/dune @@ -2,30 +2,29 @@ (name main) (public_name satysfi) (flags (:standard -bin-annot -thread -safe-string)) - (libraries str - batteries - camlimages - camlimages.jpeg - camlimages.png - camlpdf - core_kernel - core_kernel.pairing_heap - core_unix - menhirLib - otfed - uutf - yojson-with-position - omd - ocamlgraph - yaml - 0install-solver - semver2 - uri - satysfi-util) - (preprocess (pps - ppx_deriving.show - )) - ) + (libraries + 0install-solver + batteries + camlimages + camlimages.jpeg + camlimages.png + camlpdf + core_kernel + core_kernel.pairing_heap + core_unix + menhirLib + ocamlgraph + omd + otfed + satysfi-util + semver2 + str + uutf + yaml + yojson-with-position + uri) + (preprocess + (pps ppx_deriving.show))) ;; dune requires all the .ml/.mli files to be in the same directory as the jbuild. ;; https://github.com/ocaml/dune/issues/109 From 7bc8972d2ced04aa8e68b1afdcddefb5e569407d Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 00:54:11 +0900 Subject: [PATCH 031/381] fix tests --- test/common/commonTest.ml | 6 + test/{misc => common}/dependencyGraphTest.ml | 10 +- test/common/dune | 5 + test/misc/dune | 5 - test/misc/miscTest.ml | 7 - test/misc/packageConstraintSolverTest.ml | 146 ------------------- 6 files changed, 13 insertions(+), 166 deletions(-) create mode 100644 test/common/commonTest.ml rename test/{misc => common}/dependencyGraphTest.ml (97%) create mode 100644 test/common/dune delete mode 100644 test/misc/dune delete mode 100644 test/misc/miscTest.ml delete mode 100644 test/misc/packageConstraintSolverTest.ml diff --git a/test/common/commonTest.ml b/test/common/commonTest.ml new file mode 100644 index 000000000..609116181 --- /dev/null +++ b/test/common/commonTest.ml @@ -0,0 +1,6 @@ + +let () = + let open Alcotest in + run "SATySFi-Util Test" [ + ("DependencyGraph", DependencyGraphTest.test_cases); + ] diff --git a/test/misc/dependencyGraphTest.ml b/test/common/dependencyGraphTest.ml similarity index 97% rename from test/misc/dependencyGraphTest.ml rename to test/common/dependencyGraphTest.ml index 238d5c9d6..32e0457c2 100644 --- a/test/misc/dependencyGraphTest.ml +++ b/test/common/dependencyGraphTest.ml @@ -1,12 +1,5 @@ -open Main__Types -module ResultMonad = Main__ResultMonad -module TupleList = Main__TupleList - - -module DependencyGraph = Main__DependencyGraph - - +open MyUtil module DG = DependencyGraph.Make(Int) @@ -41,6 +34,7 @@ let pp_vertex ppf vertex = let pp_vertex_set ppf vertices = + let pp_sep ppf () = Format.fprintf ppf ",@ " in Format.fprintf ppf "%a" (Format.pp_print_list ~pp_sep pp_vertex) (DG.VertexSet.elements vertices) diff --git a/test/common/dune b/test/common/dune new file mode 100644 index 000000000..9b43c5c71 --- /dev/null +++ b/test/common/dune @@ -0,0 +1,5 @@ +(test + (name commonTest) + (libraries + satysfi-util + alcotest)) diff --git a/test/misc/dune b/test/misc/dune deleted file mode 100644 index f8cc0ce1f..000000000 --- a/test/misc/dune +++ /dev/null @@ -1,5 +0,0 @@ -(test - (name miscTest) - (libraries - main - alcotest)) diff --git a/test/misc/miscTest.ml b/test/misc/miscTest.ml deleted file mode 100644 index 083e3071e..000000000 --- a/test/misc/miscTest.ml +++ /dev/null @@ -1,7 +0,0 @@ - -let () = - let open Alcotest in - run "SATySFi Misc" [ - ("DependencyGraph", DependencyGraphTest.test_cases); - ("PackageConstraintSolver", PackageConstraintSolverTest.test_cases); - ] diff --git a/test/misc/packageConstraintSolverTest.ml b/test/misc/packageConstraintSolverTest.ml deleted file mode 100644 index cef28dbba..000000000 --- a/test/misc/packageConstraintSolverTest.ml +++ /dev/null @@ -1,146 +0,0 @@ - -open Main__PackageSystemBase -module SemanticVersion = Main__SemanticVersion -module Constant = Main__Constant -module PackageConstraintSolver = Main__PackageConstraintSolver - - -let registry_hash_value = - "c0bebeef4423" - - -let make_version (s_version : string) : SemanticVersion.t = - match SemanticVersion.parse s_version with - | Some(semver) -> semver - | None -> assert false - - -let make_dependency (package_name : package_name) (s_version : string) : package_dependency = - PackageDependency{ - package_name; - spec = - RegisteredDependency{ - registry_local_name = "default"; - version_requirement = SemanticVersion.CompatibleWith(make_version s_version); - }; - } - - -let make_dependency_in_registry (package_name : package_name) (s_version : string) : package_dependency_in_registry = - PackageDependencyInRegistry{ - package_name; - version_requirement = SemanticVersion.CompatibleWith(make_version s_version); - } - - -let make_impl (s_version : string) (deps : package_dependency_in_registry list) : implementation_record = - ImplRecord{ - version = make_version s_version; - source = NoSource; - language_requirement = SemanticVersion.CompatibleWith(Constant.current_language_version); - dependencies = deps; - } - - -let make_lock (package_name : package_name) (s_version : string) : Lock.t = - Lock.{ - package_name; - registry_hash_value = registry_hash_value; - locked_version = make_version s_version; - } - - -let make_solution ?(test_only : bool = false) (package_name : package_name) (s_version : string) (deps : Lock.t list) : package_solution = - { - lock = make_lock package_name s_version; - locked_source = NoSource; - locked_dependencies = deps; - used_in_test_only = test_only; - } - - -let check package_context dependencies_with_flags expected = - let got = PackageConstraintSolver.solve package_context dependencies_with_flags in - Alcotest.(check (option (list (of_pp pp_package_solution)))) "solutions" expected got - - -let solve_test_1 () = - let package_context = - let packages_in_registry = - PackageNameMap.of_seq @@ List.to_seq [ - ("foo", [ - make_impl "1.0.0" []; - make_impl "2.0.0" []; - ]); - ("bar", [ - make_impl "1.0.0" [ make_dependency_in_registry "foo" "2.0.0" ]; - ]); - ("qux", [ - make_impl "1.0.0" [ make_dependency_in_registry "foo" "1.0.0" ]; - ]); - ] - in - let registry_spec = { packages_in_registry; registry_hash_value } in - { registries = RegistryLocalNameMap.singleton "default" registry_spec } - in - let dependencies_with_flags = - [ - (SourceDependency, make_dependency "bar" "1.0.0"); - (SourceDependency, make_dependency "qux" "1.0.0"); - ] - in - let expected = - Some([ - make_solution "bar" "1.0.0" [ - make_lock "foo" "2.0.0"; - ]; - make_solution "foo" "1.0.0" []; - make_solution "foo" "2.0.0" []; - make_solution "qux" "1.0.0" [ - make_lock "foo" "1.0.0"; - ]; - ]) - in - check package_context dependencies_with_flags expected - - -let solve_test_2 () = - let package_context = - let packages_in_registry = - PackageNameMap.of_seq @@ List.to_seq [ - ("foo", [ - make_impl "1.0.0" []; - make_impl "1.1.0" []; - ]); - ("bar", [ - make_impl "1.0.0" [ make_dependency_in_registry "foo" "1.1.0" ]; - ]); - ("qux", [ - make_impl "1.0.0" [ make_dependency_in_registry "foo" "1.0.0" ]; - ]); - ] - in - let registry_spec = { packages_in_registry; registry_hash_value } in - { registries = RegistryLocalNameMap.singleton "default" registry_spec } - in - let dependencies_with_flags = - [ - (SourceDependency, make_dependency "bar" "1.0.0"); - (SourceDependency, make_dependency "qux" "1.0.0"); - ] - in - let expected = - Some([ - make_solution "bar" "1.0.0" [ make_lock "foo" "1.1.0" ]; - make_solution "foo" "1.1.0" []; - make_solution "qux" "1.0.0" [ make_lock "foo" "1.1.0" ]; - ]) - in - check package_context dependencies_with_flags expected - - -let test_cases = - Alcotest.[ - test_case "solve 1" `Quick solve_test_1; - test_case "solve 2" `Quick solve_test_2; - ] From b25c574b58d20d85b6b9c09b4afadd0848e14540 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 04:06:33 +0900 Subject: [PATCH 032/381] modify how to represent direct sums in YAML --- src-saphe/configError.ml | 17 ++++++ src-saphe/configUtil.ml | 12 ++--- src-saphe/lockConfig.ml | 59 +++++++++++---------- src-saphe/lockFetcher.ml | 4 +- src-saphe/packageConfig.ml | 84 ++++++++---------------------- src-saphe/packageConfig.mli | 16 ++---- src-saphe/packageRegistryConfig.ml | 5 +- src-saphe/packageSystemBase.ml | 48 ++++++++++++++++- src-saphe/sapheMain.ml | 40 +++++++------- src-saphe/storeRootConfig.ml | 17 +++--- src-util/yamlDecoder.ml | 48 +++++++++++++---- src-util/yamlDecoder.mli | 8 ++- 12 files changed, 196 insertions(+), 162 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 6cea97fd1..db4b55585 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -11,7 +11,19 @@ type yaml_error = | NotABool of YamlDecoder.context | NotAnArray of YamlDecoder.context | NotAnObject of YamlDecoder.context + | BranchNotFound of { + context : YamlDecoder.context; + expected_tags : string list; + got_tags : string list; + } + | MoreThanOneBranchFound of { + context : YamlDecoder.context; + expected_tags : string list; + got_tags : string list; + } +(* | UnexpectedTag of YamlDecoder.context * string +*) | BreaksVersionRequirement of YamlDecoder.context * SemanticVersion.requirement | NotASemanticVersion of YamlDecoder.context * string | NotAVersionRequirement of YamlDecoder.context * string @@ -27,6 +39,7 @@ type yaml_error = prefix : char; string : string; } +[@@deriving show { with_path = false }] module YamlError = struct type t = yaml_error @@ -37,6 +50,10 @@ module YamlError = struct let not_a_bool context = NotABool(context) let not_an_array context = NotAnArray(context) let not_an_object context = NotAnObject(context) + let branch_not_found context expected_tags got_tags = + BranchNotFound{ context; expected_tags; got_tags } + let more_than_one_branch_found context expected_tags got_tags = + MoreThanOneBranchFound{ context; expected_tags; got_tags } end type config_error = diff --git a/src-saphe/configUtil.ml b/src-saphe/configUtil.ml index 7c66998ee..599a62e2a 100644 --- a/src-saphe/configUtil.ml +++ b/src-saphe/configUtil.ml @@ -50,7 +50,7 @@ let version_checker (version : SemanticVersion.t) : unit ConfigDecoder.t = let dependency_spec_decoder : parsed_package_dependency_spec ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "registered" ==> begin get "registry" string >>= fun registry_local_name -> get "name" package_name_decoder >>= fun package_name -> @@ -62,30 +62,24 @@ let dependency_spec_decoder : parsed_package_dependency_spec ConfigDecoder.t = } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let dependency_decoder : parsed_package_dependency ConfigDecoder.t = let open ConfigDecoder in get "used_as" string >>= fun used_as -> - get "spec" dependency_spec_decoder >>= fun spec -> + dependency_spec_decoder >>= fun spec -> succeed @@ ParsedPackageDependency{ used_as; spec } let registry_remote_decoder : registry_remote ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "git" ==> begin get "url" string >>= fun url -> get "branch" string >>= fun branch -> succeed @@ GitRegistry{ url; branch } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let name_decoder : string ConfigDecoder.t = diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index 1ccd3988b..f42be0120 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -35,7 +35,7 @@ type t = { let lock_contents_decoder : lock_contents ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "registered" ==> begin get "registry_hash_value" string >>= fun registry_hash_value -> get "package_name" package_name_decoder >>= fun package_name -> @@ -43,20 +43,18 @@ let lock_contents_decoder : lock_contents ConfigDecoder.t = succeed @@ RegisteredLock{ registry_hash_value; package_name; version } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) -let lock_contents_encoder (contents : lock_contents) : Yaml.value = +let lock_contents_encoder (contents : lock_contents) : (string * Yaml.value) list = match contents with | RegisteredLock{ registry_hash_value; package_name; version } -> - `O([ - ("type", `String("registered")); - ("registry_hash_value", `String(registry_hash_value)); - ("package_name", `String(package_name)); - ("version", `String(SemanticVersion.to_string version)); - ]) + [ + ("registered", `O([ + ("registry_hash_value", `String(registry_hash_value)); + ("package_name", `String(package_name)); + ("version", `String(SemanticVersion.to_string version)); + ])); + ] let lock_dependency_decoder : lock_dependency ConfigDecoder.t = @@ -66,29 +64,32 @@ let lock_dependency_decoder : lock_dependency ConfigDecoder.t = succeed { depended_lock_name; used_as } +let lock_dependency_encoder (dep : lock_dependency) : Yaml.value = + `O([ + ("name", `String(dep.depended_lock_name)); + ("used_as", `String(dep.used_as)); + ]) + + let lock_decoder : locked_package ConfigDecoder.t = let open ConfigDecoder in get "name" string >>= fun lock_name -> - get "contents" lock_contents_decoder >>= fun lock_contents -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun lock_dependencies -> get_or_else "test_only" bool false >>= fun test_only_lock -> + lock_contents_decoder >>= fun lock_contents -> succeed { lock_name; lock_contents; lock_dependencies; test_only_lock } -let lock_dependency_encoder (dep : lock_dependency) : Yaml.value = - `O([ - ("name", `String(dep.depended_lock_name)); - ("used_as", `String(dep.used_as)); - ]) - - let lock_encoder (lock : locked_package) : Yaml.value = - `O([ - ("name", `String(lock.lock_name)); - ("contents", lock_contents_encoder lock.lock_contents); - ("dependencies", `A(lock.lock_dependencies |> List.map lock_dependency_encoder)); - ("test_only", `Bool(lock.test_only_lock)); - ]) + let fields_common = + [ + ("name", `String(lock.lock_name)); + ("dependencies", `A(lock.lock_dependencies |> List.map lock_dependency_encoder)); + ("test_only", `Bool(lock.test_only_lock)); + ] + in + let fields_contents = lock_contents_encoder lock.lock_contents in + `O(List.append fields_common fields_contents) let lock_config_decoder : t ConfigDecoder.t = @@ -96,15 +97,13 @@ let lock_config_decoder : t ConfigDecoder.t = get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun explicit_dependencies -> - succeed { - locked_packages; - explicit_dependencies; - } + succeed { locked_packages; explicit_dependencies } let lock_config_encoder (lock_config : t) : Yaml.value = + let requirement = SemanticVersion.CompatibleWith(Constant.current_ecosystem_version) in `O([ - ("ecosystem", `String(SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))))); + ("ecosystem", `String(SemanticVersion.requirement_to_string requirement)); ("locks", `A(lock_config.locked_packages |> List.map lock_encoder)); ("dependencies", `A(lock_config.explicit_dependencies |> List.map lock_dependency_encoder)); ]) diff --git a/src-saphe/lockFetcher.ml b/src-saphe/lockFetcher.ml index ba304ff84..06c6a1f08 100644 --- a/src-saphe/lockFetcher.ml +++ b/src-saphe/lockFetcher.ml @@ -124,11 +124,11 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri in (* Fetches external sources according to the package config: *) - let* PackageConfig.{ external_sources; _ } = + let* PackageConfig.{ external_resources; _ } = PackageConfig.load (Constant.library_package_config_path absdir_lock) in let* () = - external_sources |> foldM (fun () (name, external_source) -> + external_resources |> foldM (fun () (name, external_source) -> match external_source with | ExternalZip{ url; checksum; extractions } -> diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 02d123119..89bb50113 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -7,43 +7,6 @@ open PackageSystemBase type 'a ok = ('a, config_error) result -type relative_path = string - -type font_file_description = { - font_file_path : relative_path; - font_file_contents : font_file_contents; -} - -type package_conversion_spec = unit (* TODO *) -(* - | MarkdownConversion of MarkdownParser.command_record -*) - -type parsed_package_contents = - | ParsedLibrary of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - dependencies : parsed_package_dependency list; - test_dependencies : parsed_package_dependency list; - conversion_specs : package_conversion_spec list; - } - | ParsedFont of { - main_module_name : string; - font_file_descriptions : font_file_description list; - } - -module Internal = struct - type t = { - language_requirement : SemanticVersion.requirement; - package_name : package_name; - package_authors : string list; - external_sources : (string * external_source) list; - package_contents : parsed_package_contents; - registry_specs : (registry_local_name * registry_remote) list; - } -end - type package_contents = | Library of { main_module_name : string; @@ -62,7 +25,7 @@ type t = { language_requirement : SemanticVersion.requirement; package_name : package_name; package_authors : string list; - external_sources : (string * external_source) list; + external_resources : (string * external_resource) list; package_contents : package_contents; registry_remotes : registry_remote list; } @@ -77,7 +40,7 @@ let font_spec_decoder : font_spec ConfigDecoder.t = let font_file_contents_decoder : font_file_contents ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "opentype_single" ==> begin get "contents" font_spec_decoder >>= fun font_spec -> succeed @@ OpentypeSingle(font_spec) @@ -87,9 +50,6 @@ let font_file_contents_decoder : font_file_contents ConfigDecoder.t = succeed @@ OpentypeCollection(font_specs) end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let font_file_description_decoder : font_file_description ConfigDecoder.t = @@ -212,7 +172,7 @@ let conversion_spec_decoder = let contents_decoder : parsed_package_contents ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "library" ==> begin get "main_module" string >>= fun main_module_name -> get "source_directories" (list string) >>= fun source_directories -> @@ -231,22 +191,19 @@ let contents_decoder : parsed_package_contents ConfigDecoder.t = end; "font" ==> begin get "main_module" string >>= fun main_module_name -> - get "elements" (list font_file_description_decoder) >>= fun font_file_descriptions -> + get "files" (list font_file_description_decoder) >>= fun font_file_descriptions -> succeed @@ ParsedFont { main_module_name; font_file_descriptions; } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let registry_spec_decoder = let open ConfigDecoder in get "name" string >>= fun registry_local_name -> - get "remote" registry_remote_decoder >>= fun registry_remote -> + registry_remote_decoder >>= fun registry_remote -> succeed (registry_local_name, registry_remote) @@ -257,9 +214,9 @@ let extraction_decoder : extraction ConfigDecoder.t = succeed { extracted_from; extracted_to } -let external_source_decoder : (string * external_source) ConfigDecoder.t = +let external_resource_decoder : (string * external_resource) ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "zip" ==> begin get "name" name_decoder >>= fun name -> get "url" string >>= fun url -> @@ -268,25 +225,22 @@ let external_source_decoder : (string * external_source) ConfigDecoder.t = succeed (name, ExternalZip{ url; checksum; extractions }) end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) -let config_decoder : Internal.t ConfigDecoder.t = +let config_decoder : parsed_package_config ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "language" requirement_decoder >>= fun language_requirement -> get "name" package_name_decoder >>= fun package_name -> get "authors" (list string) >>= fun package_authors -> get_or_else "registries" (list registry_spec_decoder) [] >>= fun registry_specs -> - get_or_else "external_sources" (list external_source_decoder) [] >>= fun external_sources -> + get_or_else "external_resources" (list external_resource_decoder) [] >>= fun external_resources -> get "contents" contents_decoder >>= fun package_contents -> - succeed @@ Internal.{ + succeed @@ ParsedPackageConfig{ language_requirement; package_name; package_authors; - external_sources; + external_resources; package_contents; registry_specs; } @@ -351,17 +305,17 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( } -let validate (package_config : Internal.t) : t ok = +let validate (p_package_config : parsed_package_config) : t ok = let open ResultMonad in let - Internal.{ + ParsedPackageConfig{ language_requirement; package_name; package_authors; - external_sources; + external_resources; package_contents; registry_specs; - } = package_config + } = p_package_config in let* (localmap, registry_remote_acc) = registry_specs |> List.fold_left (fun res (registry_local_name, registry_remote) -> @@ -381,12 +335,16 @@ let validate (package_config : Internal.t) : t ok = language_requirement; package_name; package_authors; - external_sources; + external_resources; package_contents; registry_remotes = Alist.to_list registry_remote_acc; } +let parse (s : string) : (parsed_package_config, yaml_error) result = + ConfigDecoder.run config_decoder s + + let load (abspath_config : abs_path) : t ok = let open ResultMonad in let* s = @@ -394,7 +352,7 @@ let load (abspath_config : abs_path) : t ok = |> Result.map_error (fun _ -> PackageConfigNotFound(abspath_config)) in let* internal = - ConfigDecoder.run config_decoder s + parse s |> Result.map_error (fun e -> PackageConfigError(abspath_config, e)) in validate internal diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index ea4d495b0..d2550f65b 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -3,18 +3,6 @@ open MyUtil open ConfigError open PackageSystemBase -type relative_path = string - -type font_file_description = { - font_file_path : relative_path; - font_file_contents : font_file_contents; -} - -type package_conversion_spec = unit (* TODO *) -(* - | MarkdownConversion of MarkdownParser.command_record -*) - type package_contents = | Library of { main_module_name : string; @@ -33,9 +21,11 @@ type t = { language_requirement : SemanticVersion.requirement; package_name : package_name; package_authors : string list; - external_sources : (string * external_source) list; + external_resources : (string * external_resource) list; package_contents : package_contents; registry_remotes : registry_remote list; } +val parse : string -> (parsed_package_config, yaml_error) result + val load : abs_path -> (t, config_error) result diff --git a/src-saphe/packageRegistryConfig.ml b/src-saphe/packageRegistryConfig.ml index e15f1a978..c7ec16b84 100644 --- a/src-saphe/packageRegistryConfig.ml +++ b/src-saphe/packageRegistryConfig.ml @@ -14,16 +14,13 @@ type t = { let source_decoder : implementation_source ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "tar_gzip" ==> begin get "url" string >>= fun url -> get "checksum" string >>= fun checksum -> succeed @@ TarGzip{ url; checksum } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let dependency_in_registry_config_decoder = diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 197f3ed50..d5d3139f3 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -1,7 +1,11 @@ open MyUtil -type lock_name = string [@@deriving show] +type relative_path = string +[@@deriving show] + +type lock_name = string +[@@deriving show] type lock_info = { lock_name : lock_name; @@ -36,6 +40,12 @@ type parsed_package_dependency = } [@@deriving show { with_path = false }] +type package_conversion_spec = unit (* TODO *) +(* + | MarkdownConversion of MarkdownParser.command_record +*) +[@@deriving show { with_path = false }] + module PackageId = struct type t = { registry_hash_value : string; @@ -156,18 +166,21 @@ type registry_remote = url : string; branch : string; } +[@@deriving show { with_path = false }] type extraction = { extracted_from : string; extracted_to : string; } +[@@deriving show { with_path = false }] -type external_source = +type external_resource = | ExternalZip of { url : string; checksum : string; extractions : extraction list; } +[@@deriving show { with_path = false }] type font_spec = { font_item_name : string; @@ -179,3 +192,34 @@ type font_file_contents = | OpentypeSingle of font_spec | OpentypeCollection of font_spec list [@@deriving show] + +type font_file_description = { + font_file_path : relative_path; + font_file_contents : font_file_contents; +} +[@@deriving show { with_path = false }] + +type parsed_package_contents = + | ParsedLibrary of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : parsed_package_dependency list; + test_dependencies : parsed_package_dependency list; + conversion_specs : package_conversion_spec list; + } + | ParsedFont of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } +[@@deriving show { with_path = false }] + +type parsed_package_config = ParsedPackageConfig of { + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_authors : string list; + external_resources : (string * external_resource) list; + package_contents : parsed_package_contents; + registry_specs : (registry_local_name * registry_remote) list; +} +[@@deriving show { with_path = false }] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index c7cc2a115..ad5511476 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -73,9 +73,6 @@ let make_yaml_error_lines : yaml_error -> line list = function | NotAnObject(yctx) -> [ NormalLine(Printf.sprintf "not an object%s" (show_yaml_context yctx)) ] - | UnexpectedTag(yctx, tag) -> - [ NormalLine(Printf.sprintf "unexpected type tag '%s'%s" tag (show_yaml_context yctx)) ] - | BreaksVersionRequirement(yctx, requirement) -> [ NormalLine(Printf.sprintf "breaks the requrement '%s'%s" (SemanticVersion.requirement_to_string requirement)(show_yaml_context yctx)) ] @@ -100,6 +97,25 @@ let make_yaml_error_lines : yaml_error -> line list = function | NotACommand{ context = yctx; prefix = _; string = s } -> [ NormalLine(Printf.sprintf "not a command: '%s'%s" s (show_yaml_context yctx)) ] + | BranchNotFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "expected tags not found; should contain exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine("but only contains:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + | MoreThanOneBranchFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "more than one expected tag found:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine("should be exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + let report_config_error = function | CannotDetermineStoreRoot{ envvar } -> @@ -498,24 +514,12 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E } -> let font_file_descriptions = descrs |> List.map (fun descr -> - let - PackageConfig.{ - font_file_path; - font_file_contents; - } = descr - in - EnvelopeConfig.{ - font_file_path; - font_file_contents; - } + let { font_file_path; font_file_contents } = descr in + EnvelopeConfig.{ font_file_path; font_file_contents } ) in EnvelopeConfig.{ - envelope_contents = - Font{ - main_module_name; - font_file_descriptions; - }; + envelope_contents = Font{ main_module_name; font_file_descriptions }; } diff --git a/src-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml index 21dd0c37f..8fce9134e 100644 --- a/src-saphe/storeRootConfig.ml +++ b/src-saphe/storeRootConfig.ml @@ -12,22 +12,18 @@ type t = { let registry_remote_decoder : registry_remote ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ + branch [ "git" ==> begin get "url" string >>= fun url -> get "branch" string >>= fun branch -> succeed @@ GitRegistry{ url; branch } end; ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) let registry_remote_encoder = function | GitRegistry{ url; branch } -> - `O[ - ("type", `String("git")); + [ ("url", `String(url)); ("branch", `String(branch)); ] @@ -36,15 +32,14 @@ let registry_remote_encoder = function let registry_spec_decoder : (registry_hash_value * registry_remote) ConfigDecoder.t = let open ConfigDecoder in get "hash_value" string >>= fun registry_hash_value -> - get "remote" registry_remote_decoder >>= fun registry_remote -> + registry_remote_decoder >>= fun registry_remote -> succeed (registry_hash_value, registry_remote) let registry_spec_encoder (registry_hash_value, registry_remote) = - `O[ - ("hash_value", `String(registry_hash_value)); - ("remote", registry_remote_encoder registry_remote); - ] + let fields_common = [ ("hash_value", `String(registry_hash_value)) ] in + let fields_remote = registry_remote_encoder registry_remote in + `O(List.append fields_common fields_remote) let config_decoder : t ConfigDecoder.t = diff --git a/src-util/yamlDecoder.ml b/src-util/yamlDecoder.ml index 995b745ff..8ac44dde7 100644 --- a/src-util/yamlDecoder.ml +++ b/src-util/yamlDecoder.ml @@ -2,9 +2,11 @@ type context_element = | Field of string | Index of int +[@@deriving show { with_path = false }] type context = context_element list +[@@deriving show { with_path = false }] module type ErrorType = sig @@ -23,6 +25,10 @@ module type ErrorType = sig val not_an_array : context -> t val not_an_object : context -> t + + val branch_not_found : context -> string list -> string list -> t + + val more_than_one_branch_found : context -> string list -> string list -> t end @@ -135,15 +141,39 @@ module Make (Err : ErrorType) = struct type 'a branch = string * 'a t - let branch (field : string) (branches : ('a branch) list) ~(other : string -> 'a t) : 'a t = - get field string >>= fun tag_gotten -> - match - branches |> List.find_map (fun (tag_candidate, d) -> - if String.equal tag_gotten tag_candidate then Some(d) else None - ) - with - | None -> other tag_gotten - | Some(d) -> d + let branch (branches : ('a branch) list) : 'a t = + fun (context, yval) -> + let open ResultMonad in + match yval with + | `O(fields) -> + let hits = + fields |> List.concat_map (fun (tag_got, yval_got) -> + branches |> List.filter_map (fun (tag_expected, d) -> + if String.equal tag_got tag_expected then + Some((tag_got, yval_got, d)) + else + None + ) + ) + in + begin + match hits with + | [] -> + let expected_tags = branches |> List.map Stdlib.fst in + let got_tags = fields |> List.map Stdlib.fst in + err @@ Err.branch_not_found (Alist.to_list context) expected_tags got_tags + + | [ (tag, yval_sub, d) ] -> + d (Alist.extend context (Field(tag)), yval_sub) + + | _ -> + let expected_tags = fields |> List.map Stdlib.fst in + let got_tags = hits |> List.map (fun (tag, _, _) -> tag) in + err @@ Err.more_than_one_branch_found (Alist.to_list context) expected_tags got_tags + end + + | _ -> + err @@ Err.not_an_object (Alist.to_list context) let ( ==> ) (label : string) (d : 'a t) : 'a branch = (label, d) diff --git a/src-util/yamlDecoder.mli b/src-util/yamlDecoder.mli index 89deb6550..2628af1e0 100644 --- a/src-util/yamlDecoder.mli +++ b/src-util/yamlDecoder.mli @@ -2,9 +2,11 @@ type context_element = | Field of string | Index of int +[@@deriving show] type context = context_element list +[@@deriving show] module type ErrorType = sig type t @@ -22,6 +24,10 @@ module type ErrorType = sig val not_an_array : context -> t val not_an_object : context -> t + + val branch_not_found : context -> string list -> string list -> t + + val more_than_one_branch_found : context -> string list -> string list -> t end module Make (Err : ErrorType) : sig @@ -53,7 +59,7 @@ module Make (Err : ErrorType) : sig type 'a branch - val branch : string -> ('a branch) list -> other:(string -> 'a t) -> 'a t + val branch : ('a branch) list -> 'a t val ( ==> ) : string -> 'a t -> 'a branch From 703a0765d815820258e8b51e7845ce8b5bf0da1c Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 04:34:41 +0900 Subject: [PATCH 033/381] begin to fix integration tests --- check-packages.sh | 14 +++++--- .../saphe.lock.yaml.expected | 3 ++ .../font-junicode.0.0.1/saphe.yaml | 30 +++++++---------- .../satysfi-envelope.yaml.expected | 19 +++++++++++ .../saphe.lock.yaml.expected | 3 ++ .../font-latin-modern-math.0.0.1/saphe.yaml | 18 +++++----- .../satysfi-envelope.yaml.expected | 7 ++++ .../stdlib.0.0.1/saphe.lock.yaml.expected | 8 ++--- .../packages/stdlib/stdlib.0.0.1/saphe.yaml | 30 ++++++++--------- .../satysfi-envelope.yaml.expected | 6 ++++ .../testing.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/testing/testing.0.0.1/saphe.yaml | 10 +++--- .../satysfi-envelope.yaml.expected | 5 +++ src-saphe/envelopeConfig.ml | 33 +++++++++---------- src-saphe/packageConfig.ml | 8 ++--- 15 files changed, 115 insertions(+), 80 deletions(-) create mode 100644 lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/font-junicode/font-junicode.0.0.1/satysfi-envelope.yaml.expected create mode 100644 lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/satysfi-envelope.yaml.expected create mode 100644 lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi-envelope.yaml.expected create mode 100644 lib-satysfi/packages/testing/testing.0.0.1/satysfi-envelope.yaml.expected diff --git a/check-packages.sh b/check-packages.sh index 1bfc9fea1..e527dac0a 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -3,12 +3,18 @@ FAILED=0 for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" - saphe solve "$DIR" + ./saphe solve "$DIR" if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then - echo "TODO: build" - #saphe build "$DIR" + if diff "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected"; then + echo "(TODO: build)" + #saphe build "$DIR" + echo "* OK: $DIR" + else + echo "! FAILED (envelope config mismatch): $DIR" + FAILED=1 + fi else - echo "! FAILED: $DIR" + echo "! FAILED (lock config mismatch): $DIR" FAILED=1 fi done diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..a2658c9dc --- /dev/null +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,3 @@ +ecosystem: ^0.0.1 +locks: [] +dependencies: [] diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml index b07a194af..01f05f810 100644 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml @@ -17,26 +17,18 @@ external_sources: - from: "Junicode-BoldItalic.ttf" to: "./fonts/Junicode-BoldItalic.ttf" contents: - type: "font" - main_module: "FontJunicode" - elements: - - path: "./fonts/Junicode.ttf" - contents: - type: "opentype_single" - contents: + font: + main_module: "FontJunicode" + files: + - path: "./fonts/Junicode.ttf" + opentype_single: name: "normal" - - path: "./fonts/Junicode-Bold.ttf" - contents: - type: "opentype_single" - contents: + - path: "./fonts/Junicode-Bold.ttf" + opentype_single: name: "bold" - - path: "./fonts/Junicode-Italic.ttf" - contents: - type: "opentype_single" - contents: + - path: "./fonts/Junicode-Italic.ttf" + opentype_single: name: "italic" - - path: "./fonts/Junicode-BoldItalic.ttf" - contents: - type: "opentype_single" - contents: + - path: "./fonts/Junicode-BoldItalic.ttf" + opentype_single: name: "bold-italic" diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..9256223e0 --- /dev/null +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,19 @@ +font: + main_module: FontJunicode + files: + - path: ./fonts/Junicode.ttf + opentype_single: + name: normal + math: false + - path: ./fonts/Junicode-Bold.ttf + opentype_single: + name: bold + math: false + - path: ./fonts/Junicode-Italic.ttf + opentype_single: + name: italic + math: false + - path: ./fonts/Junicode-BoldItalic.ttf + opentype_single: + name: bold-italic + math: false diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..a2658c9dc --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,3 @@ +ecosystem: ^0.0.1 +locks: [] +dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml index f7233a324..6254922bb 100644 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml @@ -4,19 +4,17 @@ name: "font-latin-modern-math" authors: [] external_sources: - name: "latinmodern-math-1959" - type: "zip" - url: "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" - checksum: "bc82f6d4184ec0ea3ba2c0798e6be719" + zip: + url: "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" + checksum: "bc82f6d4184ec0ea3ba2c0798e6be719" extractions: - from: "latinmodern-math-1959/otf/latinmodern-math.otf" to: "./fonts/latinmodern-math.otf" contents: - type: "font" - main_module: "FontLatinModernMath" - elements: - - path: "./fonts/latinmodern-math.otf" - contents: - type: "opentype_single" - contents: + font: + main_module: "FontLatinModernMath" + files: + - path: "./fonts/latinmodern-math.otf" + opentype_single: name: "main" math: true diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..c9d1f0661 --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,7 @@ +font: + main_module: FontLatinModernMath + files: + - path: ./fonts/latinmodern-math.otf + opentype_single: + name: main + math: true diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected index 1803a8cd6..7b44ad298 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected @@ -1,10 +1,10 @@ ecosystem: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.testing.0.0.1 - contents: - type: registered + dependencies: [] + test_only: true + registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: testing version: 0.0.1 - dependencies: [] - test_only: true +dependencies: [] diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml index 15dba4862..052465c25 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml @@ -6,22 +6,20 @@ authors: - "yozu <@yasuo-ozu>" registries: - name: "default" - remote: - type: "git" + git: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - type: "library" - main_module: "Stdlib" - source_directories: - - "./src" - test_directories: - - "./test" - dependencies: [] - test_dependencies: - - used_as: "Testing" - spec: - type: "registered" - registry: "default" - name: "testing" - requirement: "^0.0.1" + library: + main_module: "Stdlib" + source_directories: + - "./src" + test_directories: + - "./test" + dependencies: [] + test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..d00660425 --- /dev/null +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,6 @@ +library: + main_module: Stdlib + source_directories: + - ./src + test_directories: + - ./test diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected index bcfd40049..a2658c9dc 100644 --- a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected @@ -1,2 +1,3 @@ ecosystem: ^0.0.1 locks: [] +dependencies: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml index c7b82c6e4..604632a59 100644 --- a/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml @@ -4,8 +4,8 @@ name: "testing" authors: - "Takashi Suwa <@gfngfn>" contents: - type: "library" - main_module: "Testing" - source_directories: - - "./src" - dependencies: [] + library: + main_module: "Testing" + source_directories: + - "./src" + dependencies: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/testing/testing.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..a01fe3965 --- /dev/null +++ b/lib-satysfi/packages/testing/testing.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Testing + source_directories: + - ./src + test_directories: [] diff --git a/src-saphe/envelopeConfig.ml b/src-saphe/envelopeConfig.ml index fbfbe1971..90f76c2b4 100644 --- a/src-saphe/envelopeConfig.ml +++ b/src-saphe/envelopeConfig.ml @@ -37,26 +37,19 @@ let font_spec_encoder (font_spec : font_spec) : Yaml.value = ]) -let font_file_contents_encoder (contents : font_file_contents) : Yaml.value = +let font_file_contents_encoder (contents : font_file_contents) : (string * Yaml.value) list = match contents with | OpentypeSingle(font_spec) -> - `O([ - ("type", `String("opentype_single")); - ("contents", font_spec_encoder font_spec) - ]) + [ ("opentype_single", font_spec_encoder font_spec) ] | OpentypeCollection(font_specs) -> - `O([ - ("type", `String("opentype_collection")); - ("contents", `A(font_specs |> List.map font_spec_encoder)); - ]) + [ ("opentype_collection", `A(font_specs |> List.map font_spec_encoder)) ] let font_file_description_encoder (descr : font_file_description) : Yaml.value = - `O([ - ("path", `String(descr.font_file_path)); - ("contents", font_file_contents_encoder descr.font_file_contents); - ]) + let fields_common = [ ("path", `String(descr.font_file_path)) ] in + let fields_contents = font_file_contents_encoder descr.font_file_contents in + `O(List.append fields_common fields_contents) let envelope_config_encoder (envelope_config : t) : Yaml.value = @@ -64,15 +57,19 @@ let envelope_config_encoder (envelope_config : t) : Yaml.value = | Library{ main_module_name; source_directories; test_directories; _ } -> (* TODO: encode conversion specs *) `O([ - ("main_module", `String(main_module_name)); - ("source_directories", `A(source_directories |> List.map (fun s -> `String(s)))); - ("test_directories", `A(test_directories |> List.map (fun s -> `String(s)))); + ("library", `O([ + ("main_module", `String(main_module_name)); + ("source_directories", `A(source_directories |> List.map (fun s -> `String(s)))); + ("test_directories", `A(test_directories |> List.map (fun s -> `String(s)))); + ])); ]) | Font{ main_module_name; font_file_descriptions } -> `O([ - ("main_module", `String(main_module_name)); - ("fonts", `A(font_file_descriptions |> List.map font_file_description_encoder)); + ("font", `O([ + ("main_module", `String(main_module_name)); + ("files", `A(font_file_descriptions |> List.map font_file_description_encoder)); + ])); ]) diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 89bb50113..b3088e0ec 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -42,11 +42,11 @@ let font_file_contents_decoder : font_file_contents ConfigDecoder.t = let open ConfigDecoder in branch [ "opentype_single" ==> begin - get "contents" font_spec_decoder >>= fun font_spec -> + font_spec_decoder >>= fun font_spec -> succeed @@ OpentypeSingle(font_spec) end; "opentype_collection" ==> begin - get "contents" (list font_spec_decoder) >>= fun font_specs -> + list font_spec_decoder >>= fun font_specs -> succeed @@ OpentypeCollection(font_specs) end; ] @@ -55,7 +55,7 @@ let font_file_contents_decoder : font_file_contents ConfigDecoder.t = let font_file_description_decoder : font_file_description ConfigDecoder.t = let open ConfigDecoder in get "path" string >>= fun font_file_path -> - get "contents" font_file_contents_decoder >>= fun font_file_contents -> + font_file_contents_decoder >>= fun font_file_contents -> succeed @@ { font_file_path; font_file_contents; @@ -216,9 +216,9 @@ let extraction_decoder : extraction ConfigDecoder.t = let external_resource_decoder : (string * external_resource) ConfigDecoder.t = let open ConfigDecoder in + get "name" name_decoder >>= fun name -> branch [ "zip" ==> begin - get "name" name_decoder >>= fun name -> get "url" string >>= fun url -> get "checksum" string >>= fun checksum -> get "extractions" (list extraction_decoder) >>= fun extractions -> From 7cdb4d881577fa0786a3240a63b332b09f588e46 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 05:36:36 +0900 Subject: [PATCH 034/381] initialize the store root config when nonexistent --- check-packages.sh | 1 + src-saphe/configError.ml | 4 ++++ src-saphe/logging.ml | 4 ++++ src-saphe/logging.mli | 2 ++ src-saphe/sapheMain.ml | 31 +++++++++++++++++++++-------- src-saphe/storeRootConfig.ml | 38 ++++++++++++++++++++---------------- 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/check-packages.sh b/check-packages.sh index e527dac0a..57e9612f2 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -3,6 +3,7 @@ FAILED=0 for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" + echo " ==== $DIR ====" ./saphe solve "$DIR" if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then if diff "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected"; then diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index db4b55585..97e73ada3 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -132,6 +132,10 @@ type config_error = message : string; path : abs_path; } + | CannotWriteStoreRootConfig of { + message : string; + path : abs_path; + } | MultiplePackageDefinition of { package_name : string; } diff --git a/src-saphe/logging.ml b/src-saphe/logging.ml index ee81c8c73..f1447eca4 100644 --- a/src-saphe/logging.ml +++ b/src-saphe/logging.ml @@ -49,6 +49,10 @@ let lock_cache_exists (lock_name : lock_name) (abspath_tarball : abs_path) = Printf.printf " cache for '%s' exists at '%s'\n" lock_name (get_abs_path_string abspath_tarball) +let store_root_config_created (abspath_store_root_config : abs_path) = + Printf.printf " store root config created at '%s'\n" (get_abs_path_string abspath_store_root_config) + + let downloading_lock (lock_name : lock_name) (absdir : abs_path) = Printf.printf " downloading '%s' to '%s'...\n" lock_name (get_abs_path_string absdir) diff --git a/src-saphe/logging.mli b/src-saphe/logging.mli index ede4742f3..4693b36a9 100644 --- a/src-saphe/logging.mli +++ b/src-saphe/logging.mli @@ -16,6 +16,8 @@ val lock_already_installed : lock_name -> abs_path -> unit val lock_cache_exists : lock_name -> abs_path -> unit +val store_root_config_created : abs_path -> unit + val downloading_lock : lock_name -> abs_path -> unit val report_canonicalized_url : url:string -> canonicalized_url:string -> hash_value:registry_hash_value -> unit diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index ad5511476..5f3bc4e68 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -359,6 +359,11 @@ let report_config_error = function NormalLine(Printf.sprintf "cannot write a deps config to '%s' (message: '%s')" (get_abs_path_string path) message); ] + | CannotWriteStoreRootConfig{ message; path } -> + report_error [ + NormalLine(Printf.sprintf "cannot write a store root config to '%s' (message: '%s')" (get_abs_path_string path) message); + ] + | MultiplePackageDefinition{ package_name } -> report_error [ NormalLine(Printf.sprintf "More than one definition for package '%s'." package_name) @@ -388,7 +393,8 @@ type solve_input = } -let update_store_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_store_root : abs_path) : unit = +let update_store_root_config_if_needed (registries : registry_remote RegistryHashValueMap.t) (registry_hash_value : registry_hash_value) (registry_remote : registry_remote) (abspath_store_root : abs_path) : (unit, config_error) result = + let open ResultMonad in match registries |> RegistryHashValueMap.find_opt registry_hash_value with @@ -401,7 +407,7 @@ let update_store_root_config_if_needed (registries : registry_remote RegistryHas StoreRootConfig.write abspath_store_root store_root_config | Some(_registry_remote) -> - () + return () let make_lock_name (lock : Lock.t) : lock_name = @@ -622,7 +628,14 @@ let solve ~(fpath_in : string) = let* absdir_store_root = get_store_root () in let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in - let* store_root_config = StoreRootConfig.load abspath_store_root_config in + let* (store_root_config, created) = StoreRootConfig.load_or_initialize abspath_store_root_config in + + begin + if created then + Logging.store_root_config_created abspath_store_root_config + else + () + end; let* package_id_to_impl_list = registry_remotes |> List.fold_left (fun res registry_remote -> @@ -630,11 +643,13 @@ let solve ~(fpath_in : string) = let* registry_hash_value = ConfigUtil.make_registry_hash_value registry_remote in (* Manupulates the store root config: *) - update_store_root_config_if_needed - store_root_config.StoreRootConfig.registries - registry_hash_value - registry_remote - abspath_store_root_config; + let* () = + update_store_root_config_if_needed + store_root_config.StoreRootConfig.registries + registry_hash_value + registry_remote + abspath_store_root_config + in (* Fetches registry configs: *) let absdir_registry_repo = diff --git a/src-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml index 8fce9134e..f8417dd38 100644 --- a/src-saphe/storeRootConfig.ml +++ b/src-saphe/storeRootConfig.ml @@ -56,10 +56,10 @@ let config_decoder : t ConfigDecoder.t = succeed { registries } -let config_encoder (library_root_config : t) : Yaml.value = +let config_encoder (store_root_config : t) : Yaml.value = let language = SemanticVersion.(requirement_to_string (CompatibleWith(Constant.current_ecosystem_version))) in let registry_specs = - library_root_config.registries |> RegistryHashValueMap.bindings |> List.map registry_spec_encoder + store_root_config.registries |> RegistryHashValueMap.bindings |> List.map registry_spec_encoder in `O[ ("ecosystem", `String(language)); @@ -67,22 +67,26 @@ let config_encoder (library_root_config : t) : Yaml.value = ] -(* TODO: automatically initialize a registry config if non-existent *) -let load (abspath_config : abs_path) : (t, config_error) result = - let open ResultMonad in - let* s = - read_file abspath_config - |> Result.map_error (fun _ -> StoreRootConfigNotFound(abspath_config)) - in - ConfigDecoder.run config_decoder s - |> Result.map_error (fun e -> StoreRootConfigError(abspath_config, e)) +let write (abspath_config : abs_path) (store_root_config : t) : (unit, config_error) result = + let yaml = config_encoder store_root_config in + let data = encode_yaml yaml in + write_file abspath_config data + |> Result.map_error (fun message -> + CannotWriteStoreRootConfig{ message; path = abspath_config } + ) -let write (abspath_config : abs_path) (library_root_config : t) : unit = - let yaml = config_encoder library_root_config in - match Yaml.to_string ~encoding:`Utf8 ~layout_style:`Block ~scalar_style:`Plain yaml with - | Ok(data) -> - Core.Out_channel.write_all (get_abs_path_string abspath_config) ~data +let load_or_initialize (abspath_config : abs_path) : (t * bool, config_error) result = + let open ResultMonad in + match read_file abspath_config with + | Ok(s) -> + let* store_root_config = + ConfigDecoder.run config_decoder s + |> Result.map_error (fun e -> StoreRootConfigError(abspath_config, e)) + in + return (store_root_config, false) | Error(_) -> - assert false + let store_root_config = { registries = RegistryHashValueMap.empty } in + let* () = write abspath_config store_root_config in + return (store_root_config, true) From 416e0b568a4939e2521fab9f5cb0b6892c73a0e3 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 05:57:43 +0900 Subject: [PATCH 035/381] create a directory for the store root if nonexistent --- src-saphe/sapheMain.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 5f3bc4e68..bfb4af64b 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -627,6 +627,7 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; let* absdir_store_root = get_store_root () in + ShellCommand.mkdir_p absdir_store_root; let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in let* (store_root_config, created) = StoreRootConfig.load_or_initialize abspath_store_root_config in From a72ae10469199b206a0e13465c14acf0334aa450 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 17:12:25 +0900 Subject: [PATCH 036/381] slight refactoring --- src-saphe/sapheMain.ml | 30 +++++++++++++----------------- src-util/myUtil.ml | 6 +++++- src-util/myUtil.mli | 2 ++ 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index bfb4af64b..a2dec00c7 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -626,11 +626,11 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; + (* Arranges the store root config: *) let* absdir_store_root = get_store_root () in ShellCommand.mkdir_p absdir_store_root; let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in let* (store_root_config, created) = StoreRootConfig.load_or_initialize abspath_store_root_config in - begin if created then Logging.store_root_config_created abspath_store_root_config @@ -638,6 +638,7 @@ let solve ~(fpath_in : string) = () end; + (* Constructs a map that associates a package with its implementations: *) let* package_id_to_impl_list = registry_remotes |> List.fold_left (fun res registry_remote -> let* package_id_to_impl_list = res in @@ -652,7 +653,7 @@ let solve ~(fpath_in : string) = abspath_store_root_config in - (* Fetches registry configs: *) + (* Fetches the registry config: *) let absdir_registry_repo = Constant.registry_root_directory_path absdir_store_root registry_hash_value in @@ -662,26 +663,21 @@ let solve ~(fpath_in : string) = |> Result.map_error (fun e -> PackageRegistryFetcherError(e)) in + (* Loads the registry config and grows `package_id_to_impl_list`: *) let* PackageRegistryConfig.{ packages = packages } = let abspath_registry_config = - make_abs_path - (Filename.concat - (get_abs_path_string absdir_registry_repo) - Constant.package_registry_config_file_name) + append_to_abs_directory absdir_registry_repo Constant.package_registry_config_file_name in PackageRegistryConfig.load abspath_registry_config in - let* package_id_to_impl_list = - packages |> List.fold_left (fun res (package_name, impls) -> - let* package_id_to_impl_list = res in - let package_id = PackageId.{ registry_hash_value; package_name } in - if package_id_to_impl_list |> PackageIdMap.mem package_id then - err @@ MultiplePackageDefinition{ package_name } - else - return (package_id_to_impl_list |> PackageIdMap.add package_id impls) - ) (return package_id_to_impl_list) - in - return package_id_to_impl_list + packages |> List.fold_left (fun res (package_name, impls) -> + let* package_id_to_impl_list = res in + let package_id = PackageId.{ registry_hash_value; package_name } in + if package_id_to_impl_list |> PackageIdMap.mem package_id then + err @@ MultiplePackageDefinition{ package_name } + else + return (package_id_to_impl_list |> PackageIdMap.add package_id impls) + ) (return package_id_to_impl_list) ) (return PackageIdMap.empty) in diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 00e377a98..20394cd0d 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -48,7 +48,7 @@ type lib_path = LibPath of string let open_in_abs (AbsPath(pathstr)) = - open_in pathstr + Stdlib.open_in pathstr let basename_abs (AbsPath(pathstr)) = @@ -76,6 +76,10 @@ let make_absolute_if_relative ~(origin : string) (s : string) : abs_path = make_abs_path abspath_str +let append_to_abs_directory (absdir : abs_path) (filename : string) : abs_path = + make_abs_path (Filename.concat (get_abs_path_string absdir) filename) + + let read_file (abspath : abs_path) : (string, string) result = let open ResultMonad in try diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index d93872ff8..91152acff 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -36,6 +36,8 @@ end val make_absolute_if_relative : origin:string -> string -> abs_path +val append_to_abs_directory : abs_path -> string -> abs_path + val is_directory : abs_path -> bool val encode_yaml : Yaml.value -> string From 3ac694d4d0242c42f5991910081ca4a05239ab0c Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 17:48:54 +0900 Subject: [PATCH 037/381] update scripts --- .github/workflows/ci.yml | 2 +- Makefile | 8 +++++++- check-packages.sh | 14 +++++++++----- promote-lock-of-packages.sh | 5 +++-- update-default-registry-commit-hash-file.sh | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e43879962..b915e35a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: env: cache-name: cache-locks with: - path: ~/.satysfi/cache/ + path: ~/.saphe/cache/ key: ${{ env.cache-name }}-${{ hashFiles('default-registry-commit-hash.txt') }} - name: Determine the default OPAM Repo diff --git a/Makefile b/Makefile index 0e8c837dc..01349a13f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ BINDIR=$(PREFIX)/bin RM=rm -f DUNE=dune -.PHONY: all test test-packages install uninstall clean +.PHONY: all test test-packages promote-package-locs update-ci-cache install uninstall clean all: $(DUNE) build --root . @@ -19,6 +19,12 @@ test: test-packages: ./check-packages.sh +promote-package-locks: + ./promote-lock-of-packages.sh + +update-ci-cache: + ./update-default-registry-commit-hash-file.sh + install: $(SATYSFI) $(SAPHE) mkdir -p $(BINDIR) install $(SATYSFI) $(BINDIR) diff --git a/check-packages.sh b/check-packages.sh index 57e9612f2..ae8ce2570 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -5,14 +5,18 @@ for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" echo " ==== $DIR ====" ./saphe solve "$DIR" + if [ $? -ne 0 ]; then + echo "! FAILED (not solved)" + FAILED=1 + fi if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then if diff "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected"; then - echo "(TODO: build)" - #saphe build "$DIR" - echo "* OK: $DIR" + echo "(TODO: build)" + #saphe build "$DIR" + echo "* OK: $DIR" else - echo "! FAILED (envelope config mismatch): $DIR" - FAILED=1 + echo "! FAILED (envelope config mismatch): $DIR" + FAILED=1 fi else echo "! FAILED (lock config mismatch): $DIR" diff --git a/promote-lock-of-packages.sh b/promote-lock-of-packages.sh index e6cfed07d..133f92b2e 100755 --- a/promote-lock-of-packages.sh +++ b/promote-lock-of-packages.sh @@ -1,6 +1,7 @@ #!/bin/sh -for FILE in $(find lib-satysfi -name satysfi.yaml); do +for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" - cp "$DIR/package.satysfi-lock" "$DIR/package.satysfi-lock-expected" + cp "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected" + cp "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected" done diff --git a/update-default-registry-commit-hash-file.sh b/update-default-registry-commit-hash-file.sh index 32a818a4c..ed641dcd7 100755 --- a/update-default-registry-commit-hash-file.sh +++ b/update-default-registry-commit-hash-file.sh @@ -2,6 +2,6 @@ HASH_FILE=default-registry-commit-hash.txt REPO_URL=https://github.com/SATySFi/default-registry -BRANCH=format-1 +BRANCH=temp-dev-saphe git ls-remote "${REPO_URL}" "refs/heads/${BRANCH}" > "$HASH_FILE" From 19df7ff3c0ff94f59291940a1a00dcf16dadb9d7 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 17:57:11 +0900 Subject: [PATCH 038/381] fix `annot`, `code`, and `font-*` --- .../annot.0.0.1/package.satysfi-lock-expected | 10 ---- .../annot.0.0.1/saphe.lock.yaml.expected | 11 ++++ .../packages/annot/annot.0.0.1/saphe.yaml | 22 ++++++++ .../satysfi-envelope.yaml.expected | 5 ++ .../code.0.0.1/package.satysfi-lock-expected | 18 ------- .../code/code.0.0.1/saphe.lock.yaml.expected | 11 ++++ .../packages/code/code.0.0.1/saphe.yaml | 27 ++++++++++ .../code.0.0.1/satysfi-envelope.yaml.expected | 5 ++ .../package.satysfi-lock-expected | 2 - .../saphe.lock.yaml.expected | 3 ++ .../font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml | 24 +++++++++ .../satysfi-envelope.yaml.expected | 11 ++++ .../package.satysfi-lock-expected | 2 - .../font-junicode.0.0.1/saphe.yaml | 50 +++++++++---------- .../package.satysfi-lock-expected | 2 - .../font-latin-modern-math.0.0.1/saphe.yaml | 16 +++--- .../package.satysfi-lock-expected | 2 - .../saphe.lock.yaml.expected | 3 ++ .../font-latin-modern.0.0.1/saphe.yaml | 24 +++++++++ .../satysfi-envelope.yaml.expected | 11 ++++ .../packages/stdlib/stdlib.0.0.1/satysfi.yaml | 2 +- 21 files changed, 191 insertions(+), 70 deletions(-) delete mode 100644 lib-satysfi/packages/annot/annot.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/annot/annot.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/code/code.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/code/code.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/code/code.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/font-junicode/font-junicode.0.0.1/package.satysfi-lock-expected delete mode 100644 lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/package.satysfi-lock-expected delete mode 100644 lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/satysfi-envelope.yaml.expected diff --git a/lib-satysfi/packages/annot/annot.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/annot/annot.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/annot/annot.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..9a9d8bcfd --- /dev/null +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,11 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml b/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml new file mode 100644 index 000000000..3187f4b42 --- /dev/null +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml @@ -0,0 +1,22 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "annot" +authors: + - "Daiki Matsunaga <@matsud224>" + - "Takashi Suwa <@gfngfn>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Annot" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/annot/annot.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/annot/annot.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..36b1fd1fc --- /dev/null +++ b/lib-satysfi/packages/annot/annot.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Annot + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/code/code.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/code/code.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index afd0f0594..000000000 --- a/lib-satysfi/packages/code/code.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,18 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..9a9d8bcfd --- /dev/null +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,11 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.yaml b/lib-satysfi/packages/code/code.0.0.1/saphe.yaml new file mode 100644 index 000000000..f72d35e0d --- /dev/null +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.yaml @@ -0,0 +1,27 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "code" +authors: + - "Takashi Suwa <@gfngfn>" + - "Naoki Kaneko <@puripuri2100>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Code" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/code/code.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/code/code.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..0d383b35a --- /dev/null +++ b/lib-satysfi/packages/code/code.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Code + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index cac2e8573..000000000 --- a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,2 +0,0 @@ -language: ^0.1.0 -locks: [] diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..a2658c9dc --- /dev/null +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,3 @@ +ecosystem: ^0.0.1 +locks: [] +dependencies: [] diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml new file mode 100644 index 000000000..f54281146 --- /dev/null +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml @@ -0,0 +1,24 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "font-ipa-ex" +authors: [] +external_sources: + - name: "IPAexfont00401" + zip: + url: "https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zip" + checksum: "57f2631833c1049ea89320971cc74ce5" + extractions: + - from: "IPAexfont00401/ipaexg.ttf" + to: "./fonts/ipaexg.ttf" + - from: "IPAexfont00401/ipaexm.ttf" + to: "./fonts/ipaexm.ttf" +contents: + font: + main_module: "FontIpaEx" + files: + - path: "./fonts/ipaexm.ttf" + opentype_single: + name: "mincho" + - path: "./fonts/ipaexg.ttf" + opentype_single: + name: "gothic" diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..cbfc8b84d --- /dev/null +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,11 @@ +font: + main_module: FontIpaEx + files: + - path: ./fonts/ipaexm.ttf + opentype_single: + name: mincho + math: false + - path: ./fonts/ipaexg.ttf + opentype_single: + name: gothic + math: false diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index cac2e8573..000000000 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,2 +0,0 @@ -language: ^0.1.0 -locks: [] diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml index 01f05f810..4ffa02167 100644 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml @@ -2,33 +2,33 @@ ecosystem: "^0.0.1" language: "^0.1.0" name: "font-junicode" authors: [] -external_sources: +external_resources: - name: "junicode-1.002" - type: "zip" - url: "http://downloads.sourceforge.net/project/junicode/junicode/junicode-1.002/junicode-1.002.zip" - checksum: "b1d6ed8796d8d1eacd733c0d568d939f" - extractions: - - from: "Junicode.ttf" - to: "./fonts/Junicode.ttf" - - from: "Junicode-Bold.ttf" - to: "./fonts/Junicode-Bold.ttf" - - from: "Junicode-Italic.ttf" - to: "./fonts/Junicode-Italic.ttf" - - from: "Junicode-BoldItalic.ttf" - to: "./fonts/Junicode-BoldItalic.ttf" + zip: + url: "http://downloads.sourceforge.net/project/junicode/junicode/junicode-1.002/junicode-1.002.zip" + checksum: "b1d6ed8796d8d1eacd733c0d568d939f" + extractions: + - from: "Junicode.ttf" + to: "./fonts/Junicode.ttf" + - from: "Junicode-Bold.ttf" + to: "./fonts/Junicode-Bold.ttf" + - from: "Junicode-Italic.ttf" + to: "./fonts/Junicode-Italic.ttf" + - from: "Junicode-BoldItalic.ttf" + to: "./fonts/Junicode-BoldItalic.ttf" contents: font: main_module: "FontJunicode" files: - - path: "./fonts/Junicode.ttf" - opentype_single: - name: "normal" - - path: "./fonts/Junicode-Bold.ttf" - opentype_single: - name: "bold" - - path: "./fonts/Junicode-Italic.ttf" - opentype_single: - name: "italic" - - path: "./fonts/Junicode-BoldItalic.ttf" - opentype_single: - name: "bold-italic" + - path: "./fonts/Junicode.ttf" + opentype_single: + name: "normal" + - path: "./fonts/Junicode-Bold.ttf" + opentype_single: + name: "bold" + - path: "./fonts/Junicode-Italic.ttf" + opentype_single: + name: "italic" + - path: "./fonts/Junicode-BoldItalic.ttf" + opentype_single: + name: "bold-italic" diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index cac2e8573..000000000 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,2 +0,0 @@ -language: ^0.1.0 -locks: [] diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml index 6254922bb..8ba7b34ae 100644 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml @@ -2,19 +2,19 @@ ecosystem: "^0.0.1" language: "^0.1.0" name: "font-latin-modern-math" authors: [] -external_sources: +external_resources: - name: "latinmodern-math-1959" zip: url: "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" checksum: "bc82f6d4184ec0ea3ba2c0798e6be719" - extractions: - - from: "latinmodern-math-1959/otf/latinmodern-math.otf" - to: "./fonts/latinmodern-math.otf" + extractions: + - from: "latinmodern-math-1959/otf/latinmodern-math.otf" + to: "./fonts/latinmodern-math.otf" contents: font: main_module: "FontLatinModernMath" files: - - path: "./fonts/latinmodern-math.otf" - opentype_single: - name: "main" - math: true + - path: "./fonts/latinmodern-math.otf" + opentype_single: + name: "main" + math: true diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index cac2e8573..000000000 --- a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,2 +0,0 @@ -language: ^0.1.0 -locks: [] diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..a2658c9dc --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,3 @@ +ecosystem: ^0.0.1 +locks: [] +dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml new file mode 100644 index 000000000..b9ac7f831 --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml @@ -0,0 +1,24 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "font-latin-modern" +authors: [] +external_resources: + - name: "lm2.004otf" + zip: + url: "https://www.gust.org.pl/projects/e-foundry/latin-modern/download/lm2.004otf.zip" + checksum: "0bc81a83fe37416b67b69ab3a6593ef5" + extractions: + - from: "lmmono10-regular.otf" + to: "./fonts/lmmono10-regular.otf" + - from: "lmsans10-regular.otf" + to: "./fonts/lmsans10-regular.otf" +contents: + font: + main_module: "FontLatinModern" + files: + - path: "./fonts/lmmono10-regular.otf" + opentype_single: + name: "mono" + - path: "./fonts/lmsans10-regular.otf" + opentype_single: + name: "sans" diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..a134d4ecf --- /dev/null +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,11 @@ +font: + main_module: FontLatinModern + files: + - path: ./fonts/lmmono10-regular.otf + opentype_single: + name: mono + math: false + - path: ./fonts/lmsans10-regular.otf + opentype_single: + name: sans + math: false diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml index 6efe97745..c560fa662 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/satysfi.yaml @@ -8,7 +8,7 @@ registries: remote: type: "git" url: "https://github.com/SATySFi/default-registry" - branch: "temp-dev-saphe" + branch: "format-1" contents: type: "library" main_module: "Stdlib" From 7d8a960bb404ae09a01b72f9024123acb0f10dab Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 18:43:24 +0900 Subject: [PATCH 039/381] fix `annot`, `code`, and `font-*` (completed) --- default-registry-commit-hash.txt | 2 +- .../annot.0.0.1/saphe.lock.yaml.expected | 3 ++- .../code/code.0.0.1/saphe.lock.yaml.expected | 12 ++++++++++- .../package.satysfi-lock-expected | 10 --------- .../saphe.lock.yaml.expected | 12 +++++++++++ .../footnote-scheme.0.0.1/saphe.yaml | 21 +++++++++++++++++++ .../satysfi-envelope.yaml.expected | 5 +++++ .../proof.0.0.1/saphe.lock.yaml.expected | 12 +++++++++++ .../packages/proof/proof.0.0.1/saphe.yaml | 21 +++++++++++++++++++ .../satysfi-envelope.yaml.expected | 5 +++++ make-package-tarballs.sh | 2 +- 11 files changed, 91 insertions(+), 14 deletions(-) delete mode 100644 lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/satysfi-envelope.yaml.expected create mode 100644 lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/proof/proof.0.0.1/satysfi-envelope.yaml.expected diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index a0fe1b894..fa193c009 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -b0f4ad6adf332e5debe15c0e11451e3c6b95904a refs/heads/format-1 +8d0c366be2bb4431f21b178806613dfeec2363f5 refs/heads/temp-dev-saphe diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected index 9a9d8bcfd..4eed7b21a 100644 --- a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected @@ -8,4 +8,5 @@ locks: package_name: stdlib version: 0.0.1 dependencies: -- registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected index 9a9d8bcfd..38d8e2602 100644 --- a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected @@ -1,5 +1,12 @@ ecosystem: ^0.0.1 locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] test_only: false @@ -8,4 +15,7 @@ locks: package_name: stdlib version: 0.0.1 dependencies: -- registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..4eed7b21a --- /dev/null +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,12 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml new file mode 100644 index 000000000..24def4032 --- /dev/null +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "footnote-scheme" +authors: + - "Takashi Suwa <@gfngfn>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "FootnoteScheme" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..d2287e522 --- /dev/null +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: FootnoteScheme + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..4eed7b21a --- /dev/null +++ b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,12 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml b/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml new file mode 100644 index 000000000..d050aac9d --- /dev/null +++ b/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "proof" +authors: + - "Takashi Suwa <@gfngfn>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Proof" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/proof/proof.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/proof/proof.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..739da3499 --- /dev/null +++ b/lib-satysfi/packages/proof/proof.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Proof + source_directories: + - ./src + test_directories: [] diff --git a/make-package-tarballs.sh b/make-package-tarballs.sh index 4158f0635..e456ed1d5 100755 --- a/make-package-tarballs.sh +++ b/make-package-tarballs.sh @@ -9,7 +9,7 @@ for FILE in $(find lib-satysfi -name \*.ttf -or -name \*.otf | grep '^lib-satysf done mkdir -p "${TARGET_DIR}" -for FILE in $(find lib-satysfi -name satysfi.yaml); do +for FILE in $(find lib-satysfi -name saphe.yaml); do VERSIONED_DIR="$(dirname "${FILE}")" PACKAGE_DIR="$(dirname "${VERSIONED_DIR}")" VERSIONED_NAME="$(basename "${VERSIONED_DIR}")" From 9812ec6044f1615aaf7a1aa4b73b8015106bfa82 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 19:11:07 +0900 Subject: [PATCH 040/381] fix `itemize`, `math`, `proof` and `tabular` --- .../package.satysfi-lock-expected | 10 ------- .../itemize.0.0.1/saphe.lock.yaml.expected | 12 +++++++++ .../packages/itemize/itemize.0.0.1/saphe.yaml | 21 +++++++++++++++ .../satysfi-envelope.yaml.expected | 5 ++++ .../math.0.0.1/package.satysfi-lock-expected | 10 ------- .../math/math.0.0.1/saphe.lock.yaml.expected | 12 +++++++++ .../packages/math/math.0.0.1/saphe.yaml | 27 +++++++++++++++++++ .../math.0.0.1/satysfi-envelope.yaml.expected | 5 ++++ .../proof.0.0.1/package.satysfi-lock-expected | 10 ------- .../package.satysfi-lock-expected | 10 ------- .../tabular.0.0.1/saphe.lock.yaml.expected | 12 +++++++++ .../packages/tabular/tabular.0.0.1/saphe.yaml | 21 +++++++++++++++ .../satysfi-envelope.yaml.expected | 5 ++++ 13 files changed, 120 insertions(+), 40 deletions(-) delete mode 100644 lib-satysfi/packages/itemize/itemize.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/itemize/itemize.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/math/math.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/math/math.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/math/math.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/proof/proof.0.0.1/package.satysfi-lock-expected delete mode 100644 lib-satysfi/packages/tabular/tabular.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/tabular/tabular.0.0.1/satysfi-envelope.yaml.expected diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/itemize/itemize.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/itemize/itemize.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..4eed7b21a --- /dev/null +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,12 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml new file mode 100644 index 000000000..cb9e6a66c --- /dev/null +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "itemize" +authors: + - "Takashi Suwa <@gfngfn>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Itemize" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/itemize/itemize.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..c37b9d25b --- /dev/null +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Itemize + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/math/math.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/math/math.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/math/math.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..4eed7b21a --- /dev/null +++ b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,12 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/math/math.0.0.1/saphe.yaml b/lib-satysfi/packages/math/math.0.0.1/saphe.yaml new file mode 100644 index 000000000..48d522cf3 --- /dev/null +++ b/lib-satysfi/packages/math/math.0.0.1/saphe.yaml @@ -0,0 +1,27 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "math" +authors: + - "Takashi Suwa <@gfngfn>" + - "Toru Niina <@ToruNiina>" + - "forestaa <@forestaa>" + - "Takuma Ishikawa <@nekketsuuu>" + - "El Pin Al <@elpinal>" + - "coord_e <@coord-e>" + - "SnO₂WMaN <@SnO2WMaN>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Math" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/math/math.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/math/math.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..8b8798cad --- /dev/null +++ b/lib-satysfi/packages/math/math.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Math + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/proof/proof.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/proof/proof.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/proof/proof.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/tabular/tabular.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 22b630ca5..000000000 --- a/lib-satysfi/packages/tabular/tabular.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,10 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..4eed7b21a --- /dev/null +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,12 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml new file mode 100644 index 000000000..a00d9afbe --- /dev/null +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "tabular" +authors: + - "Takashi Suwa <@gfngfn>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Tabular" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + name: "stdlib" + registry: "default" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/tabular/tabular.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..01f6c0ee0 --- /dev/null +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: Tabular + source_directories: + - ./src + test_directories: [] From 80c130d47d8a095bd932948dec221b6557f7b5f5 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 19:30:41 +0900 Subject: [PATCH 041/381] fix how to write store root configs --- src-saphe/storeRootConfig.ml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml index f8417dd38..cd1a00354 100644 --- a/src-saphe/storeRootConfig.ml +++ b/src-saphe/storeRootConfig.ml @@ -24,8 +24,10 @@ let registry_remote_decoder : registry_remote ConfigDecoder.t = let registry_remote_encoder = function | GitRegistry{ url; branch } -> [ - ("url", `String(url)); - ("branch", `String(branch)); + ("git", `O([ + ("url", `String(url)); + ("branch", `String(branch)); + ])); ] From 195417e5af627f85fec778a31ae106a73c8587d0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 20:32:02 +0900 Subject: [PATCH 042/381] fix `std-ja{,-book,-report}` --- .../package.satysfi-lock-expected | 79 ---------------- .../saphe.lock.yaml.expected | 94 +++++++++++++++++++ .../std-ja-book/std-ja-book.0.0.1/saphe.yaml | 64 +++++++++++++ .../satysfi-envelope.yaml.expected | 5 + .../package.satysfi-lock-expected | 79 ---------------- .../saphe.lock.yaml.expected | 94 +++++++++++++++++++ .../std-ja-report.0.0.1/saphe.yaml | 65 +++++++++++++ .../satysfi-envelope.yaml.expected | 5 + .../package.satysfi-lock-expected | 70 -------------- .../std-ja.0.0.1/saphe.lock.yaml.expected | 83 ++++++++++++++++ .../packages/std-ja/std-ja.0.0.1/saphe.yaml | 59 ++++++++++++ .../satysfi-envelope.yaml.expected | 5 + 12 files changed, 474 insertions(+), 228 deletions(-) delete mode 100644 lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/satysfi-envelope.yaml.expected delete mode 100644 lib-satysfi/packages/std-ja/std-ja.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/std-ja/std-ja.0.0.1/satysfi-envelope.yaml.expected diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 24180faa1..000000000 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,79 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..d8dfc605c --- /dev/null +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,94 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml new file mode 100644 index 000000000..a1745005d --- /dev/null +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml @@ -0,0 +1,64 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "std-ja-book" +authors: + - "Takashi Suwa <@gfngfn>" + - "Daiki Matsunaga <@matsud224>" + - "Takuma Ishikawa <@nekketsuuu>" + - "Naoki Kaneko <@puripuri2100>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "StdJaBook" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..7b216ed5b --- /dev/null +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: StdJaBook + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 24180faa1..000000000 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,79 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..d8dfc605c --- /dev/null +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,94 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml new file mode 100644 index 000000000..43c1262de --- /dev/null +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml @@ -0,0 +1,65 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "std-ja-book" +authors: + - "Takashi Suwa <@gfngfn>" + - "Takuma Ishikawa <@nekketsuuu>" + - "Naoki Kaneko <@puripuri2100>" + - "Daiki Matsunaga <@matsud224>" + - "El Pin Al <@elpinal>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "StdJaReport" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..2a54e31ed --- /dev/null +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: StdJaReport + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index 3ab5d99cb..000000000 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,70 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..8e7fb8ab6 --- /dev/null +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,83 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml new file mode 100644 index 000000000..60b7d6773 --- /dev/null +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml @@ -0,0 +1,59 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "std-ja" +authors: + - "Takashi Suwa <@gfngfn>" + - "pandaman <@pandaman64>" + - "Takuma Ishikawa <@nekketsuuu>" + - "Daiki Matsunaga <@matsud224>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "StdJa" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..da9f3400c --- /dev/null +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: StdJa + source_directories: + - ./src + test_directories: [] From 5f982e42626984ecb330610e6c4be167041b09d4 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 23:43:20 +0900 Subject: [PATCH 043/381] make `--output` mandatory --- bin/satysfi.ml | 8 ++++---- src/frontend/main.ml | 22 +++++----------------- src/frontend/main.mli | 2 +- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index c3c885f9f..afc0cb38a 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -1,7 +1,7 @@ let build fpath_in - fpath_out_opt + fpath_out config_paths_str_opt text_mode_formats_str_opt page_number_limit @@ -17,7 +17,7 @@ let build = Main.build ~fpath_in - ~fpath_out_opt + ~fpath_out ~config_paths_str_opt ~text_mode_formats_str_opt ~page_number_limit @@ -52,10 +52,10 @@ let arg_in : string Cmdliner.Term.t = Arg.(required (pos 0 (some file) None (info []))) -let flag_output : (string option) Cmdliner.Term.t = +let flag_output : string Cmdliner.Term.t = let open Cmdliner in let doc = "Specify output path." in - Arg.(value (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) + Arg.(required (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) let flag_config = diff --git a/src/frontend/main.ml b/src/frontend/main.ml index abcebbb30..2f8716834 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -8,10 +8,6 @@ open FontError open TypeError -(* -exception NoLibraryRootDesignation -*) -exception ShouldSpecifyOutputFile exception UnexpectedExtension of string exception ConfigError of config_error @@ -27,6 +23,7 @@ let reset (output_mode : output_mode) = match output_mode with | TextMode(_) -> return () + | PdfMode -> ImageInfo.initialize (); NamedDest.initialize (); @@ -44,6 +41,7 @@ let initialize ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_c match output_mode with | TextMode(_) -> Primitives.make_text_mode_environments runtime_config + | PdfMode -> Primitives.make_pdf_mode_environments runtime_config in @@ -1114,11 +1112,6 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> DisplayLine(msg); ] - | ShouldSpecifyOutputFile -> - report_error Interface [ - NormalLine("should specify output file for text mode."); - ] - | UnexpectedExtension(ext) -> report_error Interface [ NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); @@ -1360,7 +1353,7 @@ let get_job_directory (abspath : abs_path) : string = let build ~(fpath_in : string) - ~(fpath_out_opt : string option) + ~(fpath_out : string) ~config_paths_str_opt:(_ : string option) (* TODO: remove this *) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) @@ -1380,7 +1373,7 @@ let build let input_file = make_absolute_if_relative ~origin:curdir fpath_in in let job_directory = get_job_directory input_file in - let output_file = fpath_out_opt |> Option.map (make_absolute_if_relative ~origin:curdir) in + let output_file = make_absolute_if_relative ~origin:curdir fpath_out in (* let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in *) @@ -1427,12 +1420,7 @@ let build | Ok(input_kind) -> let basename_without_extension = Filename.remove_extension abspathstr_in in let abspath_deps_config = make_document_deps_config_path basename_without_extension in - let abspath_out = - match (output_mode, output_file) with - | (_, Some(abspath_out)) -> abspath_out - | (TextMode(_), None) -> raise ShouldSpecifyOutputFile - | (PdfMode, None) -> make_abs_path (Printf.sprintf "%s.pdf" basename_without_extension) - in + let abspath_out = output_file in let abspath_dump = make_abs_path (Printf.sprintf "%s.satysfi-aux" basename_without_extension) in DocumentBuildInput{ kind = input_kind; diff --git a/src/frontend/main.mli b/src/frontend/main.mli index ed5d43ceb..a5fa7142d 100644 --- a/src/frontend/main.mli +++ b/src/frontend/main.mli @@ -3,7 +3,7 @@ val version : string val build : fpath_in:string -> - fpath_out_opt:(string option) -> + fpath_out:string -> config_paths_str_opt:(string option) -> text_mode_formats_str_opt:(string option) -> page_number_limit:int -> From 693ea1c8ea0c9e742202716140fec28bcf3f0f70 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 5 Jan 2024 23:46:49 +0900 Subject: [PATCH 044/381] remove `--config` and `--no-default-config` --- bin/satysfi.ml | 24 ------------------------ src/frontend/main.ml | 4 ---- src/frontend/main.mli | 4 ---- 3 files changed, 32 deletions(-) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index afc0cb38a..d769226ab 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -2,7 +2,6 @@ let build fpath_in fpath_out - config_paths_str_opt text_mode_formats_str_opt page_number_limit show_full_path @@ -13,12 +12,10 @@ let build debug_show_overfull type_check_only bytecomp - no_default_config = Main.build ~fpath_in ~fpath_out - ~config_paths_str_opt ~text_mode_formats_str_opt ~page_number_limit ~show_full_path @@ -29,22 +26,17 @@ let build ~debug_show_overfull ~type_check_only ~bytecomp - ~no_default_config let test fpath_in - config_paths_str_opt text_mode_formats_str_opt show_full_path - no_default_config = Main.test ~fpath_in - ~config_paths_str_opt ~text_mode_formats_str_opt ~show_full_path - ~no_default_config let arg_in : string Cmdliner.Term.t = @@ -58,12 +50,6 @@ let flag_output : string Cmdliner.Term.t = Arg.(required (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) -let flag_config = - let open Cmdliner in - let doc = "Add colon-separated paths to configuration search path" in - Arg.(value (opt (some string) None (info [ "C"; "config" ] ~docv:"PATHS" ~doc))) - - let flag_text_mode = let open Cmdliner in let doc = "Set text mode" in @@ -129,19 +115,12 @@ let flag_bytecomp = ~doc:"Use bytecode compiler" -let flag_no_default_config = - make_boolean_flag_spec - ~flags:[ "no-default-config" ] - ~doc:"Does not use default configuration search path" - - let command_build = let open Cmdliner in let term : unit Term.t = Term.(const build $ arg_in $ flag_output - $ flag_config $ flag_text_mode $ flag_page_number_limit $ flag_full_path @@ -152,7 +131,6 @@ let command_build = $ flag_debug_show_overfull $ flag_type_check_only $ flag_bytecomp - $ flag_no_default_config ) in let info : Cmd.info = @@ -166,10 +144,8 @@ let command_test = let term : unit Term.t = Term.(const test $ arg_in - $ flag_config $ flag_text_mode $ flag_full_path - $ flag_no_default_config ) in let info : Cmd.info = diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2f8716834..2dc6c3941 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1354,7 +1354,6 @@ let get_job_directory (abspath : abs_path) : string = let build ~(fpath_in : string) ~(fpath_out : string) - ~config_paths_str_opt:(_ : string option) (* TODO: remove this *) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) ~(show_full_path : bool) @@ -1365,7 +1364,6 @@ let build ~(debug_show_overfull : bool) ~(type_check_only : bool) ~(bytecomp : bool) - ~no_default_config:(_ : bool) (* TODO: remove this *) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> @@ -1503,10 +1501,8 @@ type test_input = let test ~(fpath_in : string) - ~config_paths_str_opt:(_ : string option) (* TODO: remove this *) ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) - ~no_default_config:(_ : bool) (* TODO: remove this *) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> diff --git a/src/frontend/main.mli b/src/frontend/main.mli index a5fa7142d..6ff242563 100644 --- a/src/frontend/main.mli +++ b/src/frontend/main.mli @@ -4,7 +4,6 @@ val version : string val build : fpath_in:string -> fpath_out:string -> - config_paths_str_opt:(string option) -> text_mode_formats_str_opt:(string option) -> page_number_limit:int -> show_full_path:bool -> @@ -15,13 +14,10 @@ val build : debug_show_overfull:bool -> type_check_only:bool -> bytecomp:bool -> - no_default_config:bool -> unit val test : fpath_in:string -> - config_paths_str_opt:(string option) -> text_mode_formats_str_opt:(string option) -> show_full_path:bool -> - no_default_config:bool -> unit From ca233e4ec936ef7609639bbafed8ef1d2396f321 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 01:09:40 +0900 Subject: [PATCH 045/381] begin to arrange the command-line interface of `satysfi` --- bin/satysfi.ml | 97 ++++++++++++---- src/frontend/main.ml | 264 +++++++++++++++++------------------------- src/frontend/main.mli | 14 ++- 3 files changed, 190 insertions(+), 185 deletions(-) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index d769226ab..05c64f838 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -1,7 +1,22 @@ -let build +let build_package + fpath_in + fpath_deps + text_mode_formats_str_opt + show_full_path += + Main.build_package + ~fpath_in + ~fpath_deps + ~text_mode_formats_str_opt + ~show_full_path + + +let build_document fpath_in fpath_out + fpath_dump + fpath_deps text_mode_formats_str_opt page_number_limit show_full_path @@ -13,9 +28,11 @@ let build type_check_only bytecomp = - Main.build + Main.build_document ~fpath_in ~fpath_out + ~fpath_dump + ~fpath_deps ~text_mode_formats_str_opt ~page_number_limit ~show_full_path @@ -28,13 +45,15 @@ let build ~bytecomp -let test +let test_package fpath_in + fpath_deps text_mode_formats_str_opt show_full_path = - Main.test + Main.test_package ~fpath_in + ~fpath_deps ~text_mode_formats_str_opt ~show_full_path @@ -46,13 +65,25 @@ let arg_in : string Cmdliner.Term.t = let flag_output : string Cmdliner.Term.t = let open Cmdliner in - let doc = "Specify output path." in + let doc = "Specify an output path" in Arg.(required (opt (some string) None (info [ "o"; "output" ] ~docv:"OUTPUT" ~doc))) +let flag_dump : string Cmdliner.Term.t = + let open Cmdliner in + let doc = "Specify a dump file path" in + Arg.(required (opt (some string) None (info [ "dump" ] ~docv:"DUMP" ~doc))) + + +let flag_deps : string Cmdliner.Term.t = + let open Cmdliner in + let doc = "Specify a deps config path" in + Arg.(required (opt (some string) None (info [ "deps" ] ~docv:"DEPS" ~doc))) + + let flag_text_mode = let open Cmdliner in - let doc = "Set text mode" in + let doc = "Set the text-generating mode" in Arg.(value (opt (some string) None (info [ "text-mode" ] ~docv:"FORMATS" ~doc))) @@ -115,12 +146,14 @@ let flag_bytecomp = ~doc:"Use bytecode compiler" -let command_build = +let command_build_document = let open Cmdliner in - let term : unit Term.t = - Term.(const build + Cmd.v (Cmd.info "document") + Term.(const build_document $ arg_in $ flag_output + $ flag_dump + $ flag_deps $ flag_text_mode $ flag_page_number_limit $ flag_full_path @@ -132,33 +165,49 @@ let command_build = $ flag_type_check_only $ flag_bytecomp ) - in - let info : Cmd.info = - Cmd.info "build" - in - Cmd.v info term -let command_test = +let command_build_package = + let open Cmdliner in + Cmd.v (Cmd.info "package") + Term.(const build_package + $ arg_in + $ flag_deps + $ flag_text_mode + $ flag_full_path + ) + + +let command_build = + let open Cmdliner in + Cmd.group (Cmd.info "build") [ + command_build_package; + command_build_document; + ] + + +let command_test_package = let open Cmdliner in let term : unit Term.t = - Term.(const test + Term.(const test_package $ arg_in + $ flag_deps $ flag_text_mode $ flag_full_path ) in - let info : Cmd.info = - Cmd.info "test" - in - Cmd.v info term + Cmd.v (Cmd.info "test") term + + +let command_test = + let open Cmdliner in + Cmd.group (Cmd.info "build") [ + command_test_package; + ] let () = let open Cmdliner in - let term : unit Term.t = - Term.(ret (const (`Error(true, "No subcommand specified.")))) - in let info : Cmd.info = Cmd.info ~version:Main.version "satysfi" in @@ -168,4 +217,4 @@ let () = command_test; ] in - Stdlib.exit (Cmd.eval (Cmd.group ~default:term info subcommands)) + Stdlib.exit (Cmd.eval (Cmd.group info subcommands)) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2dc6c3941..9a9dcd223 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -169,6 +169,7 @@ let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf Logging.end_output display_config abspath_out; in aux 1 + | PdfMode -> let rec aux (i : int) = let value_doc = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in @@ -1102,7 +1103,7 @@ let report_font_error (display_config : Logging.config) : font_error -> unit = f ] -let error_log_environment (display_config : Logging.config) (suspended : unit -> unit) : unit = +let error_log_environment (display_config : Logging.config) (suspended : unit -> 'a) : 'a = try suspended () with @@ -1272,20 +1273,8 @@ let get_candidate_file_extensions (output_mode : output_mode) = | TextMode(formats) -> List.append (formats |> List.map (fun s -> ".satyh-" ^ s)) [ ".satyg" ] -type build_input = - | EnvelopeBuildInput of { - deps : abs_path; - } - | DocumentBuildInput of { - kind : input_kind; - deps : abs_path; - out : abs_path; - dump : abs_path; - } - - -let get_input_kind_from_extension (abspathstr_in : string) = - match Filename.extension abspathstr_in with +let get_input_kind_from_extension (abspath_doc : abs_path) = + match Filename.extension (get_abs_path_string abspath_doc) with | ".saty" -> Ok(InputSatysfi) | ".md" -> Ok(InputMarkdown) | ext -> Error(ext) @@ -1321,14 +1310,6 @@ let check_depended_envelopes (display_config : Logging.config) (typecheck_config (genv, configenv, Alist.to_list libacc) -let make_package_deps_config_path (abspathstr_in : string) = - make_abs_path (Printf.sprintf "%s/package.satysfi-deps.yaml" abspathstr_in) - - -let make_document_deps_config_path (basename_without_extension : string) = - make_abs_path (Printf.sprintf "%s.satysfi-deps.yaml" basename_without_extension) - - let make_output_mode text_mode_formats_str_opt = match text_mode_formats_str_opt with | None -> PdfMode @@ -1351,9 +1332,64 @@ let get_job_directory (abspath : abs_path) : string = Filename.dirname (get_abs_path_string abspath) -let build +let build_package + ~(fpath_in : string) + ~(fpath_deps : string) + ~(text_mode_formats_str_opt : string option) + ~(show_full_path : bool) += + let display_config = Logging.{ show_full_path } in + error_log_environment display_config (fun () -> + let absdir_current = Sys.getcwd () in + + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in + + let output_mode = make_output_mode text_mode_formats_str_opt in + let typecheck_config = + { + is_text_mode = + match output_mode with + | PdfMode -> false + | TextMode(_) -> true + } + in + + let extensions = get_candidate_file_extensions output_mode in + let job_directory = get_job_directory abspath_in in + let runtime_config = { job_directory } in + let (tyenv_prim, _env) = initialize ~is_bytecomp_mode:false output_mode runtime_config in + + Logging.deps_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in + + let (_config, envelope) = + load_envelope display_config ~use_test_files:false ~extensions abspath_in + in + + let (genv, _configenv, _libs_dep) = + check_depended_envelopes + display_config + typecheck_config + ~use_test_only_envelope:false + ~extensions + tyenv_prim + deps_config + in + + begin + match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with + | Ok((_ssig, _libs)) -> () + | Error(e) -> raise (ConfigError(e)) + end + ) + + +let build_document ~(fpath_in : string) ~(fpath_out : string) + ~(fpath_dump : string) + ~(fpath_deps : string) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) ~(show_full_path : bool) @@ -1363,18 +1399,17 @@ let build ~(debug_show_block_space : bool) ~(debug_show_overfull : bool) ~(type_check_only : bool) - ~(bytecomp : bool) + ~bytecomp:(is_bytecomp_mode : bool) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> - let curdir = Sys.getcwd () in + let absdir_current = Sys.getcwd () in + + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + let abspath_out = make_absolute_if_relative ~origin:absdir_current fpath_out in + let abspath_dump = make_absolute_if_relative ~origin:absdir_current fpath_dump in + let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in - let input_file = make_absolute_if_relative ~origin:curdir fpath_in in - let job_directory = get_job_directory input_file in - let output_file = make_absolute_if_relative ~origin:curdir fpath_out in -(* - let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in -*) let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = { @@ -1393,69 +1428,18 @@ let build debug_show_overfull; } in + let job_directory = get_job_directory abspath_in in let runtime_config = { job_directory } in -(* - let library_root = setup_root_dirs ~no_default_config ~extra_config_paths curdir in -*) - let abspath_in = input_file in - let is_bytecomp_mode = bytecomp in - let build_input = - let abspathstr_in = get_abs_path_string abspath_in in - if Sys.is_directory abspathstr_in then - (* If the input is a package directory: *) - let abspath_deps_config = make_package_deps_config_path abspathstr_in in - EnvelopeBuildInput{ - deps = abspath_deps_config; - } - else - (* If the input is a document file: *) - let input_kind_res = get_input_kind_from_extension abspathstr_in in - match input_kind_res with - | Error(ext) -> - raise (UnexpectedExtension(ext)) - - | Ok(input_kind) -> - let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_deps_config = make_document_deps_config_path basename_without_extension in - let abspath_out = output_file in - let abspath_dump = make_abs_path (Printf.sprintf "%s.satysfi-aux" basename_without_extension) in - DocumentBuildInput{ - kind = input_kind; - deps = abspath_deps_config; - out = abspath_out; - dump = abspath_dump; - } + let input_kind = + match get_input_kind_from_extension abspath_in with + | Error(ext) -> raise (UnexpectedExtension(ext)) + | Ok(input_kind) -> input_kind in let extensions = get_candidate_file_extensions output_mode in let (tyenv_prim, env) = initialize ~is_bytecomp_mode output_mode runtime_config in - match build_input with - | EnvelopeBuildInput{ - deps = abspath_deps_config; - } -> - Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in - - let (_config, envelope) = load_envelope display_config ~use_test_files:false ~extensions abspath_in in - - let (genv, _configenv, _libs_dep) = - check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config - in - - begin - match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with - | Ok((_ssig, _libs)) -> () - | Error(e) -> raise (ConfigError(e)) - end - - | DocumentBuildInput{ - kind = input_kind; - deps = abspath_deps_config; - out = abspath_out; - dump = abspath_dump; - } -> Logging.deps_config_file display_config abspath_deps_config; let deps_config = load_deps_config abspath_deps_config in @@ -1489,96 +1473,58 @@ let build ) -type test_input = - | EnvelopeTestInput of { - deps : abs_path; - } - | DocumentTestInput of { - kind : input_kind; - deps : abs_path; - } - - -let test +let test_package ~(fpath_in : string) + ~(fpath_deps : string) ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) = let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> - let curdir = Sys.getcwd () in + let absdir_current = Sys.getcwd () in - let input_file_to_test = make_absolute_if_relative ~origin:curdir fpath_in in - let job_directory = get_job_directory input_file_to_test in -(* - let extra_config_paths = config_paths_str_opt |> Option.map (String.split_on_char ':') in -*) - let output_mode_to_test = make_output_mode text_mode_formats_str_opt in - let bytecomp = false in + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in + let job_directory = get_job_directory abspath_in in + let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = { is_text_mode = - match output_mode_to_test with + match output_mode with | PdfMode -> false | TextMode(_) -> true } in let runtime_config = { job_directory } in -(* - let library_root = setup_root_dirs ~no_default_config ~extra_config_paths curdir in -*) - let abspath_in = input_file_to_test in - let test_input = - let abspathstr_in = get_abs_path_string abspath_in in - if Sys.is_directory abspathstr_in then - (* If the input is a package directory: *) - let abspath_deps_config = make_package_deps_config_path abspathstr_in in - EnvelopeTestInput{ - deps = abspath_deps_config; - } - else - (* If the input is a document file: *) - let input_kind_res = get_input_kind_from_extension abspathstr_in in - match input_kind_res with - | Error(ext) -> - raise (UnexpectedExtension(ext)) - - | Ok(input_kind) -> - let basename_without_extension = Filename.remove_extension abspathstr_in in - let abspath_deps_config = make_document_deps_config_path basename_without_extension in - DocumentTestInput{ - kind = input_kind; - deps = abspath_deps_config; - } - in - - let extensions = get_candidate_file_extensions output_mode_to_test in - let (tyenv_prim, env) = initialize ~is_bytecomp_mode:bytecomp output_mode_to_test runtime_config in - - begin - match test_input with - | EnvelopeTestInput{ - deps = abspath_deps_config; - } -> - Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in + let extensions = get_candidate_file_extensions output_mode in + let (tyenv_prim, env) = initialize ~is_bytecomp_mode:false output_mode runtime_config in - let (_config, package) = load_envelope display_config ~use_test_files:true ~extensions abspath_in in + Logging.deps_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in - let (genv, _configenv, _libs_dep) = - check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:true (* ~library_root *) ~extensions tyenv_prim deps_config - in + let (_config, package) = + load_envelope display_config ~use_test_files:true ~extensions abspath_in + in - let libs = - match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package with - | Ok((_ssig, libs)) -> libs - | Error(e) -> raise (ConfigError(e)) - in - let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in - let _env = evaluate_bindings display_config ~run_tests:true env codebinds in - () + let (genv, _configenv, _libs_dep) = + check_depended_envelopes + display_config + typecheck_config + ~use_test_only_envelope:true + ~extensions + tyenv_prim + deps_config + in + let libs = + match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package with + | Ok((_ssig, libs)) -> libs + | Error(e) -> raise (ConfigError(e)) + in + let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in + let _env = evaluate_bindings display_config ~run_tests:true env codebinds in +(* | DocumentTestInput{ kind = input_kind; deps = abspath_deps_config; @@ -1607,7 +1553,7 @@ let test let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in let _env = evaluate_bindings display_config ~run_tests:true env codebinds in () - end; +*) let test_results = State.get_all_test_results () in let failure_found = test_results |> List.fold_left (fun failure_found test_result -> diff --git a/src/frontend/main.mli b/src/frontend/main.mli index 6ff242563..07621aef0 100644 --- a/src/frontend/main.mli +++ b/src/frontend/main.mli @@ -1,9 +1,18 @@ val version : string -val build : +val build_package : + fpath_in:string -> + fpath_deps:string -> + text_mode_formats_str_opt:(string option) -> + show_full_path:bool -> + unit + +val build_document : fpath_in:string -> fpath_out:string -> + fpath_dump:string -> + fpath_deps:string -> text_mode_formats_str_opt:(string option) -> page_number_limit:int -> show_full_path:bool -> @@ -16,8 +25,9 @@ val build : bytecomp:bool -> unit -val test : +val test_package : fpath_in:string -> + fpath_deps:string -> text_mode_formats_str_opt:(string option) -> show_full_path:bool -> unit From a39a4a2e92c20aa1ca62383f30c7b0ca628b444a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 01:31:59 +0900 Subject: [PATCH 046/381] begin to develop `SatysfiCommand` --- src-saphe/sapheMain.ml | 35 ++++++++++++----------- src-saphe/satysfiCommand.ml | 56 +++++++++++++++++++++++++++---------- 2 files changed, 60 insertions(+), 31 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index a2dec00c7..74ab6607c 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -831,24 +831,25 @@ let build match build_input with | PackageBuildInput{ - root = absdir_package; + root = _absdir_package; lock = abspath_lock_config; deps = abspath_deps_config; envelope = abspath_envelope_config; options; } -> + (* Updates the deps config: *) let* lock_config = LockConfig.load abspath_lock_config in let deps_config = make_deps_config lock_config in let* () = DepsConfig.write abspath_deps_config deps_config in Logging.end_deps_config_output abspath_deps_config; - SatysfiCommand.(build - ~input:(PackageInput{ - root = absdir_package; - envelope = abspath_envelope_config; - }) - ~deps:abspath_deps_config - ~options); + (* Builds the package by invoking `satysfi`: *) + let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + SatysfiCommand.(build_package + ~envelope:abspath_envelope_config + ~deps:abspath_deps_config + ~options) + in return () | DocumentBuildInput{ @@ -859,19 +860,21 @@ let build dump = abspath_dump; options; } -> + (* Updates the deps config: *) let* lock_config = LockConfig.load abspath_lock_config in let deps_config = make_deps_config lock_config in let* () = DepsConfig.write abspath_deps_config deps_config in Logging.end_deps_config_output abspath_deps_config; - SatysfiCommand.(build - ~input:(DocumentInput{ - doc = abspath_doc; - out = abspath_out; - dump = abspath_dump; - }) - ~deps:abspath_deps_config - ~options); + (* Builds the document by invoking `satysfi`: *) + let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + SatysfiCommand.(build_document + ~doc:abspath_doc + ~out:abspath_out + ~dump:abspath_dump + ~deps:abspath_deps_config + ~options) + in return () in match res with diff --git a/src-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml index 6f0f9d241..c94e53827 100644 --- a/src-saphe/satysfiCommand.ml +++ b/src-saphe/satysfiCommand.ml @@ -2,6 +2,21 @@ open MyUtil +type run_result = { + exit_status : int; + command : string; +} + + +(* Escapes double quotes and backslashes. TODO: refine this *) +let escape_string = + String.escaped + + +let escape_command_line (args : string list) : string = + String.concat " " (args |> List.map (fun s -> Printf.sprintf "\"%s\"" (escape_string s))) + + type build_option = { text_mode : string option; page_number_limit : int; @@ -15,21 +30,32 @@ type build_option = { bytecomp : bool; } -type input = - | PackageInput of { - root : abs_path; - envelope : abs_path; - } - | DocumentInput of { - doc : abs_path; - out : abs_path; - dump : abs_path; - } - -let build - ~input:(_ : input) +let build_package + ~envelope:(_abspath_envelope_config : abs_path) ~deps:(_abspath_deps_config : abs_path) - ~options:(_ : build_option) : unit + ~options:(_ : build_option) : run_result += + failwith "TODO: SatysfiCommand.build_package" + + +let build_document + ~doc:(abspath_doc : abs_path) + ~out:(abspath_out : abs_path) + ~dump:(abspath_dump : abs_path) + ~deps:(abspath_deps_config : abs_path) + ~options:(_ : build_option) : run_result = - failwith "TODO: SatysfiCommand.build" + let args_mandatory = + [ + "satysfi"; "build"; "document"; + get_abs_path_string abspath_doc; + "--output"; get_abs_path_string abspath_out; + "--dump"; get_abs_path_string abspath_dump; + "--deps"; get_abs_path_string abspath_deps_config; + ] + in + let args = args_mandatory in + let command = escape_command_line args in + let exit_status = Sys.command command in + { exit_status; command } From 142a87f45298e7e6d496307b3d29cbebafb9fbf0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 01:53:55 +0900 Subject: [PATCH 047/381] implement `SatysfiCommand.build_package` and refactor `Constant` --- src-saphe/constant.ml | 12 ++++++------ src-saphe/lockFetcher.ml | 16 ++++------------ src-saphe/sapheMain.ml | 4 ++-- src-saphe/satysfiCommand.ml | 16 +++++++++++++--- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src-saphe/constant.ml b/src-saphe/constant.ml index 757ac263e..51bdeb87a 100644 --- a/src-saphe/constant.ml +++ b/src-saphe/constant.ml @@ -13,27 +13,27 @@ let lock_tarball_name (package_name : package_name) (locked_version : SemanticVe Printf.sprintf "%s.%s" package_name (SemanticVersion.to_string locked_version) -let lock_directory (lock : Lock.t) : lib_path = +let lock_directory ~store_root:(absdir_store_root : abs_path) (lock : Lock.t) : abs_path = let Lock.{ package_id; locked_version } = lock in let PackageId.{ registry_hash_value; package_name } = package_id in - make_lib_path + append_to_abs_directory absdir_store_root (Printf.sprintf "packages/%s/%s/%s" registry_hash_value package_name (lock_tarball_name package_name locked_version)) -let registry_root_directory_path (absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = +let registry_root_directory_path ~store_root:(absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_store_root) (Printf.sprintf "registries/%s" registry_hash_value)) -let lock_tarball_cache_directory (registry_hash_value : registry_hash_value) : lib_path = - make_lib_path (Printf.sprintf "cache/locks/%s" registry_hash_value) +let lock_tarball_cache_directory ~store_root:(absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = + append_to_abs_directory absdir_store_root (Printf.sprintf "cache/locks/%s" registry_hash_value) -let store_root_config_path (absdir_store_root : abs_path) : abs_path = +let store_root_config_path ~store_root:(absdir_store_root : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_store_root) "saphe-store-root.yaml") diff --git a/src-saphe/lockFetcher.ml b/src-saphe/lockFetcher.ml index 06c6a1f08..a0540d301 100644 --- a/src-saphe/lockFetcher.ml +++ b/src-saphe/lockFetcher.ml @@ -55,17 +55,9 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri let Lock.{ package_id; locked_version } = lock in let PackageId.{ registry_hash_value; package_name } = package_id in let lock_tarball_name = Constant.lock_tarball_name package_name locked_version in - let absdir_lock = - let libdir_lock = Constant.lock_directory lock in - make_abs_path - (Filename.concat (get_abs_path_string absdir_store_root) (get_lib_path_string libdir_lock)) - in + let absdir_lock = Constant.lock_directory ~store_root:absdir_store_root lock in let absdir_lock_tarball_cache = - let libpath_lock_tarball_cache = Constant.lock_tarball_cache_directory registry_hash_value in - make_abs_path - (Filename.concat - (get_abs_path_string absdir_store_root) - (get_lib_path_string libpath_lock_tarball_cache)) + Constant.lock_tarball_cache_directory ~store_root:absdir_store_root registry_hash_value in (* Creates the lock cache directory if non-existent, or does nothing otherwise: *) @@ -128,8 +120,8 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri PackageConfig.load (Constant.library_package_config_path absdir_lock) in let* () = - external_resources |> foldM (fun () (name, external_source) -> - match external_source with + external_resources |> foldM (fun () (name, external_resource) -> + match external_resource with | ExternalZip{ url; checksum; extractions } -> (* Creates a directory for putting zips: *) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 74ab6607c..42dc030fd 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -629,7 +629,7 @@ let solve ~(fpath_in : string) = (* Arranges the store root config: *) let* absdir_store_root = get_store_root () in ShellCommand.mkdir_p absdir_store_root; - let abspath_store_root_config = Constant.store_root_config_path absdir_store_root in + let abspath_store_root_config = Constant.store_root_config_path ~store_root:absdir_store_root in let* (store_root_config, created) = StoreRootConfig.load_or_initialize abspath_store_root_config in begin if created then @@ -655,7 +655,7 @@ let solve ~(fpath_in : string) = (* Fetches the registry config: *) let absdir_registry_repo = - Constant.registry_root_directory_path absdir_store_root registry_hash_value + Constant.registry_root_directory_path ~store_root:absdir_store_root registry_hash_value in let git_command = "git" in (* TODO: make this changeable *) let* () = diff --git a/src-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml index c94e53827..069263ae5 100644 --- a/src-saphe/satysfiCommand.ml +++ b/src-saphe/satysfiCommand.ml @@ -32,11 +32,21 @@ type build_option = { let build_package - ~envelope:(_abspath_envelope_config : abs_path) - ~deps:(_abspath_deps_config : abs_path) + ~envelope:(abspath_envelope_config : abs_path) + ~deps:(abspath_deps_config : abs_path) ~options:(_ : build_option) : run_result = - failwith "TODO: SatysfiCommand.build_package" + let args_mandatory = + [ + "satysfi"; "build"; "package"; + get_abs_path_string abspath_envelope_config; + "--deps"; get_abs_path_string abspath_deps_config; + ] + in + let args = args_mandatory in + let command = escape_command_line args in + let exit_status = Sys.command command in + { exit_status; command } let build_document From 6c200a0730d86963f15351edd08f53194129ace6 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:06:36 +0900 Subject: [PATCH 048/381] complete `make_envelope_spec` --- src-saphe/sapheMain.ml | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 42dc030fd..1d0ed75d5 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -739,20 +739,29 @@ let make_envelope_dependency (lock_dep : LockConfig.lock_dependency) : DepsConfi } -let make_envelope_spec (locked_package : LockConfig.locked_package) : DepsConfig.envelope_spec = - let envelope_dependencies = - locked_package.lock_dependencies |> List.map make_envelope_dependency +let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.locked_package) : DepsConfig.envelope_spec = + let LockConfig.{ lock_name; lock_dependencies; lock_contents; _ } = locked_package in + let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in + let lock = + match lock_contents with + | LockConfig.RegisteredLock{ + registry_hash_value; + package_name; + version; + } -> + let package_id = PackageId.{ package_name; registry_hash_value } in + Lock.{ package_id; locked_version = version } in DepsConfig.{ - envelope_name = locked_package.lock_name; - envelope_path = failwith "TODO: make_envelope_spec, envelope_path"; + envelope_name = lock_name; + envelope_path = get_abs_path_string (Constant.lock_directory ~store_root lock); envelope_dependencies; } -let make_deps_config (lock_config : LockConfig.t) : DepsConfig.t = +let make_deps_config ~(store_root : abs_path) (lock_config : LockConfig.t) : DepsConfig.t = let envelopes = - lock_config.LockConfig.locked_packages |> List.map make_envelope_spec + lock_config.LockConfig.locked_packages |> List.map (make_envelope_spec ~store_root) in let explicit_dependencies = lock_config.LockConfig.explicit_dependencies @@ -829,6 +838,8 @@ let build } in + let* absdir_store_root = get_store_root () in + match build_input with | PackageBuildInput{ root = _absdir_package; @@ -839,7 +850,7 @@ let build } -> (* Updates the deps config: *) let* lock_config = LockConfig.load abspath_lock_config in - let deps_config = make_deps_config lock_config in + let deps_config = make_deps_config ~store_root:absdir_store_root lock_config in let* () = DepsConfig.write abspath_deps_config deps_config in Logging.end_deps_config_output abspath_deps_config; @@ -862,7 +873,7 @@ let build } -> (* Updates the deps config: *) let* lock_config = LockConfig.load abspath_lock_config in - let deps_config = make_deps_config lock_config in + let deps_config = make_deps_config ~store_root:absdir_store_root lock_config in let* () = DepsConfig.write abspath_deps_config deps_config in Logging.end_deps_config_output abspath_deps_config; From 12a04e923193b0838d8db8f0107f2dc8dcc141bd Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:11:35 +0900 Subject: [PATCH 049/381] slight refactoring about `RegisteredLock` --- src-saphe/lockConfig.ml | 18 +++++++++--------- src-saphe/sapheMain.ml | 16 ++-------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index f42be0120..ef82befb3 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -8,11 +8,7 @@ open ConfigUtil type 'a ok = ('a, config_error) result type lock_contents = - | RegisteredLock of { - registry_hash_value : registry_hash_value; - package_name : package_name; - version : SemanticVersion.t; - } + | RegisteredLock of Lock.t type lock_dependency = { depended_lock_name : lock_name; @@ -39,20 +35,24 @@ let lock_contents_decoder : lock_contents ConfigDecoder.t = "registered" ==> begin get "registry_hash_value" string >>= fun registry_hash_value -> get "package_name" package_name_decoder >>= fun package_name -> - get "version" version_decoder >>= fun version -> - succeed @@ RegisteredLock{ registry_hash_value; package_name; version } + get "version" version_decoder >>= fun locked_version -> + let package_id = PackageId.{ registry_hash_value; package_name } in + let lock = Lock.{ package_id; locked_version } in + succeed @@ RegisteredLock(lock) end; ] let lock_contents_encoder (contents : lock_contents) : (string * Yaml.value) list = match contents with - | RegisteredLock{ registry_hash_value; package_name; version } -> + | RegisteredLock(lock) -> + let Lock.{ package_id; locked_version } = lock in + let PackageId.{ registry_hash_value; package_name } = package_id in [ ("registered", `O([ ("registry_hash_value", `String(registry_hash_value)); ("package_name", `String(package_name)); - ("version", `String(SemanticVersion.to_string version)); + ("version", `String(SemanticVersion.to_string locked_version)); ])); ] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 1d0ed75d5..c7575c0a2 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -430,12 +430,10 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC let (locked_package_acc, impl_spec_acc) = solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> let lock = solution.lock in - let Lock.{ package_id; locked_version = version } = lock in - let PackageId.{ registry_hash_value; package_name } = package_id in let locked_package = LockConfig.{ lock_name = make_lock_name lock; - lock_contents = RegisteredLock{ registry_hash_value; package_name; version }; + lock_contents = RegisteredLock(lock); lock_dependencies = solution.locked_dependencies |> List.map make_lock_dependency; test_only_lock = solution.used_in_test_only; } @@ -740,18 +738,8 @@ let make_envelope_dependency (lock_dep : LockConfig.lock_dependency) : DepsConfi let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.locked_package) : DepsConfig.envelope_spec = - let LockConfig.{ lock_name; lock_dependencies; lock_contents; _ } = locked_package in + let LockConfig.{ lock_name; lock_dependencies; lock_contents = RegisteredLock(lock); _ } = locked_package in let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in - let lock = - match lock_contents with - | LockConfig.RegisteredLock{ - registry_hash_value; - package_name; - version; - } -> - let package_id = PackageId.{ package_name; registry_hash_value } in - Lock.{ package_id; locked_version = version } - in DepsConfig.{ envelope_name = lock_name; envelope_path = get_abs_path_string (Constant.lock_directory ~store_root lock); From e12320de7091e72586e1fbaeb252cf7a323caf7f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:12:30 +0900 Subject: [PATCH 050/381] update `default-registry-commit-hash.txt` --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index fa193c009..af443e700 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -8d0c366be2bb4431f21b178806613dfeec2363f5 refs/heads/temp-dev-saphe +8eb030f3a17cc237539a1b22bd5168c58e860efe refs/heads/temp-dev-saphe From d8dd17a9dd58ca6ed121f615f8c8947a3acf72c6 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:29:29 +0900 Subject: [PATCH 051/381] slight refactoring --- src-saphe/lockConfig.ml | 1 - src-saphe/sapheMain.ml | 9 ++------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index ef82befb3..68f54a4fd 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -15,7 +15,6 @@ type lock_dependency = { used_as : string; } -(* TODO: make `locked_package` keep registry, package name, and version *) type locked_package = { lock_name : lock_name; lock_contents : lock_contents; diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index c7575c0a2..7226e5892 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -429,7 +429,7 @@ let make_lock_dependency (dep : locked_dependency) : LockConfig.lock_dependency let convert_solutions_to_lock_config (solutions : package_solution list) : LockConfig.t * implementation_spec list = let (locked_package_acc, impl_spec_acc) = solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> - let lock = solution.lock in + let { lock; locked_source; _ } = solution in let locked_package = LockConfig.{ lock_name = make_lock_name lock; @@ -438,12 +438,7 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC test_only_lock = solution.used_in_test_only; } in - let impl_spec = - ImplSpec{ - lock = solution.lock; - source = solution.locked_source; - } - in + let impl_spec = ImplSpec{ lock; source = locked_source } in (Alist.extend locked_package_acc locked_package, Alist.extend impl_spec_acc impl_spec) ) (Alist.empty, Alist.empty) in From 131ae0d0e33de5393b0a6b39e976695964761e51 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:32:17 +0900 Subject: [PATCH 052/381] fix the command line handling --- bin/satysfi.ml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index 05c64f838..d8ed5d6f5 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -188,20 +188,18 @@ let command_build = let command_test_package = let open Cmdliner in - let term : unit Term.t = + Cmd.v (Cmd.info "package") Term.(const test_package $ arg_in $ flag_deps $ flag_text_mode $ flag_full_path ) - in - Cmd.v (Cmd.info "test") term let command_test = let open Cmdliner in - Cmd.group (Cmd.info "build") [ + Cmd.group (Cmd.info "test") [ command_test_package; ] From 755611eaccefaa1f3587dde0880796938d102c43 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 02:37:07 +0900 Subject: [PATCH 053/381] begin to add `saphe build` --- bin-saphe/saphe.ml | 20 ++++---------------- lib-satysfi/packages/.gitignore | 1 + 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml index f524c0fb8..1ab3b20f3 100644 --- a/bin-saphe/saphe.ml +++ b/bin-saphe/saphe.ml @@ -110,7 +110,7 @@ let flag_bytecomp = let command_build = let open Cmdliner in - let term : unit Term.t = + Cmd.v (Cmd.info "build") Term.(const build $ arg_in $ flag_output @@ -125,35 +125,23 @@ let command_build = $ flag_type_check_only $ flag_bytecomp ) - in - let info : Cmd.info = - Cmd.info "build" - in - Cmd.v info term let command_solve = let open Cmdliner in - let term : unit Term.t = + Cmd.v (Cmd.info "solve") Term.(const solve $ arg_in) - in - let info : Cmd.info = - Cmd.info "solve" - in - Cmd.v info term let () = let open Cmdliner in - let term : unit Term.t = - Term.(ret (const (`Error(true, "No subcommand specified.")))) - in let info : Cmd.info = Cmd.info ~version:SapheMain.version "saphe" in let subcommands = [ command_solve; + command_build; ] in - Stdlib.exit (Cmd.eval (Cmd.group ~default:term info subcommands)) + Stdlib.exit (Cmd.eval (Cmd.group info subcommands)) diff --git a/lib-satysfi/packages/.gitignore b/lib-satysfi/packages/.gitignore index 3e6540676..f1af02d7b 100644 --- a/lib-satysfi/packages/.gitignore +++ b/lib-satysfi/packages/.gitignore @@ -1,3 +1,4 @@ *.satysfi-lock saphe.lock.yaml satysfi-envelope.yaml +satysfi-deps.yaml From ea55b6aa89526a906875da7f8bd57bb97c3f5b8a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 03:03:00 +0900 Subject: [PATCH 054/381] introduce the notion of base directories (which has been that of library roots) --- bin/satysfi.ml | 15 ++++ src/config.ml | 20 ----- src/config.mli | 5 -- src/frontend/fontInfo.ml | 10 ++- src/frontend/fontInfo.mli | 2 +- src/frontend/main.ml | 127 +++++++++++--------------------- src/frontend/main.mli | 3 + src/frontend/primitives.cppo.ml | 16 +--- src/frontend/primitives.mli | 3 +- 9 files changed, 74 insertions(+), 127 deletions(-) diff --git a/bin/satysfi.ml b/bin/satysfi.ml index d8ed5d6f5..3487fdcd5 100644 --- a/bin/satysfi.ml +++ b/bin/satysfi.ml @@ -2,12 +2,14 @@ let build_package fpath_in fpath_deps + fpath_base text_mode_formats_str_opt show_full_path = Main.build_package ~fpath_in ~fpath_deps + ~fpath_base ~text_mode_formats_str_opt ~show_full_path @@ -17,6 +19,7 @@ let build_document fpath_out fpath_dump fpath_deps + fpath_base text_mode_formats_str_opt page_number_limit show_full_path @@ -33,6 +36,7 @@ let build_document ~fpath_out ~fpath_dump ~fpath_deps + ~fpath_base ~text_mode_formats_str_opt ~page_number_limit ~show_full_path @@ -48,12 +52,14 @@ let build_document let test_package fpath_in fpath_deps + fpath_base text_mode_formats_str_opt show_full_path = Main.test_package ~fpath_in ~fpath_deps + ~fpath_base ~text_mode_formats_str_opt ~show_full_path @@ -81,6 +87,12 @@ let flag_deps : string Cmdliner.Term.t = Arg.(required (opt (some string) None (info [ "deps" ] ~docv:"DEPS" ~doc))) +let flag_base_directory : string Cmdliner.Term.t = + let open Cmdliner in + let doc = "Specify the base directory" in + Arg.(required (opt (some string) None (info [ "base" ] ~docv:"BASEDIR" ~doc))) + + let flag_text_mode = let open Cmdliner in let doc = "Set the text-generating mode" in @@ -154,6 +166,7 @@ let command_build_document = $ flag_output $ flag_dump $ flag_deps + $ flag_base_directory $ flag_text_mode $ flag_page_number_limit $ flag_full_path @@ -173,6 +186,7 @@ let command_build_package = Term.(const build_package $ arg_in $ flag_deps + $ flag_base_directory $ flag_text_mode $ flag_full_path ) @@ -192,6 +206,7 @@ let command_test_package = Term.(const test_package $ arg_in $ flag_deps + $ flag_base_directory $ flag_text_mode $ flag_full_path ) diff --git a/src/config.ml b/src/config.ml index b8b83fa70..0e6e70e22 100644 --- a/src/config.ml +++ b/src/config.ml @@ -1,30 +1,10 @@ - open MyUtil -let satysfi_root_dirs : (string list) ref = ref [] - - -let initialize root_dirs = - satysfi_root_dirs := root_dirs - - let resolve fn = if Sys.file_exists fn then Some(fn) else None -(* Receives a file path relative to `LIBROOT` - and returns its corresponding absolute path. *) -let resolve_lib_file (relpath : lib_path) : (abs_path, abs_path list) result = - let open ResultMonad in - let dirs = !satysfi_root_dirs in - let relpathstr = get_lib_path_string relpath in - let pathcands = dirs |> List.map (fun dir -> Filename.concat dir relpathstr) in - match pathcands |> List.find_map resolve with - | None -> err (pathcands |> List.map make_abs_path) - | Some(pathstr) -> return @@ make_abs_path pathstr - - let resolve_local ~(extensions : string list) ~origin:(dir : string) ~relative:(s : string) = let open ResultMonad in let path_without_ext = Filename.concat dir s in diff --git a/src/config.mli b/src/config.mli index f3be5f2f6..1d4e76f91 100644 --- a/src/config.mli +++ b/src/config.mli @@ -1,8 +1,3 @@ - open MyUtil -val initialize : string list -> unit - -val resolve_lib_file : lib_path -> (abs_path, abs_path list) result - val resolve_local : extensions:(string list) -> origin:string -> relative:string -> (abs_path, abs_path list) result diff --git a/src/frontend/fontInfo.ml b/src/frontend/fontInfo.ml index 586f3f2ee..e047c55be 100644 --- a/src/frontend/fontInfo.ml +++ b/src/frontend/fontInfo.ml @@ -28,9 +28,11 @@ let raise_if_err = function | Error(e) -> raise (FontInfoError(e)) +(* let resolve_lib_file (relpath : lib_path) = Config.resolve_lib_file relpath |> Result.map_error (fun candidates -> CannotFindLibraryFileAsToFont(relpath, candidates)) +*) module FontHashTable : sig @@ -414,15 +416,15 @@ let get_font_dictionary (pdf : Pdf.t) : Pdf.pdfobject = Pdf.Dictionary(keyval) -let initialize () = +let initialize ~base_dir:(absdir_base : abs_path) = let res = let open ResultMonad in FontHashTable.initialize (); MathFontHashTable.initialize (); - let* abspath_S = resolve_lib_file (make_lib_path "unidata/Scripts.txt") in - let* abspath_EAW = resolve_lib_file (make_lib_path "unidata/EastAsianWidth.txt") in + let abspath_S = append_to_abs_directory absdir_base "unidata/Scripts.txt" in + let abspath_EAW = append_to_abs_directory absdir_base "unidata/EastAsianWidth.txt" in ScriptDataMap.set_from_file abspath_S abspath_EAW; - let* abspath_LB = resolve_lib_file (make_lib_path "unidata/LineBreak.txt") in + let abspath_LB = append_to_abs_directory absdir_base "unidata/LineBreak.txt" in LineBreakDataMap.set_from_file abspath_LB; return () in diff --git a/src/frontend/fontInfo.mli b/src/frontend/fontInfo.mli index 90a09c5f3..5f63fd9fb 100644 --- a/src/frontend/fontInfo.mli +++ b/src/frontend/fontInfo.mli @@ -13,7 +13,7 @@ type math_key = FontKey.t type tag = string -val initialize : unit -> unit +val initialize : base_dir:abs_path -> unit val add_single : abs_path -> key diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 9a9dcd223..410dfdc01 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -31,19 +31,19 @@ let reset (output_mode : output_mode) = (* Initialization that should be performed before typechecking *) -let initialize ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_config : runtime_config) : Typeenv.t * environment = +let initialize ~(base_dir : abs_path) ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_config : runtime_config) : Typeenv.t * environment = FreeID.initialize (); BoundID.initialize (); EvalVarID.initialize (); StoreID.initialize (); - FontInfo.initialize (); + FontInfo.initialize ~base_dir; let (tyenv, env) = match output_mode with | TextMode(_) -> Primitives.make_text_mode_environments runtime_config | PdfMode -> - Primitives.make_pdf_mode_environments runtime_config + Primitives.make_pdf_mode_environments ~base_dir runtime_config in begin if is_bytecomp_mode then @@ -1220,53 +1220,6 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> report_error System [ NormalLine(s); ] -(* -let setup_root_dirs ~(no_default_config : bool) ~(extra_config_paths : (string list) option) (curdir : string) : abs_path = - let runtime_dirs = - if Sys.os_type = "Win32" then - match Sys.getenv_opt "SATYSFI_RUNTIME" with - | None -> [] - | Some(s) -> [ s ] - else - [ "/usr/local/share/satysfi"; "/usr/share/satysfi" ] - in - let home_dirs = - if Sys.os_type = "Win32" then - match Sys.getenv_opt "userprofile" with - | None -> [] - | Some(s) -> [ Filename.concat s ".satysfi" ] - else - match Sys.getenv_opt "HOME" with - | None -> [] - | Some(s) -> [ Filename.concat s ".satysfi" ] - in - let default_dirs = - if no_default_config then - [] - else - List.concat [ home_dirs; runtime_dirs ] - in - let extra_dirs = - match extra_config_paths with - | None -> [ Filename.concat curdir ".satysfi" ] - | Some(extra_dirs) -> extra_dirs - in - let dirs = List.concat [ extra_dirs; default_dirs ] in - begin - match dirs with - | [] -> raise NoLibraryRootDesignation - | _ :: _ -> Config.initialize dirs - end; - let libpath = Constant.library_root_config_file in - match Config.resolve_lib_file libpath with - | Error(candidates) -> - raise (ConfigError(LibraryRootConfigNotFoundIn(libpath, candidates))) - - | Ok(abspath) -> - make_abs_path (Filename.dirname (get_abs_path_string abspath)) -*) - - let get_candidate_file_extensions (output_mode : output_mode) = match output_mode with | PdfMode -> [ ".satyh"; ".satyg" ] @@ -1335,6 +1288,7 @@ let get_job_directory (abspath : abs_path) : string = let build_package ~(fpath_in : string) ~(fpath_deps : string) + ~(fpath_base : string) ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) = @@ -1344,6 +1298,7 @@ let build_package let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in + let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -1358,7 +1313,7 @@ let build_package let extensions = get_candidate_file_extensions output_mode in let job_directory = get_job_directory abspath_in in let runtime_config = { job_directory } in - let (tyenv_prim, _env) = initialize ~is_bytecomp_mode:false output_mode runtime_config in + let (tyenv_prim, _env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in Logging.deps_config_file display_config abspath_deps_config; let deps_config = load_deps_config abspath_deps_config in @@ -1390,6 +1345,7 @@ let build_document ~(fpath_out : string) ~(fpath_dump : string) ~(fpath_deps : string) + ~(fpath_base : string) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) ~(show_full_path : bool) @@ -1409,6 +1365,7 @@ let build_document let abspath_out = make_absolute_if_relative ~origin:absdir_current fpath_out in let abspath_dump = make_absolute_if_relative ~origin:absdir_current fpath_dump in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in + let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -1438,44 +1395,45 @@ let build_document in let extensions = get_candidate_file_extensions output_mode in - let (tyenv_prim, env) = initialize ~is_bytecomp_mode output_mode runtime_config in - - Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in - - Logging.target_file display_config abspath_out; - - let dump_file_exists = CrossRef.initialize abspath_dump in - Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; - - let (genv, configenv, libs) = - check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config - in - - (* Resolve dependency of the document and the local source files: *) - let (sorted_locals, utdoc) = - match OpenFileDependencyResolver.main display_config ~extensions input_kind configenv abspath_in with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) - in - - (* Typechecking and elaboration: *) - let (libs_local, ast_doc) = - match EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) - in - let libs = List.append libs libs_local in - if type_check_only then - () - else - preprocess_and_evaluate display_config pdf_config ~page_number_limit ~is_bytecomp_mode output_mode ~run_tests:false env libs ast_doc abspath_in abspath_out abspath_dump + let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode output_mode runtime_config in + + Logging.deps_config_file display_config abspath_deps_config; + let deps_config = load_deps_config abspath_deps_config in + + Logging.target_file display_config abspath_out; + + let dump_file_exists = CrossRef.initialize abspath_dump in + Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; + + let (genv, configenv, libs) = + check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config + in + + (* Resolve dependency of the document and the local source files: *) + let (sorted_locals, utdoc) = + match OpenFileDependencyResolver.main display_config ~extensions input_kind configenv abspath_in with + | Ok(pair) -> pair + | Error(e) -> raise (ConfigError(e)) + in + + (* Typechecking and elaboration: *) + let (libs_local, ast_doc) = + match EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with + | Ok(pair) -> pair + | Error(e) -> raise (ConfigError(e)) + in + let libs = List.append libs libs_local in + if type_check_only then + () + else + preprocess_and_evaluate display_config pdf_config ~page_number_limit ~is_bytecomp_mode output_mode ~run_tests:false env libs ast_doc abspath_in abspath_out abspath_dump ) let test_package ~(fpath_in : string) ~(fpath_deps : string) + ~(fpath_base : string) ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) = @@ -1485,6 +1443,7 @@ let test_package let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in + let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in let job_directory = get_job_directory abspath_in in let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -1498,7 +1457,7 @@ let test_package let runtime_config = { job_directory } in let extensions = get_candidate_file_extensions output_mode in - let (tyenv_prim, env) = initialize ~is_bytecomp_mode:false output_mode runtime_config in + let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in Logging.deps_config_file display_config abspath_deps_config; let deps_config = load_deps_config abspath_deps_config in diff --git a/src/frontend/main.mli b/src/frontend/main.mli index 07621aef0..fe5c8ae6f 100644 --- a/src/frontend/main.mli +++ b/src/frontend/main.mli @@ -4,6 +4,7 @@ val version : string val build_package : fpath_in:string -> fpath_deps:string -> + fpath_base:string -> text_mode_formats_str_opt:(string option) -> show_full_path:bool -> unit @@ -13,6 +14,7 @@ val build_document : fpath_out:string -> fpath_dump:string -> fpath_deps:string -> + fpath_base:string -> text_mode_formats_str_opt:(string option) -> page_number_limit:int -> show_full_path:bool -> @@ -28,6 +30,7 @@ val build_document : val test_package : fpath_in:string -> fpath_deps:string -> + fpath_base:string -> text_mode_formats_str_opt:(string option) -> show_full_path:bool -> unit diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index 713d02d79..d1def3229 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -760,19 +760,11 @@ let make_environments (runtime_config : runtime_config) table = (tyenv, env) -let resolve_lib_file (libpath : lib_path) = - Config.resolve_lib_file libpath - - (* TODO: should depend on the current language *) -let make_pdf_mode_environments (runtime_config : runtime_config) = - match resolve_lib_file (make_lib_path "hyph/english.satysfi-hyph") with - | Error(_) -> - failwith "TODO: failed to load hyphenation dictionary" - - | Ok(abspath_hyphen) -> - default_hyphen_dictionary := LoadHyph.main abspath_hyphen; - make_environments runtime_config pdf_mode_table +let make_pdf_mode_environments ~base_dir:(absdir_base : abs_path) (runtime_config : runtime_config) = + let abspath_hyphen = append_to_abs_directory absdir_base "hyph/english.satysfi-hyph" in + default_hyphen_dictionary := LoadHyph.main abspath_hyphen; + make_environments runtime_config pdf_mode_table let make_text_mode_environments (runtime_config : runtime_config) = diff --git a/src/frontend/primitives.mli b/src/frontend/primitives.mli index 0ab300078..74bf848e2 100644 --- a/src/frontend/primitives.mli +++ b/src/frontend/primitives.mli @@ -1,4 +1,5 @@ +open MyUtil open Types open StaticEnv open LengthInterface @@ -9,7 +10,7 @@ val itemize_type : unit -> ('a, 'b) typ val get_pdf_mode_initial_context : length -> HorzBox.context_main -val make_pdf_mode_environments : runtime_config -> Typeenv.t * environment +val make_pdf_mode_environments : base_dir:abs_path -> runtime_config -> Typeenv.t * environment val make_text_mode_environments : runtime_config -> Typeenv.t * environment From 342403194d4232b789752a286cc4a44c6b5dfadb Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 03:06:38 +0900 Subject: [PATCH 055/381] make `saphe` pass the store root as a base directory --- src-saphe/sapheMain.ml | 2 ++ src-saphe/satysfiCommand.ml | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 7226e5892..26126380d 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -842,6 +842,7 @@ let build SatysfiCommand.(build_package ~envelope:abspath_envelope_config ~deps:abspath_deps_config + ~base_dir:absdir_store_root ~options) in return () @@ -867,6 +868,7 @@ let build ~out:abspath_out ~dump:abspath_dump ~deps:abspath_deps_config + ~base_dir:absdir_store_root ~options) in return () diff --git a/src-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml index 069263ae5..5a3c850a2 100644 --- a/src-saphe/satysfiCommand.ml +++ b/src-saphe/satysfiCommand.ml @@ -34,6 +34,7 @@ type build_option = { let build_package ~envelope:(abspath_envelope_config : abs_path) ~deps:(abspath_deps_config : abs_path) + ~base_dir:(absdir_base : abs_path) ~options:(_ : build_option) : run_result = let args_mandatory = @@ -41,6 +42,7 @@ let build_package "satysfi"; "build"; "package"; get_abs_path_string abspath_envelope_config; "--deps"; get_abs_path_string abspath_deps_config; + "--base"; get_abs_path_string absdir_base; ] in let args = args_mandatory in @@ -54,6 +56,7 @@ let build_document ~out:(abspath_out : abs_path) ~dump:(abspath_dump : abs_path) ~deps:(abspath_deps_config : abs_path) + ~base_dir:(absdir_base : abs_path) ~options:(_ : build_option) : run_result = let args_mandatory = @@ -63,6 +66,7 @@ let build_document "--output"; get_abs_path_string abspath_out; "--dump"; get_abs_path_string abspath_dump; "--deps"; get_abs_path_string abspath_deps_config; + "--base"; get_abs_path_string absdir_base; ] in let args = args_mandatory in From c8c546f0cf66d017d9df095cb3cee33d4f1ff356 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 03:23:16 +0900 Subject: [PATCH 056/381] add `--full-path` in an ad-hoc manner --- src-saphe/satysfiCommand.ml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml index 5a3c850a2..6eae2516d 100644 --- a/src-saphe/satysfiCommand.ml +++ b/src-saphe/satysfiCommand.ml @@ -43,6 +43,7 @@ let build_package get_abs_path_string abspath_envelope_config; "--deps"; get_abs_path_string abspath_deps_config; "--base"; get_abs_path_string absdir_base; + "--full-path"; (* TODO: refine this *) ] in let args = args_mandatory in @@ -67,6 +68,7 @@ let build_document "--dump"; get_abs_path_string abspath_dump; "--deps"; get_abs_path_string abspath_deps_config; "--base"; get_abs_path_string absdir_base; + "--full-path"; (* TODO: refine this *) ] in let args = args_mandatory in From eace44d14043277164644a098726b34c4fde3a24 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 04:25:36 +0900 Subject: [PATCH 057/381] separate `satysfi-common` for sharing data formats --- saphe.opam | 2 + satysfi-common.opam | 31 +++++++++++++ satysfi.opam | 2 + src-common/dune | 9 ++++ src-common/envelopeSystemBase.ml | 51 +++++++++++++++++++++ src-saphe/dune | 1 + src-saphe/envelopeConfig.ml | 33 ++----------- src-saphe/packageConfig.ml | 1 + src-saphe/packageConfig.mli | 1 + src-saphe/packageSystemBase.ml | 21 +-------- src-saphe/sapheMain.ml | 22 ++++----- src/dune | 1 + src/frontend/depsConfig.ml | 2 +- src/frontend/envelopeSystemBase.ml | 15 ------ src/frontend/main.ml | 1 - src/frontend/openFileDependencyResolver.ml | 1 - src/frontend/openFileDependencyResolver.mli | 1 - src/frontend/types.cppo.ml | 4 ++ 18 files changed, 118 insertions(+), 81 deletions(-) create mode 100644 satysfi-common.opam create mode 100644 src-common/dune create mode 100644 src-common/envelopeSystemBase.ml delete mode 100644 src/frontend/envelopeSystemBase.ml diff --git a/saphe.opam b/saphe.opam index 27e5f8e8a..1287e14bf 100644 --- a/saphe.opam +++ b/saphe.opam @@ -36,6 +36,8 @@ depends: [ "alcotest" {with-test & >= "1.4.0"} "yaml" {>= "2.1.0"} "0install-solver" {>= "2.0" & < "3.0"} + "satysfi-common" + "satysfi-util" "semver2" {>= "1.2.0"} "uri" {>= "4.2.0"} ] diff --git a/satysfi-common.opam b/satysfi-common.opam new file mode 100644 index 000000000..0496118e2 --- /dev/null +++ b/satysfi-common.opam @@ -0,0 +1,31 @@ +opam-version: "2.0" +name: "satysfi-common" +version: "0.0.1" +maintainer: "Takashi Suwa" +authors: [ + "Takashi Suwa" +] +homepage: "https://github.com/gfngfn/SATySFi" +dev-repo: "git+https://github.com/gfngfn/SATySFi.git" +bug-reports: "https://github.com/gfngfn/SATySFi/issues" +build: [ + ["mkdir" "-p" "temp"] + [make "-f" "Makefile" "PREFIX=%{prefix}%"] +] +install: [ + [make "-f" "Makefile" "install" "PREFIX=%{prefix}%"] +] +remove: [ + [make "-f" "Makefile" "uninstall" "PREFIX=%{prefix}%"] +] +depends: [ + "ocaml" {>= "4.12.0"} + "dune" {build} + "ocamlfind" {build} + "ppx_deriving" + "alcotest" {with-test & >= "1.4.0"} + "satysfi-util" +] +synopsis: "" +description: """ +""" diff --git a/satysfi.opam b/satysfi.opam index e461ce0e6..c8cc43d24 100644 --- a/satysfi.opam +++ b/satysfi.opam @@ -41,6 +41,8 @@ depends: [ "alcotest" {with-test & >= "1.4.0"} "yaml" {>= "2.1.0"} "0install-solver" {>= "2.0" & < "3.0"} + "satysfi-common" + "satysfi-util" "semver2" {>= "1.2.0"} "uri" {>= "4.2.0"} ] diff --git a/src-common/dune b/src-common/dune new file mode 100644 index 000000000..54d9a88fd --- /dev/null +++ b/src-common/dune @@ -0,0 +1,9 @@ +(library + (name common) + (public_name satysfi-common) + (flags (:standard -bin-annot -thread -safe-string)) + (wrapped false) + (libraries + satysfi-util) + (preprocess + (pps ppx_deriving.show))) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml new file mode 100644 index 000000000..a2cb8e69d --- /dev/null +++ b/src-common/envelopeSystemBase.ml @@ -0,0 +1,51 @@ + +open MyUtil + + +type envelope_name = string + +type envelope_info = { + envelope_name : envelope_name; + envelope_directory : abs_path; + envelope_dependencies : envelope_name list; +} + +type relative_path = string +[@@deriving show] + +type font_spec = { + font_item_name : string; + used_as_math_font : bool; +} +[@@deriving show] + +type font_file_contents = + | OpentypeSingle of font_spec + | OpentypeCollection of font_spec list +[@@deriving show] + +type font_file_description = { + font_file_path : relative_path; + font_file_contents : font_file_contents; +} +[@@deriving show] + +type package_conversion_spec = unit (* TODO *) +[@@deriving show] + +type envelope_contents = + | Library of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + conversion_specs : package_conversion_spec list; + } + | Font of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } +[@@deriving show] + +type envelope_config = { + envelope_contents : envelope_contents; +} diff --git a/src-saphe/dune b/src-saphe/dune index 62c480d5e..5841e0f38 100644 --- a/src-saphe/dune +++ b/src-saphe/dune @@ -5,6 +5,7 @@ (libraries 0install-solver cmdliner + satysfi-common satysfi-util uri) (preprocess diff --git a/src-saphe/envelopeConfig.ml b/src-saphe/envelopeConfig.ml index 90f76c2b4..161f343b3 100644 --- a/src-saphe/envelopeConfig.ml +++ b/src-saphe/envelopeConfig.ml @@ -1,33 +1,9 @@ open MyUtil -open ConfigError -open PackageSystemBase +open EnvelopeSystemBase -type relative_path = string - -type font_file_description = { - font_file_path : relative_path; - font_file_contents : font_file_contents; -} - -type package_conversion_spec = unit (* TODO *) - -type envelope_contents = - | Library of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - conversion_specs : package_conversion_spec list; - } - | Font of { - main_module_name : string; - font_file_descriptions : font_file_description list; - } - -type t = { - envelope_contents : envelope_contents; -} +type t = envelope_config let font_spec_encoder (font_spec : font_spec) : Yaml.value = @@ -73,10 +49,7 @@ let envelope_config_encoder (envelope_config : t) : Yaml.value = ]) -let write (abspath_envelope_config : abs_path) (envelope_config : t) : (unit, config_error) result = +let write (abspath_envelope_config : abs_path) (envelope_config : t) : (unit, string) result = let yaml = envelope_config_encoder envelope_config in let data = encode_yaml yaml in write_file abspath_envelope_config data - |> Result.map_error (fun message -> - CannotWriteEnvelopeConfig{ message; path = abspath_envelope_config } - ) diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index b3088e0ec..6416ede03 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -2,6 +2,7 @@ open MyUtil open ConfigError open ConfigUtil +open EnvelopeSystemBase open PackageSystemBase diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index d2550f65b..a1d1a755d 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -1,6 +1,7 @@ open MyUtil open ConfigError +open EnvelopeSystemBase open PackageSystemBase type package_contents = diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index d5d3139f3..00a97997e 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -1,8 +1,6 @@ open MyUtil - -type relative_path = string -[@@deriving show] +open EnvelopeSystemBase type lock_name = string [@@deriving show] @@ -182,23 +180,6 @@ type external_resource = } [@@deriving show { with_path = false }] -type font_spec = { - font_item_name : string; - used_as_math_font : bool; -} -[@@deriving show] - -type font_file_contents = - | OpentypeSingle of font_spec - | OpentypeCollection of font_spec list -[@@deriving show] - -type font_file_description = { - font_file_path : relative_path; - font_file_contents : font_file_contents; -} -[@@deriving show { with_path = false }] - type parsed_package_contents = | ParsedLibrary of { main_module_name : string; diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 26126380d..8911ead93 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -1,5 +1,6 @@ open MyUtil +open EnvelopeSystemBase open PackageSystemBase open ConfigError @@ -497,7 +498,7 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E test_directories; _ } -> - EnvelopeConfig.{ + { envelope_contents = Library{ main_module_name; @@ -509,17 +510,9 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E | PackageConfig.Font{ main_module_name; - font_file_descriptions = descrs; + font_file_descriptions; } -> - let font_file_descriptions = - descrs |> List.map (fun descr -> - let { font_file_path; font_file_contents } = descr in - EnvelopeConfig.{ font_file_path; font_file_contents } - ) - in - EnvelopeConfig.{ - envelope_contents = Font{ main_module_name; font_file_descriptions }; - } + { envelope_contents = Font{ main_module_name; font_file_descriptions } } let get_store_root () : (abs_path, config_error) result = @@ -587,7 +580,12 @@ let solve ~(fpath_in : string) = (* Writes the envelope config: *) let envelope_config = make_envelope_config package_contents in - let* () = EnvelopeConfig.write abspath_envelope_config envelope_config in + let* () = + EnvelopeConfig.write abspath_envelope_config envelope_config + |> Result.map_error (fun message -> + CannotWriteEnvelopeConfig{ message; path = abspath_envelope_config } + ) + in Logging.end_envelope_config_output abspath_envelope_config; let dependencies_with_flags = diff --git a/src/dune b/src/dune index 683b93eb8..ffbd862a1 100644 --- a/src/dune +++ b/src/dune @@ -16,6 +16,7 @@ ocamlgraph omd otfed + satysfi-common satysfi-util semver2 str diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml index c9adc11af..69bea5cbe 100644 --- a/src/frontend/depsConfig.ml +++ b/src/frontend/depsConfig.ml @@ -16,5 +16,5 @@ type t = { } -let load (_abspath : abs_path) : (t, config_error) result = +let load (_abspath_deps_config : abs_path) : (t, config_error) result = failwith "TODO: DepsConfig.load" diff --git a/src/frontend/envelopeSystemBase.ml b/src/frontend/envelopeSystemBase.ml deleted file mode 100644 index 6358e0095..000000000 --- a/src/frontend/envelopeSystemBase.ml +++ /dev/null @@ -1,15 +0,0 @@ - -open MyUtil - - -type envelope_name = string - -type envelope_info = { - envelope_name : envelope_name; - envelope_directory : abs_path; - envelope_dependencies : envelope_name list; -} - -type input_kind = - | InputSatysfi - | InputMarkdown diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 410dfdc01..5f7bb09a7 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1,6 +1,5 @@ open MyUtil -open EnvelopeSystemBase open Types open StaticEnv open ConfigError diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index 8105117e5..d737ece8c 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -1,7 +1,6 @@ open MyUtil open Types -open EnvelopeSystemBase open ConfigError diff --git a/src/frontend/openFileDependencyResolver.mli b/src/frontend/openFileDependencyResolver.mli index ca0954117..fbb17de0c 100644 --- a/src/frontend/openFileDependencyResolver.mli +++ b/src/frontend/openFileDependencyResolver.mli @@ -1,7 +1,6 @@ open MyUtil open Types -open EnvelopeSystemBase open ConfigError val main : Logging.config -> extensions:(string list) -> input_kind -> EnvelopeConfig.t GlobalTypeenv.t -> abs_path -> ((abs_path * untyped_library_file) list * untyped_document_file, config_error) result diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index 0f8dabc0a..68184b0b8 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -5,6 +5,10 @@ open SyntaxBase open MyUtil +type input_kind = + | InputSatysfi + | InputMarkdown + type parse_error = | CannotProgressParsing of Range.t | IllegalItemDepth of { From 6025347abd3f02dd774d73978240eb8404d0a475 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 04:44:46 +0900 Subject: [PATCH 058/381] refactor `DepsConfig` --- src-common/envelopeSystemBase.ml | 15 +++++++-------- src/frontend/closedEnvelopeDependencyResolver.ml | 11 ++++++++++- src/frontend/depsConfig.ml | 4 ++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml index a2cb8e69d..d3a878afe 100644 --- a/src-common/envelopeSystemBase.ml +++ b/src-common/envelopeSystemBase.ml @@ -1,15 +1,9 @@ - +(* open MyUtil - +*) type envelope_name = string -type envelope_info = { - envelope_name : envelope_name; - envelope_directory : abs_path; - envelope_dependencies : envelope_name list; -} - type relative_path = string [@@deriving show] @@ -49,3 +43,8 @@ type envelope_contents = type envelope_config = { envelope_contents : envelope_contents; } + +type envelope_dependency = { + dependency_name : envelope_name; + dependency_used_as : string; +} diff --git a/src/frontend/closedEnvelopeDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml index fcf707396..305470b49 100644 --- a/src/frontend/closedEnvelopeDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -11,6 +11,13 @@ type 'a ok = ('a, config_error) result module EnvelopeDependencyGraph = DependencyGraph.Make(String) +type envelope_info = { + envelope_name : envelope_name; + envelope_directory : abs_path; + envelope_dependencies : envelope_dependency list; +} + + let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(extensions : string list) (deps_config : DepsConfig.t) : ((envelope_name * (EnvelopeConfig.t * untyped_envelope)) list) ok = let open ResultMonad in @@ -52,7 +59,9 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex (* Add edges: *) let* graph = entryacc |> Alist.to_list |> foldM (fun graph (envelope_info, vertex) -> - envelope_info.envelope_dependencies |> foldM (fun graph envelope_name_dep -> + envelope_info.envelope_dependencies |> foldM (fun graph envelope_dependency -> + let { dependency_name = envelope_name_dep; _ } = envelope_dependency in + (* TODO: use `dependency_used_as` *) begin match graph |> EnvelopeDependencyGraph.get_vertex envelope_name_dep with | None -> diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml index 69bea5cbe..b522977d6 100644 --- a/src/frontend/depsConfig.ml +++ b/src/frontend/depsConfig.ml @@ -6,8 +6,8 @@ open ConfigError type envelope = { envelope_name : envelope_name; - envelope_path : string; - envelope_dependencies : envelope_name list; + envelope_path : relative_path; + envelope_dependencies : envelope_dependency list; test_only_envelope : bool; } From 5009cc22e6b8a12d75afec67bbdb55bfd0067104 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 04:53:50 +0900 Subject: [PATCH 059/381] refactor `DepsConfig` (2) --- src-common/envelopeSystemBase.ml | 12 ++++++++++ src-saphe/depsConfig.ml | 22 ++++--------------- src-saphe/sapheMain.ml | 20 ++++++++++++----- .../closedEnvelopeDependencyResolver.ml | 6 ++--- src/frontend/depsConfig.ml | 11 +--------- 5 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml index d3a878afe..bc12436df 100644 --- a/src-common/envelopeSystemBase.ml +++ b/src-common/envelopeSystemBase.ml @@ -48,3 +48,15 @@ type envelope_dependency = { dependency_name : envelope_name; dependency_used_as : string; } + +type envelope_spec = { + envelope_name : envelope_name; + envelope_path : string; + envelope_dependencies : envelope_dependency list; + test_only_envelope : bool; +} + +type deps_config = { + envelopes : envelope_spec list; + explicit_dependencies : envelope_dependency list; +} diff --git a/src-saphe/depsConfig.ml b/src-saphe/depsConfig.ml index 108ff223f..8bd94a7a1 100644 --- a/src-saphe/depsConfig.ml +++ b/src-saphe/depsConfig.ml @@ -1,25 +1,10 @@ open MyUtil +open EnvelopeSystemBase open ConfigError -type envelope_name = string - -type envelope_dependency = { - dependency_name : envelope_name; - dependency_used_as : string; -} - -type envelope_spec = { - envelope_name : envelope_name; - envelope_path : string; - envelope_dependencies : envelope_dependency list; -} - -type t = { - envelopes : envelope_spec list; - explicit_dependencies : envelope_dependency list; -} +type t = deps_config let envelope_dependency_encoder (dep : envelope_dependency) : Yaml.value = @@ -31,11 +16,12 @@ let envelope_dependency_encoder (dep : envelope_dependency) : Yaml.value = let envelope_spec_encoder (spec : envelope_spec) : Yaml.value = - let { envelope_name; envelope_path; envelope_dependencies } = spec in + let { envelope_name; envelope_path; envelope_dependencies; test_only_envelope } = spec in `O([ ("name", `String(envelope_name)); ("path", `String(envelope_path)); ("dependencies", `A(envelope_dependencies |> List.map envelope_dependency_encoder)); + ("test_only", `Bool(test_only_envelope)); ]) let deps_config_encoder (deps_config : t) : Yaml.value = diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 8911ead93..447de8324 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -723,20 +723,28 @@ type build_input = } -let make_envelope_dependency (lock_dep : LockConfig.lock_dependency) : DepsConfig.envelope_dependency = - DepsConfig.{ +let make_envelope_dependency (lock_dep : LockConfig.lock_dependency) : envelope_dependency = + { dependency_name = lock_dep.depended_lock_name; dependency_used_as = lock_dep.used_as; } -let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.locked_package) : DepsConfig.envelope_spec = - let LockConfig.{ lock_name; lock_dependencies; lock_contents = RegisteredLock(lock); _ } = locked_package in +let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.locked_package) : envelope_spec = + let + LockConfig.{ + lock_name; + lock_dependencies; + lock_contents = RegisteredLock(lock); + test_only_lock; + } = locked_package + in let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in - DepsConfig.{ + { envelope_name = lock_name; envelope_path = get_abs_path_string (Constant.lock_directory ~store_root lock); envelope_dependencies; + test_only_envelope = test_only_lock; } @@ -748,7 +756,7 @@ let make_deps_config ~(store_root : abs_path) (lock_config : LockConfig.t) : Dep lock_config.LockConfig.explicit_dependencies |> List.map make_envelope_dependency in - DepsConfig.{ envelopes; explicit_dependencies } + { envelopes; explicit_dependencies } let build diff --git a/src/frontend/closedEnvelopeDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml index 305470b49..9955e4a0a 100644 --- a/src/frontend/closedEnvelopeDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -21,12 +21,12 @@ type envelope_info = { let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(extensions : string list) (deps_config : DepsConfig.t) : ((envelope_name * (EnvelopeConfig.t * untyped_envelope)) list) ok = let open ResultMonad in - let DepsConfig.{ envelopes } = deps_config in + let { envelopes; _ } = deps_config in (* Add vertices: *) let* (graph, entryacc) = - envelopes |> foldM (fun (graph, entryacc) (envelope : DepsConfig.envelope) -> - let DepsConfig.{ envelope_name; envelope_path; envelope_dependencies; test_only_envelope; _ } = envelope in + envelopes |> foldM (fun (graph, entryacc) (envelope_spec : envelope_spec) -> + let { envelope_name; envelope_path; envelope_dependencies; test_only_envelope } = envelope_spec in if test_only_envelope && not use_test_only_envelope then (* Skips test-only envelopes when using sources only: *) return (graph, entryacc) diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml index b522977d6..1f294c694 100644 --- a/src/frontend/depsConfig.ml +++ b/src/frontend/depsConfig.ml @@ -4,16 +4,7 @@ open EnvelopeSystemBase open ConfigError -type envelope = { - envelope_name : envelope_name; - envelope_path : relative_path; - envelope_dependencies : envelope_dependency list; - test_only_envelope : bool; -} - -type t = { - envelopes : envelope list; -} +type t = deps_config let load (_abspath_deps_config : abs_path) : (t, config_error) result = From 9a611f2f40bda76165b54422ba1a231ccc964557 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 05:19:45 +0900 Subject: [PATCH 060/381] develop `DepsConfig.load` --- src-saphe/configError.ml | 3 -- src-saphe/sapheMain.ml | 42 ++++++++++----------------- src-util/yamlDecoder.ml | 12 ++++++++ src-util/yamlDecoder.mli | 2 ++ src/frontend/configError.ml | 37 +++++++++++++++++++++++ src/frontend/configUtil.ml | 4 +++ src/frontend/depsConfig.ml | 34 ++++++++++++++++++++-- src/frontend/main.ml | 58 +++++++++++++++++++++++++++++++++++++ 8 files changed, 160 insertions(+), 32 deletions(-) create mode 100644 src/frontend/configUtil.ml diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 97e73ada3..292feee50 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -21,9 +21,6 @@ type yaml_error = expected_tags : string list; got_tags : string list; } -(* - | UnexpectedTag of YamlDecoder.context * string -*) | BreaksVersionRequirement of YamlDecoder.context * SemanticVersion.requirement | NotASemanticVersion of YamlDecoder.context * string | NotAVersionRequirement of YamlDecoder.context * string diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 447de8324..7c3681cf0 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -36,20 +36,8 @@ let report_error (lines : line list) : unit = ) true |> ignore -let show_yaml_context (context : YamlDecoder.context) : string = - match context with - | [] -> - "" - - | _ :: _ -> - let s_context = - let open YamlDecoder in - context |> List.map (function - | Field(field) -> Printf.sprintf ".%s" field - | Index(index) -> Printf.sprintf ".[%d]" index - ) |> String.concat "" - in - Printf.sprintf " (context: %s)" s_context +let show_yaml_context (yctx : YamlDecoder.context) = + Printf.sprintf "(context: %s)" (YamlDecoder.show_yaml_context yctx) let make_yaml_error_lines : yaml_error -> line list = function @@ -57,46 +45,46 @@ let make_yaml_error_lines : yaml_error -> line list = function [ NormalLine(Printf.sprintf "parse error: %s" s) ] | FieldNotFound(yctx, field) -> - [ NormalLine(Printf.sprintf "field '%s' not found%s" field (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "field '%s' not found %s" field (show_yaml_context yctx)) ] | NotAFloat(yctx) -> - [ NormalLine(Printf.sprintf "not a float value%s" (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a float value %s" (show_yaml_context yctx)) ] | NotAString(yctx) -> - [ NormalLine(Printf.sprintf "not a string value%s" (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a string value %s" (show_yaml_context yctx)) ] | NotABool(yctx) -> - [ NormalLine(Printf.sprintf "not a Boolean value%s" (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a Boolean value %s" (show_yaml_context yctx)) ] | NotAnArray(yctx) -> - [ NormalLine(Printf.sprintf "not an array%s" (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not an array %s" (show_yaml_context yctx)) ] | NotAnObject(yctx) -> - [ NormalLine(Printf.sprintf "not an object%s" (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not an object %s" (show_yaml_context yctx)) ] | BreaksVersionRequirement(yctx, requirement) -> - [ NormalLine(Printf.sprintf "breaks the requrement '%s'%s" (SemanticVersion.requirement_to_string requirement)(show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "breaks the requrement '%s' %s" (SemanticVersion.requirement_to_string requirement)(show_yaml_context yctx)) ] | NotASemanticVersion(yctx, s) -> - [ NormalLine(Printf.sprintf "not a semantic version: '%s'%s" s (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a semantic version: '%s' %s" s (show_yaml_context yctx)) ] | NotAVersionRequirement(yctx, s) -> - [ NormalLine(Printf.sprintf "not a version requirement: '%s'%s" s (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a version requirement: '%s' %s" s (show_yaml_context yctx)) ] | InvalidPackageName(yctx, s) -> - [ NormalLine(Printf.sprintf "not a package name: '%s'%s" s (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a package name: '%s' %s" s (show_yaml_context yctx)) ] | DuplicateRegistryHashValue{ context = yctx; registry_hash_value } -> - [ NormalLine(Printf.sprintf "More than one definition for registry hash value '%s'%s" registry_hash_value (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "More than one definition for registry hash value '%s' %s" registry_hash_value (show_yaml_context yctx)) ] | CannotBeUsedAsAName(yctx, s) -> - [ NormalLine(Printf.sprintf "'%s' cannot be used as a name%s" s (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "'%s' cannot be used as a name %s" s (show_yaml_context yctx)) ] | UnsupportedConfigFormat(format) -> [ NormalLine(Printf.sprintf "unsupported config format '%s'" format) ] | NotACommand{ context = yctx; prefix = _; string = s } -> - [ NormalLine(Printf.sprintf "not a command: '%s'%s" s (show_yaml_context yctx)) ] + [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] | BranchNotFound{ context = yctx; expected_tags; got_tags } -> [ diff --git a/src-util/yamlDecoder.ml b/src-util/yamlDecoder.ml index 8ac44dde7..a5f9fea45 100644 --- a/src-util/yamlDecoder.ml +++ b/src-util/yamlDecoder.ml @@ -9,6 +9,18 @@ type context = [@@deriving show { with_path = false }] +let show_yaml_context (context : context) : string = + match context with + | [] -> + "top" + + | _ :: _ -> + context |> List.map (function + | Field(field) -> Printf.sprintf ".%s" field + | Index(index) -> Printf.sprintf ".[%d]" index + ) |> String.concat "" + + module type ErrorType = sig type t diff --git a/src-util/yamlDecoder.mli b/src-util/yamlDecoder.mli index 2628af1e0..eefe3dd8f 100644 --- a/src-util/yamlDecoder.mli +++ b/src-util/yamlDecoder.mli @@ -8,6 +8,8 @@ type context = context_element list [@@deriving show] +val show_yaml_context : context -> string + module type ErrorType = sig type t diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index f8c3a8386..2989a9e97 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -4,6 +4,41 @@ open EnvelopeSystemBase open Types +type yaml_error = + | ParseError of string + | FieldNotFound of YamlDecoder.context * string + | NotAFloat of YamlDecoder.context + | NotAString of YamlDecoder.context + | NotABool of YamlDecoder.context + | NotAnArray of YamlDecoder.context + | NotAnObject of YamlDecoder.context + | BranchNotFound of { + context : YamlDecoder.context; + expected_tags : string list; + got_tags : string list; + } + | MoreThanOneBranchFound of { + context : YamlDecoder.context; + expected_tags : string list; + got_tags : string list; + } +[@@deriving show { with_path = false }] + +module YamlError = struct + type t = yaml_error + let parse_error s = ParseError(s) + let field_not_found context s = FieldNotFound(context, s) + let not_a_float context = NotAFloat(context) + let not_a_string context = NotAString(context) + let not_a_bool context = NotABool(context) + let not_an_array context = NotAnArray(context) + let not_an_object context = NotAnObject(context) + let branch_not_found context expected_tags got_tags = + BranchNotFound{ context; expected_tags; got_tags } + let more_than_one_branch_found context expected_tags got_tags = + MoreThanOneBranchFound{ context; expected_tags; got_tags } +end + type config_error = | CyclicFileDependency of (abs_path * untyped_library_file) cycle | CannotReadFileOwingToSystem of string @@ -35,3 +70,5 @@ type config_error = relative : string; candidates : abs_path list; } + | DepsConfigNotFound of abs_path + | DepsConfigError of abs_path * yaml_error diff --git a/src/frontend/configUtil.ml b/src/frontend/configUtil.ml new file mode 100644 index 000000000..f405f84ba --- /dev/null +++ b/src/frontend/configUtil.ml @@ -0,0 +1,4 @@ + +open ConfigError + +module ConfigDecoder = YamlDecoder.Make(YamlError) diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml index 1f294c694..3e7e3f0a2 100644 --- a/src/frontend/depsConfig.ml +++ b/src/frontend/depsConfig.ml @@ -2,10 +2,40 @@ open MyUtil open EnvelopeSystemBase open ConfigError +open ConfigUtil type t = deps_config -let load (_abspath_deps_config : abs_path) : (t, config_error) result = - failwith "TODO: DepsConfig.load" +let envelope_dependency_decoder : envelope_dependency ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun dependency_name -> + get "used_as" string >>= fun dependency_used_as -> + succeed { dependency_name; dependency_used_as } + + +let envelope_spec_decoder : envelope_spec ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun envelope_name -> + get "path" string >>= fun envelope_path -> + get "dependencies" (list envelope_dependency_decoder) >>= fun envelope_dependencies -> + get "test_only" bool >>= fun test_only_envelope -> + succeed { envelope_name; envelope_path; envelope_dependencies; test_only_envelope } + + +let deps_config_decoder : t ConfigDecoder.t = + let open ConfigDecoder in + get "envelopes" (list envelope_spec_decoder) >>= fun envelopes -> + get "dependencies" (list envelope_dependency_decoder) >>= fun explicit_dependencies -> + succeed { envelopes; explicit_dependencies } + + +let load (abspath_deps_config : abs_path) : (t, config_error) result = + let open ResultMonad in + let* s = + read_file abspath_deps_config + |> Result.map_error (fun _ -> DepsConfigNotFound(abspath_deps_config)) + in + ConfigDecoder.run deps_config_decoder s + |> Result.map_error (fun e -> DepsConfigError(abspath_deps_config, e)) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 5f7bb09a7..305741271 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -889,6 +889,51 @@ let module_name_chain_to_string (((_, modnm0), modidents) : module_name_chain) = modidents |> String.concat "." +let show_yaml_context (yctx : YamlDecoder.context) = + Printf.sprintf "(context: %s)" (YamlDecoder.show_yaml_context yctx) + + +let make_yaml_error_lines : yaml_error -> line list = function + | ParseError(s) -> + [ NormalLine(Printf.sprintf "parse error: %s" s) ] + + | FieldNotFound(yctx, field) -> + [ NormalLine(Printf.sprintf "field '%s' not found %s" field (show_yaml_context yctx)) ] + + | NotAFloat(yctx) -> + [ NormalLine(Printf.sprintf "not a float value %s" (show_yaml_context yctx)) ] + + | NotAString(yctx) -> + [ NormalLine(Printf.sprintf "not a string value %s" (show_yaml_context yctx)) ] + + | NotABool(yctx) -> + [ NormalLine(Printf.sprintf "not a Boolean value %s" (show_yaml_context yctx)) ] + + | NotAnArray(yctx) -> + [ NormalLine(Printf.sprintf "not an array %s" (show_yaml_context yctx)) ] + + | NotAnObject(yctx) -> + [ NormalLine(Printf.sprintf "not an object %s" (show_yaml_context yctx)) ] + + | BranchNotFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "expected tags not found; should contain exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine("but only contains:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + | MoreThanOneBranchFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "more than one expected tag found:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine("should be exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + let report_config_error (display_config : Logging.config) : config_error -> unit = function | NotALibraryFile(abspath) -> report_error Typechecker [ @@ -1032,6 +1077,19 @@ let report_config_error (display_config : Logging.config) : config_error -> unit report_error Interface (NormalLine(Printf.sprintf "cannot find local file '%s'. candidates:" relative) :: lines) + | DepsConfigNotFound(abspath_deps_config) -> + report_error Interface [ + NormalLine("cannot find a deps config at:"); + DisplayLine(get_abs_path_string abspath_deps_config); + ] + + | DepsConfigError(abspath_deps_config, e) -> + report_error Interface (List.append [ + NormalLine("failed to load a deps config:"); + DisplayLine(get_abs_path_string abspath_deps_config); + ] (make_yaml_error_lines e)) + + let report_font_error (display_config : Logging.config) : font_error -> unit = function | FailedToReadFont(abspath, msg) -> From d7a7d1acbe437db617e0e08a3d3b42f61c1d1e97 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 05:45:07 +0900 Subject: [PATCH 061/381] develop `EnvelopeConfig.load` and fix `Envelope{Reader,Checker}` --- src-saphe/envelopeConfig.ml | 8 ++- src/frontend/configError.ml | 2 + src/frontend/envelopeChecker.ml | 10 ++-- src/frontend/envelopeConfig.ml | 98 ++++++++++++++++++++++----------- src/frontend/envelopeReader.ml | 17 ++---- src/frontend/main.ml | 11 ++++ src/frontend/types.cppo.ml | 7 +-- 7 files changed, 98 insertions(+), 55 deletions(-) diff --git a/src-saphe/envelopeConfig.ml b/src-saphe/envelopeConfig.ml index 161f343b3..7bc291c31 100644 --- a/src-saphe/envelopeConfig.ml +++ b/src-saphe/envelopeConfig.ml @@ -7,9 +7,10 @@ type t = envelope_config let font_spec_encoder (font_spec : font_spec) : Yaml.value = + let { font_item_name; used_as_math_font } = font_spec in `O([ - ("name", `String(font_spec.font_item_name)); - ("math", `Bool(font_spec.used_as_math_font)); + ("name", `String(font_item_name)); + ("math", `Bool(used_as_math_font)); ]) @@ -29,7 +30,8 @@ let font_file_description_encoder (descr : font_file_description) : Yaml.value = let envelope_config_encoder (envelope_config : t) : Yaml.value = - match envelope_config.envelope_contents with + let { envelope_contents } = envelope_config in + match envelope_contents with | Library{ main_module_name; source_directories; test_directories; _ } -> (* TODO: encode conversion specs *) `O([ diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 2989a9e97..d44d1a97c 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -72,3 +72,5 @@ type config_error = } | DepsConfigNotFound of abs_path | DepsConfigError of abs_path * yaml_error + | EnvelopeConfigNotFound of abs_path + | EnvelopeConfigError of abs_path * yaml_error diff --git a/src/frontend/envelopeChecker.ml b/src/frontend/envelopeChecker.ml index 44f4ce8ac..0e4e2bea8 100644 --- a/src/frontend/envelopeChecker.ml +++ b/src/frontend/envelopeChecker.ml @@ -1,5 +1,6 @@ open MyUtil +open EnvelopeSystemBase open Types open StaticEnv open ConfigError @@ -145,11 +146,11 @@ let check_font_envelope (_main_module_name : module_name) (font_files : font_fil { r_font_file_path = path; r_font_file_contents = font_file_contents; - r_used_as_math_font = used_as_math_font; } = r in match font_file_contents with - | OpentypeSingle(varnm) -> + | OpentypeSingle(font_spec) -> + let { font_item_name = varnm; used_as_math_font } = font_spec in let evid = EvalVarID.fresh (Range.dummy "font-envelope 1", varnm) in let bind = Bind(stage, NonRec(evid, LoadSingleFont{ path; used_as_math_font })) in let ventry = @@ -161,9 +162,10 @@ let check_font_envelope (_main_module_name : module_name) (font_files : font_fil in (ssig |> StructSig.add_value varnm ventry, Alist.extend libacc (path, [ bind ])) - | OpentypeCollection(varnms) -> + | OpentypeCollection(font_specs) -> let (ssig, bindacc, _) = - varnms |> List.fold_left (fun (ssig, bindacc, index) varnm -> + font_specs |> List.fold_left (fun (ssig, bindacc, index) font_spec -> + let { font_item_name = varnm; used_as_math_font } = font_spec in let evid = EvalVarID.fresh (Range.dummy "font-envelope 3", varnm) in let bind = Bind(stage, NonRec(evid, LoadCollectionFont{ path; index; used_as_math_font })) in let ventry = diff --git a/src/frontend/envelopeConfig.ml b/src/frontend/envelopeConfig.ml index 5b67a145f..12f7e4256 100644 --- a/src/frontend/envelopeConfig.ml +++ b/src/frontend/envelopeConfig.ml @@ -1,44 +1,80 @@ open MyUtil +open EnvelopeSystemBase open ConfigError +open ConfigUtil -type 'a ok = ('a, config_error) result +type t = envelope_config -type relative_path = string -type font_file_contents = - | OpentypeSingle of string - | OpentypeCollection of string list -[@@deriving show] +let font_spec_decoder : font_spec ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun font_item_name -> + get "math" bool >>= fun used_as_math_font -> + succeed { font_item_name; used_as_math_font } -type font_file_description = { - font_file_path : relative_path; - font_file_contents : font_file_contents; - used_as_math_font : bool; -} -type envelope_conversion_spec = unit (* TODO *) -(* - | MarkdownConversion of MarkdownParser.command_record -*) +let font_file_contents_decoder : font_file_contents ConfigDecoder.t = + let open ConfigDecoder in + branch [ + "opentype_single" ==> begin + font_spec_decoder >>= fun font_spec -> + succeed @@ OpentypeSingle(font_spec) + end; + "opentype_collection" ==> begin + list font_spec_decoder >>= fun font_specs -> + succeed @@ OpentypeCollection(font_specs) + end; + ] -type envelope_contents = - | Library of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - conversion_specs : envelope_conversion_spec list; - } - | Font of { - main_module_name : string; - font_file_descriptions : font_file_description list; - } -type t = { - envelope_contents : envelope_contents; -} +let font_spec_decoder : font_spec ConfigDecoder.t = + let open ConfigDecoder in + get "name" string >>= fun font_item_name -> + get_or_else "math" bool false >>= fun used_as_math_font -> + succeed { font_item_name; used_as_math_font } -let load (_abspath : abs_path) : t ok = - failwith "TODO: EnvelopeConfig.load" +let font_file_description_decoder : font_file_description ConfigDecoder.t = + let open ConfigDecoder in + get "path" string >>= fun font_file_path -> + font_file_contents_decoder >>= fun font_file_contents -> + succeed @@ { + font_file_path; + font_file_contents; + } + + +let envelope_config_decoder : t ConfigDecoder.t = + let open ConfigDecoder in + branch [ + "library" ==> begin + get "main_module" string >>= fun main_module_name -> + get "source_directories" (list string) >>= fun source_directories -> + get "test_directories" (list string) >>= fun test_directories -> + let conversion_specs = [] in (* TODO *) + succeed { + envelope_contents = + Library{ main_module_name; source_directories; test_directories; conversion_specs }; + } + end; + "font" ==> begin + get "main_module" string >>= fun main_module_name -> + get "files" (list font_file_description_decoder) >>= fun font_file_descriptions -> + succeed { + envelope_contents = + Font{ main_module_name; font_file_descriptions } + } + end; + ] + + +let load (abspath_envelope_config : abs_path) : (t, config_error) result = + let open ResultMonad in + let* s = + read_file abspath_envelope_config + |> Result.map_error (fun _ -> EnvelopeConfigNotFound(abspath_envelope_config)) + in + ConfigDecoder.run envelope_config_decoder s + |> Result.map_error (fun e -> EnvelopeConfigError(abspath_envelope_config, e)) diff --git a/src/frontend/envelopeReader.ml b/src/frontend/envelopeReader.ml index f319806f7..b92b572a4 100644 --- a/src/frontend/envelopeReader.ml +++ b/src/frontend/envelopeReader.ml @@ -1,5 +1,6 @@ open MyUtil +open EnvelopeSystemBase open Types open ConfigError @@ -23,17 +24,12 @@ let make_path_list_absolute ~(origin : abs_path) (reldirs : string list) : abs_p ) -let convert_font_file_contents = function - | EnvelopeConfig.OpentypeSingle(x) -> OpentypeSingle(x) - | EnvelopeConfig.OpentypeCollection(xs) -> OpentypeCollection(xs) - - let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (absdir_envelope : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = let open ResultMonad in let* config = EnvelopeConfig.load absdir_envelope in let* envelope = match config.envelope_contents with - | EnvelopeConfig.Library{ main_module_name; source_directories; test_directories; _ } -> + | Library{ main_module_name; source_directories; test_directories; _ } -> let absdirs_src = source_directories |> make_path_list_absolute ~origin:absdir_envelope in let abspaths_src = absdirs_src |> List.map (listup_sources_in_directory extensions) |> List.concat in let abspaths = @@ -65,15 +61,14 @@ let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions modules; } - | EnvelopeConfig.Font{ main_module_name; font_file_descriptions } -> + | Font{ main_module_name; font_file_descriptions } -> let font_files = font_file_descriptions |> List.map (fun font_file_description -> - let EnvelopeConfig.{ font_file_path; font_file_contents; used_as_math_font } = font_file_description in - let abspath = make_abs_path (Filename.concat (get_abs_path_string absdir_envelope) font_file_path) in + let { font_file_path; font_file_contents } = font_file_description in + let abspath = append_to_abs_directory absdir_envelope font_file_path in { r_font_file_path = abspath; - r_font_file_contents = convert_font_file_contents font_file_contents; - r_used_as_math_font = used_as_math_font; + r_font_file_contents = font_file_contents; } ) in diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 305741271..dbbbbf1b0 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1089,6 +1089,17 @@ let report_config_error (display_config : Logging.config) : config_error -> unit DisplayLine(get_abs_path_string abspath_deps_config); ] (make_yaml_error_lines e)) + | EnvelopeConfigNotFound(abspath_envelope_config) -> + report_error Interface [ + NormalLine("cannot find an envelope config at:"); + DisplayLine(get_abs_path_string abspath_envelope_config); + ] + + | EnvelopeConfigError(abspath_envelope_config, e) -> + report_error Interface (List.append [ + NormalLine("failed to load an envelope config:"); + DisplayLine(get_abs_path_string abspath_envelope_config); + ] (make_yaml_error_lines e)) let report_font_error (display_config : Logging.config) : font_error -> unit = function diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index 68184b0b8..9e60a482a 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -3,6 +3,7 @@ open LengthInterface open GraphicBase open SyntaxBase open MyUtil +open EnvelopeSystemBase type input_kind = @@ -612,15 +613,9 @@ type untyped_source_file = | UTDocumentFile of untyped_document_file [@@deriving show { with_path = false; }] -type font_file_contents = - | OpentypeSingle of var_name - | OpentypeCollection of var_name list -[@@deriving show { with_path = false }] - type font_file_record = { r_font_file_path : abs_path; r_font_file_contents : font_file_contents; - r_used_as_math_font : bool; } [@@deriving show { with_path = false }] From 35dfa4f0639fd04b59b3eecacaefde6996031834 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 05:54:37 +0900 Subject: [PATCH 062/381] fix `EnvelopeReader` about file paths --- src/frontend/envelopeReader.ml | 7 +++++-- src/frontend/envelopeReader.mli | 3 ++- src/frontend/main.ml | 10 +++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/frontend/envelopeReader.ml b/src/frontend/envelopeReader.ml index b92b572a4..59dea2800 100644 --- a/src/frontend/envelopeReader.ml +++ b/src/frontend/envelopeReader.ml @@ -24,9 +24,12 @@ let make_path_list_absolute ~(origin : abs_path) (reldirs : string list) : abs_p ) -let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (absdir_envelope : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = +let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_envelope_config : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = let open ResultMonad in - let* config = EnvelopeConfig.load absdir_envelope in + let* config = EnvelopeConfig.load abspath_envelope_config in + let absdir_envelope = + make_abs_path (Filename.dirname (get_abs_path_string abspath_envelope_config)) + in let* envelope = match config.envelope_contents with | Library{ main_module_name; source_directories; test_directories; _ } -> diff --git a/src/frontend/envelopeReader.mli b/src/frontend/envelopeReader.mli index b2ec89317..c4e634aa3 100644 --- a/src/frontend/envelopeReader.mli +++ b/src/frontend/envelopeReader.mli @@ -7,4 +7,5 @@ val main : Logging.config -> use_test_files:bool -> extensions:(string list) -> - abs_path -> (EnvelopeConfig.t * untyped_envelope, config_error) result + abs_path -> + (EnvelopeConfig.t * untyped_envelope, config_error) result diff --git a/src/frontend/main.ml b/src/frontend/main.ml index dbbbbf1b0..41704d7fb 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1343,8 +1343,8 @@ let load_deps_config (abspath_deps_config : abs_path) : DepsConfig.t = | Error(e) -> raise (ConfigError(e)) -let load_envelope (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_in : abs_path) = - match EnvelopeReader.main display_config ~use_test_files ~extensions abspath_in with +let load_envelope (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_envelope_config : abs_path) = + match EnvelopeReader.main display_config ~use_test_files ~extensions abspath_envelope_config with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) @@ -1364,7 +1364,7 @@ let build_package error_log_environment display_config (fun () -> let absdir_current = Sys.getcwd () in - let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + let abspath_envelope_config = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in @@ -1379,7 +1379,7 @@ let build_package in let extensions = get_candidate_file_extensions output_mode in - let job_directory = get_job_directory abspath_in in + let job_directory = get_job_directory abspath_envelope_config in let runtime_config = { job_directory } in let (tyenv_prim, _env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in @@ -1387,7 +1387,7 @@ let build_package let deps_config = load_deps_config abspath_deps_config in let (_config, envelope) = - load_envelope display_config ~use_test_files:false ~extensions abspath_in + load_envelope display_config ~use_test_files:false ~extensions abspath_envelope_config in let (genv, _configenv, _libs_dep) = From 9cc30c5767b052307800aea1decbdd65e92e018e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 06:15:12 +0900 Subject: [PATCH 063/381] fix `EnvelopeReader` etc. about file paths --- check-packages.sh | 12 +++++--- src-saphe/constant.ml | 30 +++++++++++-------- src-saphe/lockFetcher.ml | 4 +-- src-saphe/sapheMain.ml | 26 ++++++++-------- .../closedEnvelopeDependencyResolver.ml | 12 +++++--- src/frontend/envelopeReader.ml | 2 +- src/frontend/envelopeReader.mli | 2 +- src/frontend/main.ml | 2 +- 8 files changed, 51 insertions(+), 39 deletions(-) diff --git a/check-packages.sh b/check-packages.sh index ae8ce2570..ea3b7a94c 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -4,16 +4,20 @@ FAILED=0 for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" echo " ==== $DIR ====" - ./saphe solve "$DIR" + saphe solve "$DIR" if [ $? -ne 0 ]; then echo "! FAILED (not solved)" FAILED=1 fi if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then if diff "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected"; then - echo "(TODO: build)" - #saphe build "$DIR" - echo "* OK: $DIR" + saphe build "$DIR" + if [ $? -ne 0 ]; then + echo "! FAILED (cannot build)" + FAILED=1 + else + echo "* OK: $DIR" + fi else echo "! FAILED (envelope config mismatch): $DIR" FAILED=1 diff --git a/src-saphe/constant.ml b/src-saphe/constant.ml index 51bdeb87a..acdebde47 100644 --- a/src-saphe/constant.ml +++ b/src-saphe/constant.ml @@ -23,6 +23,15 @@ let lock_directory ~store_root:(absdir_store_root : abs_path) (lock : Lock.t) : (lock_tarball_name package_name locked_version)) +(* Should be in sync with SATySFi *) +let envelope_config_path ~dir:(absdir_library : abs_path) : abs_path = + append_to_abs_directory absdir_library "satysfi-envelope.yaml" + + +let lock_envelope_config ~(store_root : abs_path) (lock : Lock.t) : abs_path = + envelope_config_path ~dir:(lock_directory ~store_root lock) + + let registry_root_directory_path ~store_root:(absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_store_root) @@ -41,43 +50,38 @@ let package_registry_config_file_name = "saphe-registry.yaml" -let library_package_config_path (absdir_library : abs_path) : abs_path = +let library_package_config_path ~dir:(absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.yaml") -let document_package_config_path (abspath_doc : abs_path) : abs_path = +let document_package_config_path ~doc:(abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.saphe.yaml" path_without_extension) -let library_lock_config_path (absdir_library : abs_path) : abs_path = +let library_lock_config_path ~dir:(absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.lock.yaml") -let library_deps_config_path (absdir_library : abs_path) : abs_path = +let library_deps_config_path ~dir:(absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "satysfi-deps.yaml") -let document_lock_config_path (abspath_doc : abs_path) : abs_path = +let document_lock_config_path ~doc:(abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.saphe.lock.yaml" path_without_extension) -let document_deps_config_path (abspath_doc : abs_path) : abs_path = +let document_deps_config_path ~doc:(abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.satysfi-deps.yaml" path_without_extension) -let default_output_path (abspath_doc : abs_path) : abs_path = +let default_output_path ~doc:(abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.pdf" path_without_extension) -let dump_path (abspath_doc : abs_path) : abs_path = +let dump_path ~doc:(abspath_doc : abs_path) : abs_path = let path_without_extension = Filename.remove_extension (get_abs_path_string abspath_doc) in make_abs_path (Printf.sprintf "%s.satysfi-aux" path_without_extension) - - -(* Should be in sync with SATySFi *) -let envelope_config_path (absdir_library : abs_path) : abs_path = - make_abs_path (Filename.concat (get_abs_path_string absdir_library) "satysfi-envelope.yaml") diff --git a/src-saphe/lockFetcher.ml b/src-saphe/lockFetcher.ml index a0540d301..a3867af08 100644 --- a/src-saphe/lockFetcher.ml +++ b/src-saphe/lockFetcher.ml @@ -66,7 +66,7 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri (* Creates the directory if non-existent, or does nothing otherwise: *) ShellCommand.mkdir_p absdir_lock; - let abspath_config = Constant.library_package_config_path absdir_lock in + let abspath_config = Constant.library_package_config_path ~dir:absdir_lock in if Sys.file_exists (get_abs_path_string abspath_config) then begin (* If the lock has already been fetched: *) Logging.lock_already_installed lock_tarball_name absdir_lock; @@ -117,7 +117,7 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri (* Fetches external sources according to the package config: *) let* PackageConfig.{ external_resources; _ } = - PackageConfig.load (Constant.library_package_config_path absdir_lock) + PackageConfig.load (Constant.library_package_config_path ~dir:absdir_lock) in let* () = external_resources |> foldM (fun () (name, external_resource) -> diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 7c3681cf0..ba704c2a8 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -526,16 +526,16 @@ let solve ~(fpath_in : string) = let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in if is_directory abspath_in then (* If the input is a directory that forms a package: *) - let abspath_lock_config = Constant.library_lock_config_path abspath_in in - let abspath_envelope_config = Constant.envelope_config_path abspath_in in + let abspath_lock_config = Constant.library_lock_config_path ~dir:abspath_in in + let abspath_envelope_config = Constant.envelope_config_path ~dir:abspath_in in PackageSolveInput{ root = abspath_in; lock = abspath_lock_config; envelope = abspath_envelope_config; } else - let abspath_package_config = Constant.document_package_config_path abspath_in in - let abspath_lock_config = Constant.document_lock_config_path abspath_in in + let abspath_package_config = Constant.document_package_config_path ~doc:abspath_in in + let abspath_lock_config = Constant.document_lock_config_path ~doc:abspath_in in DocumentSolveInput{ doc = abspath_in; config = abspath_package_config; @@ -550,7 +550,7 @@ let solve ~(fpath_in : string) = lock = abspath_lock_config; envelope = abspath_envelope_config; } -> - let abspath_package_config = Constant.library_package_config_path absdir_package in + let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in let* PackageConfig.{ language_requirement; @@ -730,7 +730,7 @@ let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.loc let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in { envelope_name = lock_name; - envelope_path = get_abs_path_string (Constant.lock_directory ~store_root lock); + envelope_path = get_abs_path_string (Constant.lock_envelope_config ~store_root lock); envelope_dependencies; test_only_envelope = test_only_lock; } @@ -783,9 +783,9 @@ let build let absdir_current = Sys.getcwd () in let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in if is_directory abspath_in then - let abspath_lock_config = Constant.library_lock_config_path abspath_in in - let abspath_deps_config = Constant.library_deps_config_path abspath_in in - let abspath_envelope_config = Constant.envelope_config_path abspath_in in + let abspath_lock_config = Constant.library_lock_config_path ~dir:abspath_in in + let abspath_deps_config = Constant.library_deps_config_path ~dir:abspath_in in + let abspath_envelope_config = Constant.envelope_config_path ~dir:abspath_in in PackageBuildInput{ root = abspath_in; lock = abspath_lock_config; @@ -794,17 +794,17 @@ let build options; } else - let abspath_lock_config = Constant.document_lock_config_path abspath_in in - let abspath_deps_config = Constant.document_deps_config_path abspath_in in + let abspath_lock_config = Constant.document_lock_config_path ~doc:abspath_in in + let abspath_deps_config = Constant.document_deps_config_path ~doc:abspath_in in let abspath_out = match fpath_out_opt with | None -> - Constant.default_output_path abspath_in + Constant.default_output_path ~doc:abspath_in | Some(fpath_out) -> make_absolute_if_relative ~origin:absdir_current fpath_out in - let abspath_dump = Constant.dump_path abspath_in in + let abspath_dump = Constant.dump_path ~doc:abspath_in in DocumentBuildInput{ doc = abspath_in; lock = abspath_lock_config; diff --git a/src/frontend/closedEnvelopeDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml index 9955e4a0a..79ffb55dc 100644 --- a/src/frontend/closedEnvelopeDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -13,7 +13,7 @@ module EnvelopeDependencyGraph = DependencyGraph.Make(String) type envelope_info = { envelope_name : envelope_name; - envelope_directory : abs_path; + envelope_config : abs_path; envelope_dependencies : envelope_dependency list; } @@ -31,7 +31,7 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex (* Skips test-only envelopes when using sources only: *) return (graph, entryacc) else - let absdir_envelope = make_abs_path envelope_path in + let abspath_envelope_config = make_abs_path envelope_path in (* match envelope_contents with | RegisteredLock{ registry_hash_value; package_name; version = locked_version } -> @@ -39,7 +39,11 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex make_abs_path (Filename.concat (get_abs_path_string absdir_lib_root) (get_lib_path_string libdir)) *) let* envelope_with_config = - EnvelopeReader.main display_config ~use_test_files:use_test_only_envelope ~extensions absdir_envelope + EnvelopeReader.main + display_config + ~use_test_files:use_test_only_envelope + ~extensions + ~envelope_config:abspath_envelope_config in let* (graph, vertex) = graph |> EnvelopeDependencyGraph.add_vertex envelope_name envelope_with_config @@ -48,7 +52,7 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex let envelope_info = { envelope_name; - envelope_directory = absdir_envelope; + envelope_config = abspath_envelope_config; envelope_dependencies; } in diff --git a/src/frontend/envelopeReader.ml b/src/frontend/envelopeReader.ml index 59dea2800..a0b4b12bf 100644 --- a/src/frontend/envelopeReader.ml +++ b/src/frontend/envelopeReader.ml @@ -24,7 +24,7 @@ let make_path_list_absolute ~(origin : abs_path) (reldirs : string list) : abs_p ) -let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_envelope_config : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = +let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) ~envelope_config:(abspath_envelope_config : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = let open ResultMonad in let* config = EnvelopeConfig.load abspath_envelope_config in let absdir_envelope = diff --git a/src/frontend/envelopeReader.mli b/src/frontend/envelopeReader.mli index c4e634aa3..fb1459cc1 100644 --- a/src/frontend/envelopeReader.mli +++ b/src/frontend/envelopeReader.mli @@ -7,5 +7,5 @@ val main : Logging.config -> use_test_files:bool -> extensions:(string list) -> - abs_path -> + envelope_config:abs_path -> (EnvelopeConfig.t * untyped_envelope, config_error) result diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 41704d7fb..94ebf7a7b 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1344,7 +1344,7 @@ let load_deps_config (abspath_deps_config : abs_path) : DepsConfig.t = let load_envelope (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_envelope_config : abs_path) = - match EnvelopeReader.main display_config ~use_test_files ~extensions abspath_envelope_config with + match EnvelopeReader.main display_config ~use_test_files ~extensions ~envelope_config:abspath_envelope_config with | Ok(pair) -> pair | Error(e) -> raise (ConfigError(e)) From e9d6b387ecfda41f41174e8cd1ab0df9c9ba4f65 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 07:09:09 +0900 Subject: [PATCH 064/381] refactor the use of `ConfigError` in `main.ml` --- .../closedEnvelopeDependencyResolver.ml | 4 +- src/frontend/configError.ml | 1 + src/frontend/main.ml | 193 +++++++++--------- 3 files changed, 100 insertions(+), 98 deletions(-) diff --git a/src/frontend/closedEnvelopeDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml index 79ffb55dc..39ffda73f 100644 --- a/src/frontend/closedEnvelopeDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -84,5 +84,7 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex EnvelopeDependencyGraph.topological_sort graph |> Result.map_error (fun cycle -> - CyclicEnvelopeDependency(cycle |> map_cycle (fun (envelope_name, (_config, envelope_info)) -> (envelope_name, envelope_info))) + CyclicEnvelopeDependency( + cycle |> map_cycle (fun (envelope_name, (_config, envelope_info)) -> (envelope_name, envelope_info)) + ) ) diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index d44d1a97c..3a7dabe1c 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -40,6 +40,7 @@ module YamlError = struct end type config_error = + | UnexpectedExtension of string | CyclicFileDependency of (abs_path * untyped_library_file) cycle | CannotReadFileOwingToSystem of string | LibraryContainsWholeReturnValue of abs_path diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 94ebf7a7b..c99bcef28 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -7,10 +7,6 @@ open FontError open TypeError -exception UnexpectedExtension of string -exception ConfigError of config_error - - let version = Printf.sprintf "SATySFi version %s alpha" (SemanticVersion.to_string Constant.current_language_version) @@ -125,14 +121,10 @@ let eval_library_file (display_config : Logging.config) ~(is_bytecomp_mode : boo env -let eval_main ~(is_bytecomp_mode : bool) (output_mode : output_mode) (i : int) (env_freezed : frozen_environment) (ast : abstract_tree) : syntactic_value = +let eval_main ~(is_bytecomp_mode : bool) (output_mode : output_mode) (i : int) (env_freezed : frozen_environment) (ast : abstract_tree) : (syntactic_value, config_error) result = + let open ResultMonad in Logging.start_evaluation i; - let res = reset output_mode in - begin - match res with - | Ok(()) -> () - | Error(e) -> raise (ConfigError(e)) - end; + let* () = reset output_mode in let env = unfreeze_environment env_freezed in let value = if is_bytecomp_mode then @@ -142,36 +134,39 @@ let eval_main ~(is_bytecomp_mode : bool) (output_mode : output_mode) (i : int) ( Evaluator.interpret_0 env ast in Logging.end_evaluation (); - value + return value let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf.config) ~(page_number_limit : int) ~(is_bytecomp_mode : bool) (output_mode : output_mode) (env : environment) (ast : abstract_tree) (abspath_out : abs_path) (abspath_dump : abs_path) = + let open ResultMonad in let env_freezed = freeze_environment env in match output_mode with | TextMode(_) -> let rec aux (i : int) = - let value_str = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in + let* value_str = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in let s = EvalUtil.get_string value_str in match CrossRef.needs_another_trial abspath_dump with | CrossRef.NeedsAnotherTrial -> Logging.needs_another_trial (); - aux (i + 1); + aux (i + 1) | CrossRef.CountMax -> Logging.achieve_count_max (); output_text abspath_out s; Logging.end_output display_config abspath_out; + return () | CrossRef.CanTerminate unresolved_crossrefs -> Logging.achieve_fixpoint unresolved_crossrefs; output_text abspath_out s; Logging.end_output display_config abspath_out; + return () in aux 1 | PdfMode -> let rec aux (i : int) = - let value_doc = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in + let* value_doc = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in match value_doc with | BaseConstant(BCDocument(paper_size, pbstyle, columnhookf, columnendhookf, pagecontf, pagepartsf, imvblst)) -> Logging.start_page_break (); @@ -190,17 +185,19 @@ let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf match CrossRef.needs_another_trial abspath_dump with | CrossRef.NeedsAnotherTrial -> Logging.needs_another_trial (); - aux (i + 1); + aux (i + 1) | CrossRef.CountMax -> Logging.achieve_count_max (); output_pdf pdf; Logging.end_output display_config abspath_out; + return () | CrossRef.CanTerminate unresolved_crossrefs -> Logging.achieve_fixpoint unresolved_crossrefs; output_pdf pdf; Logging.end_output display_config abspath_out; + return () end | _ -> @@ -935,6 +932,11 @@ let make_yaml_error_lines : yaml_error -> line list = function let report_config_error (display_config : Logging.config) : config_error -> unit = function + | UnexpectedExtension(ext) -> + report_error Interface [ + NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); + ] + | NotALibraryFile(abspath) -> report_error Typechecker [ NormalLine("the following file is expected to be a library file, but is not:"); @@ -1102,7 +1104,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit ] (make_yaml_error_lines e)) -let report_font_error (display_config : Logging.config) : font_error -> unit = function +let report_font_error (display_config : Logging.config) = function | FailedToReadFont(abspath, msg) -> let fname = Logging.show_path display_config abspath in report_error Interface [ @@ -1171,7 +1173,7 @@ let report_font_error (display_config : Logging.config) : font_error -> unit = f ] -let error_log_environment (display_config : Logging.config) (suspended : unit -> 'a) : 'a = +let error_log_environment (display_config : Logging.config) (suspended : unit -> ('a, config_error) result) : ('a, config_error) result = try suspended () with @@ -1181,11 +1183,6 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> DisplayLine(msg); ] - | UnexpectedExtension(ext) -> - report_error Interface [ - NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); - ] - | LoadHyph.InvalidPatternElement(rng) -> report_error System [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); @@ -1204,9 +1201,6 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> NormalLine("math font is not set."); ] - | ConfigError(e) -> - report_config_error display_config e - | FontInfo.FontInfoError(e) -> report_font_error display_config e @@ -1298,37 +1292,35 @@ let get_input_kind_from_extension (abspath_doc : abs_path) = match Filename.extension (get_abs_path_string abspath_doc) with | ".saty" -> Ok(InputSatysfi) | ".md" -> Ok(InputMarkdown) - | ext -> Error(ext) + | ext -> Error(UnexpectedExtension(ext)) let check_depended_envelopes (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = + let open ResultMonad in (* Resolve dependency among envelopes: *) - let sorted_envelopes = - match ClosedEnvelopeDependencyResolver.main display_config ~use_test_only_envelope ~extensions deps_config with - | Ok(sorted_envelopes) -> sorted_envelopes - | Error(e) -> raise (ConfigError(e)) + let* sorted_envelopes = + ClosedEnvelopeDependencyResolver.main display_config ~use_test_only_envelope ~extensions deps_config in (* Typecheck every depended envelope: *) - let (genv, configenv, libacc) = - sorted_envelopes |> List.fold_left (fun (genv, configenv, libacc) (_envelope_name, (config, envelope)) -> + let* (genv, configenv, libacc) = + sorted_envelopes |> List.fold_left (fun res (_envelope_name, (config, envelope)) -> + let* (genv, configenv, libacc) = res in let main_module_name = match envelope with | UTLibraryEnvelope{ main_module_name; _ } -> main_module_name | UTFontEnvelope{ main_module_name; _ } -> main_module_name in - let (ssig, libs) = - match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) + let* (ssig, libs) = + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope in let genv = genv |> GlobalTypeenv.add main_module_name ssig in let configenv = configenv |> GlobalTypeenv.add main_module_name config in let libacc = Alist.append libacc libs in - (genv, configenv, libacc) - ) (GlobalTypeenv.empty, GlobalTypeenv.empty, Alist.empty) + return (genv, configenv, libacc) + ) (return (GlobalTypeenv.empty, GlobalTypeenv.empty, Alist.empty)) in - (genv, configenv, Alist.to_list libacc) + return (genv, configenv, Alist.to_list libacc) let make_output_mode text_mode_formats_str_opt = @@ -1337,18 +1329,6 @@ let make_output_mode text_mode_formats_str_opt = | Some(s) -> TextMode(String.split_on_char ',' s) -let load_deps_config (abspath_deps_config : abs_path) : DepsConfig.t = - match DepsConfig.load abspath_deps_config with - | Ok(deps_config) -> deps_config - | Error(e) -> raise (ConfigError(e)) - - -let load_envelope (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) (abspath_envelope_config : abs_path) = - match EnvelopeReader.main display_config ~use_test_files ~extensions ~envelope_config:abspath_envelope_config with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) - - let get_job_directory (abspath : abs_path) : string = Filename.dirname (get_abs_path_string abspath) @@ -1360,6 +1340,7 @@ let build_package ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) = + let open ResultMonad in let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> let absdir_current = Sys.getcwd () in @@ -1384,13 +1365,13 @@ let build_package let (tyenv_prim, _env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in + let* deps_config = DepsConfig.load abspath_deps_config in - let (_config, envelope) = - load_envelope display_config ~use_test_files:false ~extensions abspath_envelope_config + let* (_config, envelope) = + EnvelopeReader.main display_config ~use_test_files:false ~extensions ~envelope_config:abspath_envelope_config in - let (genv, _configenv, _libs_dep) = + let* (genv, _configenv, _libs_dep) = check_depended_envelopes display_config typecheck_config @@ -1400,12 +1381,14 @@ let build_package deps_config in - begin - match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope with - | Ok((_ssig, _libs)) -> () - | Error(e) -> raise (ConfigError(e)) - end - ) + let* (_ssig, _libs) = + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope + in + return () + + ) |> function + | Ok(()) -> () + | Error(e) -> report_config_error display_config e; exit 1 let build_document @@ -1425,6 +1408,7 @@ let build_document ~(type_check_only : bool) ~bytecomp:(is_bytecomp_mode : bool) = +let open ResultMonad in let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> let absdir_current = Sys.getcwd () in @@ -1456,46 +1440,56 @@ let build_document let job_directory = get_job_directory abspath_in in let runtime_config = { job_directory } in - let input_kind = - match get_input_kind_from_extension abspath_in with - | Error(ext) -> raise (UnexpectedExtension(ext)) - | Ok(input_kind) -> input_kind - in + let* input_kind = get_input_kind_from_extension abspath_in in let extensions = get_candidate_file_extensions output_mode in let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode output_mode runtime_config in Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in + let* deps_config = DepsConfig.load abspath_deps_config in Logging.target_file display_config abspath_out; let dump_file_exists = CrossRef.initialize abspath_dump in Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; - let (genv, configenv, libs) = - check_depended_envelopes display_config typecheck_config ~use_test_only_envelope:false (* ~library_root *) ~extensions tyenv_prim deps_config + let* (genv, configenv, libs) = + check_depended_envelopes + display_config + typecheck_config + ~use_test_only_envelope:false + ~extensions + tyenv_prim + deps_config in (* Resolve dependency of the document and the local source files: *) - let (sorted_locals, utdoc) = - match OpenFileDependencyResolver.main display_config ~extensions input_kind configenv abspath_in with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) + let* (sorted_locals, utdoc) = + OpenFileDependencyResolver.main display_config ~extensions input_kind configenv abspath_in in (* Typechecking and elaboration: *) - let (libs_local, ast_doc) = - match EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) with - | Ok(pair) -> pair - | Error(e) -> raise (ConfigError(e)) + let* (libs_local, ast_doc) = + EnvelopeChecker.main_document + display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) in let libs = List.append libs libs_local in if type_check_only then - () + return () else - preprocess_and_evaluate display_config pdf_config ~page_number_limit ~is_bytecomp_mode output_mode ~run_tests:false env libs ast_doc abspath_in abspath_out abspath_dump - ) + preprocess_and_evaluate + display_config + pdf_config + ~page_number_limit + ~is_bytecomp_mode + output_mode + ~run_tests:false + env libs ast_doc abspath_in abspath_out abspath_dump + + ) |> function + | Ok(()) -> () + | Error(e) -> report_config_error display_config e + let test_package @@ -1505,6 +1499,7 @@ let test_package ~(text_mode_formats_str_opt : string option) ~(show_full_path : bool) = + let open ResultMonad in let display_config = Logging.{ show_full_path } in error_log_environment display_config (fun () -> let absdir_current = Sys.getcwd () in @@ -1528,13 +1523,13 @@ let test_package let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in Logging.deps_config_file display_config abspath_deps_config; - let deps_config = load_deps_config abspath_deps_config in + let* deps_config = DepsConfig.load abspath_deps_config in - let (_config, package) = - load_envelope display_config ~use_test_files:true ~extensions abspath_in + let* (_config, package) = + EnvelopeReader.main display_config ~use_test_files:true ~extensions ~envelope_config:abspath_in in - let (genv, _configenv, _libs_dep) = + let* (genv, _configenv, _libs_dep) = check_depended_envelopes display_config typecheck_config @@ -1544,10 +1539,8 @@ let test_package deps_config in - let libs = - match EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package with - | Ok((_ssig, libs)) -> libs - | Error(e) -> raise (ConfigError(e)) + let* (_ssig, libs) = + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package in let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in let _env = evaluate_bindings display_config ~run_tests:true env codebinds in @@ -1589,11 +1582,17 @@ let test_package | State.Fail{ test_name; message } -> Logging.report_failed_test ~test_name ~message; true ) false in - if failure_found then begin - Logging.some_test_failed (); - exit 1 - end else begin - Logging.all_tests_passed (); - () - end - ) + return failure_found + + ) |> function + | Ok(failure_found) -> + if failure_found then begin + Logging.some_test_failed (); + exit 1 + end else begin + Logging.all_tests_passed (); + () + end + + | Error(e) -> + report_config_error display_config e From 1c20ed5089825b4b0409b74378e621efc77f275f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 16:33:47 +0900 Subject: [PATCH 065/381] make `saphe solve` support documents --- src-saphe/configError.ml | 1 + src-saphe/packageConfig.ml | 26 +++++------ src-saphe/packageConfig.mli | 3 ++ src-saphe/packageSystemBase.ml | 3 ++ src-saphe/sapheMain.ml | 79 ++++++++++++++++++++++++---------- 5 files changed, 77 insertions(+), 35 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 292feee50..b080510fc 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -58,6 +58,7 @@ type config_error = | PackageDirectoryNotFound of string list | PackageConfigNotFound of abs_path | PackageConfigError of abs_path * yaml_error + | NotAPackageButADocument of abs_path | LockConfigNotFound of abs_path | LockConfigError of abs_path * yaml_error | RegistryConfigNotFound of abs_path diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 6416ede03..45889b341 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -21,6 +21,9 @@ type package_contents = main_module_name : string; font_file_descriptions : font_file_description list; } + | Document of { + dependencies : package_dependency list; + } type t = { language_requirement : SemanticVersion.requirement; @@ -193,10 +196,11 @@ let contents_decoder : parsed_package_contents ConfigDecoder.t = "font" ==> begin get "main_module" string >>= fun main_module_name -> get "files" (list font_file_description_decoder) >>= fun font_file_descriptions -> - succeed @@ ParsedFont { - main_module_name; - font_file_descriptions; - } + succeed @@ ParsedFont { main_module_name; font_file_descriptions } + end; + "document" ==> begin + get_or_else "dependencies" (list dependency_decoder) [] >>= fun dependencies -> + succeed @@ ParsedDocument{ dependencies } end; ] @@ -296,14 +300,12 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( conversion_specs; } - | ParsedFont{ - main_module_name; - font_file_descriptions; - } -> - return @@ Font{ - main_module_name; - font_file_descriptions; - } + | ParsedFont{ main_module_name; font_file_descriptions } -> + return @@ Font{ main_module_name; font_file_descriptions } + + | ParsedDocument{ dependencies } -> + let* dependencies = mapM (validate_dependency localmap) dependencies in + return @@ Document{ dependencies } let validate (p_package_config : parsed_package_config) : t ok = diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index a1d1a755d..b6bea5aa0 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -17,6 +17,9 @@ type package_contents = main_module_name : string; font_file_descriptions : font_file_description list; } + | Document of { + dependencies : package_dependency list; + } type t = { language_requirement : SemanticVersion.requirement; diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 00a97997e..0f1aee32d 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -193,6 +193,9 @@ type parsed_package_contents = main_module_name : string; font_file_descriptions : font_file_description list; } + | ParsedDocument of { + dependencies : parsed_package_dependency list; + } [@@deriving show { with_path = false }] type parsed_package_config = ParsedPackageConfig of { diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index ba704c2a8..d2b5d7ef0 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -134,6 +134,13 @@ let report_config_error = function make_yaml_error_lines e; ]) + | NotAPackageButADocument(abspath_package_config) -> + report_error [ + NormalLine(Printf.sprintf "in %s:" (get_abs_path_string abspath_package_config)); + NormalLine("this file is expected to be a config for a package,"); + NormalLine("but is for a document."); + ] + | LockConfigNotFound(abspath) -> report_error [ NormalLine("cannot find a lock config at:"); @@ -478,7 +485,8 @@ let extract_attributes_from_document_file (display_config : Logging.config) (inp *) -let make_envelope_config (package_contents : PackageConfig.package_contents) : EnvelopeConfig.t = +let make_envelope_config (abspath_package_config : abs_path) (package_contents : PackageConfig.package_contents) : (EnvelopeConfig.t, config_error) result = + let open ResultMonad in match package_contents with | PackageConfig.Library{ main_module_name; @@ -486,7 +494,7 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E test_directories; _ } -> - { + return { envelope_contents = Library{ main_module_name; @@ -500,7 +508,29 @@ let make_envelope_config (package_contents : PackageConfig.package_contents) : E main_module_name; font_file_descriptions; } -> - { envelope_contents = Font{ main_module_name; font_file_descriptions } } + return { envelope_contents = Font{ main_module_name; font_file_descriptions } } + + | PackageConfig.Document(_) -> + err @@ NotAPackageButADocument(abspath_package_config) + + +let make_dependencies_with_flags (package_contents : PackageConfig.package_contents) = + match package_contents with + | PackageConfig.Library{ dependencies; test_dependencies; _ } -> + List.append + (dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) + + | PackageConfig.Font(_) -> + [] + + | PackageConfig.Document{ dependencies } -> + dependencies |> List.map (fun dep -> (SourceDependency, dep)) + + +let get_minimum_language_version (language_requirement : SemanticVersion.requirement) : SemanticVersion.t = + match language_requirement with + | SemanticVersion.CompatibleWith(semver) -> semver let get_store_root () : (abs_path, config_error) result = @@ -559,15 +589,13 @@ let solve ~(fpath_in : string) = _ } = PackageConfig.load abspath_package_config in - let language_version = - match language_requirement with - | SemanticVersion.CompatibleWith(semver) -> semver - (* Selects the minimum version according to the user's designation for the moment. - TODO: take dependencies into account when selecting a language version *) - in + + (* Selects the minimum version according to the user's designation: *) + (* TODO: consider taking dependencies into account when selecting a language version *) + let language_version = get_minimum_language_version language_requirement in (* Writes the envelope config: *) - let envelope_config = make_envelope_config package_contents in + let* envelope_config = make_envelope_config abspath_package_config package_contents in let* () = EnvelopeConfig.write abspath_envelope_config envelope_config |> Result.map_error (fun message -> @@ -576,24 +604,29 @@ let solve ~(fpath_in : string) = in Logging.end_envelope_config_output abspath_envelope_config; - let dependencies_with_flags = - match package_contents with - | PackageConfig.Library{ dependencies; test_dependencies; _ } -> - List.append - (dependencies |> List.map (fun dep -> (SourceDependency, dep))) - (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) - - | PackageConfig.Font(_) -> - [] - in + let dependencies_with_flags = make_dependencies_with_flags package_contents in return (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) | DocumentSolveInput{ doc = _abspath_doc; - config = _abspath_package_config; - lock = _abspath_lock_config; + config = abspath_package_config; + lock = abspath_lock_config; } -> - failwith "TODO: DocumentSolveInput" + let* + PackageConfig.{ + language_requirement; + package_contents; + registry_remotes; + _ + } = PackageConfig.load abspath_package_config + in + + (* Selects the minimum version according to the user's designation: *) + (* TODO: consider taking dependencies into account when selecting a language version *) + let language_version = get_minimum_language_version language_requirement in + + let dependencies_with_flags = make_dependencies_with_flags package_contents in + return (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) (* let* DocumentAttribute.{ registry_specs; dependencies } = extract_attributes_from_document_file display_config input_kind abspath_in From 4c64dfdafe161ff642b8b2c105d1266ce3e10615 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 16:56:09 +0900 Subject: [PATCH 066/381] fix `font-ipa-ex` about `external_resources` --- .../font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml index f54281146..690a10656 100644 --- a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml @@ -2,16 +2,16 @@ ecosystem: "^0.0.1" language: "^0.1.0" name: "font-ipa-ex" authors: [] -external_sources: +external_resources: - name: "IPAexfont00401" zip: url: "https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zip" checksum: "57f2631833c1049ea89320971cc74ce5" - extractions: - - from: "IPAexfont00401/ipaexg.ttf" - to: "./fonts/ipaexg.ttf" - - from: "IPAexfont00401/ipaexm.ttf" - to: "./fonts/ipaexm.ttf" + extractions: + - from: "IPAexfont00401/ipaexg.ttf" + to: "./fonts/ipaexg.ttf" + - from: "IPAexfont00401/ipaexm.ttf" + to: "./fonts/ipaexm.ttf" contents: font: main_module: "FontIpaEx" From 919fcae72e49074760b18cc5fc9f383815cfa22a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 17:18:33 +0900 Subject: [PATCH 067/381] FIRST SUCCESS IN BUILDING `demo.saty` USING SAPHE --- demo/.gitignore | 3 +- demo/Makefile | 24 +++--- demo/demo.saphe.lock.yaml | 142 ++++++++++++++++++++++++++++++++ demo/demo.saphe.yaml | 48 +++++++++++ demo/demo.saty | 21 ----- demo/demo.satysfi-lock-expected | 123 --------------------------- 6 files changed, 204 insertions(+), 157 deletions(-) create mode 100644 demo/demo.saphe.lock.yaml create mode 100644 demo/demo.saphe.yaml delete mode 100644 demo/demo.satysfi-lock-expected diff --git a/demo/.gitignore b/demo/.gitignore index 28e8ef900..2ab9ec5f9 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1 +1,2 @@ -*.satysfi-lock +*.saphe.lock.yaml.expected +*.satysfi-deps.yaml diff --git a/demo/Makefile b/demo/Makefile index bc3d2b8b1..c334db3e4 100644 --- a/demo/Makefile +++ b/demo/Makefile @@ -1,29 +1,29 @@ TARGETS = \ demo.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.satysfi-lock-expected) +EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) -SATYSFI ?= satysfi +SAPHE ?= saphe .PHONY: all promote clean -.SUFFIXES: .saty .pdf .satysfi-lock .satysfi-lock-expected +.SUFFIXES: .saty .pdf .saphe.lock.yaml .saphe.lock.yaml.expected # Keeps intermediate results: -.PRECIOUS: %.satysfi-lock +.PRECIOUS: %.saphe.lock.yaml # Generates a lock file from a document and checks that it is as expected: -.saty.satysfi-lock: - $(SATYSFI) solve $< - diff $(<:.saty=.satysfi-lock) $(<:.saty=.satysfi-lock-expected) +%.saphe.lock.yaml: %.saty %.saphe.yaml + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) # Typesets a document: -%.pdf: %.saty %.satysfi-lock - $(SATYSFI) build $< -o $@ +%.pdf: %.saty %.saphe.lock.yaml + $(SAPHE) build $< -o $@ # Promote a lock file to the corresponding expected lock file: -%.satysfi-lock-expected: %.satysfi-lock - cp $*.satysfi-lock $*.satysfi-lock-expected +%.saphe.lock.yaml.expected: %.saphe.lock.yaml + cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: all:: $(TARGETS) @@ -32,4 +32,4 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-lock + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml diff --git a/demo/demo.saphe.lock.yaml b/demo/demo.saphe.lock.yaml new file mode 100644 index 000000000..4151f4ad7 --- /dev/null +++ b/demo/demo.saphe.lock.yaml @@ -0,0 +1,142 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: proof + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-book + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: tabular + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + used_as: Proof +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + used_as: StdJaBook +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + used_as: Tabular diff --git a/demo/demo.saphe.yaml b/demo/demo.saphe.yaml new file mode 100644 index 000000000..46997bd4b --- /dev/null +++ b/demo/demo.saphe.yaml @@ -0,0 +1,48 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "demo" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "Proof" + registered: + registry: "default" + name: "proof" + requirement: "^0.0.1" + - used_as: "Tabular" + registered: + registry: "default" + name: "tabular" + requirement: "^0.0.1" + - used_as: "StdJaBook" + registered: + registry: "default" + name: "std-ja-book" + requirement: "^0.0.1" diff --git a/demo/demo.saty b/demo/demo.saty index 626ea892f..caca187ea 100644 --- a/demo/demo.saty +++ b/demo/demo.saty @@ -1,24 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `code`, registry = `default`, requirement = `^0.0.1` |), - (| name = `itemize`, registry = `default`, requirement = `^0.0.1` |), - (| name = `proof`, registry = `default`, requirement = `^0.0.1` |), - (| name = `tabular`, registry = `default`, requirement = `^0.0.1` |), - (| name = `std-ja-book`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use package open Stdlib.Pervasives use package open Math diff --git a/demo/demo.satysfi-lock-expected b/demo/demo.satysfi-lock-expected deleted file mode 100644 index a56c824ae..000000000 --- a/demo/demo.satysfi-lock-expected +++ /dev/null @@ -1,123 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.itemize.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: itemize - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.proof.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: proof - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja-book.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja-book - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.tabular.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: tabular - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false From 32ad5e03e5c3227006c0f2ab35999418f1de8461 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 17:45:03 +0900 Subject: [PATCH 068/381] small fix and update of the registry commit hash --- Makefile | 2 +- default-registry-commit-hash.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 01349a13f..7097ea02a 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ BINDIR=$(PREFIX)/bin RM=rm -f DUNE=dune -.PHONY: all test test-packages promote-package-locs update-ci-cache install uninstall clean +.PHONY: all test test-packages promote-package-locks update-ci-cache install uninstall clean all: $(DUNE) build --root . diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index af443e700..b7c2f53b2 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -8eb030f3a17cc237539a1b22bd5168c58e860efe refs/heads/temp-dev-saphe +66b667fabef272198229669447a7c530dc19c92a refs/heads/temp-dev-saphe From 9e9879271f9b3d09593296d806da6ef540f20a13 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 17:45:38 +0900 Subject: [PATCH 069/381] make `doc/` pass `saphe solve` and `saphe build` --- demo/Makefile | 2 +- doc/.gitignore | 3 +- doc/Makefile | 24 ++--- doc/doc-lang.saphe.lock.yaml | 107 ++++++++++++++++++++ doc/doc-lang.saphe.yaml | 33 +++++++ doc/doc-lang.saty | 17 ---- doc/doc-lang.satysfi-lock-expected | 86 ----------------- doc/doc-primitives.saphe.lock.yaml | 118 +++++++++++++++++++++++ doc/doc-primitives.saphe.yaml | 33 +++++++ doc/doc-primitives.saty | 18 ---- doc/doc-primitives.satysfi-lock-expected | 105 -------------------- doc/math1.saphe.lock.yaml | 118 +++++++++++++++++++++++ doc/math1.saphe.yaml | 38 ++++++++ doc/math1.satysfi-lock-expected | 104 -------------------- 14 files changed, 462 insertions(+), 344 deletions(-) create mode 100644 doc/doc-lang.saphe.lock.yaml create mode 100644 doc/doc-lang.saphe.yaml delete mode 100644 doc/doc-lang.satysfi-lock-expected create mode 100644 doc/doc-primitives.saphe.lock.yaml create mode 100644 doc/doc-primitives.saphe.yaml delete mode 100644 doc/doc-primitives.satysfi-lock-expected create mode 100644 doc/math1.saphe.lock.yaml create mode 100644 doc/math1.saphe.yaml delete mode 100644 doc/math1.satysfi-lock-expected diff --git a/demo/Makefile b/demo/Makefile index c334db3e4..339b49aef 100644 --- a/demo/Makefile +++ b/demo/Makefile @@ -32,4 +32,4 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml + rm -f *.pdf *.satysfi-aux *.satysfi-deps.yaml diff --git a/doc/.gitignore b/doc/.gitignore index 28e8ef900..2ab9ec5f9 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1 +1,2 @@ -*.satysfi-lock +*.saphe.lock.yaml.expected +*.satysfi-deps.yaml diff --git a/doc/Makefile b/doc/Makefile index 2d2c2478b..7d7260ff4 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -3,29 +3,29 @@ TARGETS = \ doc-lang.pdf \ math1.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.satysfi-lock-expected) +EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) -SATYSFI ?= satysfi +SAPHE ?= saphe .PHONY: all promote clean -.SUFFIXES: .saty .pdf .satysfi-lock .satysfi-lock-expected +.SUFFIXES: .saty .pdf .saphe.lock.yaml .saphe.lock.yaml.expected # Keeps intermediate results: -.PRECIOUS: %.satysfi-lock +.PRECIOUS: %.saphe.lock.yaml # Generates a lock file from a document and checks that it is as expected: -.saty.satysfi-lock: - $(SATYSFI) solve $< - diff $(<:.saty=.satysfi-lock) $(<:.saty=.satysfi-lock-expected) +%.saphe.lock.yaml: %.saty %.saphe.yaml + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) # Typesets a document: -%.pdf: %.saty %.satysfi-lock - $(SATYSFI) build $< -o $@ +%.pdf: %.saty %.saphe.lock.yaml + $(SAPHE) build $< -o $@ # Promote a lock file to the corresponding expected lock file: -%.satysfi-lock-expected: %.satysfi-lock - cp $*.satysfi-lock $*.satysfi-lock-expected +%.saphe.lock.yaml.expected: %.saphe.lock.yaml + cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: all:: $(TARGETS) @@ -34,7 +34,7 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-lock + rm -f *.pdf *.satysfi-aux *.satysfi-deps.yaml doc-primitives.pdf: local-math.satyh local.satyh paren.satyh doc-lang.pdf: local-math.satyh diff --git a/doc/doc-lang.saphe.lock.yaml b/doc/doc-lang.saphe.lock.yaml new file mode 100644 index 000000000..9037a6465 --- /dev/null +++ b/doc/doc-lang.saphe.lock.yaml @@ -0,0 +1,107 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/doc/doc-lang.saphe.yaml b/doc/doc-lang.saphe.yaml new file mode 100644 index 000000000..0449dcf77 --- /dev/null +++ b/doc/doc-lang.saphe.yaml @@ -0,0 +1,33 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "math1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/doc/doc-lang.saty b/doc/doc-lang.saty index a799044e1..a0c3fd308 100644 --- a/doc/doc-lang.saty +++ b/doc/doc-lang.saty @@ -1,20 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `std-ja`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use package open Stdlib.Pervasives use package open StdJa diff --git a/doc/doc-lang.satysfi-lock-expected b/doc/doc-lang.satysfi-lock-expected deleted file mode 100644 index 7ef625546..000000000 --- a/doc/doc-lang.satysfi-lock-expected +++ /dev/null @@ -1,86 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/doc/doc-primitives.saphe.lock.yaml b/doc/doc-primitives.saphe.lock.yaml new file mode 100644 index 000000000..3c28e3368 --- /dev/null +++ b/doc/doc-primitives.saphe.lock.yaml @@ -0,0 +1,118 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-book + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + used_as: StdJaBook +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/doc/doc-primitives.saphe.yaml b/doc/doc-primitives.saphe.yaml new file mode 100644 index 000000000..f61959111 --- /dev/null +++ b/doc/doc-primitives.saphe.yaml @@ -0,0 +1,33 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "doc-primitives" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJaBook" + registered: + registry: "default" + name: "std-ja-book" + requirement: "^0.0.1" diff --git a/doc/doc-primitives.saty b/doc/doc-primitives.saty index d70ac6911..7f892dff3 100644 --- a/doc/doc-primitives.saty +++ b/doc/doc-primitives.saty @@ -1,21 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `itemize`, registry = `default`, requirement = `^0.0.1` |), - (| name = `std-ja-book`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib.Pervasives use package open Math use package open Itemize diff --git a/doc/doc-primitives.satysfi-lock-expected b/doc/doc-primitives.satysfi-lock-expected deleted file mode 100644 index e05106bef..000000000 --- a/doc/doc-primitives.satysfi-lock-expected +++ /dev/null @@ -1,105 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.itemize.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: itemize - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja-book.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja-book - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/doc/math1.saphe.lock.yaml b/doc/math1.saphe.lock.yaml new file mode 100644 index 000000000..84b7b9b6e --- /dev/null +++ b/doc/math1.saphe.lock.yaml @@ -0,0 +1,118 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: proof + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: tabular + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + used_as: Proof +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + used_as: Tabular diff --git a/doc/math1.saphe.yaml b/doc/math1.saphe.yaml new file mode 100644 index 000000000..4fb023031 --- /dev/null +++ b/doc/math1.saphe.yaml @@ -0,0 +1,38 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "doc-lang" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Proof" + registered: + registry: "default" + name: "proof" + requirement: "^0.0.1" + - used_as: "Tabular" + registered: + registry: "default" + name: "tabular" + requirement: "^0.0.1" + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/doc/math1.satysfi-lock-expected b/doc/math1.satysfi-lock-expected deleted file mode 100644 index 2b5f553b9..000000000 --- a/doc/math1.satysfi-lock-expected +++ /dev/null @@ -1,104 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.proof.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: proof - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.tabular.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: tabular - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false From 28eb57c61bc1526135add1a0aa5057420008e5f4 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 18:12:58 +0900 Subject: [PATCH 070/381] slight fixes on `doc/` and `demo/` --- demo/.gitignore | 2 +- demo/Makefile | 2 +- ...ock.yaml => demo.saphe.lock.yaml.expected} | 0 doc/.gitignore | 1 + doc/Makefile | 2 +- doc/doc-lang.saphe.lock.yaml | 107 ---------------- doc/doc-lang.saphe.yaml | 2 +- doc/doc-primitives.saphe.lock.yaml | 118 ------------------ doc/math1.saphe.lock.yaml | 118 ------------------ doc/math1.saphe.yaml | 2 +- doc/math1.saty | 19 --- 11 files changed, 6 insertions(+), 367 deletions(-) rename demo/{demo.saphe.lock.yaml => demo.saphe.lock.yaml.expected} (100%) delete mode 100644 doc/doc-lang.saphe.lock.yaml delete mode 100644 doc/doc-primitives.saphe.lock.yaml delete mode 100644 doc/math1.saphe.lock.yaml diff --git a/demo/.gitignore b/demo/.gitignore index 2ab9ec5f9..0ae11f27a 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1,2 +1,2 @@ -*.saphe.lock.yaml.expected +*.saphe.lock.yaml *.satysfi-deps.yaml diff --git a/demo/Makefile b/demo/Makefile index 339b49aef..62944576e 100644 --- a/demo/Makefile +++ b/demo/Makefile @@ -32,4 +32,4 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-deps.yaml + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml diff --git a/demo/demo.saphe.lock.yaml b/demo/demo.saphe.lock.yaml.expected similarity index 100% rename from demo/demo.saphe.lock.yaml rename to demo/demo.saphe.lock.yaml.expected diff --git a/doc/.gitignore b/doc/.gitignore index 2ab9ec5f9..215276083 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,2 +1,3 @@ *.saphe.lock.yaml.expected +*.saphe.lock.yaml *.satysfi-deps.yaml diff --git a/doc/Makefile b/doc/Makefile index 7d7260ff4..cf4430885 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -34,7 +34,7 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-deps.yaml + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml doc-primitives.pdf: local-math.satyh local.satyh paren.satyh doc-lang.pdf: local-math.satyh diff --git a/doc/doc-lang.saphe.lock.yaml b/doc/doc-lang.saphe.lock.yaml deleted file mode 100644 index 9037a6465..000000000 --- a/doc/doc-lang.saphe.lock.yaml +++ /dev/null @@ -1,107 +0,0 @@ -ecosystem: ^0.0.1 -locks: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: annot - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: code - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-ipa-ex - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-junicode - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern-math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: itemize - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - used_as: Annot - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - used_as: Code - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - used_as: FontJunicode - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - used_as: FontIpaEx - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - used_as: FontLatinModernMath - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: std-ja - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: stdlib - version: 0.0.1 -dependencies: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 - used_as: Itemize -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 - used_as: StdJa -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib diff --git a/doc/doc-lang.saphe.yaml b/doc/doc-lang.saphe.yaml index 0449dcf77..f449e219a 100644 --- a/doc/doc-lang.saphe.yaml +++ b/doc/doc-lang.saphe.yaml @@ -1,6 +1,6 @@ ecosystem: "^0.0.1" language: "^0.1.0" -name: "math1" #TODO: remove this +name: "doc-lang" #TODO: remove this authors: - "Takashi Suwa" registries: diff --git a/doc/doc-primitives.saphe.lock.yaml b/doc/doc-primitives.saphe.lock.yaml deleted file mode 100644 index 3c28e3368..000000000 --- a/doc/doc-primitives.saphe.lock.yaml +++ /dev/null @@ -1,118 +0,0 @@ -ecosystem: ^0.0.1 -locks: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: annot - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: code - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-ipa-ex - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-junicode - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern-math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: footnote-scheme - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: itemize - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - used_as: Annot - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - used_as: Code - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 - used_as: FootnoteScheme - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - used_as: FontJunicode - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - used_as: FontIpaEx - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - used_as: FontLatinModernMath - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: std-ja-book - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: stdlib - version: 0.0.1 -dependencies: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 - used_as: Itemize -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 - used_as: StdJaBook -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib diff --git a/doc/math1.saphe.lock.yaml b/doc/math1.saphe.lock.yaml deleted file mode 100644 index 84b7b9b6e..000000000 --- a/doc/math1.saphe.lock.yaml +++ /dev/null @@ -1,118 +0,0 @@ -ecosystem: ^0.0.1 -locks: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: annot - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: code - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-ipa-ex - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-junicode - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: font-latin-modern-math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: math - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: proof - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 - used_as: Annot - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 - used_as: Code - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 - used_as: FontJunicode - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 - used_as: FontLatinModern - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 - used_as: FontIpaEx - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 - used_as: FontLatinModernMath - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: std-ja - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - dependencies: [] - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: stdlib - version: 0.0.1 -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 - dependencies: - - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib - test_only: false - registered: - registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 - package_name: tabular - version: 0.0.1 -dependencies: -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 - used_as: Math -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 - used_as: Proof -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 - used_as: StdJa -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 - used_as: Stdlib -- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 - used_as: Tabular diff --git a/doc/math1.saphe.yaml b/doc/math1.saphe.yaml index 4fb023031..23a7dd0fe 100644 --- a/doc/math1.saphe.yaml +++ b/doc/math1.saphe.yaml @@ -1,6 +1,6 @@ ecosystem: "^0.0.1" language: "^0.1.0" -name: "doc-lang" #TODO: remove this +name: "math1" #TODO: remove this authors: - "Takashi Suwa" registries: diff --git a/doc/math1.saty b/doc/math1.saty index 2fa08f52d..9d4dc7525 100644 --- a/doc/math1.saty +++ b/doc/math1.saty @@ -1,22 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `proof`, registry = `default`, requirement = `^0.0.1` |), - (| name = `tabular`, registry = `default`, requirement = `^0.0.1` |), - (| name = `std-ja`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use package open Stdlib.Pervasives use package open Math From f094f86e3d69558c644d9da45097dd633700fa06 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 21:16:38 +0900 Subject: [PATCH 071/381] fix integration tests about `clip`, `glue1`, and `math2` --- tests/.gitignore | 3 +- tests/Makefile | 41 +++++++++---------- tests/clip.saphe.lock.yaml.expected | 59 ++++++++++++++++++++++++++++ tests/clip.saphe.yaml | 43 ++++++++++++++++++++ tests/clip.saty | 20 ---------- tests/clip.satysfi-lock-expected | 51 ------------------------ tests/glue1.saphe.lock.yaml.expected | 59 ++++++++++++++++++++++++++++ tests/glue1.saphe.yaml | 43 ++++++++++++++++++++ tests/glue1.saty | 20 ---------- tests/glue1.satysfi-lock-expected | 51 ------------------------ tests/math2.saphe.lock.yaml.expected | 59 ++++++++++++++++++++++++++++ tests/math2.saphe.yaml | 43 ++++++++++++++++++++ tests/math2.saty | 20 ---------- tests/math2.satysfi-lock-expected | 51 ------------------------ 14 files changed, 329 insertions(+), 234 deletions(-) create mode 100644 tests/clip.saphe.lock.yaml.expected create mode 100644 tests/clip.saphe.yaml delete mode 100644 tests/clip.satysfi-lock-expected create mode 100644 tests/glue1.saphe.lock.yaml.expected create mode 100644 tests/glue1.saphe.yaml delete mode 100644 tests/glue1.satysfi-lock-expected create mode 100644 tests/math2.saphe.lock.yaml.expected create mode 100644 tests/math2.saphe.yaml delete mode 100644 tests/math2.satysfi-lock-expected diff --git a/tests/.gitignore b/tests/.gitignore index 28e8ef900..0ae11f27a 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1 +1,2 @@ -*.satysfi-lock +*.saphe.lock.yaml +*.satysfi-deps.yaml diff --git a/tests/Makefile b/tests/Makefile index 634750e47..c31c1a5e0 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -14,55 +14,56 @@ TARGETS = \ # refactor4.pdf \ # refactor6.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.satysfi-lock-expected) +EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) -SATYSFI ?= satysfi +SAPHE ?= saphe .PHONY: all promote clean -.SUFFIXES: .saty .pdf - -.SUFFIXES: .saty .pdf .satysfi-lock .satysfi-lock-expected +.SUFFIXES: .saty .pdf .saphe.lock.yaml .saphe.lock.yaml.expected # Keeps intermediate results: -.PRECIOUS: %.satysfi-lock +.PRECIOUS: %.saphe.lock.yaml # Generates a lock file from a document and checks that it is as expected: -.saty.satysfi-lock: - $(SATYSFI) solve $< - diff $(<:.saty=.satysfi-lock) $(<:.saty=.satysfi-lock-expected) +%.saphe.lock.yaml: %.saty %.saphe.yaml + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) # Typesets a document: -%.pdf: %.saty %.satysfi-lock - $(SATYSFI) build $< -o $@ +%.pdf: %.saty %.saphe.lock.yaml + $(SAPHE) build $< -o $@ # Promote a lock file to the corresponding expected lock file: -%.satysfi-lock-expected: %.satysfi-lock - cp $*.satysfi-lock $*.satysfi-lock-expected +%.saphe.lock.yaml.expected: %.saphe.lock.yaml + cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: all:: $(TARGETS) all:: (cd images; make) - (cd text_mode; make) - (cd md; make) +#TODO: run the following +# (cd text_mode; make) +# (cd md; make) # Entrypoint for promoting lock files: promote:: $(EXPECTED_LOCKS) promote:: (cd images; make promote) - (cd text_mode; make promote) - (cd md; make promote) +#TODO: run the following +# (cd text_mode; make promote) +# (cd md; make promote) clean:: - rm -f *.pdf *.satysfi-aux *.satysfi-lock + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml clean:: (cd images; make clean) - (cd text_mode; make clean) - (cd md; make clean) +#TODO: run the following +# (cd text_mode; make clean) +# (cd md; make clean) clip.pdf: head.satyh first.pdf: head.satyh diff --git a/tests/clip.saphe.lock.yaml.expected b/tests/clip.saphe.lock.yaml.expected new file mode 100644 index 000000000..83c90d859 --- /dev/null +++ b/tests/clip.saphe.lock.yaml.expected @@ -0,0 +1,59 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/tests/clip.saphe.yaml b/tests/clip.saphe.yaml new file mode 100644 index 000000000..8016671eb --- /dev/null +++ b/tests/clip.saphe.yaml @@ -0,0 +1,43 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "clip" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/clip.saty b/tests/clip.saty index 1699ddbc3..9741d1a46 100644 --- a/tests/clip.saty +++ b/tests/clip.saty @@ -1,23 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use open Head of `head` diff --git a/tests/clip.satysfi-lock-expected b/tests/clip.satysfi-lock-expected deleted file mode 100644 index 28fd3679a..000000000 --- a/tests/clip.satysfi-lock-expected +++ /dev/null @@ -1,51 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/glue1.saphe.lock.yaml.expected b/tests/glue1.saphe.lock.yaml.expected new file mode 100644 index 000000000..83c90d859 --- /dev/null +++ b/tests/glue1.saphe.lock.yaml.expected @@ -0,0 +1,59 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/tests/glue1.saphe.yaml b/tests/glue1.saphe.yaml new file mode 100644 index 000000000..f65ec54ba --- /dev/null +++ b/tests/glue1.saphe.yaml @@ -0,0 +1,43 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "glue1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/glue1.saty b/tests/glue1.saty index 8d84ee0e0..c20b1edb4 100644 --- a/tests/glue1.saty +++ b/tests/glue1.saty @@ -1,23 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use Head of `head` let open Head in diff --git a/tests/glue1.satysfi-lock-expected b/tests/glue1.satysfi-lock-expected deleted file mode 100644 index 28fd3679a..000000000 --- a/tests/glue1.satysfi-lock-expected +++ /dev/null @@ -1,51 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/math2.saphe.lock.yaml.expected b/tests/math2.saphe.lock.yaml.expected new file mode 100644 index 000000000..83c90d859 --- /dev/null +++ b/tests/math2.saphe.lock.yaml.expected @@ -0,0 +1,59 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/tests/math2.saphe.yaml b/tests/math2.saphe.yaml new file mode 100644 index 000000000..f311fd8b5 --- /dev/null +++ b/tests/math2.saphe.yaml @@ -0,0 +1,43 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "math2" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/math2.saty b/tests/math2.saty index b47ec2dfb..0eedd1562 100644 --- a/tests/math2.saty +++ b/tests/math2.saty @@ -1,23 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package Math use Head of `head` diff --git a/tests/math2.satysfi-lock-expected b/tests/math2.satysfi-lock-expected deleted file mode 100644 index 28fd3679a..000000000 --- a/tests/math2.satysfi-lock-expected +++ /dev/null @@ -1,51 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false From 6a37ba6a1ddb337e77810d59f6b2708778f24ced Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 21:26:34 +0900 Subject: [PATCH 072/381] fix integration tests about `math-typefaces` and `refactor*` --- tests/math-typefaces.saphe.lock.yaml.expected | 118 ++++++++++++++++++ tests/math-typefaces.saphe.yaml | 33 +++++ tests/math-typefaces.saty | 18 --- tests/math-typefaces.satysfi-lock-expected | 105 ---------------- tests/refactor1.saphe.lock.yaml.expected | 50 ++++++++ tests/refactor1.saphe.yaml | 38 ++++++ tests/refactor1.saty | 19 --- tests/refactor1.satysfi-lock-expected | 43 ------- tests/refactor2.saphe.lock.yaml.expected | 30 +++++ tests/refactor2.saphe.yaml | 28 +++++ tests/refactor2.saty | 17 --- tests/refactor2.satysfi-lock-expected | 26 ---- tests/refactor3.saphe.lock.yaml.expected | 30 +++++ tests/refactor3.saphe.yaml | 28 +++++ tests/refactor3.satysfi-lock-expected | 26 ---- tests/refactor5.saphe.lock.yaml.expected | 30 +++++ tests/refactor5.saphe.yaml | 28 +++++ tests/refactor5.saty | 17 --- 18 files changed, 413 insertions(+), 271 deletions(-) create mode 100644 tests/math-typefaces.saphe.lock.yaml.expected create mode 100644 tests/math-typefaces.saphe.yaml delete mode 100644 tests/math-typefaces.satysfi-lock-expected create mode 100644 tests/refactor1.saphe.lock.yaml.expected create mode 100644 tests/refactor1.saphe.yaml delete mode 100644 tests/refactor1.satysfi-lock-expected create mode 100644 tests/refactor2.saphe.lock.yaml.expected create mode 100644 tests/refactor2.saphe.yaml delete mode 100644 tests/refactor2.satysfi-lock-expected create mode 100644 tests/refactor3.saphe.lock.yaml.expected create mode 100644 tests/refactor3.saphe.yaml delete mode 100644 tests/refactor3.satysfi-lock-expected create mode 100644 tests/refactor5.saphe.lock.yaml.expected create mode 100644 tests/refactor5.saphe.yaml diff --git a/tests/math-typefaces.saphe.lock.yaml.expected b/tests/math-typefaces.saphe.lock.yaml.expected new file mode 100644 index 000000000..177d9d204 --- /dev/null +++ b/tests/math-typefaces.saphe.lock.yaml.expected @@ -0,0 +1,118 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-report + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + used_as: StdJaReport +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/tests/math-typefaces.saphe.yaml b/tests/math-typefaces.saphe.yaml new file mode 100644 index 000000000..f1f5f8d67 --- /dev/null +++ b/tests/math-typefaces.saphe.yaml @@ -0,0 +1,33 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "math-typefaces" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" diff --git a/tests/math-typefaces.saty b/tests/math-typefaces.saty index 51af1a821..37d2867cb 100644 --- a/tests/math-typefaces.saty +++ b/tests/math-typefaces.saty @@ -1,21 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `itemize`, registry = `default`, requirement = `^0.0.1` |), - (| name = `std-ja-report`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use package open Math use package open Itemize diff --git a/tests/math-typefaces.satysfi-lock-expected b/tests/math-typefaces.satysfi-lock-expected deleted file mode 100644 index ac6133209..000000000 --- a/tests/math-typefaces.satysfi-lock-expected +++ /dev/null @@ -1,105 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.itemize.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: itemize - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja-report.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja-report - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/refactor1.saphe.lock.yaml.expected b/tests/refactor1.saphe.lock.yaml.expected new file mode 100644 index 000000000..266b8aa3a --- /dev/null +++ b/tests/refactor1.saphe.lock.yaml.expected @@ -0,0 +1,50 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/tests/refactor1.saphe.yaml b/tests/refactor1.saphe.yaml new file mode 100644 index 000000000..254ab0e15 --- /dev/null +++ b/tests/refactor1.saphe.yaml @@ -0,0 +1,38 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "refactor1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor1.saty b/tests/refactor1.saty index cfc7ee246..403fb1d20 100644 --- a/tests/refactor1.saty +++ b/tests/refactor1.saty @@ -1,22 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `stdlib`, registry = `default`, requirement = `^0.0.1` |), - (| name = `math`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package open Stdlib use package open Math use package FontJunicode diff --git a/tests/refactor1.satysfi-lock-expected b/tests/refactor1.satysfi-lock-expected deleted file mode 100644 index 1f2ce60dd..000000000 --- a/tests/refactor1.satysfi-lock-expected +++ /dev/null @@ -1,43 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/refactor2.saphe.lock.yaml.expected b/tests/refactor2.saphe.lock.yaml.expected new file mode 100644 index 000000000..c840bb615 --- /dev/null +++ b/tests/refactor2.saphe.lock.yaml.expected @@ -0,0 +1,30 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath diff --git a/tests/refactor2.saphe.yaml b/tests/refactor2.saphe.yaml new file mode 100644 index 000000000..b59194ff5 --- /dev/null +++ b/tests/refactor2.saphe.yaml @@ -0,0 +1,28 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "refactor2" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor2.saty b/tests/refactor2.saty index 509bc0329..56acad49a 100644 --- a/tests/refactor2.saty +++ b/tests/refactor2.saty @@ -1,20 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package FontJunicode use package FontIpaEx use package FontLatinModernMath diff --git a/tests/refactor2.satysfi-lock-expected b/tests/refactor2.satysfi-lock-expected deleted file mode 100644 index 5cfda6dc9..000000000 --- a/tests/refactor2.satysfi-lock-expected +++ /dev/null @@ -1,26 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/refactor3.saphe.lock.yaml.expected b/tests/refactor3.saphe.lock.yaml.expected new file mode 100644 index 000000000..c840bb615 --- /dev/null +++ b/tests/refactor3.saphe.lock.yaml.expected @@ -0,0 +1,30 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath diff --git a/tests/refactor3.saphe.yaml b/tests/refactor3.saphe.yaml new file mode 100644 index 000000000..1f85f0d74 --- /dev/null +++ b/tests/refactor3.saphe.yaml @@ -0,0 +1,28 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "refactor3" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor3.satysfi-lock-expected b/tests/refactor3.satysfi-lock-expected deleted file mode 100644 index 5cfda6dc9..000000000 --- a/tests/refactor3.satysfi-lock-expected +++ /dev/null @@ -1,26 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/refactor5.saphe.lock.yaml.expected b/tests/refactor5.saphe.lock.yaml.expected new file mode 100644 index 000000000..c840bb615 --- /dev/null +++ b/tests/refactor5.saphe.lock.yaml.expected @@ -0,0 +1,30 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath diff --git a/tests/refactor5.saphe.yaml b/tests/refactor5.saphe.yaml new file mode 100644 index 000000000..b04ef0411 --- /dev/null +++ b/tests/refactor5.saphe.yaml @@ -0,0 +1,28 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "refactor5" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor5.saty b/tests/refactor5.saty index a03b45b2a..e5f146ba7 100644 --- a/tests/refactor5.saty +++ b/tests/refactor5.saty @@ -1,20 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `font-junicode`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-ipa-ex`, registry = `default`, requirement = `^0.0.1` |), - (| name = `font-latin-modern-math`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package FontJunicode use package FontIpaEx use package FontLatinModernMath From f2113af7c4be94e6d0462d0a3a5662bf8a77674f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 21:32:49 +0900 Subject: [PATCH 073/381] fix integration tests about `staged1` and `macro1` --- tests/macro1.saphe.lock.yaml.expected | 103 +++++++++++++++++++++++++ tests/macro1.saphe.yaml | 18 +++++ tests/macro1.saty | 15 ---- tests/macro1.satysfi-lock-expected | 96 ----------------------- tests/staged1.saphe.lock.yaml.expected | 92 ++++++++++++++++++++++ tests/staged1.saphe.yaml | 18 +++++ tests/staged1.saty | 15 ---- tests/staged1.satysfi-lock-expected | 86 --------------------- 8 files changed, 231 insertions(+), 212 deletions(-) create mode 100644 tests/macro1.saphe.lock.yaml.expected create mode 100644 tests/macro1.saphe.yaml delete mode 100644 tests/macro1.satysfi-lock-expected create mode 100644 tests/staged1.saphe.lock.yaml.expected create mode 100644 tests/staged1.saphe.yaml delete mode 100644 tests/staged1.satysfi-lock-expected diff --git a/tests/macro1.saphe.lock.yaml.expected b/tests/macro1.saphe.lock.yaml.expected new file mode 100644 index 000000000..758c05686 --- /dev/null +++ b/tests/macro1.saphe.lock.yaml.expected @@ -0,0 +1,103 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-report + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + used_as: StdJaReport diff --git a/tests/macro1.saphe.yaml b/tests/macro1.saphe.yaml new file mode 100644 index 000000000..c1ab17019 --- /dev/null +++ b/tests/macro1.saphe.yaml @@ -0,0 +1,18 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "macro1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" diff --git a/tests/macro1.saty b/tests/macro1.saty index 83ed40549..d88298c17 100644 --- a/tests/macro1.saty +++ b/tests/macro1.saty @@ -1,18 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `std-ja-report`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package StdJaReport use Macro1Local of `macro1-local` diff --git a/tests/macro1.satysfi-lock-expected b/tests/macro1.satysfi-lock-expected deleted file mode 100644 index 8c812d129..000000000 --- a/tests/macro1.satysfi-lock-expected +++ /dev/null @@ -1,96 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja-report.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja-report - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/tests/staged1.saphe.lock.yaml.expected b/tests/staged1.saphe.lock.yaml.expected new file mode 100644 index 000000000..9fca46deb --- /dev/null +++ b/tests/staged1.saphe.lock.yaml.expected @@ -0,0 +1,92 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa diff --git a/tests/staged1.saphe.yaml b/tests/staged1.saphe.yaml new file mode 100644 index 000000000..6b1565661 --- /dev/null +++ b/tests/staged1.saphe.yaml @@ -0,0 +1,18 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "staged1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/tests/staged1.saty b/tests/staged1.saty index 013914577..31a7ac382 100644 --- a/tests/staged1.saty +++ b/tests/staged1.saty @@ -1,18 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `std-ja`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] use package StdJa use Staged1Local of `staged1-local` diff --git a/tests/staged1.satysfi-lock-expected b/tests/staged1.satysfi-lock-expected deleted file mode 100644 index 7ef625546..000000000 --- a/tests/staged1.satysfi-lock-expected +++ /dev/null @@ -1,86 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false From 9ea80388e3dac3442278c4decf5da143b54bb878 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 21:41:19 +0900 Subject: [PATCH 074/381] fix integration tests about `images/test` --- tests/images/Makefile | 24 ++--- tests/images/test.saphe.lock.yaml.expected | 105 +++++++++++++++++++++ tests/images/test.saphe.yaml | 29 ++++++ tests/images/test.saty | 22 ----- tests/images/test.satysfi-lock-expected | 95 ------------------- 5 files changed, 146 insertions(+), 129 deletions(-) create mode 100644 tests/images/test.saphe.lock.yaml.expected create mode 100644 tests/images/test.saphe.yaml delete mode 100644 tests/images/test.satysfi-lock-expected diff --git a/tests/images/Makefile b/tests/images/Makefile index 05cbd0219..f222e5009 100644 --- a/tests/images/Makefile +++ b/tests/images/Makefile @@ -1,29 +1,29 @@ TARGETS = \ test.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.satysfi-lock-expected) +EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) -SATYSFI ?= satysfi +SAPHE ?= saphe .PHONY: all promote clean -.SUFFIXES: .saty .pdf .satysfi-lock .satysfi-lock-expected +.SUFFIXES: .saty .pdf .saphe.lock.yaml .saphe.lock.yaml.expected # Keeps intermediate results: -.PRECIOUS: %.satysfi-lock +.PRECIOUS: %.saphe.lock.yaml # Generates a lock file from a document and checks that it is as expected: -.saty.satysfi-lock: - $(SATYSFI) solve $< - diff $(<:.saty=.satysfi-lock) $(<:.saty=.satysfi-lock-expected) +%.saphe.lock.yaml: %.saty + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) # Typesets a document: -%.pdf: %.saty %.satysfi-lock - $(SATYSFI) build $< -o $@ +%.pdf: %.saty %.saphe.lock.yaml + $(SAPHE) build $< -o $@ # Promote a lock file to the corresponding expected lock file: -%.satysfi-lock-expected: %.satysfi-lock - cp $*.satysfi-lock $*.satysfi-lock-expected +%.saphe.lock.yaml.expected: %.saphe.lock.yaml + cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: all:: $(TARGETS) @@ -32,4 +32,4 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-lock + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml diff --git a/tests/images/test.saphe.lock.yaml.expected b/tests/images/test.saphe.lock.yaml.expected new file mode 100644 index 000000000..74bc64e12 --- /dev/null +++ b/tests/images/test.saphe.lock.yaml.expected @@ -0,0 +1,105 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa diff --git a/tests/images/test.saphe.yaml b/tests/images/test.saphe.yaml new file mode 100644 index 000000000..fcaf3a4f4 --- /dev/null +++ b/tests/images/test.saphe.yaml @@ -0,0 +1,29 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "test" #TODO: remove this +authors: + - "Daichi OOHASHI <@leque>" + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" diff --git a/tests/images/test.saty b/tests/images/test.saty index 2a2adcc10..c76c3f6c8 100644 --- a/tests/images/test.saty +++ b/tests/images/test.saty @@ -1,25 +1,3 @@ -#[config (| - registries = [ - (| - name = `default`, - remote = - Git(| - url = `https://github.com/SATySFi/default-registry`, - branch = `format-1`, - |) - |) - ], - dependencies = [ - (| name = `std-ja`, registry = `default`, requirement = `^0.0.1` |), - (| name = `itemize`, registry = `default`, requirement = `^0.0.1` |), - (| name = `annot`, registry = `default`, requirement = `^0.0.1` |), - ], -|)] -#[dependencies [ - (`std-ja`, `^0.0.1`), - (`itemize`, `^0.0.1`), - (`annot`, `^0.0.1`), -]] use package StdJa use package Itemize use package Annot diff --git a/tests/images/test.satysfi-lock-expected b/tests/images/test.satysfi-lock-expected deleted file mode 100644 index 3199f544a..000000000 --- a/tests/images/test.satysfi-lock-expected +++ /dev/null @@ -1,95 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.itemize.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: itemize - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.std-ja.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: std-ja - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false From 385fb1a9487ef80143e8104c3e75e428430121f9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 21:54:02 +0900 Subject: [PATCH 075/381] fix `install-libs.sh` for the CI --- .github/workflows/ci.yml | 4 ++-- install-libs.sh | 1 - lib-satysfi/registries/.gitkeep | 0 lib-satysfi/satysfi-library-root.yaml | 7 ------- 4 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 lib-satysfi/registries/.gitkeep delete mode 100644 lib-satysfi/satysfi-library-root.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b915e35a7..fe9cecb68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,9 +74,9 @@ jobs: run: | opam install -y . if [ "${{ matrix.os }}" == 'macos-latest' ]; then - ./install-libs.sh ~/.satysfi ginstall + ./install-libs.sh ~/.saphe ginstall else - ./install-libs.sh ~/.satysfi install + ./install-libs.sh ~/.saphe install fi # It is no longer necessary to download font files beforehand diff --git a/install-libs.sh b/install-libs.sh index 506c990ca..b8b2fe43e 100755 --- a/install-libs.sh +++ b/install-libs.sh @@ -4,7 +4,6 @@ LIBDIR=${1:-/usr/local/share/satysfi} INSTALL=${2:-install} "${INSTALL}" -d "${LIBDIR}" -"${INSTALL}" -m 644 lib-satysfi/satysfi-library-root.yaml "${LIBDIR}/satysfi-library-root.yaml" "${INSTALL}" -d "${LIBDIR}/unidata" "${INSTALL}" -m 644 lib-satysfi/unidata/*.txt "${LIBDIR}/unidata" "${INSTALL}" -d "${LIBDIR}/hyph" diff --git a/lib-satysfi/registries/.gitkeep b/lib-satysfi/registries/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib-satysfi/satysfi-library-root.yaml b/lib-satysfi/satysfi-library-root.yaml deleted file mode 100644 index 9d5489225..000000000 --- a/lib-satysfi/satysfi-library-root.yaml +++ /dev/null @@ -1,7 +0,0 @@ -language: ^0.1.0 -registries: -- hash_value: d9b4b850ab61a7b68961c6315048b351 - remote: - type: git - url: https://github.com/SATySFi/default-registry - branch: format-1 From 336ca78b37f7ff12995005b149e30b8d76ea506a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 22:12:29 +0900 Subject: [PATCH 076/381] debug the CI workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe9cecb68..8f262afa6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,7 +92,7 @@ jobs: - name: Build demo docs run: | (cd demo; opam exec -- make) - (cd doc; opam exec -- make) + (cd doc; pwd; ls -a; opam exec -- make) - name: Run integration tests run: | From 5629ca14584ed1e53336c8e3ac92908805f1d8f0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 22:40:36 +0900 Subject: [PATCH 077/381] add the `.expected` files, which have been unintentionally left uncommited --- demo/.gitignore | 1 + doc/.gitignore | 1 + doc/doc-lang.saphe.lock.yaml.expected | 107 ++++++++++++++++++ doc/doc-primitives.saphe.lock.yaml.expected | 118 ++++++++++++++++++++ doc/math1.saphe.lock.yaml.expected | 118 ++++++++++++++++++++ tests/.gitignore | 1 + 6 files changed, 346 insertions(+) create mode 100644 doc/doc-lang.saphe.lock.yaml.expected create mode 100644 doc/doc-primitives.saphe.lock.yaml.expected create mode 100644 doc/math1.saphe.lock.yaml.expected diff --git a/demo/.gitignore b/demo/.gitignore index 0ae11f27a..681b5ab7e 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1,2 +1,3 @@ *.saphe.lock.yaml +!*.saphe.lock.yaml.expected *.satysfi-deps.yaml diff --git a/doc/.gitignore b/doc/.gitignore index 215276083..0d04638e6 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,3 +1,4 @@ *.saphe.lock.yaml.expected *.saphe.lock.yaml +!*.saphe.lock.yaml.expected *.satysfi-deps.yaml diff --git a/doc/doc-lang.saphe.lock.yaml.expected b/doc/doc-lang.saphe.lock.yaml.expected new file mode 100644 index 000000000..9037a6465 --- /dev/null +++ b/doc/doc-lang.saphe.lock.yaml.expected @@ -0,0 +1,107 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/doc/doc-primitives.saphe.lock.yaml.expected b/doc/doc-primitives.saphe.lock.yaml.expected new file mode 100644 index 000000000..3c28e3368 --- /dev/null +++ b/doc/doc-primitives.saphe.lock.yaml.expected @@ -0,0 +1,118 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-book + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-book.0.0.1 + used_as: StdJaBook +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib diff --git a/doc/math1.saphe.lock.yaml.expected b/doc/math1.saphe.lock.yaml.expected new file mode 100644 index 000000000..84b7b9b6e --- /dev/null +++ b/doc/math1.saphe.lock.yaml.expected @@ -0,0 +1,118 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: proof + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: tabular + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.proof.0.0.1 + used_as: Proof +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJa +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 + used_as: Tabular diff --git a/tests/.gitignore b/tests/.gitignore index 0ae11f27a..681b5ab7e 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,2 +1,3 @@ *.saphe.lock.yaml +!*.saphe.lock.yaml.expected *.satysfi-deps.yaml From 24811d6699ecd412067868bcf7235e94110bc78f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 22:55:40 +0900 Subject: [PATCH 078/381] revert debugging operations for the CI workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f262afa6..fe9cecb68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,7 +92,7 @@ jobs: - name: Build demo docs run: | (cd demo; opam exec -- make) - (cd doc; pwd; ls -a; opam exec -- make) + (cd doc; opam exec -- make) - name: Run integration tests run: | From 9a2a67e499843cc5dcabde9336066fb76b6d95a5 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 6 Jan 2024 22:55:55 +0900 Subject: [PATCH 079/381] slight refactoring --- src/frontend/envelopeReader.ml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/frontend/envelopeReader.ml b/src/frontend/envelopeReader.ml index a0b4b12bf..d1ad02371 100644 --- a/src/frontend/envelopeReader.ml +++ b/src/frontend/envelopeReader.ml @@ -18,12 +18,6 @@ let listup_sources_in_directory (extensions : string list) (absdir_src : abs_pat ) -let make_path_list_absolute ~(origin : abs_path) (reldirs : string list) : abs_path list = - reldirs |> List.map (fun reldir -> - make_abs_path (Filename.concat (get_abs_path_string origin) reldir) - ) - - let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions : string list) ~envelope_config:(abspath_envelope_config : abs_path) : (EnvelopeConfig.t * untyped_envelope) ok = let open ResultMonad in let* config = EnvelopeConfig.load abspath_envelope_config in @@ -33,11 +27,11 @@ let main (display_config : Logging.config) ~(use_test_files : bool) ~(extensions let* envelope = match config.envelope_contents with | Library{ main_module_name; source_directories; test_directories; _ } -> - let absdirs_src = source_directories |> make_path_list_absolute ~origin:absdir_envelope in + let absdirs_src = source_directories |> List.map (append_to_abs_directory absdir_envelope) in let abspaths_src = absdirs_src |> List.map (listup_sources_in_directory extensions) |> List.concat in let abspaths = if use_test_files then - let absdirs_test = test_directories |> make_path_list_absolute ~origin:absdir_envelope in + let absdirs_test = test_directories |> List.map (append_to_abs_directory absdir_envelope) in let abspaths_test = absdirs_test |> List.map (listup_sources_in_directory extensions) |> List.concat in List.append abspaths_src abspaths_test else From fbe72a480e24c04d1e59e9dfa8b88a8ed07a34f4 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 00:22:12 +0900 Subject: [PATCH 080/381] begin to introduce `used_as_map` --- src-common/envelopeSystemBase.ml | 4 + src/frontend/envelopeChecker.ml | 139 ++++++++++++++++++------------- src/frontend/envelopeChecker.mli | 20 ++++- src/frontend/main.ml | 96 ++++++++++++++------- src/frontend/types.cppo.ml | 7 +- 5 files changed, 174 insertions(+), 92 deletions(-) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml index bc12436df..2dc939114 100644 --- a/src-common/envelopeSystemBase.ml +++ b/src-common/envelopeSystemBase.ml @@ -3,6 +3,7 @@ open MyUtil *) type envelope_name = string +[@@deriving show] type relative_path = string [@@deriving show] @@ -48,6 +49,7 @@ type envelope_dependency = { dependency_name : envelope_name; dependency_used_as : string; } +[@@deriving show] type envelope_spec = { envelope_name : envelope_name; @@ -55,8 +57,10 @@ type envelope_spec = { envelope_dependencies : envelope_dependency list; test_only_envelope : bool; } +[@@deriving show] type deps_config = { envelopes : envelope_spec list; explicit_dependencies : envelope_dependency list; } +[@@deriving show] diff --git a/src/frontend/envelopeChecker.ml b/src/frontend/envelopeChecker.ml index 0e4e2bea8..f7b00c001 100644 --- a/src/frontend/envelopeChecker.ml +++ b/src/frontend/envelopeChecker.ml @@ -10,8 +10,10 @@ type 'a ok = ('a, config_error) result type dependency_kind = EnvelopeDependency | LocalDependency +type local_type_environment = StructSig.t ModuleNameMap.t -let add_dependency_to_type_environment ~(import_envelope_only : bool) (header : header_element list) (genv : global_type_environment) (tyenv : Typeenv.t) : Typeenv.t ok = + +let add_dependency_to_type_environment ~(import_envelope_only : bool) (header : header_element list) (genv : global_type_environment) (used_as_map : envelope_name ModuleNameMap.t) (lenv : local_type_environment) (tyenv : Typeenv.t) : Typeenv.t ok = let open ResultMonad in header |> foldM (fun tyenv headerelem -> let opt = @@ -31,40 +33,55 @@ let add_dependency_to_type_environment ~(import_envelope_only : bool) (header : return tyenv | Some((kind, opening, (rng, ((rng0, modnm0), modidents)))) -> - begin - match (kind, genv |> GlobalTypeenv.find_opt modnm0) with - | (LocalDependency, None) -> - assert false (* Local dependency must be resolved beforehand. *) - - | (EnvelopeDependency, None) -> - err @@ UnknownPackageDependency(rng0, modnm0) - - | (_, Some(ssig)) -> - let mentry0 = { mod_signature = ConcStructure(ssig) } in - let modnm = - match List.rev modidents with - | [] -> modnm0 - | (_, modnm) :: _ -> modnm - in - let* mentry = - match TypecheckUtil.resolve_module_chain mentry0 modidents with - | Ok mentry -> return mentry - | Error(e) -> err @@ TypeError(e) + let* ssig = + match kind with + | LocalDependency -> + begin + match lenv |> ModuleNameMap.find_opt modnm0 with + | None -> + assert false (* Local dependency must be resolved beforehand. *) + + | Some(ssig) -> + return ssig + end + + | EnvelopeDependency -> + let* envelope_name0 = + match used_as_map |> ModuleNameMap.find_opt modnm0 with + | None -> err @@ UnknownPackageDependency(rng0, modnm0) + | Some(envelope_name0) -> return envelope_name0 in - let tyenv = tyenv |> Typeenv.add_module modnm mentry in - let* tyenv = - if opening then - let* ssig = - match mentry.mod_signature with - | ConcStructure(ssig) -> return ssig - | ConcFunctor(fsig) -> err @@ TypeError(NotAStructureSignature(rng, fsig)) - in - return (tyenv |> TypecheckUtil.add_to_type_environment_by_signature ssig) - else - return tyenv + let ssig = + match genv |> GlobalTypeenv.find_opt (EnvelopeName.EN(envelope_name0)) with + | None -> assert false (* Envelopes must be topologically sorted. *) + | Some(ssig) -> ssig in - return tyenv - end + return ssig + in + let mentry0 = { mod_signature = ConcStructure(ssig) } in + let modnm = + match List.rev modidents with + | [] -> modnm0 + | (_, modnm) :: _ -> modnm + in + let* mentry = + match TypecheckUtil.resolve_module_chain mentry0 modidents with + | Ok(mentry) -> return mentry + | Error(e) -> err @@ TypeError(e) + in + let tyenv = tyenv |> Typeenv.add_module modnm mentry in + let* tyenv = + if opening then + let* ssig = + match mentry.mod_signature with + | ConcStructure(ssig) -> return ssig + | ConcFunctor(fsig) -> err @@ TypeError(NotAStructureSignature(rng, fsig)) + in + return (tyenv |> TypecheckUtil.add_to_type_environment_by_signature ssig) + else + return tyenv + in + return tyenv ) tyenv @@ -97,41 +114,45 @@ let typecheck_document_file (display_config : Logging.config) (config : typechec err (NotADocumentFile(abspath_in, ty)) -let check_library_envelope (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (main_module_name : module_name) (utlibs : (abs_path * untyped_library_file) list) = +let check_library_envelope (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (used_as_map : envelope_name ModuleNameMap.t) (main_module_name : module_name) (utlibs : (abs_path * untyped_library_file) list) = let open ResultMonad in - (* Resolve dependency among the source files in the envelope: *) + (* Resolves dependency among the source files in the envelope: *) let* sorted_utlibs = ClosedFileDependencyResolver.main utlibs in - (* Typecheck each source file: *) - let* (_genv, libacc, ssig_opt) = - sorted_utlibs |> foldM (fun (genv, libacc, ssig_opt) (abspath, utlib) -> + (* Typechecks each source file: *) + let* (_lenv, libacc, ssig_opt) = + sorted_utlibs |> foldM (fun (lenv, libacc, ssig_opt) (abspath, utlib) -> let (_attrs, header, (modident, utsig_opt, utbinds)) = utlib in let* tyenv_for_struct = - tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + tyenv_prim |> add_dependency_to_type_environment + ~import_envelope_only:false + header genv used_as_map lenv in let (_, modnm) = modident in if String.equal modnm main_module_name then + (* Typechecks the main module: *) let* ((_quant, ssig), binds) = let* tyenv_for_sig = - tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:true header genv + tyenv_prim |> add_dependency_to_type_environment + ~import_envelope_only:true + header genv used_as_map lenv in typecheck_library_file display_config config ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_sig abspath utsig_opt utbinds in - let genv = genv |> GlobalTypeenv.add modnm ssig in - return (genv, Alist.extend libacc (abspath, binds), Some(ssig)) + let lenv = lenv |> ModuleNameMap.add modnm ssig in + return (lenv, Alist.extend libacc (abspath, binds), Some(ssig)) else let* ((_quant, ssig), binds) = typecheck_library_file display_config config ~for_struct:tyenv_for_struct ~for_sig:tyenv_for_struct abspath utsig_opt utbinds in - let genv = genv |> GlobalTypeenv.add modnm ssig in - return (genv, Alist.extend libacc (abspath, binds), ssig_opt) - ) (genv, Alist.empty, None) + let lenv = lenv |> ModuleNameMap.add modnm ssig in + return (lenv, Alist.extend libacc (abspath, binds), ssig_opt) + ) (ModuleNameMap.empty, Alist.empty, None) in let libs = Alist.to_list libacc in - match ssig_opt with | Some(ssig) -> return (ssig, libs) | None -> err @@ NoMainModule(main_module_name) @@ -185,39 +206,43 @@ let check_font_envelope (_main_module_name : module_name) (font_files : font_fil return (ssig, Alist.to_list libacc) -let main (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (envelope : untyped_envelope) : (StructSig.t * (abs_path * binding list) list) ok = +let main (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) ~(used_as_map : envelope_name ModuleNameMap.t) (envelope : untyped_envelope) : (StructSig.t * (abs_path * binding list) list) ok = match envelope with | UTLibraryEnvelope{ main_module_name; modules = utlibs } -> - check_library_envelope display_config config tyenv_prim genv main_module_name utlibs + check_library_envelope display_config config tyenv_prim genv used_as_map main_module_name utlibs | UTFontEnvelope{ main_module_name; font_files } -> check_font_envelope main_module_name font_files -let main_document (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) (sorted_locals : (abs_path * untyped_library_file) list) (abspath_and_utdoc : abs_path * untyped_document_file) : ((abs_path * binding list) list * abstract_tree) ok = +let main_document (display_config : Logging.config) (config : typecheck_config) (tyenv_prim : Typeenv.t) (genv : global_type_environment) ~(used_as_map : envelope_name ModuleNameMap.t) (sorted_locals : (abs_path * untyped_library_file) list) (abspath_and_utdoc : abs_path * untyped_document_file) : ((abs_path * binding list) list * abstract_tree) ok = let open ResultMonad in - let* (genv, libacc) = - sorted_locals |> foldM (fun (genv, libacc) (abspath, utlib) -> + let* (lenv, libacc) = + sorted_locals |> foldM (fun (lenv, libacc) (abspath, utlib) -> let (_attrs, header, (modident, utsig_opt, utbinds)) = utlib in let (_, modnm) = modident in let* ((_quant, ssig), binds) = let* tyenv = - tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + tyenv_prim |> add_dependency_to_type_environment + ~import_envelope_only:false + header genv used_as_map lenv in typecheck_library_file display_config config ~for_struct:tyenv ~for_sig:tyenv abspath utsig_opt utbinds in - let genv = genv |> GlobalTypeenv.add modnm ssig in - return (genv, Alist.extend libacc (abspath, binds)) - ) (genv, Alist.empty) + let lenv = lenv |> ModuleNameMap.add modnm ssig in + return (lenv, Alist.extend libacc (abspath, binds)) + ) (ModuleNameMap.empty, Alist.empty) in let libs = Alist.to_list libacc in - (* Typecheck the document: *) + (* Typechecks the document: *) let* ast_doc = let (abspath, (_attrs, header, utast)) = abspath_and_utdoc in let* tyenv = - tyenv_prim |> add_dependency_to_type_environment ~import_envelope_only:false header genv + tyenv_prim |> add_dependency_to_type_environment + ~import_envelope_only:false + header genv used_as_map lenv in typecheck_document_file display_config config tyenv abspath utast in diff --git a/src/frontend/envelopeChecker.mli b/src/frontend/envelopeChecker.mli index 0b579d926..16f6a68df 100644 --- a/src/frontend/envelopeChecker.mli +++ b/src/frontend/envelopeChecker.mli @@ -1,9 +1,25 @@ open MyUtil +open EnvelopeSystemBase open Types open StaticEnv open ConfigError -val main : Logging.config -> typecheck_config -> type_environment -> global_type_environment -> untyped_envelope -> (struct_signature * (abs_path * binding list) list, config_error) result +val main : + Logging.config -> + typecheck_config -> + type_environment -> + global_type_environment -> + used_as_map:(envelope_name ModuleNameMap.t) -> + untyped_envelope -> + (struct_signature * (abs_path * binding list) list, config_error) result -val main_document : Logging.config -> typecheck_config -> type_environment -> global_type_environment -> (abs_path * untyped_library_file) list -> abs_path * untyped_document_file -> ((abs_path * binding list) list * abstract_tree, config_error) result +val main_document : + Logging.config -> + typecheck_config -> + type_environment -> + global_type_environment -> + used_as_map:(envelope_name ModuleNameMap.t) -> + (abs_path * untyped_library_file) list -> + abs_path * untyped_document_file -> + ((abs_path * binding list) list * abstract_tree, config_error) result diff --git a/src/frontend/main.ml b/src/frontend/main.ml index c99bcef28..71a32dc24 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1,5 +1,6 @@ open MyUtil +open EnvelopeSystemBase open Types open StaticEnv open ConfigError @@ -1295,27 +1296,34 @@ let get_input_kind_from_extension (abspath_doc : abs_path) = | ext -> Error(UnexpectedExtension(ext)) +let make_used_as_map_for_checking_dependency (_deps_config : DepsConfig.t) (_envelope_name : envelope_name) : envelope_name ModuleNameMap.t = + failwith "TODO: make_used_as_map" + + +let make_used_as_map_for_checking_main (deps_config : DepsConfig.t) = + deps_config.explicit_dependencies |> List.fold_left (fun used_as_map envelope_dependency -> + let { dependency_name; dependency_used_as } = envelope_dependency in + used_as_map |> ModuleNameMap.add dependency_used_as dependency_name + ) ModuleNameMap.empty + + let check_depended_envelopes (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = let open ResultMonad in - (* Resolve dependency among envelopes: *) + (* Resolves dependency among envelopes: *) let* sorted_envelopes = ClosedEnvelopeDependencyResolver.main display_config ~use_test_only_envelope ~extensions deps_config in - (* Typecheck every depended envelope: *) + (* Typechecks every depended envelope: *) let* (genv, configenv, libacc) = - sorted_envelopes |> List.fold_left (fun res (_envelope_name, (config, envelope)) -> + sorted_envelopes |> List.fold_left (fun res (envelope_name, (config, envelope)) -> let* (genv, configenv, libacc) = res in - let main_module_name = - match envelope with - | UTLibraryEnvelope{ main_module_name; _ } -> main_module_name - | UTFontEnvelope{ main_module_name; _ } -> main_module_name - in + let used_as_map = make_used_as_map_for_checking_dependency deps_config envelope_name in let* (ssig, libs) = - EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in - let genv = genv |> GlobalTypeenv.add main_module_name ssig in - let configenv = configenv |> GlobalTypeenv.add main_module_name config in + let genv = genv |> GlobalTypeenv.add (EnvelopeName.EN(envelope_name)) ssig in + let configenv = configenv |> GlobalTypeenv.add (EnvelopeName.EN(envelope_name)) config in let libacc = Alist.append libacc libs in return (genv, configenv, libacc) ) (return (GlobalTypeenv.empty, GlobalTypeenv.empty, Alist.empty)) @@ -1348,8 +1356,8 @@ let build_package let abspath_envelope_config = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in - let output_mode = make_output_mode text_mode_formats_str_opt in + let typecheck_config = { is_text_mode = @@ -1358,31 +1366,37 @@ let build_package | TextMode(_) -> true } in - let extensions = get_candidate_file_extensions output_mode in let job_directory = get_job_directory abspath_envelope_config in let runtime_config = { job_directory } in - let (tyenv_prim, _env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in + (* Gets the initial type environment, which consists only of primitives: *) + let (tyenv_prim, _env) = + initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config + in + + (* Loads the deps config: *) Logging.deps_config_file display_config abspath_deps_config; let* deps_config = DepsConfig.load abspath_deps_config in + (* Parses the main envelope: *) let* (_config, envelope) = - EnvelopeReader.main display_config ~use_test_files:false ~extensions ~envelope_config:abspath_envelope_config + EnvelopeReader.main display_config ~use_test_files:false ~extensions + ~envelope_config:abspath_envelope_config in + (* Typechecks each depended envelope in the topological order: *) let* (genv, _configenv, _libs_dep) = check_depended_envelopes - display_config - typecheck_config - ~use_test_only_envelope:false - ~extensions - tyenv_prim - deps_config + display_config typecheck_config + ~use_test_only_envelope:false ~extensions + tyenv_prim deps_config in + (* Typechecks the main envelope: *) + let used_as_map = make_used_as_map_for_checking_main deps_config in let* (_ssig, _libs) = - EnvelopeChecker.main display_config typecheck_config tyenv_prim genv envelope + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in return () @@ -1418,8 +1432,8 @@ let open ResultMonad in let abspath_dump = make_absolute_if_relative ~origin:absdir_current fpath_dump in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in - let output_mode = make_output_mode text_mode_formats_str_opt in + let typecheck_config = { is_text_mode = @@ -1439,20 +1453,25 @@ let open ResultMonad in in let job_directory = get_job_directory abspath_in in let runtime_config = { job_directory } in - let* input_kind = get_input_kind_from_extension abspath_in in - let extensions = get_candidate_file_extensions output_mode in - let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode output_mode runtime_config in + (* Gets the initial type environment, which consists only of primitives: *) + let (tyenv_prim, env) = + initialize ~base_dir:absdir_base ~is_bytecomp_mode output_mode runtime_config + in + + (* Loads the deps config: *) Logging.deps_config_file display_config abspath_deps_config; let* deps_config = DepsConfig.load abspath_deps_config in Logging.target_file display_config abspath_out; + (* Initializes the dump file: *) let dump_file_exists = CrossRef.initialize abspath_dump in Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; + (* Typechecks each depended envelope in the topological order: *) let* (genv, configenv, libs) = check_depended_envelopes display_config @@ -1469,11 +1488,14 @@ let open ResultMonad in in (* Typechecking and elaboration: *) + let used_as_map = make_used_as_map_for_checking_main deps_config in let* (libs_local, ast_doc) = EnvelopeChecker.main_document - display_config typecheck_config tyenv_prim genv sorted_locals (abspath_in, utdoc) + display_config typecheck_config tyenv_prim genv ~used_as_map sorted_locals (abspath_in, utdoc) in let libs = List.append libs libs_local in + + (* Evaluation: *) if type_check_only then return () else @@ -1507,8 +1529,8 @@ let test_package let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in - let job_directory = get_job_directory abspath_in in let output_mode = make_output_mode text_mode_formats_str_opt in + let typecheck_config = { is_text_mode = @@ -1517,18 +1539,26 @@ let test_package | TextMode(_) -> true } in + let extensions = get_candidate_file_extensions output_mode in + let job_directory = get_job_directory abspath_in in let runtime_config = { job_directory } in - let extensions = get_candidate_file_extensions output_mode in - let (tyenv_prim, env) = initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config in + (* Gets the initial type environment, which consists only of pritmives: *) + let (tyenv_prim, env) = + initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config + in + (* Loads the deps config: *) Logging.deps_config_file display_config abspath_deps_config; let* deps_config = DepsConfig.load abspath_deps_config in + (* Parses the main envelope: *) let* (_config, package) = - EnvelopeReader.main display_config ~use_test_files:true ~extensions ~envelope_config:abspath_in + EnvelopeReader.main display_config ~use_test_files:true ~extensions + ~envelope_config:abspath_in in + (* Typechecks each depended envelope in the topological order: *) let* (genv, _configenv, _libs_dep) = check_depended_envelopes display_config @@ -1539,8 +1569,10 @@ let test_package deps_config in + (* Typechecks the main envelope: *) + let used_as_map = failwith "TODO: used_as_map in test_package" in let* (_ssig, libs) = - EnvelopeChecker.main display_config typecheck_config tyenv_prim genv package + EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map package in let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in let _env = evaluate_bindings display_config ~run_tests:true env codebinds in diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index 9e60a482a..cb506bc83 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -1290,7 +1290,12 @@ type code_rec_or_nonrec = | CdMutable of CodeSymbol.t * code_value -module GlobalTypeenv = Map.Make(String) +module EnvelopeName = struct + type t = EN of string + let compare (EN(en1)) (EN(en2)) = String.compare en1 en2 +end + +module GlobalTypeenv = Map.Make(EnvelopeName) module BoundIDHashTable = Hashtbl.Make(BoundID) From 9cd38bf8b5f97d1bb9667725647559cc1d602b0e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 00:30:53 +0900 Subject: [PATCH 081/381] implement how to make `used_as_map` --- src/frontend/configError.ml | 1 + src/frontend/main.ml | 35 ++++++++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 3a7dabe1c..30fc11e9a 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -75,3 +75,4 @@ type config_error = | DepsConfigError of abs_path * yaml_error | EnvelopeConfigNotFound of abs_path | EnvelopeConfigError of abs_path * yaml_error + | DependedEnvelopeNotFound of envelope_name diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 71a32dc24..2ef0fac7a 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1104,6 +1104,11 @@ let report_config_error (display_config : Logging.config) : config_error -> unit DisplayLine(get_abs_path_string abspath_envelope_config); ] (make_yaml_error_lines e)) + | DependedEnvelopeNotFound(envelope_name) -> + report_error Interface [ + NormalLine(Printf.sprintf "unknown depended envelope '%s'" envelope_name); + ] + let report_font_error (display_config : Logging.config) = function | FailedToReadFont(abspath, msg) -> @@ -1296,17 +1301,33 @@ let get_input_kind_from_extension (abspath_doc : abs_path) = | ext -> Error(UnexpectedExtension(ext)) -let make_used_as_map_for_checking_dependency (_deps_config : DepsConfig.t) (_envelope_name : envelope_name) : envelope_name ModuleNameMap.t = - failwith "TODO: make_used_as_map" - - -let make_used_as_map_for_checking_main (deps_config : DepsConfig.t) = - deps_config.explicit_dependencies |> List.fold_left (fun used_as_map envelope_dependency -> +let make_used_as_map (envelope_dependencies : envelope_dependency list) : envelope_name ModuleNameMap.t = + envelope_dependencies |> List.fold_left (fun used_as_map envelope_dependency -> let { dependency_name; dependency_used_as } = envelope_dependency in used_as_map |> ModuleNameMap.add dependency_used_as dependency_name ) ModuleNameMap.empty +let make_used_as_map_for_checking_dependency (deps_config : DepsConfig.t) (envelope_name_dep : envelope_name) = + let open ResultMonad in + let opt = + deps_config.envelopes |> List.find_map (fun envelope_spec -> + let { envelope_name; envelope_dependencies; _ } = envelope_spec in + if String.equal envelope_name envelope_name_dep then + Some(make_used_as_map envelope_dependencies) + else + None + ) + in + match opt with + | None -> err @@ DependedEnvelopeNotFound(envelope_name_dep) + | Some(used_as_map) -> return used_as_map + + +let make_used_as_map_for_checking_main (deps_config : DepsConfig.t) = + make_used_as_map deps_config.explicit_dependencies + + let check_depended_envelopes (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = let open ResultMonad in (* Resolves dependency among envelopes: *) @@ -1318,7 +1339,7 @@ let check_depended_envelopes (display_config : Logging.config) (typecheck_config let* (genv, configenv, libacc) = sorted_envelopes |> List.fold_left (fun res (envelope_name, (config, envelope)) -> let* (genv, configenv, libacc) = res in - let used_as_map = make_used_as_map_for_checking_dependency deps_config envelope_name in + let* used_as_map = make_used_as_map_for_checking_dependency deps_config envelope_name in let* (ssig, libs) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in From 31567241006cf07fb9e2930c7d9d7553262eea5c Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 00:44:50 +0900 Subject: [PATCH 082/381] add an integration test `rename-dep1` for checking `used_as` --- tests/Makefile | 1 + tests/rename-dep1.saphe.lock.yaml.expected | 92 ++++++++++++++++++++++ tests/rename-dep1.saphe.yaml | 18 +++++ tests/rename-dep1.saty | 11 +++ 4 files changed, 122 insertions(+) create mode 100644 tests/rename-dep1.saphe.lock.yaml.expected create mode 100644 tests/rename-dep1.saphe.yaml create mode 100644 tests/rename-dep1.saty diff --git a/tests/Makefile b/tests/Makefile index c31c1a5e0..d58347493 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -9,6 +9,7 @@ TARGETS = \ refactor5.pdf \ staged1.pdf \ macro1.pdf \ + rename-dep1.pdf \ # first.pdf \ # math1.pdf \ # refactor4.pdf \ diff --git a/tests/rename-dep1.saphe.lock.yaml.expected b/tests/rename-dep1.saphe.lock.yaml.expected new file mode 100644 index 000000000..191f7585e --- /dev/null +++ b/tests/rename-dep1.saphe.lock.yaml.expected @@ -0,0 +1,92 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 + used_as: StdJaRenamed diff --git a/tests/rename-dep1.saphe.yaml b/tests/rename-dep1.saphe.yaml new file mode 100644 index 000000000..c34f1be3e --- /dev/null +++ b/tests/rename-dep1.saphe.yaml @@ -0,0 +1,18 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "rename-dep1" #TODO: remove this +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJaRenamed" #Renames the main module here + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/tests/rename-dep1.saty b/tests/rename-dep1.saty new file mode 100644 index 000000000..cac2ccd01 --- /dev/null +++ b/tests/rename-dep1.saty @@ -0,0 +1,11 @@ +use package StdJaRenamed + +let open StdJaRenamed in +document (| + title = {Tests for “Used As”}, + author = {Takashi Suwa}, +|) '< + +p{ + Hello + } +> From cd9f7dcd2bfc3133ebdf9ea56c70462fb716ba6d Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 02:28:07 +0900 Subject: [PATCH 083/381] refactoring by using `foldM` --- src-saphe/packageConfig.ml | 5 ++--- src-saphe/sapheMain.ml | 10 ++++------ src-saphe/storeRootConfig.ml | 5 ++--- src-util/yamlDecoder.ml | 7 +++++++ src-util/yamlDecoder.mli | 2 ++ src/frontend/main.ml | 5 ++--- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 45889b341..85e183726 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -321,15 +321,14 @@ let validate (p_package_config : parsed_package_config) : t ok = } = p_package_config in let* (localmap, registry_remote_acc) = - registry_specs |> List.fold_left (fun res (registry_local_name, registry_remote) -> - let* (localmap, registry_remote_acc) = res in + registry_specs |> foldM (fun (localmap, registry_remote_acc) (registry_local_name, registry_remote) -> if localmap |> RegistryLocalNameMap.mem registry_local_name then err @@ DuplicateRegistryLocalName{ registry_local_name } else let localmap = localmap |> RegistryLocalNameMap.add registry_local_name registry_remote in let registry_remote_acc = Alist.extend registry_remote_acc registry_remote in return (localmap, registry_remote_acc) - ) (return (RegistryLocalNameMap.empty, Alist.empty)) + ) (RegistryLocalNameMap.empty, Alist.empty) in let* package_contents = validate_contents_spec localmap package_contents diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index d2b5d7ef0..25419b201 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -652,8 +652,7 @@ let solve ~(fpath_in : string) = (* Constructs a map that associates a package with its implementations: *) let* package_id_to_impl_list = - registry_remotes |> List.fold_left (fun res registry_remote -> - let* package_id_to_impl_list = res in + registry_remotes |> foldM (fun package_id_to_impl_list registry_remote -> let* registry_hash_value = ConfigUtil.make_registry_hash_value registry_remote in (* Manupulates the store root config: *) @@ -682,16 +681,15 @@ let solve ~(fpath_in : string) = in PackageRegistryConfig.load abspath_registry_config in - packages |> List.fold_left (fun res (package_name, impls) -> - let* package_id_to_impl_list = res in + packages |> foldM (fun package_id_to_impl_list (package_name, impls) -> let package_id = PackageId.{ registry_hash_value; package_name } in if package_id_to_impl_list |> PackageIdMap.mem package_id then err @@ MultiplePackageDefinition{ package_name } else return (package_id_to_impl_list |> PackageIdMap.add package_id impls) - ) (return package_id_to_impl_list) + ) package_id_to_impl_list - ) (return PackageIdMap.empty) + ) PackageIdMap.empty in let package_context = { language_version; package_id_to_impl_list } in diff --git a/src-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml index cd1a00354..5b14f232b 100644 --- a/src-saphe/storeRootConfig.ml +++ b/src-saphe/storeRootConfig.ml @@ -48,13 +48,12 @@ let config_decoder : t ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "registries" (list registry_spec_decoder) >>= fun registries -> - registries |> List.fold_left (fun res (registry_hash_value, registry_remote) -> - res >>= fun map -> + registries |> foldM (fun map (registry_hash_value, registry_remote) -> if map |> RegistryHashValueMap.mem registry_hash_value then failure (fun context -> DuplicateRegistryHashValue{ context; registry_hash_value }) else succeed (map |> RegistryHashValueMap.add registry_hash_value registry_remote) - ) (succeed RegistryHashValueMap.empty) >>= fun registries -> + ) RegistryHashValueMap.empty >>= fun registries -> succeed { registries } diff --git a/src-util/yamlDecoder.ml b/src-util/yamlDecoder.ml index a5f9fea45..83378d599 100644 --- a/src-util/yamlDecoder.ml +++ b/src-util/yamlDecoder.ml @@ -214,4 +214,11 @@ module Make (Err : ErrorType) = struct d3 yval >>= fun a3 -> return (f a1 a2 a3) + + let foldM (f : 'a -> 'b -> 'a t) (init : 'a) (xs : 'b list) : 'a t = + xs |> List.fold_left (fun res x -> + res >>= fun acc -> + f acc x + ) (succeed init) + end diff --git a/src-util/yamlDecoder.mli b/src-util/yamlDecoder.mli index eefe3dd8f..24e488755 100644 --- a/src-util/yamlDecoder.mli +++ b/src-util/yamlDecoder.mli @@ -70,4 +70,6 @@ module Make (Err : ErrorType) : sig val map2 : ('a1 -> 'a2 -> 'b) -> 'a1 t -> 'a2 t -> 'b t val map3 : ('a1 -> 'a2 -> 'a3 -> 'b) -> 'a1 t -> 'a2 t -> 'a3 t -> 'b t + + val foldM : ('a -> 'b -> 'a t) -> 'a -> 'b list -> 'a t end diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2ef0fac7a..392dc31e9 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1337,8 +1337,7 @@ let check_depended_envelopes (display_config : Logging.config) (typecheck_config (* Typechecks every depended envelope: *) let* (genv, configenv, libacc) = - sorted_envelopes |> List.fold_left (fun res (envelope_name, (config, envelope)) -> - let* (genv, configenv, libacc) = res in + sorted_envelopes |> foldM (fun (genv, configenv, libacc) (envelope_name, (config, envelope)) -> let* used_as_map = make_used_as_map_for_checking_dependency deps_config envelope_name in let* (ssig, libs) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope @@ -1347,7 +1346,7 @@ let check_depended_envelopes (display_config : Logging.config) (typecheck_config let configenv = configenv |> GlobalTypeenv.add (EnvelopeName.EN(envelope_name)) config in let libacc = Alist.append libacc libs in return (genv, configenv, libacc) - ) (return (GlobalTypeenv.empty, GlobalTypeenv.empty, Alist.empty)) + ) (GlobalTypeenv.empty, GlobalTypeenv.empty, Alist.empty) in return (genv, configenv, Alist.to_list libacc) From 5e096dcaa6093cc7897133ee1fbb9428210bc332 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 03:19:53 +0900 Subject: [PATCH 084/381] begin to support tests by extending lock/deps config formats --- src-common/envelopeSystemBase.ml | 5 ++-- src-saphe/depsConfig.ml | 3 +- src-saphe/lockConfig.ml | 14 ++++++---- src-saphe/packageConstraintSolver.ml | 42 +++++++++++++++++----------- src-saphe/packageSystemBase.ml | 11 ++++---- src-saphe/sapheMain.ml | 24 ++++++++++------ src/frontend/depsConfig.ml | 3 +- src/frontend/main.ml | 16 ++++++----- 8 files changed, 73 insertions(+), 45 deletions(-) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml index 2dc939114..f7db15bf5 100644 --- a/src-common/envelopeSystemBase.ml +++ b/src-common/envelopeSystemBase.ml @@ -60,7 +60,8 @@ type envelope_spec = { [@@deriving show] type deps_config = { - envelopes : envelope_spec list; - explicit_dependencies : envelope_dependency list; + envelopes : envelope_spec list; + explicit_dependencies : envelope_dependency list; + explicit_test_dependencies : envelope_dependency list; } [@@deriving show] diff --git a/src-saphe/depsConfig.ml b/src-saphe/depsConfig.ml index 8bd94a7a1..2b687f0e5 100644 --- a/src-saphe/depsConfig.ml +++ b/src-saphe/depsConfig.ml @@ -25,10 +25,11 @@ let envelope_spec_encoder (spec : envelope_spec) : Yaml.value = ]) let deps_config_encoder (deps_config : t) : Yaml.value = - let { envelopes; explicit_dependencies } = deps_config in + let { envelopes; explicit_dependencies; explicit_test_dependencies } = deps_config in `O([ ("envelopes", `A(envelopes |> List.map envelope_spec_encoder)); ("dependencies", `A(explicit_dependencies |> List.map envelope_dependency_encoder)); + ("test_dependencies", `A(explicit_test_dependencies |> List.map envelope_dependency_encoder)); ]) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index 68f54a4fd..024baa770 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -23,8 +23,9 @@ type locked_package = { } type t = { - locked_packages : locked_package list; - explicit_dependencies : lock_dependency list; + locked_packages : locked_package list; + explicit_dependencies : lock_dependency list; + explicit_test_dependencies : lock_dependency list; } @@ -96,15 +97,18 @@ let lock_config_decoder : t ConfigDecoder.t = get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun explicit_dependencies -> - succeed { locked_packages; explicit_dependencies } + get_or_else "test_dependencies" (list lock_dependency_decoder) [] >>= fun explicit_test_dependencies -> + succeed { locked_packages; explicit_dependencies; explicit_test_dependencies } let lock_config_encoder (lock_config : t) : Yaml.value = + let { locked_packages; explicit_dependencies; explicit_test_dependencies } = lock_config in let requirement = SemanticVersion.CompatibleWith(Constant.current_ecosystem_version) in `O([ ("ecosystem", `String(SemanticVersion.requirement_to_string requirement)); - ("locks", `A(lock_config.locked_packages |> List.map lock_encoder)); - ("dependencies", `A(lock_config.explicit_dependencies |> List.map lock_dependency_encoder)); + ("locks", `A(locked_packages |> List.map lock_encoder)); + ("dependencies", `A(explicit_dependencies |> List.map lock_dependency_encoder)); + ("test_dependencies", `A(explicit_test_dependencies |> List.map lock_dependency_encoder)); ]) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index 098916ebe..a609d25ee 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -303,18 +303,22 @@ module VertexMap = LockDependencyGraph.VertexMap let solve (context : package_context) (dependencies_with_flags : (dependency_flag * package_dependency) list) : (package_solution list) option = - let (explicit_source_dependencies, dependency_acc) = - dependencies_with_flags |> List.fold_left (fun (explicit_source_dependencies, dependency_acc) (flag, dep) -> + let (explicit_source_dependencies, explicit_test_dependencies, dependency_acc) = + dependencies_with_flags |> List.fold_left (fun acc (flag, dep) -> + let (explicit_source_dependencies, explicit_test_dependencies, dependency_acc) = acc in match dep with | PackageDependency{ spec; used_as } -> let RegisteredDependency{ package_id; _ } = spec in - let explicit_source_dependencies = + let (explicit_source_dependencies, explicit_test_dependencies) = match flag with - | SourceDependency -> explicit_source_dependencies |> PackageIdMap.add package_id used_as - | TestOnlyDependency -> explicit_source_dependencies + | SourceDependency -> + (explicit_source_dependencies |> PackageIdMap.add package_id used_as, explicit_test_dependencies) + + | TestOnlyDependency -> + (explicit_source_dependencies, explicit_test_dependencies |> PackageIdMap.add package_id used_as) in - (explicit_source_dependencies, Alist.extend dependency_acc dep) - ) (PackageIdMap.empty, Alist.empty) + (explicit_source_dependencies, explicit_test_dependencies, Alist.extend dependency_acc dep) + ) (PackageIdMap.empty, PackageIdMap.empty, Alist.empty) in let requires = Alist.to_list dependency_acc in let output_opt = @@ -328,7 +332,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla (* Adds vertices to the graph: *) let rolemap = output |> Output.to_map in - let (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) = + let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = Output.RoleMap.fold (fun _role impl acc -> let impl = Output.unwrap impl in match impl with @@ -338,7 +342,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> let package_id = PackageId.{ registry_hash_value; package_name } in let lock = Lock.{ package_id; locked_version } in - let (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) = acc in + let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = acc in let (graph, vertex) = match graph |> LockDependencyGraph.add_vertex lock () with | Error(_) -> assert false @@ -347,16 +351,18 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let quad_acc = Alist.extend quad_acc (lock, source, dependencies, vertex) in let explicit_vertex_to_used_as = match explicit_source_dependencies |> PackageIdMap.find_opt package_id with - | Some(used_as) -> - explicit_vertex_to_used_as |> VertexMap.add vertex used_as - - | None -> - explicit_vertex_to_used_as + | Some(used_as) -> explicit_vertex_to_used_as |> VertexMap.add vertex used_as + | None -> explicit_vertex_to_used_as + in + let explicit_test_vertex_to_used_as = + match explicit_test_dependencies |> PackageIdMap.find_opt package_id with + | Some(used_as) -> explicit_test_vertex_to_used_as |> VertexMap.add vertex used_as + | None -> explicit_test_vertex_to_used_as in let lock_to_vertex_map = lock_to_vertex_map |> LockMap.add lock vertex in - (quad_acc, graph, explicit_vertex_to_used_as, lock_to_vertex_map) + (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) - ) rolemap (Alist.empty, LockDependencyGraph.empty, VertexMap.empty, LockMap.empty) + ) rolemap (Alist.empty, LockDependencyGraph.empty, VertexMap.empty, VertexMap.empty, LockMap.empty) in (* Add edges to the graph: *) @@ -427,12 +433,16 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let explicitly_depended = explicit_vertex_to_used_as |> VertexMap.find_opt vertex in + let explicitly_test_depended = + explicit_test_vertex_to_used_as |> VertexMap.find_opt vertex + in Alist.extend solution_acc { lock; locked_source; locked_dependencies; used_in_test_only; explicitly_depended; + explicitly_test_depended; } ) solmap Alist.empty in diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 0f1aee32d..3e6430235 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -136,11 +136,12 @@ type locked_dependency = { [@@deriving show { with_path = false }] type package_solution = { - lock : Lock.t; - locked_source : implementation_source; - locked_dependencies : locked_dependency list; - used_in_test_only : bool; - explicitly_depended : string option; + lock : Lock.t; + locked_source : implementation_source; + locked_dependencies : locked_dependency list; + used_in_test_only : bool; + explicitly_depended : string option; + explicitly_test_depended : string option; } [@@deriving show { with_path = false }] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 25419b201..9c1632580 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -448,10 +448,21 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC ) ) in + let explicit_test_dependencies = + solutions |> List.filter_map (fun solution -> + solution.explicitly_test_depended |> Option.map (fun used_as -> + LockConfig.{ + depended_lock_name = make_lock_name solution.lock; + used_as; + } + ) + ) + in let lock_config = LockConfig.{ locked_packages = Alist.to_list locked_package_acc; explicit_dependencies; + explicit_test_dependencies; } in (lock_config, Alist.to_list impl_spec_acc) @@ -768,14 +779,11 @@ let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.loc let make_deps_config ~(store_root : abs_path) (lock_config : LockConfig.t) : DepsConfig.t = - let envelopes = - lock_config.LockConfig.locked_packages |> List.map (make_envelope_spec ~store_root) - in - let explicit_dependencies = - lock_config.LockConfig.explicit_dependencies - |> List.map make_envelope_dependency - in - { envelopes; explicit_dependencies } + let LockConfig.{ locked_packages; explicit_dependencies; explicit_test_dependencies } = lock_config in + let envelopes = locked_packages |> List.map (make_envelope_spec ~store_root) in + let explicit_dependencies = explicit_dependencies |> List.map make_envelope_dependency in + let explicit_test_dependencies = explicit_test_dependencies |> List.map make_envelope_dependency in + { envelopes; explicit_dependencies; explicit_test_dependencies } let build diff --git a/src/frontend/depsConfig.ml b/src/frontend/depsConfig.ml index 3e7e3f0a2..ed21b00dd 100644 --- a/src/frontend/depsConfig.ml +++ b/src/frontend/depsConfig.ml @@ -28,7 +28,8 @@ let deps_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in get "envelopes" (list envelope_spec_decoder) >>= fun envelopes -> get "dependencies" (list envelope_dependency_decoder) >>= fun explicit_dependencies -> - succeed { envelopes; explicit_dependencies } + get "test_dependencies" (list envelope_dependency_decoder) >>= fun explicit_test_dependencies -> + succeed { envelopes; explicit_dependencies; explicit_test_dependencies } let load (abspath_deps_config : abs_path) : (t, config_error) result = diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 392dc31e9..c279be01a 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1324,10 +1324,6 @@ let make_used_as_map_for_checking_dependency (deps_config : DepsConfig.t) (envel | Some(used_as_map) -> return used_as_map -let make_used_as_map_for_checking_main (deps_config : DepsConfig.t) = - make_used_as_map deps_config.explicit_dependencies - - let check_depended_envelopes (display_config : Logging.config) (typecheck_config : typecheck_config) ~(use_test_only_envelope : bool) ~(extensions : string list) (tyenv_prim : Typeenv.t) (deps_config : DepsConfig.t) = let open ResultMonad in (* Resolves dependency among envelopes: *) @@ -1414,7 +1410,7 @@ let build_package in (* Typechecks the main envelope: *) - let used_as_map = make_used_as_map_for_checking_main deps_config in + let used_as_map = make_used_as_map deps_config.explicit_dependencies in let* (_ssig, _libs) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in @@ -1508,7 +1504,7 @@ let open ResultMonad in in (* Typechecking and elaboration: *) - let used_as_map = make_used_as_map_for_checking_main deps_config in + let used_as_map = make_used_as_map deps_config.explicit_dependencies in let* (libs_local, ast_doc) = EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv ~used_as_map sorted_locals (abspath_in, utdoc) @@ -1590,10 +1586,16 @@ let test_package in (* Typechecks the main envelope: *) - let used_as_map = failwith "TODO: used_as_map in test_package" in + let used_as_map = + let { explicit_dependencies; explicit_test_dependencies; _ } = deps_config in + make_used_as_map + (List.append explicit_dependencies explicit_test_dependencies) + in let* (_ssig, libs) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map package in + + (* Runs tests: *) let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in let _env = evaluate_bindings display_config ~run_tests:true env codebinds in (* From b435f08450092779c9852268ca086bc49559a33e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 03:28:49 +0900 Subject: [PATCH 085/381] update lock files in packages --- .../packages/annot/annot.0.0.1/saphe.lock.yaml.expected | 1 + lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected | 1 + .../font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected | 1 + .../font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected | 1 + .../font-latin-modern-math.0.0.1/saphe.lock.yaml.expected | 1 + .../font-latin-modern.0.0.1/saphe.lock.yaml.expected | 1 + .../footnote-scheme.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected | 1 + lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/proof/proof.0.0.1/saphe.lock.yaml.expected | 1 + .../std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected | 1 + .../std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected | 3 +++ .../packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected | 1 + .../packages/testing/testing.0.0.1/saphe.lock.yaml.expected | 1 + 16 files changed, 18 insertions(+) diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected index 38d8e2602..eda47e998 100644 --- a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected @@ -19,3 +19,4 @@ dependencies: used_as: FontLatinModern - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected index a2658c9dc..70fa3cdac 100644 --- a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected @@ -1,3 +1,4 @@ ecosystem: ^0.0.1 locks: [] dependencies: [] +test_dependencies: [] diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected index a2658c9dc..70fa3cdac 100644 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected @@ -1,3 +1,4 @@ ecosystem: ^0.0.1 locks: [] dependencies: [] +test_dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected index a2658c9dc..70fa3cdac 100644 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected @@ -1,3 +1,4 @@ ecosystem: ^0.0.1 locks: [] dependencies: [] +test_dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected index a2658c9dc..70fa3cdac 100644 --- a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected @@ -1,3 +1,4 @@ ecosystem: ^0.0.1 locks: [] dependencies: [] +test_dependencies: [] diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected index d8dfc605c..2268748a5 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected @@ -92,3 +92,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected index d8dfc605c..2268748a5 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected @@ -92,3 +92,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected index 8e7fb8ab6..e15a423e2 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected @@ -81,3 +81,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected index 7b44ad298..90c7da8da 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected @@ -8,3 +8,6 @@ locks: package_name: testing version: 0.0.1 dependencies: [] +test_dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.testing.0.0.1 + used_as: Testing diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected index 4eed7b21a..9942316ac 100644 --- a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected @@ -10,3 +10,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected index a2658c9dc..70fa3cdac 100644 --- a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected @@ -1,3 +1,4 @@ ecosystem: ^0.0.1 locks: [] dependencies: [] +test_dependencies: [] From d1c0d7ce109e97c6c5e87b83726979af1660509e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 03:34:54 +0900 Subject: [PATCH 086/381] update lock files in `doc/`, `demo`, and `tests/` --- demo/demo.saphe.lock.yaml.expected | 3 +++ demo/demo.saphe.yaml | 5 +++++ doc/doc-lang.saphe.lock.yaml.expected | 1 + doc/doc-primitives.saphe.lock.yaml.expected | 1 + doc/math1.saphe.lock.yaml.expected | 1 + tests/clip.saphe.lock.yaml.expected | 1 + tests/glue1.saphe.lock.yaml.expected | 1 + tests/images/test.saphe.lock.yaml.expected | 1 + tests/macro1.saphe.lock.yaml.expected | 1 + tests/math-typefaces.saphe.lock.yaml.expected | 1 + tests/math2.saphe.lock.yaml.expected | 1 + tests/refactor1.saphe.lock.yaml.expected | 1 + tests/refactor2.saphe.lock.yaml.expected | 1 + tests/refactor3.saphe.lock.yaml.expected | 1 + tests/refactor5.saphe.lock.yaml.expected | 1 + tests/rename-dep1.saphe.lock.yaml.expected | 1 + tests/staged1.saphe.lock.yaml.expected | 1 + 17 files changed, 23 insertions(+) diff --git a/demo/demo.saphe.lock.yaml.expected b/demo/demo.saphe.lock.yaml.expected index 4151f4ad7..2dff01024 100644 --- a/demo/demo.saphe.lock.yaml.expected +++ b/demo/demo.saphe.lock.yaml.expected @@ -126,6 +126,8 @@ locks: package_name: tabular version: 0.0.1 dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 used_as: Code - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 @@ -140,3 +142,4 @@ dependencies: used_as: Stdlib - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 used_as: Tabular +test_dependencies: [] diff --git a/demo/demo.saphe.yaml b/demo/demo.saphe.yaml index 46997bd4b..5718b457f 100644 --- a/demo/demo.saphe.yaml +++ b/demo/demo.saphe.yaml @@ -21,6 +21,11 @@ contents: registry: "default" name: "math" requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" - used_as: "Code" registered: registry: "default" diff --git a/doc/doc-lang.saphe.lock.yaml.expected b/doc/doc-lang.saphe.lock.yaml.expected index 9037a6465..841a00257 100644 --- a/doc/doc-lang.saphe.lock.yaml.expected +++ b/doc/doc-lang.saphe.lock.yaml.expected @@ -105,3 +105,4 @@ dependencies: used_as: StdJa - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/doc/doc-primitives.saphe.lock.yaml.expected b/doc/doc-primitives.saphe.lock.yaml.expected index 3c28e3368..0de5dbafc 100644 --- a/doc/doc-primitives.saphe.lock.yaml.expected +++ b/doc/doc-primitives.saphe.lock.yaml.expected @@ -116,3 +116,4 @@ dependencies: used_as: StdJaBook - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/doc/math1.saphe.lock.yaml.expected b/doc/math1.saphe.lock.yaml.expected index 84b7b9b6e..76255ef5e 100644 --- a/doc/math1.saphe.lock.yaml.expected +++ b/doc/math1.saphe.lock.yaml.expected @@ -116,3 +116,4 @@ dependencies: used_as: Stdlib - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.tabular.0.0.1 used_as: Tabular +test_dependencies: [] diff --git a/tests/clip.saphe.lock.yaml.expected b/tests/clip.saphe.lock.yaml.expected index 83c90d859..8dc1fd9d6 100644 --- a/tests/clip.saphe.lock.yaml.expected +++ b/tests/clip.saphe.lock.yaml.expected @@ -57,3 +57,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/tests/glue1.saphe.lock.yaml.expected b/tests/glue1.saphe.lock.yaml.expected index 83c90d859..8dc1fd9d6 100644 --- a/tests/glue1.saphe.lock.yaml.expected +++ b/tests/glue1.saphe.lock.yaml.expected @@ -57,3 +57,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/tests/images/test.saphe.lock.yaml.expected b/tests/images/test.saphe.lock.yaml.expected index 74bc64e12..43504447b 100644 --- a/tests/images/test.saphe.lock.yaml.expected +++ b/tests/images/test.saphe.lock.yaml.expected @@ -103,3 +103,4 @@ dependencies: used_as: Itemize - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 used_as: StdJa +test_dependencies: [] diff --git a/tests/macro1.saphe.lock.yaml.expected b/tests/macro1.saphe.lock.yaml.expected index 758c05686..ae13af04f 100644 --- a/tests/macro1.saphe.lock.yaml.expected +++ b/tests/macro1.saphe.lock.yaml.expected @@ -101,3 +101,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 used_as: StdJaReport +test_dependencies: [] diff --git a/tests/math-typefaces.saphe.lock.yaml.expected b/tests/math-typefaces.saphe.lock.yaml.expected index 177d9d204..ccc544e3f 100644 --- a/tests/math-typefaces.saphe.lock.yaml.expected +++ b/tests/math-typefaces.saphe.lock.yaml.expected @@ -116,3 +116,4 @@ dependencies: used_as: StdJaReport - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/tests/math2.saphe.lock.yaml.expected b/tests/math2.saphe.lock.yaml.expected index 83c90d859..8dc1fd9d6 100644 --- a/tests/math2.saphe.lock.yaml.expected +++ b/tests/math2.saphe.lock.yaml.expected @@ -57,3 +57,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/tests/refactor1.saphe.lock.yaml.expected b/tests/refactor1.saphe.lock.yaml.expected index 266b8aa3a..f0e387243 100644 --- a/tests/refactor1.saphe.lock.yaml.expected +++ b/tests/refactor1.saphe.lock.yaml.expected @@ -48,3 +48,4 @@ dependencies: used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib +test_dependencies: [] diff --git a/tests/refactor2.saphe.lock.yaml.expected b/tests/refactor2.saphe.lock.yaml.expected index c840bb615..d95fb1476 100644 --- a/tests/refactor2.saphe.lock.yaml.expected +++ b/tests/refactor2.saphe.lock.yaml.expected @@ -28,3 +28,4 @@ dependencies: used_as: FontJunicode - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath +test_dependencies: [] diff --git a/tests/refactor3.saphe.lock.yaml.expected b/tests/refactor3.saphe.lock.yaml.expected index c840bb615..d95fb1476 100644 --- a/tests/refactor3.saphe.lock.yaml.expected +++ b/tests/refactor3.saphe.lock.yaml.expected @@ -28,3 +28,4 @@ dependencies: used_as: FontJunicode - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath +test_dependencies: [] diff --git a/tests/refactor5.saphe.lock.yaml.expected b/tests/refactor5.saphe.lock.yaml.expected index c840bb615..d95fb1476 100644 --- a/tests/refactor5.saphe.lock.yaml.expected +++ b/tests/refactor5.saphe.lock.yaml.expected @@ -28,3 +28,4 @@ dependencies: used_as: FontJunicode - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath +test_dependencies: [] diff --git a/tests/rename-dep1.saphe.lock.yaml.expected b/tests/rename-dep1.saphe.lock.yaml.expected index 191f7585e..84f59c978 100644 --- a/tests/rename-dep1.saphe.lock.yaml.expected +++ b/tests/rename-dep1.saphe.lock.yaml.expected @@ -90,3 +90,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 used_as: StdJaRenamed +test_dependencies: [] diff --git a/tests/staged1.saphe.lock.yaml.expected b/tests/staged1.saphe.lock.yaml.expected index 9fca46deb..d89672ec5 100644 --- a/tests/staged1.saphe.lock.yaml.expected +++ b/tests/staged1.saphe.lock.yaml.expected @@ -90,3 +90,4 @@ locks: dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja.0.0.1 used_as: StdJa +test_dependencies: [] From d4bcef7f67f0e9aa32b21ab04d59e9d29ee963c0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 04:02:09 +0900 Subject: [PATCH 087/381] introduce `saphe test` --- bin-saphe/saphe.ml | 36 +++++++++++------- src-saphe/configError.ml | 1 + src-saphe/sapheMain.ml | 74 +++++++++++++++++++++++++++++++++++-- src-saphe/satysfiCommand.ml | 41 ++++++++++++++++++-- 4 files changed, 132 insertions(+), 20 deletions(-) diff --git a/bin-saphe/saphe.ml b/bin-saphe/saphe.ml index 1ab3b20f3..a0791aaf1 100644 --- a/bin-saphe/saphe.ml +++ b/bin-saphe/saphe.ml @@ -8,7 +8,6 @@ let build fpath_out_opt text_mode_formats_str_opt page_number_limit - show_full_path debug_show_bbox debug_show_space debug_show_block_bbox @@ -22,7 +21,6 @@ let build ~fpath_out_opt ~text_mode_formats_str_opt ~page_number_limit - ~show_full_path ~debug_show_bbox ~debug_show_space ~debug_show_block_bbox @@ -32,6 +30,15 @@ let build ~bytecomp +let test + fpath_in + text_mode_formats_str_opt += + SapheMain.test + ~fpath_in + ~text_mode_formats_str_opt + + let arg_in : string Cmdliner.Term.t = let open Cmdliner in Arg.(required (pos 0 (some file) None (info []))) @@ -60,12 +67,6 @@ let make_boolean_flag_spec ~(flags : string list) ~(doc : string) : bool Cmdline Arg.(value (flag (info flags ~doc))) -let flag_full_path = - make_boolean_flag_spec - ~flags:[ "full-path" ] - ~doc:"Displays paths in full-path style" - - let flag_debug_show_bbox = make_boolean_flag_spec ~flags:[ "debug-show-bbox" ] @@ -108,7 +109,13 @@ let flag_bytecomp = ~doc:"Use bytecode compiler" -let command_build = +let command_solve : unit Cmdliner.Cmd.t = + let open Cmdliner in + Cmd.v (Cmd.info "solve") + Term.(const solve $ arg_in) + + +let command_build : unit Cmdliner.Cmd.t = let open Cmdliner in Cmd.v (Cmd.info "build") Term.(const build @@ -116,7 +123,6 @@ let command_build = $ flag_output $ flag_text_mode $ flag_page_number_limit - $ flag_full_path $ flag_debug_show_bbox $ flag_debug_show_space $ flag_debug_show_block_bbox @@ -127,10 +133,13 @@ let command_build = ) -let command_solve = +let command_test : unit Cmdliner.Cmd.t = let open Cmdliner in - Cmd.v (Cmd.info "solve") - Term.(const solve $ arg_in) + Cmd.v (Cmd.info "test") + Term.(const test + $ arg_in + $ flag_text_mode + ) let () = @@ -142,6 +151,7 @@ let () = [ command_solve; command_build; + command_test; ] in Stdlib.exit (Cmd.eval (Cmd.group info subcommands)) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index b080510fc..27c143794 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -143,3 +143,4 @@ type config_error = | UndefinedRegistryLocalName of { registry_local_name : registry_local_name; } + | CannotTestDocument diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 9c1632580..a210fde12 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -375,6 +375,11 @@ let report_config_error = function NormalLine(Printf.sprintf "undefined registry local name '%s'" registry_local_name) ] + | CannotTestDocument -> + report_error [ + NormalLine("cannot run tests for documents (at least so far)"); + ] + type solve_input = | PackageSolveInput of { @@ -791,7 +796,6 @@ let build ~(fpath_out_opt : string option) ~(text_mode_formats_str_opt : string option) ~(page_number_limit : int) - ~(show_full_path : bool) ~(debug_show_bbox : bool) ~(debug_show_space : bool) ~(debug_show_block_bbox : bool) @@ -807,9 +811,7 @@ let build let build_input = let options = SatysfiCommand.{ - text_mode = text_mode_formats_str_opt; page_number_limit; - show_full_path; debug_show_bbox; debug_show_space; debug_show_block_bbox; @@ -876,6 +878,7 @@ let build ~envelope:abspath_envelope_config ~deps:abspath_deps_config ~base_dir:absdir_store_root + ~mode:text_mode_formats_str_opt ~options) in return () @@ -902,6 +905,7 @@ let build ~dump:abspath_dump ~deps:abspath_deps_config ~base_dir:absdir_store_root + ~mode:text_mode_formats_str_opt ~options) in return () @@ -909,3 +913,67 @@ let build match res with | Ok(()) -> () | Error(e) -> report_config_error e; exit 1 + + +type test_input = + | PackageTestInput of { + root : abs_path; + lock : abs_path; + deps : abs_path; + envelope : abs_path; + } + + +let test + ~(fpath_in : string) + ~(text_mode_formats_str_opt : string option) += + let res = + let open ResultMonad in + + let* test_input = + let absdir_current = Sys.getcwd () in + let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in + if is_directory abspath_in then + let abspath_lock_config = Constant.library_lock_config_path ~dir:abspath_in in + let abspath_deps_config = Constant.library_deps_config_path ~dir:abspath_in in + let abspath_envelope_config = Constant.envelope_config_path ~dir:abspath_in in + return @@ PackageTestInput{ + root = abspath_in; + lock = abspath_lock_config; + deps = abspath_deps_config; + envelope = abspath_envelope_config; + } + else + err @@ CannotTestDocument + in + + let* absdir_store_root = get_store_root () in + + match test_input with + | PackageTestInput{ + root = _absdir_package; + lock = abspath_lock_config; + deps = abspath_deps_config; + envelope = abspath_envelope_config; + } -> + (* Updates the deps config: *) + let* lock_config = LockConfig.load abspath_lock_config in + let deps_config = make_deps_config ~store_root:absdir_store_root lock_config in + let* () = DepsConfig.write abspath_deps_config deps_config in + Logging.end_deps_config_output abspath_deps_config; + + (* Builds the package by invoking `satysfi`: *) + let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + SatysfiCommand.(test_package + ~envelope:abspath_envelope_config + ~deps:abspath_deps_config + ~base_dir:absdir_store_root + ~mode:text_mode_formats_str_opt) + in + return () + + in + match res with + | Ok(()) -> () + | Error(e) -> report_config_error e; exit 1 diff --git a/src-saphe/satysfiCommand.ml b/src-saphe/satysfiCommand.ml index 6eae2516d..26bab359f 100644 --- a/src-saphe/satysfiCommand.ml +++ b/src-saphe/satysfiCommand.ml @@ -18,9 +18,7 @@ let escape_command_line (args : string list) : string = type build_option = { - text_mode : string option; page_number_limit : int; - show_full_path : bool; debug_show_bbox : bool; debug_show_space : bool; debug_show_block_bbox : bool; @@ -31,10 +29,20 @@ type build_option = { } +let make_mode_args (text_mode_formats_str_opt : string option) = + match text_mode_formats_str_opt with + | None -> + [] + + | Some(text_mode_formats_str) -> + [ "--text_mode"; text_mode_formats_str ] + + let build_package ~envelope:(abspath_envelope_config : abs_path) ~deps:(abspath_deps_config : abs_path) ~base_dir:(absdir_base : abs_path) + ~mode:(text_mode_formats_str_opt : string option) ~options:(_ : build_option) : run_result = let args_mandatory = @@ -46,7 +54,8 @@ let build_package "--full-path"; (* TODO: refine this *) ] in - let args = args_mandatory in + let args_mode = make_mode_args text_mode_formats_str_opt in + let args = List.concat [ args_mandatory; args_mode ] in let command = escape_command_line args in let exit_status = Sys.command command in { exit_status; command } @@ -58,6 +67,7 @@ let build_document ~dump:(abspath_dump : abs_path) ~deps:(abspath_deps_config : abs_path) ~base_dir:(absdir_base : abs_path) + ~mode:(text_mode_formats_str_opt : string option) ~options:(_ : build_option) : run_result = let args_mandatory = @@ -71,7 +81,30 @@ let build_document "--full-path"; (* TODO: refine this *) ] in - let args = args_mandatory in + let args_mode = make_mode_args text_mode_formats_str_opt in + let args = List.concat [ args_mandatory; args_mode ] in + let command = escape_command_line args in + let exit_status = Sys.command command in + { exit_status; command } + + +let test_package + ~envelope:(abspath_envelope_config : abs_path) + ~deps:(abspath_deps_config : abs_path) + ~base_dir:(absdir_base : abs_path) + ~mode:(text_mode_formats_str_opt : string option) : run_result += + let args_mandatory = + [ + "satysfi"; "test"; "package"; + get_abs_path_string abspath_envelope_config; + "--deps"; get_abs_path_string abspath_deps_config; + "--base"; get_abs_path_string absdir_base; + "--full-path"; (* TODO: refine this *) + ] + in + let args_mode = make_mode_args text_mode_formats_str_opt in + let args = List.concat [ args_mandatory; args_mode ] in let command = escape_command_line args in let exit_status = Sys.command command in { exit_status; command } From 63d4aae2b59a5d4d7cf7f534f841681f978d60a9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 04:15:23 +0900 Subject: [PATCH 088/381] fix how to run tests --- src/frontend/main.ml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index c279be01a..0cdcaddff 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1411,7 +1411,7 @@ let build_package (* Typechecks the main envelope: *) let used_as_map = make_used_as_map deps_config.explicit_dependencies in - let* (_ssig, _libs) = + let* (_ssig, _libs_target) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in return () @@ -1488,7 +1488,7 @@ let open ResultMonad in Logging.dump_file display_config ~already_exists:dump_file_exists abspath_dump; (* Typechecks each depended envelope in the topological order: *) - let* (genv, configenv, libs) = + let* (genv, configenv, libs_dep) = check_depended_envelopes display_config typecheck_config @@ -1509,12 +1509,12 @@ let open ResultMonad in EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv ~used_as_map sorted_locals (abspath_in, utdoc) in - let libs = List.append libs libs_local in (* Evaluation: *) if type_check_only then return () else + let libs = List.append libs_dep libs_local in preprocess_and_evaluate display_config pdf_config @@ -1575,7 +1575,7 @@ let test_package in (* Typechecks each depended envelope in the topological order: *) - let* (genv, _configenv, _libs_dep) = + let* (genv, _configenv, libs_dep) = check_depended_envelopes display_config typecheck_config @@ -1591,13 +1591,15 @@ let test_package make_used_as_map (List.append explicit_dependencies explicit_test_dependencies) in - let* (_ssig, libs) = + let* (_ssig, libs_target) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map package in (* Runs tests: *) - let (env, codebinds) = preprocess_bindings display_config ~run_tests:true env libs in - let _env = evaluate_bindings display_config ~run_tests:true env codebinds in + let (env, codebinds_dep) = preprocess_bindings display_config ~run_tests:false env libs_dep in + let (env, codebinds_target) = preprocess_bindings display_config ~run_tests:true env libs_target in + let env = evaluate_bindings display_config ~run_tests:false ~is_bytecomp_mode:false env codebinds_dep in + let _env = evaluate_bindings display_config ~run_tests:true ~is_bytecomp_mode:false env codebinds_target in (* | DocumentTestInput{ kind = input_kind; From 2eb61a1ffa9071400e01c6598567e92469684b12 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 7 Jan 2024 04:19:51 +0900 Subject: [PATCH 089/381] fix how to run tests --- src/frontend/closedEnvelopeDependencyResolver.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/closedEnvelopeDependencyResolver.ml b/src/frontend/closedEnvelopeDependencyResolver.ml index 39ffda73f..172d2af53 100644 --- a/src/frontend/closedEnvelopeDependencyResolver.ml +++ b/src/frontend/closedEnvelopeDependencyResolver.ml @@ -41,7 +41,7 @@ let main (display_config : Logging.config) ~(use_test_only_envelope : bool) ~(ex let* envelope_with_config = EnvelopeReader.main display_config - ~use_test_files:use_test_only_envelope + ~use_test_files:false (* Does not use tests of depended packages. *) ~extensions ~envelope_config:abspath_envelope_config in From a04223e8406396f6bd244a78abb4c7d339a4ffd3 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 06:06:13 +0900 Subject: [PATCH 090/381] introduce `markdown_conversion` to package/envelope configs --- src-common/envelopeSystemBase.ml | 52 ++++++++++- src-saphe/envelopeConfig.ml | 81 +++++++++++++++-- src-saphe/packageConfig.ml | 145 +++++++++++++------------------ src-saphe/packageConfig.mli | 12 +-- src-saphe/packageSystemBase.ml | 20 ++--- src-saphe/sapheMain.ml | 3 +- src-util/yamlDecoder.ml | 13 ++- src/frontend/configError.ml | 7 +- src/frontend/envelopeConfig.ml | 85 +++++++++++++++++- src/frontend/main.ml | 3 + 10 files changed, 298 insertions(+), 123 deletions(-) diff --git a/src-common/envelopeSystemBase.ml b/src-common/envelopeSystemBase.ml index f7db15bf5..077999557 100644 --- a/src-common/envelopeSystemBase.ml +++ b/src-common/envelopeSystemBase.ml @@ -28,12 +28,55 @@ type font_file_description = { type package_conversion_spec = unit (* TODO *) [@@deriving show] +type long_inline_command = LongInlineCommand of { + modules : string list; + main_without_prefix : string; +} +[@@deriving show { with_path = false }] + +type long_block_command = LongBlockCommand of { + modules : string list; + main_without_prefix : string; +} +[@@deriving show { with_path = false }] + +type long_identifier = LongIdentifier of { + modules : string list; + main : string; +} +[@@deriving show { with_path = false }] + +type markdown_conversion = MarkdownConversion of { + document : long_identifier; + + paragraph : long_block_command; + hr : long_block_command; + h1 : long_block_command; + h2 : long_block_command; + h3 : long_block_command; + h4 : long_block_command; + h5 : long_block_command; + h6 : long_block_command; + ul : long_block_command; + ol : long_block_command; + code_block : long_block_command; + blockquote : long_block_command; + + emph : long_inline_command; + strong : long_inline_command; + hard_break : long_inline_command option; + code : long_inline_command; + link : long_inline_command; + img : long_inline_command; +} +[@@deriving show { with_path = false }] + type envelope_contents = | Library of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - conversion_specs : package_conversion_spec list; + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + markdown_conversion : markdown_conversion option; } | Font of { main_module_name : string; @@ -44,6 +87,7 @@ type envelope_contents = type envelope_config = { envelope_contents : envelope_contents; } +[@@deriving show] type envelope_dependency = { dependency_name : envelope_name; diff --git a/src-saphe/envelopeConfig.ml b/src-saphe/envelopeConfig.ml index 7bc291c31..867853811 100644 --- a/src-saphe/envelopeConfig.ml +++ b/src-saphe/envelopeConfig.ml @@ -29,18 +29,87 @@ let font_file_description_encoder (descr : font_file_description) : Yaml.value = `O(List.append fields_common fields_contents) +let inline_command_encoder (LongInlineCommand{ modules; main_without_prefix }) : Yaml.value = + `String(Printf.sprintf "\\%s" (String.concat "." (List.append modules [ main_without_prefix ]))) + + +let block_command_encoder (LongBlockCommand{ modules; main_without_prefix }) : Yaml.value = + `String(Printf.sprintf "+%s" (String.concat "." (List.append modules [ main_without_prefix ]))) + + +let identifier_encoder (LongIdentifier{ modules; main }) : Yaml.value = + `String(String.concat "." (List.append modules [ main ])) + + +let option_encoder (e : 'a -> Yaml.value) (opt : 'a option) : Yaml.value = + match opt with + | None -> `Null + | Some(v) -> e v + + +let markdown_conversion_encoder (markdown_conversion : markdown_conversion) : Yaml.value = + let + MarkdownConversion{ + document; + + paragraph; + hr; + h1; h2; h3; h4; h5; h6; + ul; + ol; + code_block; + blockquote; + + emph; + strong; + hard_break; + code; + link; + img; + } = markdown_conversion + in + `O([ + ("document", identifier_encoder document); + + ("paragraph", block_command_encoder paragraph); + ("hr", block_command_encoder hr); + ("h1", block_command_encoder h1); + ("h2", block_command_encoder h2); + ("h3", block_command_encoder h3); + ("h4", block_command_encoder h4); + ("h5", block_command_encoder h5); + ("h6", block_command_encoder h6); + ("ul", block_command_encoder ul); + ("ol", block_command_encoder ol); + ("code_block", block_command_encoder code_block); + ("blockquote", block_command_encoder blockquote); + + ("emph", inline_command_encoder emph); + ("strong", inline_command_encoder strong); + ("hard_break", option_encoder inline_command_encoder hard_break); + ("code", inline_command_encoder code); + ("link", inline_command_encoder link); + ("img", inline_command_encoder img); + ]) + + let envelope_config_encoder (envelope_config : t) : Yaml.value = let { envelope_contents } = envelope_config in match envelope_contents with - | Library{ main_module_name; source_directories; test_directories; _ } -> - (* TODO: encode conversion specs *) - `O([ - ("library", `O([ + | Library{ main_module_name; source_directories; test_directories; markdown_conversion } -> + let fields_mandatory = + [ ("main_module", `String(main_module_name)); ("source_directories", `A(source_directories |> List.map (fun s -> `String(s)))); ("test_directories", `A(test_directories |> List.map (fun s -> `String(s)))); - ])); - ]) + ] + in + let fields_markdown = + match markdown_conversion with + | None -> [] + | Some(m) -> [ ("markdown_conversion", markdown_conversion_encoder m) ] + in + `O([ ("library", `O(List.append fields_mandatory fields_markdown)); ]) | Font{ main_module_name; font_file_descriptions } -> `O([ diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 85e183726..9e47d9dad 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -10,12 +10,12 @@ type 'a ok = ('a, config_error) result type package_contents = | Library of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - dependencies : package_dependency list; - test_dependencies : package_dependency list; - conversion_specs : package_conversion_spec list; + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : package_dependency list; + test_dependencies : package_dependency list; + markdown_conversion : markdown_conversion option; } | Font of { main_module_name : string; @@ -66,22 +66,20 @@ let font_file_description_decoder : font_file_description ConfigDecoder.t = } -(* let cut_module_names (s : string) : string list * string = match List.rev (String.split_on_char '.' s) with | varnm :: modnms_rev -> (List.rev modnms_rev, varnm) | _ -> assert false (* `String.split_on_char` always returns a non-empty list *) -let command_decoder ~(prefix : char) : MarkdownParser.command ConfigDecoder.t = +let command_decoder ~(prefix : char) (k : string list -> string -> 'a) : 'a ConfigDecoder.t = let open ConfigDecoder in string >>= fun s -> try if Char.equal prefix (String.get s 0) then let s_tail = (String.sub s 1 (String.length s - 1)) in let (modnms, varnm) = cut_module_names s_tail in - let csnm = Printf.sprintf "%c%s" prefix varnm in - succeed (Range.dummy "command_decoder", (modnms, csnm)) + succeed @@ k modnms varnm else failure (fun context -> NotACommand{ context; prefix; string = s }) with @@ -90,88 +88,63 @@ let command_decoder ~(prefix : char) : MarkdownParser.command ConfigDecoder.t = let inline_command_decoder = - command_decoder ~prefix:'\\' + command_decoder ~prefix:'\\' (fun modules main_without_prefix -> + LongInlineCommand{ modules; main_without_prefix } + ) let block_command_decoder = - command_decoder ~prefix:'+' + command_decoder ~prefix:'+' (fun modules main_without_prefix -> + LongBlockCommand{ modules; main_without_prefix } + ) -let identifier_decoder : MarkdownParser.command ConfigDecoder.t = +let identifier_decoder : long_identifier ConfigDecoder.t = let open ConfigDecoder in string >>= fun s -> let (modnms, varnm) = cut_module_names s in - succeed (Range.dummy "identifier_decoder", (modnms, varnm)) - - -let hard_break_decoder : (MarkdownParser.command option) ConfigDecoder.t = - let open ConfigDecoder in - branch "type" [ - "none" ==> begin - succeed None - end; - "some" ==> begin - get "command" inline_command_decoder >>= fun command -> - succeed @@ Some(command) - end; - ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) + succeed @@ LongIdentifier{ modules = modnms; main = varnm } -let conversion_spec_decoder : package_conversion_spec ConfigDecoder.t = +let markdown_conversion_decoder : markdown_conversion ConfigDecoder.t = let open ConfigDecoder in - branch "type" [ - "markdown" ==> begin - get "document" identifier_decoder >>= fun document -> - get "paragraph" block_command_decoder >>= fun paragraph -> - get "hr" block_command_decoder >>= fun hr -> - get "h1" block_command_decoder >>= fun h1 -> - get "h2" block_command_decoder >>= fun h2 -> - get "h3" block_command_decoder >>= fun h3 -> - get "h4" block_command_decoder >>= fun h4 -> - get "h5" block_command_decoder >>= fun h5 -> - get "h6" block_command_decoder >>= fun h6 -> - get "ul" block_command_decoder >>= fun ul -> - get "ol" block_command_decoder >>= fun ol -> - get "code_block" block_command_decoder >>= fun code_block -> - get "blockquote" block_command_decoder >>= fun blockquote -> - get "emph" inline_command_decoder >>= fun emph -> - get "strong" inline_command_decoder >>= fun strong -> - get "hard_break" hard_break_decoder >>= fun hard_break -> - get "code" inline_command_decoder >>= fun code -> - get "link" inline_command_decoder >>= fun link -> - get "img" inline_command_decoder >>= fun img -> - succeed @@ MarkdownConversion(MarkdownParser.{ - document; - - paragraph; - hr; - h1; h2; h3; h4; h5; h6; - ul; - ol; - code_block; - blockquote; - - emph; - strong; - hard_break; - code; - link; - img; - }) - end; - ] - ~other:(fun tag -> - failure (fun context -> UnexpectedTag(context, tag)) - ) -*) - -(* TODO: fix this *) -let conversion_spec_decoder = - let open ConfigDecoder in - succeed () + get "document" identifier_decoder >>= fun document -> + get "paragraph" block_command_decoder >>= fun paragraph -> + get "hr" block_command_decoder >>= fun hr -> + get "h1" block_command_decoder >>= fun h1 -> + get "h2" block_command_decoder >>= fun h2 -> + get "h3" block_command_decoder >>= fun h3 -> + get "h4" block_command_decoder >>= fun h4 -> + get "h5" block_command_decoder >>= fun h5 -> + get "h6" block_command_decoder >>= fun h6 -> + get "ul" block_command_decoder >>= fun ul -> + get "ol" block_command_decoder >>= fun ol -> + get "code_block" block_command_decoder >>= fun code_block -> + get "blockquote" block_command_decoder >>= fun blockquote -> + get "emph" inline_command_decoder >>= fun emph -> + get "strong" inline_command_decoder >>= fun strong -> + get_opt "hard_break" inline_command_decoder >>= fun hard_break -> + get "code" inline_command_decoder >>= fun code -> + get "link" inline_command_decoder >>= fun link -> + get "img" inline_command_decoder >>= fun img -> + succeed @@ MarkdownConversion{ + document; + + paragraph; + hr; + h1; h2; h3; h4; h5; h6; + ul; + ol; + code_block; + blockquote; + + emph; + strong; + hard_break; + code; + link; + img; + } let contents_decoder : parsed_package_contents ConfigDecoder.t = @@ -183,14 +156,14 @@ let contents_decoder : parsed_package_contents ConfigDecoder.t = get_or_else "test_directories" (list string) [] >>= fun test_directories -> get_or_else "dependencies" (list dependency_decoder) [] >>= fun dependencies -> get_or_else "test_dependencies" (list dependency_decoder) [] >>= fun test_dependencies -> - get_or_else "conversion" (list conversion_spec_decoder) [] >>= fun conversion_specs -> + get_opt "markdown_conversion" markdown_conversion_decoder >>= fun markdown_conversion -> succeed @@ ParsedLibrary { main_module_name; source_directories; test_directories; dependencies; test_dependencies; - conversion_specs; + markdown_conversion; } end; "font" ==> begin @@ -245,9 +218,9 @@ let config_decoder : parsed_package_config ConfigDecoder.t = language_requirement; package_name; package_authors; + registry_specs; external_resources; package_contents; - registry_specs; } @@ -287,7 +260,7 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( test_directories; dependencies; test_dependencies; - conversion_specs; + markdown_conversion; } -> let* dependencies = mapM (validate_dependency localmap) dependencies in let* test_dependencies = mapM (validate_dependency localmap) test_dependencies in @@ -297,7 +270,7 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( test_directories; dependencies; test_dependencies; - conversion_specs; + markdown_conversion; } | ParsedFont{ main_module_name; font_file_descriptions } -> diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index b6bea5aa0..08cdd3cd3 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -6,12 +6,12 @@ open PackageSystemBase type package_contents = | Library of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - dependencies : package_dependency list; - test_dependencies : package_dependency list; - conversion_specs : package_conversion_spec list; + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : package_dependency list; + test_dependencies : package_dependency list; + markdown_conversion : markdown_conversion option; } | Font of { main_module_name : string; diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 3e6430235..d31b4b2a0 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -38,12 +38,6 @@ type parsed_package_dependency = } [@@deriving show { with_path = false }] -type package_conversion_spec = unit (* TODO *) -(* - | MarkdownConversion of MarkdownParser.command_record -*) -[@@deriving show { with_path = false }] - module PackageId = struct type t = { registry_hash_value : string; @@ -183,12 +177,12 @@ type external_resource = type parsed_package_contents = | ParsedLibrary of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - dependencies : parsed_package_dependency list; - test_dependencies : parsed_package_dependency list; - conversion_specs : package_conversion_spec list; + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : parsed_package_dependency list; + test_dependencies : parsed_package_dependency list; + markdown_conversion : markdown_conversion option; } | ParsedFont of { main_module_name : string; @@ -203,8 +197,8 @@ type parsed_package_config = ParsedPackageConfig of { language_requirement : SemanticVersion.requirement; package_name : package_name; package_authors : string list; + registry_specs : (registry_local_name * registry_remote) list; external_resources : (string * external_resource) list; package_contents : parsed_package_contents; - registry_specs : (registry_local_name * registry_remote) list; } [@@deriving show { with_path = false }] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index a210fde12..e19129581 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -508,6 +508,7 @@ let make_envelope_config (abspath_package_config : abs_path) (package_contents : main_module_name; source_directories; test_directories; + markdown_conversion; _ } -> return { @@ -516,7 +517,7 @@ let make_envelope_config (abspath_package_config : abs_path) (package_contents : main_module_name; source_directories; test_directories; - conversion_specs = []; (* TODO *) + markdown_conversion; }; } diff --git a/src-util/yamlDecoder.ml b/src-util/yamlDecoder.ml index 83378d599..28626d9cf 100644 --- a/src-util/yamlDecoder.ml +++ b/src-util/yamlDecoder.ml @@ -98,12 +98,17 @@ module Make (Err : ErrorType) = struct get_scheme field d (fun context -> err @@ Err.field_not_found (Alist.to_list context) field) + let option (d : 'a t) : ('a option) t = + fun (context, yval) -> + let open ResultMonad in + match yval with + | `Null -> return None + | _ -> d (context, yval) >>= fun v -> return @@ Some(v) + + let get_opt (field : string) (d : 'a t) : ('a option) t = - let d_some = - d >>= fun v -> succeed (Some(v)) - in let open ResultMonad in - get_scheme field d_some (fun _ -> return None) + get_scheme field (option d) (fun _context -> return None) let get_or_else (field : string) (d : 'a t) (default : 'a) : 'a t = diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 30fc11e9a..062d6955d 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -12,7 +12,7 @@ type yaml_error = | NotABool of YamlDecoder.context | NotAnArray of YamlDecoder.context | NotAnObject of YamlDecoder.context - | BranchNotFound of { + | BranchNotFound of { context : YamlDecoder.context; expected_tags : string list; got_tags : string list; @@ -22,6 +22,11 @@ type yaml_error = expected_tags : string list; got_tags : string list; } + | NotACommand of { + context : YamlDecoder.context; + prefix : char; + string : string; + } [@@deriving show { with_path = false }] module YamlError = struct diff --git a/src/frontend/envelopeConfig.ml b/src/frontend/envelopeConfig.ml index 12f7e4256..d55eb1598 100644 --- a/src/frontend/envelopeConfig.ml +++ b/src/frontend/envelopeConfig.ml @@ -46,6 +46,87 @@ let font_file_description_decoder : font_file_description ConfigDecoder.t = } +let cut_module_names (s : string) : string list * string = + match List.rev (String.split_on_char '.' s) with + | varnm :: modnms_rev -> (List.rev modnms_rev, varnm) + | _ -> assert false (* `String.split_on_char` always returns a non-empty list *) + + +let command_decoder ~(prefix : char) (k : string list -> string -> 'a) : 'a ConfigDecoder.t = + let open ConfigDecoder in + string >>= fun s -> + try + if Char.equal prefix (String.get s 0) then + let s_tail = (String.sub s 1 (String.length s - 1)) in + let (modnms, varnm) = cut_module_names s_tail in + succeed @@ k modnms varnm + else + failure (fun context -> NotACommand{ context; prefix; string = s }) + with + | Invalid_argument(_) -> + failure (fun context -> NotACommand{ context; prefix; string = s }) + + +let inline_command_decoder = + command_decoder ~prefix:'\\' (fun modules main_without_prefix -> + LongInlineCommand{ modules; main_without_prefix } + ) + + +let block_command_decoder = + command_decoder ~prefix:'+' (fun modules main_without_prefix -> + LongBlockCommand{ modules; main_without_prefix } + ) + + +let identifier_decoder : long_identifier ConfigDecoder.t = + let open ConfigDecoder in + string >>= fun s -> + let (modnms, varnm) = cut_module_names s in + succeed @@ LongIdentifier{ modules = modnms; main = varnm } + + +let markdown_conversion_decoder : markdown_conversion ConfigDecoder.t = + let open ConfigDecoder in + get "document" identifier_decoder >>= fun document -> + get "paragraph" block_command_decoder >>= fun paragraph -> + get "hr" block_command_decoder >>= fun hr -> + get "h1" block_command_decoder >>= fun h1 -> + get "h2" block_command_decoder >>= fun h2 -> + get "h3" block_command_decoder >>= fun h3 -> + get "h4" block_command_decoder >>= fun h4 -> + get "h5" block_command_decoder >>= fun h5 -> + get "h6" block_command_decoder >>= fun h6 -> + get "ul" block_command_decoder >>= fun ul -> + get "ol" block_command_decoder >>= fun ol -> + get "code_block" block_command_decoder >>= fun code_block -> + get "blockquote" block_command_decoder >>= fun blockquote -> + get "emph" inline_command_decoder >>= fun emph -> + get "strong" inline_command_decoder >>= fun strong -> + get_opt "hard_break" inline_command_decoder >>= fun hard_break -> + get "code" inline_command_decoder >>= fun code -> + get "link" inline_command_decoder >>= fun link -> + get "img" inline_command_decoder >>= fun img -> + succeed @@ MarkdownConversion{ + document; + + paragraph; + hr; + h1; h2; h3; h4; h5; h6; + ul; + ol; + code_block; + blockquote; + + emph; + strong; + hard_break; + code; + link; + img; + } + + let envelope_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in branch [ @@ -53,10 +134,10 @@ let envelope_config_decoder : t ConfigDecoder.t = get "main_module" string >>= fun main_module_name -> get "source_directories" (list string) >>= fun source_directories -> get "test_directories" (list string) >>= fun test_directories -> - let conversion_specs = [] in (* TODO *) + get_opt "markdown_conversion" markdown_conversion_decoder >>= fun markdown_conversion -> succeed { envelope_contents = - Library{ main_module_name; source_directories; test_directories; conversion_specs }; + Library{ main_module_name; source_directories; test_directories; markdown_conversion }; } end; "font" ==> begin diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 0cdcaddff..2dae4494f 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -931,6 +931,9 @@ let make_yaml_error_lines : yaml_error -> line list = function NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); ] + | NotACommand{ context = yctx; prefix = _; string = s } -> + [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] + let report_config_error (display_config : Logging.config) : config_error -> unit = function | UnexpectedExtension(ext) -> From dc7a5c9c79491c7245aa874441ce8fde5363cc8b Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 06:23:43 +0900 Subject: [PATCH 091/381] update `saphe.yaml` of `md-ja` --- .../md-ja.0.0.1/package.satysfi-lock-expected | 88 --------------- .../md-ja.0.0.1/saphe.lock.yaml.expected | 106 ++++++++++++++++++ .../packages/md-ja/md-ja.0.0.1/saphe.yaml | 87 ++++++++++++++ .../satysfi-envelope.yaml.expected | 25 +++++ 4 files changed, 218 insertions(+), 88 deletions(-) delete mode 100644 lib-satysfi/packages/md-ja/md-ja.0.0.1/package.satysfi-lock-expected create mode 100644 lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/md-ja/md-ja.0.0.1/satysfi-envelope.yaml.expected diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/package.satysfi-lock-expected b/lib-satysfi/packages/md-ja/md-ja.0.0.1/package.satysfi-lock-expected deleted file mode 100644 index d0d1db2bd..000000000 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/package.satysfi-lock-expected +++ /dev/null @@ -1,88 +0,0 @@ -language: ^0.1.0 -locks: -- name: registered.d9b4b850ab61a7b68961c6315048b351.annot.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: annot - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.code.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: code - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - - registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-ipa-ex.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-ipa-ex - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-junicode.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-junicode - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.font-latin-modern-math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: font-latin-modern-math - version: 0.0.1 - dependencies: [] - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.footnote-scheme.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: footnote-scheme - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.itemize.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: itemize - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.math.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: math - version: 0.0.1 - dependencies: - - registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - test_only: false -- name: registered.d9b4b850ab61a7b68961c6315048b351.stdlib.0.0.1 - contents: - type: registered - registry_hash_value: d9b4b850ab61a7b68961c6315048b351 - package_name: stdlib - version: 0.0.1 - dependencies: [] - test_only: false diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected new file mode 100644 index 000000000..9ef31d5e3 --- /dev/null +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected @@ -0,0 +1,106 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib +test_dependencies: [] diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml new file mode 100644 index 000000000..267dafc92 --- /dev/null +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml @@ -0,0 +1,87 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "md-ja" +authors: + - "Takashi Suwa <@gfngfn>" + - "hikalium <@hikalium>" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "MDJa" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" + markdown_conversion: + document: "MDJa.document" + paragraph: "+MDJa.p" + hr: "+MDJa.hr" + h1: "+MDJa.h1" + h2: "+MDJa.h2" + h3: "+MDJa.h3" + h4: "+MDJa.h4" + h5: "+MDJa.h5" + h6: "+MDJa.h6" + ul: "+MDJa.ul-block" + ol: "+MDJa.ol-block" + code_block: "+MDJa.code" + blockquote: "+MDJa.quote" + emph: "\\MDJa.emph" + strong: "\\MDJa.string" + hard_break: null + code: "\\MDJa.code" + link: "\\MDJa.link" + img: "\\MDJa.img" diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/satysfi-envelope.yaml.expected b/lib-satysfi/packages/md-ja/md-ja.0.0.1/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..787901b18 --- /dev/null +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/satysfi-envelope.yaml.expected @@ -0,0 +1,25 @@ +library: + main_module: MDJa + source_directories: + - ./src + test_directories: [] + markdown_conversion: + document: MDJa.document + paragraph: +MDJa.p + hr: +MDJa.hr + h1: +MDJa.h1 + h2: +MDJa.h2 + h3: +MDJa.h3 + h4: +MDJa.h4 + h5: +MDJa.h5 + h6: +MDJa.h6 + ul: +MDJa.ul-block + ol: +MDJa.ol-block + code_block: +MDJa.code + blockquote: +MDJa.quote + emph: \MDJa.emph + strong: \MDJa.string + hard_break: + code: \MDJa.code + link: \MDJa.link + img: \MDJa.img From 37b22892716930af5646cca0b347047fea15fcba Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 07:15:25 +0900 Subject: [PATCH 092/381] develop `register_markdown_file` --- src-saphe/configError.ml | 7 - src-saphe/sapheMain.ml | 35 ---- src/frontend/configError.ml | 3 + src/frontend/main.ml | 24 +++ src/frontend/openFileDependencyResolver.ml | 64 +++----- src/md/markdownParser.ml | 178 ++++++++++----------- src/md/markdownParser.mli | 35 +--- 7 files changed, 138 insertions(+), 208 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 27c143794..139cad697 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -73,13 +73,6 @@ type config_error = } | CannotFindLibraryFile of lib_path * abs_path list | CannotSolvePackageConstraints -(* - | DocumentAttributeError of DocumentAttribute.error - | MarkdownClassNotFound of module_name - | NoMarkdownConversion of module_name - | MoreThanOneMarkdownConversion of module_name - | MarkdownError of MarkdownParser.error -*) | FailedToFetchTarball of { lock_name : lock_name; exit_status : int; diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index e19129581..3441d1c16 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -223,42 +223,7 @@ let report_config_error = function report_error [ NormalLine("cannot solve package constraints."); ] -(* - | DocumentAttributeError(e) -> - report_document_attribute_error e - - | MarkdownClassNotFound(modnm) -> - report_error [ - NormalLine(Printf.sprintf "package '%s' not found; required for converting Markdown documents." modnm); - ] - - | NoMarkdownConversion(modnm) -> - report_error [ - NormalLine(Printf.sprintf "package '%s' contains no Markdown conversion rule." modnm); - ] - - | MoreThanOneMarkdownConversion(modnm) -> - report_error [ - NormalLine(Printf.sprintf "package '%s' contains more than one Markdown conversion rule." modnm); - ] - | MarkdownError(e) -> - begin - match e with - | InvalidHeaderComment -> - report_error [ - NormalLine("invalid or missing header comment of a Markdown document."); - ] - - | InvalidExtraExpression -> - report_error [ - NormalLine("cannot parse an extra expression in a Markdown document."); - ] - - | FailedToMakeDocumentAttribute(de) -> - report_document_attribute_error de - end -*) | FailedToFetchTarball{ lock_name; exit_status; command } -> report_error [ NormalLine(Printf.sprintf "failed to fetch '%s' (exit status: %d). command:" lock_name exit_status); diff --git a/src/frontend/configError.ml b/src/frontend/configError.ml index 062d6955d..09c951cf2 100644 --- a/src/frontend/configError.ml +++ b/src/frontend/configError.ml @@ -81,3 +81,6 @@ type config_error = | EnvelopeConfigNotFound of abs_path | EnvelopeConfigError of abs_path * yaml_error | DependedEnvelopeNotFound of envelope_name + | MarkdownClassNotFound + | NoMarkdownConversion + | MarkdownError of MarkdownParser.error diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2dae4494f..62415ba56 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1112,6 +1112,30 @@ let report_config_error (display_config : Logging.config) : config_error -> unit NormalLine(Printf.sprintf "unknown depended envelope '%s'" envelope_name); ] + | MarkdownClassNotFound -> + report_error Interface [ + NormalLine("Markdown class not found"); + ] + + | NoMarkdownConversion -> + report_error Interface [ + NormalLine("no Markdown conversion"); + ] + + | MarkdownError(e) -> + begin + match e with + | InvalidHeaderComment -> + report_error Interface [ + NormalLine("invalid or missing header comment of a Markdown document."); + ] + + | InvalidExtraExpression -> + report_error Interface [ + NormalLine("cannot parse an extra expression in a Markdown document."); + ] + end + let report_font_error (display_config : Logging.config) = function | FailedToReadFont(abspath, msg) -> diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index d737ece8c..13fcd4a72 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -1,5 +1,6 @@ open MyUtil +open EnvelopeSystemBase open Types open ConfigError @@ -106,58 +107,46 @@ let register_document_file (display_config : Logging.config) (extensions : strin return (graph, utdoc) -(* -let extract_markdown_command_record ~(module_name : module_name) (config : PackageConfig.t) : MarkdownParser.command_record ok = +let extract_markdown_conversion (envelope_config : EnvelopeConfig.t) : markdown_conversion ok = let open ResultMonad in - match config.PackageConfig.package_contents with - | PackageConfig.Library{ conversion_specs; _ } -> - begin - match - conversion_specs |> List.filter_map (function - | PackageConfig.MarkdownConversion(cmdrcd) -> - Some(cmdrcd) - ) - with - | [] -> - err @@ NoMarkdownConversion(module_name) - - | [ cmdrcd ] -> - return cmdrcd - - | _ :: _ -> - err @@ MoreThanOneMarkdownConversion(module_name) - end - - | _ -> - err @@ NoMarkdownConversion(module_name) - - -let register_markdown_file (display_config : Logging.config) (configenv : PackageConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : untyped_document_file ok = + let { envelope_contents } = envelope_config in + match envelope_contents with + | Library{ markdown_conversion = Some(conv); _ } -> return conv + | _ -> err NoMarkdownConversion + + +let register_markdown_file (display_config : Logging.config) (configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : untyped_document_file ok = let open ResultMonad in + let envelope_name_class = failwith "TODO: register_markdown_file, envelope_name_class" in + let main_module_name_class = failwith "TODO: register_markdown_file, main_module_name_class" in Logging.begin_to_parse_file display_config abspath_in; - let* (_docattr, main_module_name_class, md) = + let* md = match read_file abspath_in with | Ok(data) -> MarkdownParser.decode data |> Result.map_error (fun e -> MarkdownError(e)) | Error(msg) -> err (CannotReadFileOwingToSystem(msg)) in - let* cmdrcd = - match configenv |> GlobalTypeenv.find_opt main_module_name_class with + let* conv = + match configenv |> GlobalTypeenv.find_opt envelope_name_class with | None -> - err @@ MarkdownClassNotFound(main_module_name_class) + err @@ MarkdownClassNotFound - | Some(config) -> - extract_markdown_command_record ~module_name:main_module_name_class config + | Some(envelope_config) -> + extract_markdown_conversion envelope_config in - let utast = MarkdownParser.convert cmdrcd md in + let utast = MarkdownParser.convert conv md in let header = - [ HeaderUsePackage{ opening = false; mod_chain = (Range.dummy "md-header", ((Range.dummy "md-header", main_module_name_class), [])) } ] + [ + HeaderUsePackage{ + opening = false; + mod_chain = (Range.dummy "md-header", ((Range.dummy "md-header", main_module_name_class), [])); + }; + ] in let utdoc = ([], header, utast) in return utdoc -*) -let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (_configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = +let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = let open ResultMonad in let* (graph, utdoc) = match input_kind with @@ -165,11 +154,8 @@ let main (display_config : Logging.config) ~(extensions : string list) (input_ki register_document_file display_config extensions abspath_in | InputMarkdown -> - failwith "TODO: InputMarkdown" -(* let* utdoc = register_markdown_file display_config configenv abspath_in in return (FileDependencyGraph.empty, utdoc) -*) in let* sorted_locals = FileDependencyGraph.topological_sort graph diff --git a/src/md/markdownParser.ml b/src/md/markdownParser.ml index 7ead25336..f00d8a0b9 100644 --- a/src/md/markdownParser.ml +++ b/src/md/markdownParser.ml @@ -1,10 +1,11 @@ -(* + +open EnvelopeSystemBase open Types + type error = | InvalidHeaderComment | InvalidExtraExpression - | FailedToMakeDocumentAttribute of DocumentAttribute.error type 'a ok = ('a, error) result @@ -211,33 +212,6 @@ let normalize_h1 = normalize_h H1 (function Omd.Heading(_, 1, heading) -> Some(heading) | _ -> None) normalize_h2 -type command = Range.t * (module_name list * var_name) - -type command_record = { - document : command; - - paragraph : command; - hr : command; - h1 : command; - h2 : command; - h3 : command; - h4 : command; - h5 : command; - h6 : command; - ul : command; - ol : command; - code_block : command; - blockquote : command; - - emph : command; - strong : command; - hard_break : command option; - code : command; - link : command; - img : command; -} - - let dummy_range = Range.dummy "Markdown-parser" @@ -247,113 +221,142 @@ let make_list_tree utasts = ) utasts (dummy_range, UTEndOfList) -let make_inline_application ((rng, (modnms, csnm)) : command) (utasts : untyped_abstract_tree list) = +let make_inline_application (icmd : long_inline_command) (utasts : untyped_abstract_tree list) = + let LongInlineCommand{ modules = modnms; main_without_prefix } = icmd in + let csnm = Printf.sprintf "\\%s" main_without_prefix in + let rng = Range.dummy "MarkdownParser.make_inline_application" in let modidents = modnms |> List.map (fun modnm -> (rng, modnm)) in let utast_cmd = (rng, UTContentOf(modidents, (rng, csnm))) in [(dummy_range, UTInlineTextApplyCommand(utast_cmd, utasts |> List.map (fun x -> UTCommandArg([], x))))] -let make_block_application ((rng, (modnms, csnm)) : command) (utasts : untyped_abstract_tree list) = +let make_block_application (bcmd : long_block_command) (utasts : untyped_abstract_tree list) = + let LongBlockCommand{ modules = modnms; main_without_prefix } = bcmd in + let csnm = Printf.sprintf "+%s" main_without_prefix in + let rng = Range.dummy "MarkdownParser.make_block_application" in let modidents = modnms |> List.map (fun modnm -> (rng, modnm)) in let utast_cmd = (rng, UTContentOf(modidents, (rng, csnm))) in [(dummy_range, UTBlockTextApplyCommand(utast_cmd, utasts |> List.map (fun x -> UTCommandArg([], x))))] -let rec convert_inline_element (cmdr : command_record) (ie : inline_element) : untyped_inline_text_element list = +let rec convert_inline_element (conv : markdown_conversion) (ie : inline_element) : untyped_inline_text_element list = + let + MarkdownConversion{ + emph; + strong; + hard_break; + code; + link; + img; + _ + } = conv + in match ie with | Text(s) -> [(dummy_range, UTInlineTextString(s))] | Emph(inline) -> - let utast_arg = convert_inline cmdr inline in - make_inline_application cmdr.emph [ utast_arg ] + let utast_arg = convert_inline conv inline in + make_inline_application emph [ utast_arg ] | Strong(inline) -> - let utast_arg = convert_inline cmdr inline in - make_inline_application cmdr.strong [ utast_arg ] + let utast_arg = convert_inline conv inline in + make_inline_application strong [ utast_arg ] | Code(s) -> - let cmd = cmdr.code in + let cmd = code in let utast_arg = (dummy_range, UTStringConstant(s)) in make_inline_application cmd [ utast_arg ] | Br -> begin - match cmdr.hard_break with + match hard_break with | Some(cmd) -> make_inline_application cmd [] | None -> [ (dummy_range, UTInlineTextString("\n")) ] end | Link(href, inline, _title) -> let utast_arg1 = (dummy_range, UTStringConstant(href)) in - let utast_arg2 = convert_inline cmdr inline in - make_inline_application cmdr.link [ utast_arg1; utast_arg2 ] + let utast_arg2 = convert_inline conv inline in + make_inline_application link [ utast_arg1; utast_arg2 ] | Img(alt, src, title) -> let utast_arg1 = (dummy_range, UTStringConstant(alt)) in let utast_arg2 = (dummy_range, UTStringConstant(src)) in let utast_arg3 = (dummy_range, UTStringConstant(title)) in - make_inline_application cmdr.img [ utast_arg1; utast_arg2; utast_arg3 ] + make_inline_application img [ utast_arg1; utast_arg2; utast_arg3 ] -and convert_inline (cmdr : command_record) (inline : inline) : untyped_abstract_tree = +and convert_inline (conv : markdown_conversion) (inline : inline) : untyped_abstract_tree = let ibacc = inline |> List.fold_left (fun ibacc ie -> - Alist.append ibacc (convert_inline_element cmdr ie) + Alist.append ibacc (convert_inline_element conv ie) ) Alist.empty in let utih = Alist.to_list ibacc in (dummy_range, UTInlineText(utih)) -and convert_block_element (cmdr : command_record) (be : block_element) : untyped_block_text_element list = +and convert_block_element (conv : markdown_conversion) (be : block_element) : untyped_block_text_element list = + let + MarkdownConversion{ + paragraph; + hr; + h1; h2; h3; h4; h5; h6; + ul; + ol; + code_block; + blockquote; + _ + } = conv + in match be with | Paragraph(inline) -> - let utast_arg = convert_inline cmdr inline in - make_block_application cmdr.paragraph [ utast_arg ] + let utast_arg = convert_inline conv inline in + make_block_application paragraph [ utast_arg ] | Section(level, inline, block) -> - let utast_arg1 = convert_inline cmdr inline in - let utast_arg2 = convert_block cmdr block in + let utast_arg1 = convert_inline conv inline in + let utast_arg2 = convert_block conv block in let cmd = match level with - | H1 -> cmdr.h1 - | H2 -> cmdr.h2 - | H3 -> cmdr.h3 - | H4 -> cmdr.h4 - | H5 -> cmdr.h5 - | H6 -> cmdr.h6 + | H1 -> h1 + | H2 -> h2 + | H3 -> h3 + | H4 -> h4 + | H5 -> h5 + | H6 -> h6 in make_block_application cmd [ utast_arg1; utast_arg2 ] | Hr -> - make_block_application cmdr.hr [] + make_block_application hr [] | Ol(blocks) -> - let utasts = blocks |> List.map (convert_block cmdr) in + let utasts = blocks |> List.map (convert_block conv) in let utast_arg = make_list_tree utasts in - make_block_application cmdr.ol [ utast_arg ] + make_block_application ol [ utast_arg ] | Ul(blocks) -> - let utasts = blocks |> List.map (convert_block cmdr) in + let utasts = blocks |> List.map (convert_block conv) in let utast_arg = make_list_tree utasts in - make_block_application cmdr.ul [ utast_arg ] + make_block_application ul [ utast_arg ] | CodeBlock(name, s) -> let utast_arg1 = (dummy_range, UTStringConstant(name)) in let utast_arg2 = (dummy_range, UTStringConstant(s)) in - make_block_application cmdr.code_block [ utast_arg1; utast_arg2 ] + make_block_application code_block [ utast_arg1; utast_arg2 ] | Blockquote(block) -> - let utast_arg = convert_block cmdr block in - make_block_application cmdr.blockquote [ utast_arg ] + let utast_arg = convert_block conv block in + make_block_application blockquote [ utast_arg ] -and convert_block (cmdr : command_record) (block : block) : untyped_abstract_tree = +and convert_block (conv : markdown_conversion) (block : block) : untyped_abstract_tree = let bbacc = block |> List.fold_left (fun bbacc be -> - Alist.append bbacc (convert_block_element cmdr be) + Alist.append bbacc (convert_block_element conv be) ) Alist.empty in let utiv = Alist.to_list bbacc in @@ -385,53 +388,36 @@ type t = { } -let decode (s : string) : (DocumentAttribute.t * module_name * t) ok = +let decode (s : string) : t ok = let open ResultMonad in let obs = Omd.of_string s in - let* (s_config, modnm, s_extra, obs) = + let* (s_extra, obs) = match obs with - | Omd.Html_block(_attr1, s1) :: Omd.Html_block(_attr2, s2) :: Omd.Html_block(_attr3, s3) :: obs -> + | Omd.Html_block(_attr3, s) :: obs -> begin - match (extract_comment s1, extract_comment s2, extract_comment s3) with - | (Some(s_config), Some(modnm), Some(s_extra)) -> - return (s_config, modnm, s_extra, obs) - - | _ -> - err InvalidHeaderComment + match (extract_comment s) with + | Some(s_extra) -> return (s_extra, obs) + | None -> err InvalidHeaderComment end | _ -> err InvalidHeaderComment in - let* utast_config = parse_expression s_config in let* utast_extra = parse_expression s_extra in - let main_contents = normalize_h1 obs in - let document_attributes_res = - DocumentAttribute.make [ - (dummy_range, UTAttribute("config", Some(utast_config))) - ] - in - match document_attributes_res with - | Error(e) -> - err @@ FailedToMakeDocumentAttribute(e) - - | Ok(document_attributes) -> - let md = - { - extra_expression = utast_extra; - main_contents; - } - in - return (document_attributes, modnm, md) + return { + extra_expression = utast_extra; + main_contents = normalize_h1 obs; + } -let convert (cmdr : command_record) (md : t) = - let utast_body = convert_block cmdr md.main_contents in +let convert (conv : markdown_conversion) (md : t) = + let utast_body = convert_block conv md.main_contents in let utast_doccmd = - let (rng, (modnms, varnm)) = cmdr.document in + let MarkdownConversion{ document; _ } = conv in + let LongIdentifier{ modules = modnms; main = varnm } = document in + let rng = Range.dummy "MarkdownParser.convert" in let modidents = modnms |> List.map (fun modnm -> (rng, modnm)) in (rng, UTContentOf(modidents, (rng, varnm))) in let utast_extra = md.extra_expression in (dummy_range, UTApply([], (dummy_range, UTApply([], utast_doccmd, utast_extra)), utast_body)) -*) diff --git a/src/md/markdownParser.mli b/src/md/markdownParser.mli index d8aa2bdd9..f81533d95 100644 --- a/src/md/markdownParser.mli +++ b/src/md/markdownParser.mli @@ -1,40 +1,13 @@ -(* + +open EnvelopeSystemBase open Types type error = | InvalidHeaderComment | InvalidExtraExpression - | FailedToMakeDocumentAttribute of DocumentAttribute.error - -type command = Range.t * (module_name list * var_name) - -type command_record = { - document : command; - - paragraph : command; - hr : command; - h1 : command; - h2 : command; - h3 : command; - h4 : command; - h5 : command; - h6 : command; - ul : command; - ol : command; - code_block : command; - blockquote : command; - - emph : command; - strong : command; - hard_break : command option; - code : command; - link : command; - img : command; -} type t -val decode : string -> (DocumentAttribute.t * module_name * t, error) result +val decode : string -> (t, error) result -val convert : command_record -> t -> untyped_abstract_tree -*) +val convert : markdown_conversion -> t -> untyped_abstract_tree From 3dd56af13c0d8f18b7adee11009e9e5ee35d4f03 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 17:47:21 +0900 Subject: [PATCH 093/381] develop `register_markdown_file` (2) --- src/frontend/main.ml | 6 ++--- src/frontend/openFileDependencyResolver.ml | 27 +++++++++++---------- src/frontend/openFileDependencyResolver.mli | 10 +++++++- src/md/markdownParser.ml | 25 ++++++++++++------- src/md/markdownParser.mli | 2 ++ 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 62415ba56..d4767429a 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1421,6 +1421,7 @@ let build_package (* Loads the deps config: *) Logging.deps_config_file display_config abspath_deps_config; let* deps_config = DepsConfig.load abspath_deps_config in + let used_as_map = make_used_as_map deps_config.explicit_dependencies in (* Parses the main envelope: *) let* (_config, envelope) = @@ -1437,7 +1438,6 @@ let build_package in (* Typechecks the main envelope: *) - let used_as_map = make_used_as_map deps_config.explicit_dependencies in let* (_ssig, _libs_target) = EnvelopeChecker.main display_config typecheck_config tyenv_prim genv ~used_as_map envelope in @@ -1507,6 +1507,7 @@ let open ResultMonad in (* Loads the deps config: *) Logging.deps_config_file display_config abspath_deps_config; let* deps_config = DepsConfig.load abspath_deps_config in + let used_as_map = make_used_as_map deps_config.explicit_dependencies in Logging.target_file display_config abspath_out; @@ -1527,11 +1528,10 @@ let open ResultMonad in (* Resolve dependency of the document and the local source files: *) let* (sorted_locals, utdoc) = - OpenFileDependencyResolver.main display_config ~extensions input_kind configenv abspath_in + OpenFileDependencyResolver.main display_config ~extensions input_kind configenv ~used_as_map abspath_in in (* Typechecking and elaboration: *) - let used_as_map = make_used_as_map deps_config.explicit_dependencies in let* (libs_local, ast_doc) = EnvelopeChecker.main_document display_config typecheck_config tyenv_prim genv ~used_as_map sorted_locals (abspath_in, utdoc) diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index 13fcd4a72..b787e7d50 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -60,7 +60,7 @@ let rec register_library_file (display_config : Logging.config) (extensions : st let (_attrs, header, _) = utlib in let (graph, vertex) = match graph |> FileDependencyGraph.add_vertex abspath utlib with - | Error(_vertex) -> assert false + | Error(_vertex) -> assert false (* Freshness has been asserted by `get_vertex`. *) | Ok(pair) -> pair in let graph = @@ -115,30 +115,31 @@ let extract_markdown_conversion (envelope_config : EnvelopeConfig.t) : markdown_ | _ -> err NoMarkdownConversion -let register_markdown_file (display_config : Logging.config) (configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : untyped_document_file ok = +let register_markdown_file (display_config : Logging.config) (configenv : EnvelopeConfig.t GlobalTypeenv.t) (used_as_map : envelope_name ModuleNameMap.t) (abspath_in : abs_path) : untyped_document_file ok = let open ResultMonad in - let envelope_name_class = failwith "TODO: register_markdown_file, envelope_name_class" in - let main_module_name_class = failwith "TODO: register_markdown_file, main_module_name_class" in Logging.begin_to_parse_file display_config abspath_in; let* md = match read_file abspath_in with | Ok(data) -> MarkdownParser.decode data |> Result.map_error (fun e -> MarkdownError(e)) | Error(msg) -> err (CannotReadFileOwingToSystem(msg)) in + let class_module_name = MarkdownParser.get_class_module_name md in + let* class_envelope_name = + match used_as_map |> ModuleNameMap.find_opt class_module_name with + | Some(class_envelope_name) -> return class_envelope_name + | None -> err @@ UnknownPackageDependency(Range.dummy "register_markdown_file", class_module_name) + in let* conv = - match configenv |> GlobalTypeenv.find_opt envelope_name_class with - | None -> - err @@ MarkdownClassNotFound - - | Some(envelope_config) -> - extract_markdown_conversion envelope_config + match configenv |> GlobalTypeenv.find_opt (EnvelopeName.EN(class_envelope_name)) with + | None -> err @@ MarkdownClassNotFound + | Some(envelope_config) -> extract_markdown_conversion envelope_config in let utast = MarkdownParser.convert conv md in let header = [ HeaderUsePackage{ opening = false; - mod_chain = (Range.dummy "md-header", ((Range.dummy "md-header", main_module_name_class), [])); + mod_chain = (Range.dummy "md-header", ((Range.dummy "md-header", class_module_name), [])); }; ] in @@ -146,7 +147,7 @@ let register_markdown_file (display_config : Logging.config) (configenv : Envelo return utdoc -let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (configenv : EnvelopeConfig.t GlobalTypeenv.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = +let main (display_config : Logging.config) ~(extensions : string list) (input_kind : input_kind) (configenv : EnvelopeConfig.t GlobalTypeenv.t) ~(used_as_map : envelope_name ModuleNameMap.t) (abspath_in : abs_path) : ((abs_path * untyped_library_file) list * untyped_document_file) ok = let open ResultMonad in let* (graph, utdoc) = match input_kind with @@ -154,7 +155,7 @@ let main (display_config : Logging.config) ~(extensions : string list) (input_ki register_document_file display_config extensions abspath_in | InputMarkdown -> - let* utdoc = register_markdown_file display_config configenv abspath_in in + let* utdoc = register_markdown_file display_config configenv used_as_map abspath_in in return (FileDependencyGraph.empty, utdoc) in let* sorted_locals = diff --git a/src/frontend/openFileDependencyResolver.mli b/src/frontend/openFileDependencyResolver.mli index fbb17de0c..ea7ddbd35 100644 --- a/src/frontend/openFileDependencyResolver.mli +++ b/src/frontend/openFileDependencyResolver.mli @@ -1,6 +1,14 @@ open MyUtil +open EnvelopeSystemBase open Types open ConfigError -val main : Logging.config -> extensions:(string list) -> input_kind -> EnvelopeConfig.t GlobalTypeenv.t -> abs_path -> ((abs_path * untyped_library_file) list * untyped_document_file, config_error) result +val main : + Logging.config -> + extensions:(string list) -> + input_kind -> + EnvelopeConfig.t GlobalTypeenv.t -> + used_as_map:(envelope_name ModuleNameMap.t) -> + abs_path -> + ((abs_path * untyped_library_file) list * untyped_document_file, config_error) result diff --git a/src/md/markdownParser.ml b/src/md/markdownParser.ml index f00d8a0b9..c2b4cb538 100644 --- a/src/md/markdownParser.ml +++ b/src/md/markdownParser.ml @@ -383,21 +383,23 @@ let parse_expression (s_expr : string) : untyped_abstract_tree ok = type t = { - extra_expression : untyped_abstract_tree; - main_contents : block; + class_module_name : module_name; + extra_expression : untyped_abstract_tree; + main_contents : block; } let decode (s : string) : t ok = let open ResultMonad in let obs = Omd.of_string s in - let* (s_extra, obs) = + let* (class_module_name, s_extra, obs) = match obs with - | Omd.Html_block(_attr3, s) :: obs -> + | Omd.Html_block(_attr1, s1) :: Omd.Html_block(_attr2, s2) :: obs -> begin - match (extract_comment s) with - | Some(s_extra) -> return (s_extra, obs) - | None -> err InvalidHeaderComment + match (extract_comment s1, extract_comment s2) with + | (Some(modnm), Some(s_extra)) -> return (modnm, s_extra, obs) + | _ -> err InvalidHeaderComment + (* TODO: assert that `modnm` be a capitalized identifier *) end | _ -> @@ -405,11 +407,16 @@ let decode (s : string) : t ok = in let* utast_extra = parse_expression s_extra in return { - extra_expression = utast_extra; - main_contents = normalize_h1 obs; + class_module_name = class_module_name; + extra_expression = utast_extra; + main_contents = normalize_h1 obs; } +let get_class_module_name (md : t) : module_name = + md.class_module_name + + let convert (conv : markdown_conversion) (md : t) = let utast_body = convert_block conv md.main_contents in let utast_doccmd = diff --git a/src/md/markdownParser.mli b/src/md/markdownParser.mli index f81533d95..5b33ea1dd 100644 --- a/src/md/markdownParser.mli +++ b/src/md/markdownParser.mli @@ -10,4 +10,6 @@ type t val decode : string -> (t, error) result +val get_class_module_name : t -> module_name + val convert : markdown_conversion -> t -> untyped_abstract_tree From 70cf705432ccccc6c67e2c21902e1c6972e31914 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 17:58:09 +0900 Subject: [PATCH 094/381] update the commit hash for the registry --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index b7c2f53b2..ef5dca526 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -66b667fabef272198229669447a7c530dc19c92a refs/heads/temp-dev-saphe +e05296ff831684ce9c7060383bcb358d384dcdc3 refs/heads/temp-dev-saphe From 58a15532d56bd0e972b336849096d9c995372112 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 8 Jan 2024 17:59:17 +0900 Subject: [PATCH 095/381] FIRST SUCCESS IN RE-SUPPORTING MARKDOWN INPUTS --- tests/Makefile | 6 +- tests/md/Makefile | 26 +++--- tests/md/test.md | 15 ---- tests/md/test.saphe.lock.yaml.expected | 115 +++++++++++++++++++++++++ tests/md/test.saphe.yaml | 18 ++++ 5 files changed, 149 insertions(+), 31 deletions(-) create mode 100644 tests/md/test.saphe.lock.yaml.expected create mode 100644 tests/md/test.saphe.yaml diff --git a/tests/Makefile b/tests/Makefile index d58347493..081b20f4c 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -46,7 +46,7 @@ all:: (cd images; make) #TODO: run the following # (cd text_mode; make) -# (cd md; make) + (cd md; make) # Entrypoint for promoting lock files: promote:: $(EXPECTED_LOCKS) @@ -55,7 +55,7 @@ promote:: (cd images; make promote) #TODO: run the following # (cd text_mode; make promote) -# (cd md; make promote) + (cd md; make promote) clean:: rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml @@ -64,7 +64,7 @@ clean:: (cd images; make clean) #TODO: run the following # (cd text_mode; make clean) -# (cd md; make clean) + (cd md; make clean) clip.pdf: head.satyh first.pdf: head.satyh diff --git a/tests/md/Makefile b/tests/md/Makefile index c93994c65..deb80d177 100644 --- a/tests/md/Makefile +++ b/tests/md/Makefile @@ -1,29 +1,29 @@ TARGETS = \ test.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.satysfi-lock-expected) +EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) -SATYSFI ?= satysfi +SAPHE ?= saphe -.PHONY: all clean +.PHONY: all promote clean -.SUFFIXES: .md .pdf .satysfi-lock .satysfi-lock-expected +.SUFFIXES: .md .pdf .saphe.lock.yaml .saphe.lock.yaml.expected # Keeps intermediate results: -.PRECIOUS: %.satysfi-lock +.PRECIOUS: %.saphe.lock.yaml # Generates a lock file from a document and checks that it is as expected: -.md.satysfi-lock: - $(SATYSFI) solve $< - diff $(<:.md=.satysfi-lock) $(<:.md=.satysfi-lock-expected) +%.saphe.lock.yaml: %.md + $(SAPHE) solve $< + diff $(<:.md=.saphe.lock.yaml) $(<:.md=.saphe.lock.yaml.expected) # Typesets a document: -%.pdf: %.md %.satysfi-lock - $(SATYSFI) build $< -o $@ +%.pdf: %.md %.saphe.lock.yaml + $(SAPHE) build $< -o $@ # Promote a lock file to the corresponding expected lock file: -%.satysfi-lock-expected: %.satysfi-lock - cp $*.satysfi-lock $*.satysfi-lock-expected +%.saphe.lock.yaml.expected: %.saphe.lock.yaml + cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: all:: $(TARGETS) @@ -32,4 +32,4 @@ all:: $(TARGETS) promote:: $(EXPECTED_LOCKS) clean: - rm -f *.pdf *.satysfi-aux *.satysfi-lock + rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml diff --git a/tests/md/test.md b/tests/md/test.md index 2ffcfa3f1..55413529c 100644 --- a/tests/md/test.md +++ b/tests/md/test.md @@ -1,18 +1,3 @@ - + +# First Section + +Hello, world! +|string} + + +let initial_document_package_config_contents = Core.String.lstrip (Printf.sprintf {string| +ecosystem: "^%s" +language: "^0.1.0" +name: "your-document" +authors: + - "Your Name" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" +|string} (SemanticVersion.to_string Constant.current_ecosystem_version)) + + +let initial_library_package_config_contents = Core.String.lstrip (Printf.sprintf {string| +ecosystem: "^%s" +language: "^0.1.0" +name: "your-library" +authors: + - "Your Name" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Calc" + source_directories: + - "./src" + test_directories: + - "./test" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" +|string} (SemanticVersion.to_string Constant.current_ecosystem_version)) + + +let initial_library_source_contents = Core.String.lstrip {string| +module Calc :> sig + val succ : int -> int +end = struct + val succ n = n + 1 +end +|string} + + +let initial_library_test_contents = Core.String.lstrip {string| +use Calc +use package Testing + +module CalcTest = struct + module IntTarget = struct + type t = int + val equal m n = (m == n) + val show = arabic + end + module IntEquality = Testing.Equality.Make IntTarget + + #[test] + val succ-test = + IntEquality.assert-equal 43 (Calc.succ 42) +end +|string} + + +let write_document_package_config (abspath_package_config : abs_path) = + let open ResultMonad in + let* () = + write_file abspath_package_config initial_document_package_config_contents + |> Result.map_error (fun message -> FailedToWriteFile{ path = abspath_package_config; message }) + in + Logging.initialize_package_config abspath_package_config; + return () + + +let write_initial_file (abspath : abs_path) ~(data : string) = + let open ResultMonad in + let* () = + write_file abspath data + |> Result.map_error (fun message -> FailedToWriteFile{ path = abspath; message }) + in + Logging.initialize_file abspath; + return () + + +let assert_nonexistence (abspath : abs_path) = + let open ResultMonad in + if Sys.file_exists (get_abs_path_string abspath) then + err @@ FileAlreadyExists{ path = abspath } + else + return () + + +let init_document ~(fpath_in : string) = + let res = + let open ResultMonad in + + (* Constructs the input: *) + let dir_current = Sys.getcwd () in + let abspath_doc = make_absolute_if_relative ~origin:dir_current fpath_in in + let abspath_package_config = Constant.document_package_config_path ~doc:abspath_doc in + let absdir = make_abs_path (Filename.dirname (get_abs_path_string abspath_doc)) in + + let* () = assert_nonexistence abspath_doc in + let* () = assert_nonexistence abspath_package_config in + + match Filename.extension (get_abs_path_string abspath_doc) with + | ".saty" -> + ShellCommand.mkdir_p absdir; + let* () = write_document_package_config abspath_package_config in + let* () = write_initial_file abspath_doc ~data:initial_document_contents in + return () + + | ".md" -> + ShellCommand.mkdir_p absdir; + let* () = write_document_package_config abspath_package_config in + let* () = write_initial_file abspath_doc ~data:initial_markdown_contents in + return () + + | extension -> + err @@ InvalidExtensionForDocument{ path = abspath_doc; extension } + in + match res with + | Ok(()) -> () + | Error(e) -> report_config_error e; exit 1 + + +let init_library ~(fpath_in : string) = + let res = + let open ResultMonad in + + (* Constructs the input: *) + let dir_current = Sys.getcwd () in + let absdir_package = make_absolute_if_relative ~origin:dir_current fpath_in in + let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in + let abspath_source = append_to_abs_directory absdir_package "src/Calc.satyh" in + let abspath_test = append_to_abs_directory absdir_package "test/CalcTest.satyh" in + + let* () = assert_nonexistence abspath_package_config in + let* () = assert_nonexistence abspath_source in + let* () = assert_nonexistence abspath_test in + + ShellCommand.mkdir_p absdir_package; + ShellCommand.mkdir_p (append_to_abs_directory absdir_package "src"); + ShellCommand.mkdir_p (append_to_abs_directory absdir_package "test"); + let* () = write_document_package_config abspath_package_config in + let* () = write_initial_file abspath_source ~data:initial_library_source_contents in + let* () = write_initial_file abspath_test ~data:initial_library_test_contents in + + return () + in + match res with + | Ok(()) -> () + | Error(e) -> report_config_error e; exit 1 + + let make_solve_input ~(dir_current : string) ~(fpath_in : string) : solve_input = let abspath_in = make_absolute_if_relative ~origin:dir_current fpath_in in if is_directory abspath_in then From 7ee8e91bffcf521ab1bf8e3e0efe84bcf3b4c8a9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 03:37:51 +0900 Subject: [PATCH 103/381] fix how to produce initial documents --- src-saphe/sapheMain.ml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index a6d587eee..9ff77daa2 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -521,8 +521,6 @@ use package open StdJaReport document (| title = {The Title of Your Document}, author = {Your Name}, - show-title = true, - show-toc = false, |) '< +section{First Section}< +p{ From a2169a08d3c0e08ac92850bd43a7b7455abae5a3 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 03:47:05 +0900 Subject: [PATCH 104/381] fix how to produce initial configs --- src-saphe/sapheMain.ml | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 9ff77daa2..20cff8109 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -522,7 +522,7 @@ document (| title = {The Title of Your Document}, author = {Your Name}, |) '< - +section{First Section}< + +chapter{First Chapter}< +p{ Hello, world! } @@ -565,6 +565,28 @@ contents: |string} (SemanticVersion.to_string Constant.current_ecosystem_version)) +let initial_markdown_package_config_contents = Core.String.lstrip (Printf.sprintf {string| +ecosystem: "^%s" +language: "^0.1.0" +name: "your-document" +authors: + - "Your Name" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "MDJa" + registered: + registry: "default" + name: "md-ja" + requirement: "^0.0.1" +|string} (SemanticVersion.to_string Constant.current_ecosystem_version)) + + let initial_library_package_config_contents = Core.String.lstrip (Printf.sprintf {string| ecosystem: "^%s" language: "^0.1.0" @@ -620,10 +642,10 @@ end |string} -let write_document_package_config (abspath_package_config : abs_path) = +let write_package_config (abspath_package_config : abs_path) ~(data : string) = let open ResultMonad in let* () = - write_file abspath_package_config initial_document_package_config_contents + write_file abspath_package_config data |> Result.map_error (fun message -> FailedToWriteFile{ path = abspath_package_config; message }) in Logging.initialize_package_config abspath_package_config; @@ -664,13 +686,13 @@ let init_document ~(fpath_in : string) = match Filename.extension (get_abs_path_string abspath_doc) with | ".saty" -> ShellCommand.mkdir_p absdir; - let* () = write_document_package_config abspath_package_config in + let* () = write_package_config abspath_package_config ~data:initial_document_package_config_contents in let* () = write_initial_file abspath_doc ~data:initial_document_contents in return () | ".md" -> ShellCommand.mkdir_p absdir; - let* () = write_document_package_config abspath_package_config in + let* () = write_package_config abspath_package_config ~data:initial_markdown_package_config_contents in let* () = write_initial_file abspath_doc ~data:initial_markdown_contents in return () @@ -700,7 +722,7 @@ let init_library ~(fpath_in : string) = ShellCommand.mkdir_p absdir_package; ShellCommand.mkdir_p (append_to_abs_directory absdir_package "src"); ShellCommand.mkdir_p (append_to_abs_directory absdir_package "test"); - let* () = write_document_package_config abspath_package_config in + let* () = write_package_config abspath_package_config ~data:initial_library_package_config_contents in let* () = write_initial_file abspath_source ~data:initial_library_source_contents in let* () = write_initial_file abspath_test ~data:initial_library_test_contents in From 159d358a512c16ba6a7746e04b34f61bf0609d76 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 04:07:12 +0900 Subject: [PATCH 105/381] add integration tests for `saphe init` --- tests/Makefile | 14 ++- tests/init-doc/.gitignore | 3 + tests/init-doc/foo.saphe.lock.yaml.expected | 104 ++++++++++++++++++ tests/init-md/.gitignore | 3 + tests/init-md/foo.saphe.lock.yaml.expected | 115 ++++++++++++++++++++ 5 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 tests/init-doc/.gitignore create mode 100644 tests/init-doc/foo.saphe.lock.yaml.expected create mode 100644 tests/init-md/.gitignore create mode 100644 tests/init-md/foo.saphe.lock.yaml.expected diff --git a/tests/Makefile b/tests/Makefile index 556bf6cad..007e00ef0 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -10,6 +10,8 @@ TARGETS = \ staged1.pdf \ macro1.pdf \ rename-dep1.pdf \ + init-doc/foo.pdf \ + init-md/foo.pdf \ # first.pdf \ # math1.pdf \ # refactor4.pdf \ @@ -55,7 +57,7 @@ promote:: (cd text_mode; make promote) (cd md; make promote) -clean:: +clean:: clean-init rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml clean:: @@ -63,8 +65,18 @@ clean:: (cd text_mode; make clean) (cd md; make clean) +clean-init:: + rm -f init-doc/*.saty init-doc/*.saphe.yaml + rm -f init-md/*.md init-md/*.saphe.yaml + clip.pdf: head.satyh first.pdf: head.satyh glue1.pdf: head.satyh math1.pdf: head.satyh math2.pdf: head.satyh + +init-doc/foo.saty init-doc/foo.saphe.yaml: + saphe init document init-doc/foo.saty + +init-md/foo.md init-md/foo.saphe.yaml: + saphe init document init-md/foo.md diff --git a/tests/init-doc/.gitignore b/tests/init-doc/.gitignore new file mode 100644 index 000000000..9ecaebe46 --- /dev/null +++ b/tests/init-doc/.gitignore @@ -0,0 +1,3 @@ +*.saty +*.saphe.yaml +!*.saphe.lock.yaml.expected diff --git a/tests/init-doc/foo.saphe.lock.yaml.expected b/tests/init-doc/foo.saphe.lock.yaml.expected new file mode 100644 index 000000000..ae13af04f --- /dev/null +++ b/tests/init-doc/foo.saphe.lock.yaml.expected @@ -0,0 +1,104 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-report + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + used_as: StdJaReport +test_dependencies: [] diff --git a/tests/init-md/.gitignore b/tests/init-md/.gitignore new file mode 100644 index 000000000..4112c1912 --- /dev/null +++ b/tests/init-md/.gitignore @@ -0,0 +1,3 @@ +*.md +*.saphe.yaml +!*.saphe.lock.yaml.expected diff --git a/tests/init-md/foo.saphe.lock.yaml.expected b/tests/init-md/foo.saphe.lock.yaml.expected new file mode 100644 index 000000000..4980d1629 --- /dev/null +++ b/tests/init-md/foo.saphe.lock.yaml.expected @@ -0,0 +1,115 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: itemize + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.md-ja.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 + used_as: Itemize + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: md-ja + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.md-ja.0.0.1 + used_as: MDJa +test_dependencies: [] From e3a0090563d89ef96d74ad692db314a3a2b18483 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 04:16:34 +0900 Subject: [PATCH 106/381] add integration tests for `saphe init library` --- src-saphe/sapheMain.ml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 20cff8109..78d1ccb91 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -611,6 +611,12 @@ contents: registry: "default" name: "stdlib" requirement: "^0.0.1" + test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" |string} (SemanticVersion.to_string Constant.current_ecosystem_version)) From 6a3a11ab81e5aa04811bf657e3883236ad40e246 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 04:21:25 +0900 Subject: [PATCH 107/381] add integration tests for `saphe init library` (2) --- tests/.gitignore | 1 + tests/Makefile | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/.gitignore b/tests/.gitignore index 681b5ab7e..f2e49a00d 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,3 +1,4 @@ *.saphe.lock.yaml !*.saphe.lock.yaml.expected *.satysfi-deps.yaml +init-lib/ diff --git a/tests/Makefile b/tests/Makefile index 007e00ef0..7a6ac61cd 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -12,6 +12,7 @@ TARGETS = \ rename-dep1.pdf \ init-doc/foo.pdf \ init-md/foo.pdf \ + init-lib/satysfi-deps.yaml \ # first.pdf \ # math1.pdf \ # refactor4.pdf \ @@ -68,6 +69,7 @@ clean:: clean-init:: rm -f init-doc/*.saty init-doc/*.saphe.yaml rm -f init-md/*.md init-md/*.saphe.yaml + rm -rf init-lib clip.pdf: head.satyh first.pdf: head.satyh @@ -76,7 +78,17 @@ math1.pdf: head.satyh math2.pdf: head.satyh init-doc/foo.saty init-doc/foo.saphe.yaml: - saphe init document init-doc/foo.saty + $(SAPHE) init document init-doc/foo.saty init-md/foo.md init-md/foo.saphe.yaml: - saphe init document init-md/foo.md + $(SAPHE) init document init-md/foo.md + +init-lib/saphe.yaml: + $(SAPHE) init library init-lib + +init-lib/saphe.lock.yaml: init-lib/saphe.yaml + $(SAPHE) solve init-lib + +init-lib/satysfi-deps.yaml: init-lib/saphe.lock.yaml + $(SAPHE) build init-lib + $(SAPHE) test init-lib From 6981c8910bf3bd8fc58baa3ad24660dcc8bc61ae Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 04:47:08 +0900 Subject: [PATCH 108/381] fix `Makefile` for the integration tests for `saphe init` --- tests/Makefile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Makefile b/tests/Makefile index 7a6ac61cd..3d2308c4d 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -80,9 +80,23 @@ math2.pdf: head.satyh init-doc/foo.saty init-doc/foo.saphe.yaml: $(SAPHE) init document init-doc/foo.saty +init-doc/foo.saphe.lock.yaml: init-doc/foo.saty init-doc/foo.saphe.yaml + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) + +init-doc/foo.pdf: init-doc/foo.saty init-doc/foo.saphe.lock.yaml + $(SAPHE) build $< -o $@ + init-md/foo.md init-md/foo.saphe.yaml: $(SAPHE) init document init-md/foo.md +init-md/foo.saphe.lock.yaml: init-md/foo.md init-md/foo.saphe.yaml + $(SAPHE) solve $< + diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) + +init-md/foo.pdf: init-md/foo.md init-md/foo.saphe.lock.yaml + $(SAPHE) build $< -o $@ + init-lib/saphe.yaml: $(SAPHE) init library init-lib From 44ff21be6ffb3675512f0599d5d139809f7c5786 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 9 Jan 2024 15:15:19 +0900 Subject: [PATCH 109/381] fix and refine `tests/Makefile` --- tests/Makefile | 64 +++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 3d2308c4d..29475b5ce 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,4 +1,8 @@ -TARGETS = \ +INIT_DOC = init-doc/foo +INIT_MD = init-md/foo +INIT_LIB = init-lib + +DOC_TARGETS = \ clip.pdf \ glue1.pdf \ math2.pdf \ @@ -10,15 +14,17 @@ TARGETS = \ staged1.pdf \ macro1.pdf \ rename-dep1.pdf \ - init-doc/foo.pdf \ - init-md/foo.pdf \ - init-lib/satysfi-deps.yaml \ + $(INIT_DOC).pdf \ + $(INIT_MD).pdf \ # first.pdf \ # math1.pdf \ # refactor4.pdf \ # refactor6.pdf \ -EXPECTED_LOCKS=$(TARGETS:.pdf=.saphe.lock.yaml.expected) +LIB_TARGETS = \ + $(INIT_LIB)/satysfi-deps.yaml \ + +EXPECTED_LOCKS = $(DOC_TARGETS:.pdf=.saphe.lock.yaml.expected) SAPHE ?= saphe @@ -43,7 +49,7 @@ SAPHE ?= saphe cp $*.saphe.lock.yaml $*.saphe.lock.yaml.expected # Entrypoint for typesetting documents: -all:: $(TARGETS) +all:: $(DOC_TARGETS) $(LIB_TARGETS) all:: (cd images; make) @@ -59,7 +65,7 @@ promote:: (cd md; make promote) clean:: clean-init - rm -f *.pdf *.satysfi-aux *.saphe.lock.yaml *.satysfi-deps.yaml + rm -f *.saphe.lock.yaml *.satysfi-deps.yaml *.satysfi-aux *.pdf clean:: (cd images; make clean) @@ -67,42 +73,46 @@ clean:: (cd md; make clean) clean-init:: - rm -f init-doc/*.saty init-doc/*.saphe.yaml - rm -f init-md/*.md init-md/*.saphe.yaml - rm -rf init-lib + rm -f $(INIT_DOC).saty $(INIT_DOC).saphe.yaml + rm -f $(INIT_DOC).saphe.lock.yaml $(INIT_DOC).satysfi-deps.yaml $(INIT_DOC).satysfi-aux $(INIT_DOC).pdf + rm -f $(INIT_MD).md $(INIT_MD).saphe.yaml + rm -f $(INIT_MD).saphe.lock.yaml $(INIT_MD).satysfi-deps.yaml $(INIT_MD).satysfi-aux $(INIT_MD).pdf + rm -rf $(INIT_LIB) +# Dependencies on program files: clip.pdf: head.satyh first.pdf: head.satyh glue1.pdf: head.satyh math1.pdf: head.satyh math2.pdf: head.satyh -init-doc/foo.saty init-doc/foo.saphe.yaml: - $(SAPHE) init document init-doc/foo.saty +# Tests for `saphe init`: +$(INIT_DOC).saty $(INIT_DOC).saphe.yaml: + $(SAPHE) init document $(INIT_DOC).saty -init-doc/foo.saphe.lock.yaml: init-doc/foo.saty init-doc/foo.saphe.yaml +$(INIT_DOC).saphe.lock.yaml: $(INIT_DOC).saty $(INIT_DOC).saphe.yaml $(SAPHE) solve $< - diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) + diff $@ $(INIT_DOC).saphe.lock.yaml.expected -init-doc/foo.pdf: init-doc/foo.saty init-doc/foo.saphe.lock.yaml +$(INIT_DOC).pdf: $(INIT_DOC).saty $(INIT_DOC).saphe.lock.yaml $(SAPHE) build $< -o $@ -init-md/foo.md init-md/foo.saphe.yaml: - $(SAPHE) init document init-md/foo.md +$(INIT_MD).md $(INIT_MD).saphe.yaml: + $(SAPHE) init document $(INIT_MD).md -init-md/foo.saphe.lock.yaml: init-md/foo.md init-md/foo.saphe.yaml +$(INIT_MD).saphe.lock.yaml: $(INIT_MD).md $(INIT_MD).saphe.yaml $(SAPHE) solve $< - diff $(<:.saty=.saphe.lock.yaml) $(<:.saty=.saphe.lock.yaml.expected) + diff $@ $(INIT_MD).saphe.lock.yaml.expected -init-md/foo.pdf: init-md/foo.md init-md/foo.saphe.lock.yaml +$(INIT_MD).pdf: $(INIT_MD).md $(INIT_MD).saphe.lock.yaml $(SAPHE) build $< -o $@ -init-lib/saphe.yaml: - $(SAPHE) init library init-lib +$(INIT_LIB)/saphe.yaml: + $(SAPHE) init library $(INIT_LIB) -init-lib/saphe.lock.yaml: init-lib/saphe.yaml - $(SAPHE) solve init-lib +$(INIT_LIB)/saphe.lock.yaml: $(INIT_LIB)/saphe.yaml + $(SAPHE) solve $(INIT_LIB) -init-lib/satysfi-deps.yaml: init-lib/saphe.lock.yaml - $(SAPHE) build init-lib - $(SAPHE) test init-lib +$(INIT_LIB)/satysfi-deps.yaml: $(INIT_LIB)/saphe.lock.yaml + $(SAPHE) build $(INIT_LIB) + $(SAPHE) test $(INIT_LIB) From 84cd528ececda66317272d6af0a32b9b6d936848 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Fri, 19 Jan 2024 02:20:54 +0900 Subject: [PATCH 110/381] slightly add a TODO comment --- src-saphe/lockConfig.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index 024baa770..aeb6fee23 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -33,7 +33,7 @@ let lock_contents_decoder : lock_contents ConfigDecoder.t = let open ConfigDecoder in branch [ "registered" ==> begin - get "registry_hash_value" string >>= fun registry_hash_value -> + get "registry_hash_value" string >>= fun registry_hash_value -> (* TODO: validation *) get "package_name" package_name_decoder >>= fun package_name -> get "version" version_decoder >>= fun locked_version -> let package_id = PackageId.{ registry_hash_value; package_name } in From b7598ea7aee04d5913482677ca43430750b8662a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 14 Feb 2024 08:20:58 +0900 Subject: [PATCH 111/381] begin to introduce `local` packages to Saphe --- src-saphe/configUtil.ml | 4 + src-saphe/constant.ml | 15 ++-- src-saphe/lockConfig.ml | 34 +++++--- src-saphe/lockFetcher.ml | 26 ++++-- src-saphe/logging.ml | 21 +++-- src-saphe/packageConfig.ml | 26 +++--- src-saphe/packageConstraintSolver.ml | 119 +++++++++++++++------------ src-saphe/packageSystemBase.ml | 70 +++++++++++++--- src-saphe/sapheMain.ml | 38 ++++++--- src-util/myUtil.ml | 4 + src-util/myUtil.mli | 2 + 11 files changed, 245 insertions(+), 114 deletions(-) diff --git a/src-saphe/configUtil.ml b/src-saphe/configUtil.ml index 599a62e2a..ac367743f 100644 --- a/src-saphe/configUtil.ml +++ b/src-saphe/configUtil.ml @@ -61,6 +61,10 @@ let dependency_spec_decoder : parsed_package_dependency_spec ConfigDecoder.t = version_requirement; } end; + "local" ==> begin + get "path" string >>= fun relative_path -> + succeed @@ ParsedLocalFixedDependency{ relative_path } + end; ] diff --git a/src-saphe/constant.ml b/src-saphe/constant.ml index 50273b94e..6f6d6da40 100644 --- a/src-saphe/constant.ml +++ b/src-saphe/constant.ml @@ -13,9 +13,9 @@ let lock_tarball_name (package_name : package_name) (locked_version : SemanticVe Printf.sprintf "%s.%s" package_name (SemanticVersion.to_string locked_version) -let lock_directory ~store_root:(absdir_store_root : abs_path) (lock : Lock.t) : abs_path = - let Lock.{ package_id; locked_version } = lock in - let PackageId.{ registry_hash_value; package_name } = package_id in +let registered_lock_directory ~store_root:(absdir_store_root : abs_path) (reglock : RegisteredLock.t) : abs_path = + let RegisteredLock.{ registered_package_id; locked_version } = reglock in + let RegisteredPackageId.{ registry_hash_value; package_name } = registered_package_id in append_to_abs_directory absdir_store_root (Printf.sprintf "packages/%s/%s/%s" registry_hash_value @@ -23,13 +23,18 @@ let lock_directory ~store_root:(absdir_store_root : abs_path) (lock : Lock.t) : (lock_tarball_name package_name locked_version)) +let lock_directory ~(store_root : abs_path) (lock : Lock.t) : abs_path = + match lock with + | Lock.Registered(reglock) -> registered_lock_directory ~store_root reglock + | Lock.LocalFixed{ absolute_path } -> absolute_path + (* Should be in sync with SATySFi *) let envelope_config_path ~dir:(absdir_library : abs_path) : abs_path = append_to_abs_directory absdir_library "satysfi-envelope.yaml" -let lock_envelope_config ~(store_root : abs_path) (lock : Lock.t) : abs_path = - envelope_config_path ~dir:(lock_directory ~store_root lock) +let registered_lock_envelope_config ~(store_root : abs_path) (reglock : RegisteredLock.t) : abs_path = + envelope_config_path ~dir:(registered_lock_directory ~store_root reglock) let registry_root_directory_path ~store_root:(absdir_store_root : abs_path) (registry_hash_value : registry_hash_value) : abs_path = diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index aeb6fee23..40e1b15c9 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -7,9 +7,6 @@ open ConfigUtil type 'a ok = ('a, config_error) result -type lock_contents = - | RegisteredLock of Lock.t - type lock_dependency = { depended_lock_name : lock_name; used_as : string; @@ -17,7 +14,7 @@ type lock_dependency = { type locked_package = { lock_name : lock_name; - lock_contents : lock_contents; + lock_contents : Lock.t; lock_dependencies : lock_dependency list; test_only_lock : bool; } @@ -29,25 +26,31 @@ type t = { } -let lock_contents_decoder : lock_contents ConfigDecoder.t = +let lock_contents_decoder : Lock.t ConfigDecoder.t = let open ConfigDecoder in branch [ "registered" ==> begin get "registry_hash_value" string >>= fun registry_hash_value -> (* TODO: validation *) get "package_name" package_name_decoder >>= fun package_name -> get "version" version_decoder >>= fun locked_version -> - let package_id = PackageId.{ registry_hash_value; package_name } in - let lock = Lock.{ package_id; locked_version } in - succeed @@ RegisteredLock(lock) + let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in + let reglock = RegisteredLock.{ registered_package_id; locked_version } in + succeed @@ Lock.Registered(reglock) + end; + "local" ==> begin + get "absolute_path" string >>= fun abspathstr -> (* TODO: fix this *) + succeed @@ Lock.LocalFixed{ + absolute_path = make_abs_path abspathstr; + } end; ] -let lock_contents_encoder (contents : lock_contents) : (string * Yaml.value) list = +let lock_contents_encoder (contents : Lock.t) : (string * Yaml.value) list = match contents with - | RegisteredLock(lock) -> - let Lock.{ package_id; locked_version } = lock in - let PackageId.{ registry_hash_value; package_name } = package_id in + | Lock.Registered(reglock) -> + let RegisteredLock.{ registered_package_id; locked_version } = reglock in + let RegisteredPackageId.{ registry_hash_value; package_name } = registered_package_id in [ ("registered", `O([ ("registry_hash_value", `String(registry_hash_value)); @@ -56,6 +59,13 @@ let lock_contents_encoder (contents : lock_contents) : (string * Yaml.value) lis ])); ] + | Lock.LocalFixed{ absolute_path } -> + [ + ("local", `O([ + ("absolute_path", `String(get_abs_path_string absolute_path)); (* TODO: fix this *) + ])); + ] + let lock_dependency_decoder : lock_dependency ConfigDecoder.t = let open ConfigDecoder in diff --git a/src-saphe/lockFetcher.ml b/src-saphe/lockFetcher.ml index a3867af08..adf0af372 100644 --- a/src-saphe/lockFetcher.ml +++ b/src-saphe/lockFetcher.ml @@ -49,13 +49,12 @@ let extract_external_zip ~(unzip_command : string) ~(zip : abs_path) ~(output_co err @@ FailedToExtractExternalZip{ exit_status; command } -let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~store_root:(absdir_store_root : abs_path) (impl_spec : implementation_spec) : unit ok = +let fetch_registered_lock ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~store_root:(absdir_store_root : abs_path) (reglock : RegisteredLock.t) (source : implementation_source) : unit ok = let open ResultMonad in - let ImplSpec{ lock; source } = impl_spec in - let Lock.{ package_id; locked_version } = lock in - let PackageId.{ registry_hash_value; package_name } = package_id in + let RegisteredLock.{ registered_package_id; locked_version } = reglock in + let RegisteredPackageId.{ registry_hash_value; package_name } = registered_package_id in let lock_tarball_name = Constant.lock_tarball_name package_name locked_version in - let absdir_lock = Constant.lock_directory ~store_root:absdir_store_root lock in + let absdir_lock = Constant.registered_lock_directory ~store_root:absdir_store_root reglock in let absdir_lock_tarball_cache = Constant.lock_tarball_cache_directory ~store_root:absdir_store_root registry_hash_value in @@ -185,3 +184,20 @@ let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : stri return () end + + +let main ~(wget_command : string) ~(tar_command : string) ~(unzip_command : string) ~(store_root : abs_path) (impl_spec : implementation_spec) : unit ok = + let open ResultMonad in + let ImplSpec{ lock; source } = impl_spec in + match lock with + | Lock.Registered(reglock) -> + fetch_registered_lock + ~wget_command + ~tar_command + ~unzip_command + ~store_root + reglock + source + + | Lock.LocalFixed(_) -> + return () diff --git a/src-saphe/logging.ml b/src-saphe/logging.ml index 6409e22c7..c07d01678 100644 --- a/src-saphe/logging.ml +++ b/src-saphe/logging.ml @@ -8,24 +8,31 @@ let show_package_dependency_before_solving (dependencies_with_flags : (dependenc dependencies_with_flags |> List.iter (fun (flag, dep) -> let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ package_id; version_requirement; _ } -> - let PackageId.{ package_name; _ } = package_id in + | RegisteredDependency{ registered_package_id; version_requirement; _ } -> + let RegisteredPackageId.{ package_name; _ } = registered_package_id in let s_restr = SemanticVersion.requirement_to_string version_requirement in let s_test_only = match flag with | SourceDependency -> "" | TestOnlyDependency -> ", test_only" in - Printf.printf " - %s (%s%s) used as %s\n" package_name s_restr s_test_only used_as; + Printf.printf " - %s (%s%s) used as %s\n" package_name s_restr s_test_only used_as + + | LocalFixedDependency{ absolute_path } -> + Printf.printf " - '%s' used as %s\n" (get_abs_path_string absolute_path) used_as ) let show_package_dependency_solutions (solutions : package_solution list) = Printf.printf " package dependency solutions:\n"; - solutions |> List.iter (fun solution -> - let Lock.{ package_id; locked_version; _ } = solution.lock in - let PackageId.{ package_name; _ } = package_id in - Printf.printf " - %s %s\n" package_name (SemanticVersion.to_string locked_version) + solutions |> List.iter (fun solution -> + match solution.lock with + | Lock.Registered(RegisteredLock.{ registered_package_id; locked_version; _ }) -> + let RegisteredPackageId.{ package_name; _ } = registered_package_id in + Printf.printf " - %s %s\n" package_name (SemanticVersion.to_string locked_version) + + | Lock.LocalFixed{ absolute_path } -> + Printf.printf " - %s\n" (get_abs_path_string absolute_path) ) diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 9e47d9dad..926200713 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -224,7 +224,7 @@ let config_decoder : parsed_package_config ConfigDecoder.t = } -let validate_dependency (localmap : registry_remote RegistryLocalNameMap.t) (dep : parsed_package_dependency) : package_dependency ok = +let validate_dependency ~dir:(absdir_config : abs_path) (localmap : registry_remote RegistryLocalNameMap.t) (dep : parsed_package_dependency) : package_dependency ok = let open ResultMonad in let ParsedPackageDependency{ used_as; spec } = dep in let* spec = @@ -242,16 +242,20 @@ let validate_dependency (localmap : registry_remote RegistryLocalNameMap.t) (dep | Some(registry_remote) -> ConfigUtil.make_registry_hash_value registry_remote in - let package_id = PackageId.{ package_name; registry_hash_value } in return @@ RegisteredDependency{ - package_id; + registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value }; version_requirement; } + + | ParsedLocalFixedDependency{ relative_path } -> + return @@ LocalFixedDependency{ + absolute_path = append_to_abs_directory absdir_config relative_path; + } in return @@ PackageDependency{ used_as; spec } -let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) (contents : parsed_package_contents) : package_contents ok = +let validate_contents_spec ~(dir : abs_path) (localmap : registry_remote RegistryLocalNameMap.t) (contents : parsed_package_contents) : package_contents ok = let open ResultMonad in match contents with | ParsedLibrary{ @@ -262,8 +266,8 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( test_dependencies; markdown_conversion; } -> - let* dependencies = mapM (validate_dependency localmap) dependencies in - let* test_dependencies = mapM (validate_dependency localmap) test_dependencies in + let* dependencies = mapM (validate_dependency ~dir localmap) dependencies in + let* test_dependencies = mapM (validate_dependency ~dir localmap) test_dependencies in return @@ Library{ main_module_name; source_directories; @@ -277,11 +281,11 @@ let validate_contents_spec (localmap : registry_remote RegistryLocalNameMap.t) ( return @@ Font{ main_module_name; font_file_descriptions } | ParsedDocument{ dependencies } -> - let* dependencies = mapM (validate_dependency localmap) dependencies in + let* dependencies = mapM (validate_dependency ~dir localmap) dependencies in return @@ Document{ dependencies } -let validate (p_package_config : parsed_package_config) : t ok = +let validate ~(dir : abs_path) (p_package_config : parsed_package_config) : t ok = let open ResultMonad in let ParsedPackageConfig{ @@ -303,9 +307,7 @@ let validate (p_package_config : parsed_package_config) : t ok = return (localmap, registry_remote_acc) ) (RegistryLocalNameMap.empty, Alist.empty) in - let* package_contents = - validate_contents_spec localmap package_contents - in + let* package_contents = validate_contents_spec ~dir localmap package_contents in return { language_requirement; package_name; @@ -330,4 +332,4 @@ let load (abspath_config : abs_path) : t ok = parse s |> Result.map_error (fun e -> PackageConfigError(abspath_config, e)) in - validate internal + validate ~dir:(dirname abspath_config) internal diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index a609d25ee..56a2bbbce 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -7,39 +7,42 @@ module SolverInput = struct module Role = struct type t = - | LocalRole of { + | TargetRole of { requires : package_dependency list; context : package_context; } - | Role of { - package_id : PackageId.t; - compatibility : string; - context : package_context; + | RegisteredRole of { + registered_package_id : RegisteredPackageId.t; + compatibility : string; + context : package_context; } let pp ppf (role : t) = match role with - | Role{ package_id; _ } -> - let PackageId.{ package_name; _ } = package_id in - Format.fprintf ppf "%s" package_name + | TargetRole(_) -> + Format.fprintf ppf "target" - | LocalRole(_) -> - Format.fprintf ppf "local" + | RegisteredRole{ registered_package_id; _ } -> + let RegisteredPackageId.{ package_name; _ } = registered_package_id in + Format.fprintf ppf "%s" package_name let compare (role1 : t) (role2 : t) = match (role1, role2) with - | (LocalRole(_), LocalRole(_)) -> 0 - | (LocalRole(_), _) -> 1 - | (_, LocalRole(_)) -> -1 - - | ( - Role{ package_id = pkgid1; compatibility = c1; _ }, - Role{ package_id = pkgid2; compatibility = c2; _ } - ) -> + | (TargetRole(_), TargetRole(_)) -> + 0 + + | (TargetRole(_), _) -> + 1 + + | (_, TargetRole(_)) -> + -1 + + | ( RegisteredRole{ registered_package_id = regpkgid1; compatibility = c1; _ }, + RegisteredRole{ registered_package_id = regpkgid2; compatibility = c2; _ }) -> begin - match PackageId.compare pkgid1 pkgid2 with + match RegisteredPackageId.compare regpkgid1 regpkgid2 with | 0 -> String.compare c1 c2 | nonzero -> nonzero end @@ -75,7 +78,7 @@ module SolverInput = struct type impl = | DummyImpl - | LocalImpl of { + | TargetImpl of { dependencies : dependency list; } | Impl of { @@ -104,8 +107,8 @@ module SolverInput = struct | DummyImpl -> Format.fprintf ppf "dummy" - | LocalImpl(_) -> - Format.fprintf ppf "local" + | TargetImpl(_) -> + Format.fprintf ppf "target" | Impl{ package_name; version; _ } -> Format.fprintf ppf "%s %s" package_name (SemanticVersion.to_string version) @@ -123,7 +126,7 @@ module SolverInput = struct let pp_version (ppf : Format.formatter) (impl : impl) = match impl with | DummyImpl -> Format.fprintf ppf "dummy" - | LocalImpl(_) -> Format.fprintf ppf "local" + | TargetImpl(_) -> Format.fprintf ppf "target" | Impl{ version; _ } -> Format.fprintf ppf "%s" (SemanticVersion.to_string version) @@ -139,9 +142,9 @@ module SolverInput = struct let requires (_role : Role.t) (impl : impl) : dependency list * command_name list = match impl with - | DummyImpl -> ([], []) - | LocalImpl{ dependencies } -> (dependencies, []) - | Impl{ dependencies; _ } -> (dependencies, []) + | DummyImpl -> ([], []) + | TargetImpl{ dependencies } -> (dependencies, []) + | Impl{ dependencies; _ } -> (dependencies, []) (* Unused *) @@ -157,10 +160,10 @@ module SolverInput = struct | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in - let package_id = PackageId.{ package_name; registry_hash_value } in + let registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value } in let role = - Role.Role{ - package_id; + Role.RegisteredRole{ + registered_package_id; compatibility; context; } @@ -173,24 +176,27 @@ module SolverInput = struct requires |> List.map (fun dep -> let PackageDependency{ used_as; spec } = dep in match spec with - | RegisteredDependency{ package_id; version_requirement } -> + | RegisteredDependency{ registered_package_id; version_requirement } -> let compatibility = match version_requirement with | SemanticVersion.CompatibleWith(semver) -> SemanticVersion.get_compatibility_unit semver in - let role = Role.Role{ package_id; compatibility; context } in + let role = Role.RegisteredRole{ registered_package_id; compatibility; context } in Dependency{ role; used_as; version_requirement } + + | LocalFixedDependency{ absolute_path = _ } -> + failwith "TODO: make_internal_dependency, LocalFixedDependency" ) let implementations (role : Role.t) : role_information = match role with - | Role{ package_id; compatibility; context } -> - let PackageId.{ package_name; registry_hash_value } = package_id in + | RegisteredRole{ registered_package_id; compatibility; context } -> + let RegisteredPackageId.{ package_name; registry_hash_value } = registered_package_id in let impl_records = context.package_id_to_impl_list - |> PackageIdMap.find_opt package_id + |> PackageIdMap.find_opt (PackageId.Registered(registered_package_id)) |> Option.value ~default:[] in let impls = @@ -210,9 +216,9 @@ module SolverInput = struct in { replacement = None; impls } - | LocalRole{ requires; context } -> + | TargetRole{ requires; context } -> let dependencies = make_internal_dependency context requires in - let impls = [ LocalImpl{ dependencies } ] in + let impls = [ TargetImpl{ dependencies } ] in { replacement = None; impls } @@ -226,7 +232,7 @@ module SolverInput = struct | DummyImpl -> false - | LocalImpl(_) -> + | TargetImpl(_) -> true | Impl{ version = semver_provided; _} -> @@ -244,7 +250,7 @@ module SolverInput = struct let conflict_class (impl : impl) : conflict_class list = match impl with - | DummyImpl | LocalImpl(_) -> + | DummyImpl | TargetImpl(_) -> [ "*" ] | Impl{ package_name; version; _ } -> @@ -262,9 +268,9 @@ module SolverInput = struct | (DummyImpl, _) -> 1 | (_, DummyImpl) -> -1 - | (LocalImpl(_), LocalImpl(_)) -> 0 - | (LocalImpl(_), _) -> 1 - | (_, LocalImpl(_)) -> -1 + | (TargetImpl(_), TargetImpl(_)) -> 0 + | (TargetImpl(_), _) -> 1 + | (_, TargetImpl(_)) -> -1 | (Impl{ version = semver1; _ }, Impl{ version = semver2; _ }) -> SemanticVersion.compare semver1 semver2 @@ -308,7 +314,14 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let (explicit_source_dependencies, explicit_test_dependencies, dependency_acc) = acc in match dep with | PackageDependency{ spec; used_as } -> - let RegisteredDependency{ package_id; _ } = spec in + let package_id = + match spec with + | RegisteredDependency{ registered_package_id; _ } -> + PackageId.Registered(registered_package_id) + + | LocalFixedDependency{ absolute_path } -> + PackageId.LocalFixed{ absolute_path } + in let (explicit_source_dependencies, explicit_test_dependencies) = match flag with | SourceDependency -> @@ -323,7 +336,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let requires = Alist.to_list dependency_acc in let output_opt = InternalSolver.do_solve ~closest_match:false { - role = LocalRole{ requires; context }; + role = TargetRole{ requires; context }; command = None; } in @@ -336,12 +349,14 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla Output.RoleMap.fold (fun _role impl acc -> let impl = Output.unwrap impl in match impl with - | DummyImpl | LocalImpl(_) -> + | DummyImpl | TargetImpl(_) -> acc | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> - let package_id = PackageId.{ registry_hash_value; package_name } in - let lock = Lock.{ package_id; locked_version } in + let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in + let package_id = PackageId.Registered(registered_package_id) in + let reglock = RegisteredLock.{ registered_package_id; locked_version } in + let lock = Lock.Registered(reglock) in let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = acc in let (graph, vertex) = match graph |> LockDependencyGraph.add_vertex lock () with @@ -375,16 +390,16 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla dependencies |> List.fold_left (fun (locked_dependency_acc, graph) dep -> let Dependency{ role = role_dep; used_as; _ } = dep in match role_dep with - | Role{ package_id = package_id_dep; _ } -> + | RegisteredRole{ registered_package_id = registered_package_id_dep; _ } -> let lock_dep = match rolemap |> Output.RoleMap.find_opt role_dep |> Option.map Output.unwrap with - | None | Some(DummyImpl) | Some(LocalImpl(_)) -> + | None | Some(DummyImpl) | Some(TargetImpl(_)) -> assert false | Some(Impl{ version = version_dep; _ }) -> - Lock.{ - package_id = package_id_dep; - locked_version = version_dep; + Lock.Registered{ + registered_package_id = registered_package_id_dep; + locked_version = version_dep; } in let locked_dependency = @@ -402,7 +417,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let graph = graph |> LockDependencyGraph.add_edge ~from:vertex ~to_:vertex_dep in (locked_dependency_acc, graph) - | LocalRole(_) -> + | TargetRole(_) -> (locked_dependency_acc, graph) ) (Alist.empty, graph) diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index d31b4b2a0..865f09885 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -29,6 +29,9 @@ type parsed_package_dependency_spec = registry_local_name : registry_local_name; version_requirement : SemanticVersion.requirement; } + | ParsedLocalFixedDependency of { + relative_path : string; + } [@@deriving show { with_path = false }] type parsed_package_dependency = @@ -38,7 +41,7 @@ type parsed_package_dependency = } [@@deriving show { with_path = false }] -module PackageId = struct +module RegisteredPackageId = struct type t = { registry_hash_value : string; package_name : package_name; @@ -51,6 +54,29 @@ module PackageId = struct List.compare String.compare [ h1; p1 ] [ h2; p2 ] end +module PackageId = struct + type t = + | Registered of RegisteredPackageId.t + | LocalFixed of { + absolute_path : abs_path; + } + [@@deriving show { with_path = false }] + + let compare (pkgid1 : t) (pkgid2 : t) = + match (pkgid1, pkgid2) with + | ( Registered(regpkgid1), Registered(regpkgid2)) -> + RegisteredPackageId.compare regpkgid1 regpkgid2 + + | (Registered(_), LocalFixed(_)) -> + 1 + + | (LocalFixed{ absolute_path = abspath1 }, LocalFixed{ absolute_path = abspath2 }) -> + AbsPath.compare abspath1 abspath2 + + | (LocalFixed(_), Registered(_)) -> + -1 +end + module PackageIdMap = Map.Make(PackageId) module PackageIdSet = Set.Make(PackageId) @@ -61,29 +87,53 @@ type registry_hash_value = string module RegistryHashValueMap = Map.Make(String) -module Lock = struct +module RegisteredLock = struct type t = { - package_id : PackageId.t; - locked_version : SemanticVersion.t; + registered_package_id : RegisteredPackageId.t; + locked_version : SemanticVersion.t; } [@@deriving show { with_path = false }] - let compare (lock1 : t) (lock2 : t) : int = - let { package_id = pkgid1; locked_version = v1 } = lock1 in - let { package_id = pkgid2; locked_version = v2 } = lock2 in - let comp_pkgid = PackageId.compare pkgid1 pkgid2 in + let compare (reglock1 : t) (reglock2 : t) : int = + let { registered_package_id = regpkgid1; locked_version = v1 } = reglock1 in + let { registered_package_id = regpkgid2; locked_version = v2 } = reglock2 in + let comp_pkgid = RegisteredPackageId.compare regpkgid1 regpkgid2 in if comp_pkgid <> 0 then comp_pkgid else SemanticVersion.compare v1 v2 end +module Lock = struct + type t = + | Registered of RegisteredLock.t + | LocalFixed of { absolute_path : abs_path } + [@@deriving show { with_path = false }] + + let compare (lock1 : t) (lock2 : t) : int = + match (lock1, lock2) with + | (Registered(reglock1), Registered(reglock2)) -> + RegisteredLock.compare reglock1 reglock2 + + | (Registered(_), LocalFixed(_)) -> + -1 + + | (LocalFixed{ absolute_path = abspath1 }, LocalFixed{ absolute_path = abspath2 }) -> + AbsPath.compare abspath1 abspath2 + + | (LocalFixed(_), Registered(_)) -> + 1 +end + module LockMap = Map.Make(Lock) type package_dependency_spec = | RegisteredDependency of { - package_id : PackageId.t; - version_requirement : SemanticVersion.requirement; + registered_package_id : RegisteredPackageId.t; + version_requirement : SemanticVersion.requirement; + } + | LocalFixedDependency of { + absolute_path : abs_path; } [@@deriving show { with_path = false }] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 78d1ccb91..4a9d6c87a 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -385,12 +385,18 @@ let update_store_root_config_if_needed (registries : registry_remote RegistryHas let make_lock_name (lock : Lock.t) : lock_name = - let Lock.{ package_id; locked_version } = lock in - let PackageId.{ registry_hash_value; package_name } = package_id in - Printf.sprintf "registered.%s.%s.%s" - registry_hash_value - package_name - (SemanticVersion.to_string locked_version) + match lock with + | Lock.Registered({ registered_package_id; locked_version }) -> + let RegisteredPackageId.{ registry_hash_value; package_name } = registered_package_id in + Printf.sprintf "registered.%s.%s.%s" + registry_hash_value + package_name + (SemanticVersion.to_string locked_version) + + | Lock.LocalFixed{ absolute_path } -> + Printf.sprintf "local.%s" + (get_abs_path_string absolute_path) + (* TODO: fix this *) let make_lock_dependency (dep : locked_dependency) : LockConfig.lock_dependency = @@ -407,7 +413,7 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC let locked_package = LockConfig.{ lock_name = make_lock_name lock; - lock_contents = RegisteredLock(lock); + lock_contents = lock; lock_dependencies = solution.locked_dependencies |> List.map make_lock_dependency; test_only_lock = solution.used_in_test_only; } @@ -684,7 +690,7 @@ let init_document ~(fpath_in : string) = let dir_current = Sys.getcwd () in let abspath_doc = make_absolute_if_relative ~origin:dir_current fpath_in in let abspath_package_config = Constant.document_package_config_path ~doc:abspath_doc in - let absdir = make_abs_path (Filename.dirname (get_abs_path_string abspath_doc)) in + let absdir = dirname abspath_doc in let* () = assert_nonexistence abspath_doc in let* () = assert_nonexistence abspath_package_config in @@ -874,7 +880,9 @@ let solve ~(fpath_in : string) = PackageRegistryConfig.load abspath_registry_config in packages |> foldM (fun package_id_to_impl_list (package_name, impls) -> - let package_id = PackageId.{ registry_hash_value; package_name } in + let package_id = + PackageId.Registered(RegisteredPackageId.{ registry_hash_value; package_name }) + in if package_id_to_impl_list |> PackageIdMap.mem package_id then err @@ MultiplePackageDefinition{ package_name } else @@ -1007,14 +1015,22 @@ let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.loc LockConfig.{ lock_name; lock_dependencies; - lock_contents = RegisteredLock(lock); + lock_contents; test_only_lock; } = locked_package in + let envelope_path = + match lock_contents with + | Lock.Registered(reglock) -> + get_abs_path_string (Constant.registered_lock_envelope_config ~store_root reglock) + + | LocalFixed{ absolute_path } -> + get_abs_path_string absolute_path + in let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in { envelope_name = lock_name; - envelope_path = get_abs_path_string (Constant.lock_envelope_config ~store_root lock); + envelope_path; envelope_dependencies; test_only_envelope = test_only_lock; } diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index 20394cd0d..b93edf3bc 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -80,6 +80,10 @@ let append_to_abs_directory (absdir : abs_path) (filename : string) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir) filename) +let dirname (abspath : abs_path) : abs_path = + make_abs_path (Filename.dirname (get_abs_path_string abspath)) + + let read_file (abspath : abs_path) : (string, string) result = let open ResultMonad in try diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index 91152acff..dd7847d5e 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -38,6 +38,8 @@ val make_absolute_if_relative : origin:string -> string -> abs_path val append_to_abs_directory : abs_path -> string -> abs_path +val dirname : abs_path -> abs_path + val is_directory : abs_path -> bool val encode_yaml : Yaml.value -> string From 02183361da852fa12ceba1af15d2fe4df14e4aba Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 14 Feb 2024 08:48:18 +0900 Subject: [PATCH 112/381] introduce `LocalFixedRole` etc. --- src-saphe/packageConstraintSolver.ml | 100 +++++++++++++++++++++------ 1 file changed, 80 insertions(+), 20 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index 56a2bbbce..7f911442a 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -1,5 +1,6 @@ open PackageSystemBase +open MyUtil module SolverInput = struct @@ -11,6 +12,10 @@ module SolverInput = struct requires : package_dependency list; context : package_context; } + | LocalFixedRole of { + absolute_path : abs_path; + context : package_context; + } | RegisteredRole of { registered_package_id : RegisteredPackageId.t; compatibility : string; @@ -23,6 +28,9 @@ module SolverInput = struct | TargetRole(_) -> Format.fprintf ppf "target" + | LocalFixedRole{ absolute_path; _ } -> + Format.fprintf ppf "local '%s'" (get_abs_path_string absolute_path) + | RegisteredRole{ registered_package_id; _ } -> let RegisteredPackageId.{ package_name; _ } = registered_package_id in Format.fprintf ppf "%s" package_name @@ -39,6 +47,16 @@ module SolverInput = struct | (_, TargetRole(_)) -> -1 + | ( LocalFixedRole{ absolute_path = abspath1; _ }, + LocalFixedRole{ absolute_path = abspath2; _ }) -> + AbsPath.compare abspath1 abspath2 + + | (LocalFixedRole(_), _) -> + 1 + + | (_, LocalFixedRole(_)) -> + -1 + | ( RegisteredRole{ registered_package_id = regpkgid1; compatibility = c1; _ }, RegisteredRole{ registered_package_id = regpkgid2; compatibility = c2; _ }) -> begin @@ -56,13 +74,15 @@ module SolverInput = struct (* Unused *) type command_name = string - type restriction = SemanticVersion.requirement + type restriction = + | VersionRequirement of SemanticVersion.requirement + | AsIs type dependency = | Dependency of { - role : Role.t; - used_as : string; - version_requirement : SemanticVersion.requirement; + role : Role.t; + used_as : string; + restriction : restriction; } type dep_info = { @@ -81,6 +101,10 @@ module SolverInput = struct | TargetImpl of { dependencies : dependency list; } + | LocalFixedImpl of { + absolute_path : abs_path; + dependencies : dependency list; + } | Impl of { package_name : package_name; version : SemanticVersion.t; @@ -110,6 +134,9 @@ module SolverInput = struct | TargetImpl(_) -> Format.fprintf ppf "target" + | LocalFixedImpl{ absolute_path; _ } -> + Format.fprintf ppf "local '%s'" (get_abs_path_string absolute_path) + | Impl{ package_name; version; _ } -> Format.fprintf ppf "%s %s" package_name (SemanticVersion.to_string version) @@ -127,6 +154,7 @@ module SolverInput = struct match impl with | DummyImpl -> Format.fprintf ppf "dummy" | TargetImpl(_) -> Format.fprintf ppf "target" + | LocalFixedImpl(_) -> Format.fprintf ppf "as-is" | Impl{ version; _ } -> Format.fprintf ppf "%s" (SemanticVersion.to_string version) @@ -142,9 +170,10 @@ module SolverInput = struct let requires (_role : Role.t) (impl : impl) : dependency list * command_name list = match impl with - | DummyImpl -> ([], []) - | TargetImpl{ dependencies } -> (dependencies, []) - | Impl{ dependencies; _ } -> (dependencies, []) + | DummyImpl -> ([], []) + | TargetImpl{ dependencies } -> (dependencies, []) + | LocalFixedImpl{ dependencies; _} -> (dependencies, []) + | Impl{ dependencies; _ } -> (dependencies, []) (* Unused *) @@ -168,7 +197,7 @@ module SolverInput = struct context; } in - Dependency{ role; used_as; version_requirement } + Dependency{ role; used_as; restriction = VersionRequirement(version_requirement) } ) @@ -183,10 +212,11 @@ module SolverInput = struct SemanticVersion.get_compatibility_unit semver in let role = Role.RegisteredRole{ registered_package_id; compatibility; context } in - Dependency{ role; used_as; version_requirement } + Dependency{ role; used_as; restriction = VersionRequirement(version_requirement) } - | LocalFixedDependency{ absolute_path = _ } -> - failwith "TODO: make_internal_dependency, LocalFixedDependency" + | LocalFixedDependency{ absolute_path } -> + let role = Role.LocalFixedRole{ absolute_path; context } in + Dependency{ role; used_as; restriction = AsIs } ) @@ -216,6 +246,11 @@ module SolverInput = struct in { replacement = None; impls } + | LocalFixedRole{ absolute_path; context = _ } -> + let dependencies = failwith "TODO: implementations, LocalFixedRole, dependencies" in + let impls = [ LocalFixedImpl{ absolute_path; dependencies } ] in + { replacement = None; impls } + | TargetRole{ requires; context } -> let dependencies = make_internal_dependency context requires in let impls = [ TargetImpl{ dependencies } ] in @@ -223,8 +258,8 @@ module SolverInput = struct let restrictions (dep : dependency) : restriction list = - let Dependency{ version_requirement; _ } = dep in - [ version_requirement ] + let Dependency{ restriction; _ } = dep in + [ restriction ] let meets_restriction (impl : impl) (restr : restriction) : bool = @@ -235,11 +270,21 @@ module SolverInput = struct | TargetImpl(_) -> true + | LocalFixedImpl(_) -> + begin + match restr with + | AsIs -> true + | _ -> false + end + | Impl{ version = semver_provided; _} -> begin match restr with - | CompatibleWith(semver_required) -> + | VersionRequirement(SemanticVersion.CompatibleWith(semver_required)) -> SemanticVersion.is_compatible ~old:semver_required ~new_:semver_provided + + | AsIs -> + false end @@ -250,7 +295,7 @@ module SolverInput = struct let conflict_class (impl : impl) : conflict_class list = match impl with - | DummyImpl | TargetImpl(_) -> + | DummyImpl | TargetImpl(_) | LocalFixedImpl(_) -> [ "*" ] | Impl{ package_name; version; _ } -> @@ -272,6 +317,10 @@ module SolverInput = struct | (TargetImpl(_), _) -> 1 | (_, TargetImpl(_)) -> -1 + | (LocalFixedImpl(_), LocalFixedImpl(_)) -> 0 + | (LocalFixedImpl(_), _) -> 1 + | (_, LocalFixedImpl(_)) -> -1 + | (Impl{ version = semver1; _ }, Impl{ version = semver2; _ }) -> SemanticVersion.compare semver1 semver2 @@ -286,7 +335,11 @@ module SolverInput = struct let string_of_restriction (restr : restriction) : string = match restr with - | CompatibleWith(semver) -> SemanticVersion.to_string semver + | VersionRequirement(SemanticVersion.CompatibleWith(semver)) -> + Printf.sprintf "^%s" (SemanticVersion.to_string semver) + + | AsIs -> + "as-is" let describe_problem (_impl : impl) (_rej : rejection) : string = @@ -352,6 +405,9 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla | DummyImpl | TargetImpl(_) -> acc + | LocalFixedImpl(_) -> + acc (* TODO: reconsider this *) + | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in let package_id = PackageId.Registered(registered_package_id) in @@ -390,10 +446,17 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla dependencies |> List.fold_left (fun (locked_dependency_acc, graph) dep -> let Dependency{ role = role_dep; used_as; _ } = dep in match role_dep with + | TargetRole(_) -> + (locked_dependency_acc, graph) + + | LocalFixedRole(_) -> + (locked_dependency_acc, graph) + (* TODO: reconsider this *) + | RegisteredRole{ registered_package_id = registered_package_id_dep; _ } -> let lock_dep = match rolemap |> Output.RoleMap.find_opt role_dep |> Option.map Output.unwrap with - | None | Some(DummyImpl) | Some(TargetImpl(_)) -> + | None | Some(DummyImpl) | Some(TargetImpl(_)) | Some(LocalFixedImpl(_)) -> assert false | Some(Impl{ version = version_dep; _ }) -> @@ -417,9 +480,6 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let graph = graph |> LockDependencyGraph.add_edge ~from:vertex ~to_:vertex_dep in (locked_dependency_acc, graph) - | TargetRole(_) -> - (locked_dependency_acc, graph) - ) (Alist.empty, graph) in let locked_dependencies = Alist.to_list locked_dependency_acc in From c746e1cbe1088133a89b81ae1c11945b8be0cd48 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 14 Feb 2024 10:03:18 +0900 Subject: [PATCH 113/381] add `local_fixed_dependencies` to `package_context` --- src-saphe/packageConstraintSolver.ml | 13 +++++++++---- src-saphe/packageSystemBase.ml | 9 +++++++-- src-saphe/sapheMain.ml | 26 ++++++++++++++------------ 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index 7f911442a..ad3b6e2b8 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -225,8 +225,8 @@ module SolverInput = struct | RegisteredRole{ registered_package_id; compatibility; context } -> let RegisteredPackageId.{ package_name; registry_hash_value } = registered_package_id in let impl_records = - context.package_id_to_impl_list - |> PackageIdMap.find_opt (PackageId.Registered(registered_package_id)) + context.registered_package_impls + |> RegisteredPackageIdMap.find_opt registered_package_id |> Option.value ~default:[] in let impls = @@ -246,8 +246,13 @@ module SolverInput = struct in { replacement = None; impls } - | LocalFixedRole{ absolute_path; context = _ } -> - let dependencies = failwith "TODO: implementations, LocalFixedRole, dependencies" in + | LocalFixedRole{ absolute_path; context } -> + let requires = + match context.local_fixed_dependencies |> LocalFixedPackageIdMap.find_opt absolute_path with + | None -> assert false + | Some(requires) -> requires + in + let dependencies = make_internal_dependency context requires in let impls = [ LocalFixedImpl{ absolute_path; dependencies } ] in { replacement = None; impls } diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 865f09885..06e647ec2 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -77,6 +77,10 @@ module PackageId = struct -1 end +module RegisteredPackageIdMap = Map.Make(RegisteredPackageId) + +module LocalFixedPackageIdMap = Map.Make(AbsPath) + module PackageIdMap = Map.Make(PackageId) module PackageIdSet = Set.Make(PackageId) @@ -169,8 +173,9 @@ type implementation_record = } type package_context = { - language_version : SemanticVersion.t; - package_id_to_impl_list : (implementation_record list) PackageIdMap.t; + language_version : SemanticVersion.t; + registered_package_impls : (implementation_record list) RegisteredPackageIdMap.t; + local_fixed_dependencies : (package_dependency list) LocalFixedPackageIdMap.t; } type locked_dependency = { diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 4a9d6c87a..071df9453 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -836,6 +836,10 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; + let local_fixed_dependencies = + failwith "TODO: construct local_fixed_dependencies by traversing local fixed dependencies" + in + (* Arranges the store root config: *) let* absdir_store_root = get_store_root () in let abspath_store_root_config = Constant.store_root_config_path ~store_root:absdir_store_root in @@ -846,8 +850,8 @@ let solve ~(fpath_in : string) = end; (* Constructs a map that associates a package with its implementations: *) - let* package_id_to_impl_list = - registry_remotes |> foldM (fun package_id_to_impl_list registry_remote -> + let* registered_package_impls = + registry_remotes |> foldM (fun registered_package_impls registry_remote -> let* registry_hash_value = ConfigUtil.make_registry_hash_value registry_remote in (* Manupulates the store root config: *) @@ -872,27 +876,25 @@ let solve ~(fpath_in : string) = if created then Logging.package_registry_updated ~created:true absdir_registry_repo end; - (* Loads the registry config and grows `package_id_to_impl_list`: *) + (* Loads the registry config and grows `registered_package_impls`: *) let* PackageRegistryConfig.{ packages } = let abspath_registry_config = Constant.package_registry_config_path ~registry_dir:absdir_registry_repo in PackageRegistryConfig.load abspath_registry_config in - packages |> foldM (fun package_id_to_impl_list (package_name, impls) -> - let package_id = - PackageId.Registered(RegisteredPackageId.{ registry_hash_value; package_name }) - in - if package_id_to_impl_list |> PackageIdMap.mem package_id then + packages |> foldM (fun registered_package_impls (package_name, impls) -> + let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in + if registered_package_impls |> RegisteredPackageIdMap.mem registered_package_id then err @@ MultiplePackageDefinition{ package_name } else - return (package_id_to_impl_list |> PackageIdMap.add package_id impls) - ) package_id_to_impl_list + return (registered_package_impls |> RegisteredPackageIdMap.add registered_package_id impls) + ) registered_package_impls - ) PackageIdMap.empty + ) RegisteredPackageIdMap.empty in - let package_context = { language_version; package_id_to_impl_list } in + let package_context = { language_version; registered_package_impls; local_fixed_dependencies } in let solutions_opt = PackageConstraintSolver.solve package_context dependencies_with_flags in begin match solutions_opt with From 2984b008253b33d6d75e57b521f87440def4ba4f Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Wed, 14 Feb 2024 11:44:26 +0900 Subject: [PATCH 114/381] improve `AbsPath` about normalization --- src-util/absPath.ml | 102 +++++++++++++++++++++++++++++++++++++ src-util/absPath.mli | 11 ++++ src-util/myUtil.ml | 21 +++----- src-util/myUtil.mli | 8 +-- src-util/optionMonad.ml | 15 ++++++ src-util/optionMonad.mli | 3 ++ test/common/absPathTest.ml | 17 +++++++ test/common/commonTest.ml | 1 + 8 files changed, 157 insertions(+), 21 deletions(-) create mode 100644 src-util/absPath.ml create mode 100644 src-util/absPath.mli create mode 100644 test/common/absPathTest.ml diff --git a/src-util/absPath.ml b/src-util/absPath.ml new file mode 100644 index 000000000..b0777495c --- /dev/null +++ b/src-util/absPath.ml @@ -0,0 +1,102 @@ + +(* TODO: separate UTF-8-related functions to one module *) +let decode_utf8 (str_utf8 : string) : Uchar.t list = + let decoder = Uutf.decoder ~encoding:`UTF_8 (`String(str_utf8)) in + let rec loop (uchacc : Uchar.t Alist.t) = + match Uutf.decode decoder with + | `Await -> assert false + | `End -> Alist.to_list uchacc + | `Malformed(_) -> assert false + | `Uchar(uch) -> loop (Alist.extend uchacc uch) + in + loop Alist.empty + + +let encode_utf8 (uchs : Uchar.t list) : string = + let buffer = Buffer.create (List.length uchs * 4) in + let encoder = Uutf.encoder `UTF_8 (`Buffer(buffer)) in + uchs |> List.iter (fun uch -> Uutf.encode encoder (`Uchar(uch)) |> ignore); + Uutf.encode encoder `End |> ignore; + Buffer.contents buffer + + +(** the type for components each of which stand for a single directory. *) +type component = string +[@@deriving show { with_path = false }] + +type t = AbsPath of component list +[@@deriving show { with_path = false }] + +type non_normal_component = + | Component of component + | Current + | Parent +[@@deriving show { with_path = false }] + + +let make_non_normal_components (uchs : Uchar.t list) : non_normal_component = + match encode_utf8 uchs with + | "" | "." -> Current + | ".." -> Parent + | s -> Component(s) + + +let rec separate_to_non_normal_components (ncompoacc : non_normal_component Alist.t) (uchacc : Uchar.t Alist.t) (uchs : Uchar.t list) : non_normal_component list = + match uchs with + | [] -> + let ncompo_last = make_non_normal_components (Alist.to_list uchacc) in + Alist.to_list (Alist.extend ncompoacc ncompo_last) + + | uch_first :: uchs_rest -> + if Uchar.equal uch_first (Uchar.of_char '/') then + let ncompo = make_non_normal_components (Alist.to_list uchacc) in + separate_to_non_normal_components + (Alist.extend ncompoacc ncompo) + Alist.empty + uchs_rest + else + separate_to_non_normal_components + ncompoacc + (Alist.extend uchacc uch_first) + uchs_rest + + +let normalize (ncompos : non_normal_component list) : (component list) option = + let open OptionMonad in + let* compoacc = + ncompos |> foldM (fun compoacc ncompo -> + match ncompo with + | Current -> return compoacc + | Parent -> Alist.chop_last compoacc >>= fun (compoacc, _) -> return compoacc + | Component(compo) -> return (Alist.extend compoacc compo) + ) Alist.empty + in + return (Alist.to_list compoacc) + + +let of_string_exn (s : string) : t = + let uchs = decode_utf8 s in + match uchs with + | [] -> + assert false + + | uch_first :: uchs_rest -> + if Uchar.equal uch_first (Uchar.of_char '/') then + let ncompos = separate_to_non_normal_components Alist.empty Alist.empty uchs_rest in + Format.printf "%a\n" (Format.pp_print_list ~pp_sep:(fun ppf () -> Format.fprintf ppf "|") pp_non_normal_component) ncompos; (* TODO: remove this *) + match normalize ncompos with + | None -> assert false + | Some(compos) -> AbsPath(compos) + else + assert false + + +let to_string (AbsPath(compos) : t) : string = + Printf.sprintf "/%s" (String.concat "/" compos) + + +let to_components (AbsPath(compos) : t) = compos + + +let compare (AbsPath(compos1)) (AbsPath(compos2)) = + List.compare String.compare compos1 compos2 diff --git a/src-util/absPath.mli b/src-util/absPath.mli new file mode 100644 index 000000000..0b69eeffe --- /dev/null +++ b/src-util/absPath.mli @@ -0,0 +1,11 @@ + +type t +[@@deriving show] + +val of_string_exn : string -> t + +val to_string : t -> string + +val to_components : t -> string list + +val compare : t -> t -> int diff --git a/src-util/myUtil.ml b/src-util/myUtil.ml index b93edf3bc..96169e6c0 100644 --- a/src-util/myUtil.ml +++ b/src-util/myUtil.ml @@ -41,36 +41,29 @@ let ( @|> ) = ( |> ) ---- *) -type abs_path = AbsPath of string +type abs_path = AbsPath.t [@@deriving show { with_path = false }] type lib_path = LibPath of string -let open_in_abs (AbsPath(pathstr)) = - Stdlib.open_in pathstr +let open_in_abs (abspath : abs_path) = + Stdlib.open_in (AbsPath.to_string abspath) -let basename_abs (AbsPath(pathstr)) = - Filename.basename pathstr +let basename_abs (abspath : abs_path) = + Filename.basename (AbsPath.to_string abspath) -let make_abs_path pathstr = AbsPath(pathstr) +let make_abs_path pathstr = AbsPath.of_string_exn pathstr let make_lib_path pathstr = LibPath(pathstr) -let get_abs_path_string (AbsPath(pathstr)) = pathstr +let get_abs_path_string = AbsPath.to_string let get_lib_path_string (LibPath(pathstr)) = pathstr -module AbsPath = struct - type t = abs_path - - let compare ap1 ap2 = String.compare (get_abs_path_string ap1) (get_abs_path_string ap2) -end - - let make_absolute_if_relative ~(origin : string) (s : string) : abs_path = let abspath_str = if Filename.is_relative s then Filename.concat origin s else s in make_abs_path abspath_str diff --git a/src-util/myUtil.mli b/src-util/myUtil.mli index dd7847d5e..f8a1effae 100644 --- a/src-util/myUtil.mli +++ b/src-util/myUtil.mli @@ -1,7 +1,7 @@ exception RemainsToBeImplemented of string -type abs_path +type abs_path = AbsPath.t [@@deriving show] type lib_path @@ -28,12 +28,6 @@ val get_abs_path_string : abs_path -> string val get_lib_path_string : lib_path -> string -module AbsPath : sig - type t = abs_path - - val compare : t -> t -> int -end - val make_absolute_if_relative : origin:string -> string -> abs_path val append_to_abs_directory : abs_path -> string -> abs_path diff --git a/src-util/optionMonad.ml b/src-util/optionMonad.ml index 4e4cc2246..7a078d30f 100644 --- a/src-util/optionMonad.ml +++ b/src-util/optionMonad.ml @@ -4,3 +4,18 @@ let ( >>= ) x f = | Some(v) -> f v let return v = Some(v) + +let ( let* ) = ( >>= ) + +let foldM f acc vs = + vs |> List.fold_left (fun res v -> + res >>= fun acc -> + f acc v + ) (return acc) + +let mapM f vs = + vs |> foldM (fun acc v -> + f v >>= fun y -> + return @@ Alist.extend acc y + ) Alist.empty >>= fun acc -> + return (Alist.to_list acc) diff --git a/src-util/optionMonad.mli b/src-util/optionMonad.mli index df45628a8..3f77fb5be 100644 --- a/src-util/optionMonad.mli +++ b/src-util/optionMonad.mli @@ -1,2 +1,5 @@ val ( >>= ) : 'a option -> ('a -> 'b option) -> 'b option val return : 'a -> 'a option +val ( let* ) : 'a option -> ('a -> 'b option) -> 'b option +val foldM : ('a -> 'b -> 'a option) -> 'a -> 'b list -> 'a option +val mapM : ('a -> 'b option) -> 'a list -> ('b list) option diff --git a/test/common/absPathTest.ml b/test/common/absPathTest.ml new file mode 100644 index 000000000..036e5372b --- /dev/null +++ b/test/common/absPathTest.ml @@ -0,0 +1,17 @@ + +let of_string_exn_test () = + List.iter (fun (input, expected) -> + let got = AbsPath.to_components (AbsPath.of_string_exn input) in + Alcotest.(check (list string)) "of_string_exn" expected got + ) [ + ("/foo/bar/baz.txt", ["foo"; "bar"; "baz.txt"]); + ("/foo//bar/baz.txt", ["foo"; "bar"; "baz.txt"]); + ("/foo/./bar/baz.txt", ["foo"; "bar"; "baz.txt"]); + ("/foo/../bar/baz.txt", ["bar"; "baz.txt"]); + ] + + +let test_cases = + Alcotest.[ + test_case "of_string_exn" `Quick of_string_exn_test; + ] diff --git a/test/common/commonTest.ml b/test/common/commonTest.ml index 609116181..159349fe9 100644 --- a/test/common/commonTest.ml +++ b/test/common/commonTest.ml @@ -3,4 +3,5 @@ let () = let open Alcotest in run "SATySFi-Util Test" [ ("DependencyGraph", DependencyGraphTest.test_cases); + ("AbsPath", AbsPathTest.test_cases); ] From 63ea282210b9944e5f975dc789744c6370c1ca29 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 01:21:06 +0900 Subject: [PATCH 115/381] update tests and add mistakenly ignored tests --- .gitignore | 4 +- src-saphe/sapheMain.ml | 3 +- test/saphe/dune | 5 + test/saphe/packageConfigTest.ml | 83 +++++++++++ test/saphe/packageConstraintSolverTest.ml | 163 ++++++++++++++++++++++ test/saphe/sapheTest.ml | 7 + test/saphe/sapheTestUtil.ml | 5 + 7 files changed, 267 insertions(+), 3 deletions(-) create mode 100644 test/saphe/dune create mode 100644 test/saphe/packageConfigTest.ml create mode 100644 test/saphe/packageConstraintSolverTest.ml create mode 100644 test/saphe/sapheTest.ml create mode 100644 test/saphe/sapheTestUtil.ml diff --git a/.gitignore b/.gitignore index fbb73640b..955bfadc2 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,8 @@ obsolete/*.txt old/ *.png -satysfi -saphe +/satysfi +/saphe *.ttf *.otf *.ttc diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 071df9453..f6516ed4e 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -837,7 +837,8 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; let local_fixed_dependencies = - failwith "TODO: construct local_fixed_dependencies by traversing local fixed dependencies" + LocalFixedPackageIdMap.empty + (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) in (* Arranges the store root config: *) diff --git a/test/saphe/dune b/test/saphe/dune new file mode 100644 index 000000000..f44a146e9 --- /dev/null +++ b/test/saphe/dune @@ -0,0 +1,5 @@ +(test + (name sapheTest) + (libraries + sapheMain + alcotest)) diff --git a/test/saphe/packageConfigTest.ml b/test/saphe/packageConfigTest.ml new file mode 100644 index 000000000..dc730371d --- /dev/null +++ b/test/saphe/packageConfigTest.ml @@ -0,0 +1,83 @@ + +open SapheTestUtil +open SapheMain__ConfigError +open SapheMain__PackageSystemBase +module PackageConfig = SapheMain__PackageConfig + + +let input1 = {yaml| +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "stdlib" +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "Stdlib" + source_directories: + - "./src" + test_directories: + - "./test" + dependencies: [] + test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" +|yaml} + + +let expected1 = + ParsedPackageConfig{ + language_requirement = SemanticVersion.CompatibleWith(make_version "0.1.0"); + package_name = "stdlib"; + package_authors = ["Takashi Suwa"]; + external_resources = []; + package_contents = + ParsedLibrary{ + main_module_name = "Stdlib"; + source_directories = [ "./src" ]; + test_directories = [ "./test" ]; + dependencies = []; + test_dependencies = [ + ParsedPackageDependency{ + used_as = "Testing"; + spec = + ParsedRegisteredDependency{ + package_name = "testing"; + registry_local_name = "default"; + version_requirement = SemanticVersion.CompatibleWith(make_version "0.0.1"); + }; + }; + ]; + markdown_conversion = None; + }; + registry_specs = [ + ("default", GitRegistry{ + url = "https://github.com/SATySFi/default-registry"; + branch = "temp-dev-saphe"; + }); + ]; + } + + +let parsed_package_config = Alcotest.of_pp pp_parsed_package_config +let yaml_error = Alcotest.of_pp pp_yaml_error + + +let parse_test_1 () = + let got = PackageConfig.parse input1 in + let expected = Ok(expected1) in + Alcotest.(check (result parsed_package_config yaml_error)) "parse" expected got + + +let test_cases = + Alcotest.[ + test_case "parse 1" `Quick parse_test_1; + ] diff --git a/test/saphe/packageConstraintSolverTest.ml b/test/saphe/packageConstraintSolverTest.ml new file mode 100644 index 000000000..07e1993d1 --- /dev/null +++ b/test/saphe/packageConstraintSolverTest.ml @@ -0,0 +1,163 @@ + +open SapheTestUtil +open SapheMain__PackageSystemBase +module Constant = SapheMain__Constant +module PackageConstraintSolver = SapheMain__PackageConstraintSolver + + +let registry_hash_value = + "c0bebeef4423" + + +let language_version = + make_version "0.1.0" + + +let make_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency = + PackageDependency{ + used_as; + spec = + RegisteredDependency{ + registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value }; + version_requirement = SemanticVersion.CompatibleWith(make_version s_version); + }; + } + + +let make_dependency_in_registry ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency_in_registry = + PackageDependencyInRegistry{ + used_as; + package_name; + version_requirement = SemanticVersion.CompatibleWith(make_version s_version); + } + + +let make_impl (s_version : string) (deps : package_dependency_in_registry list) : implementation_record = + ImplRecord{ + version = make_version s_version; + source = NoSource; + language_requirement = SemanticVersion.CompatibleWith(language_version); + dependencies = deps; + } + + +let make_registered_lock (package_name : package_name) (s_version : string) : RegisteredLock.t = + RegisteredLock.{ + registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value }; + locked_version = make_version s_version; + } + + +let make_locked_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : locked_dependency = + { + depended_lock = Lock.Registered(make_registered_lock package_name s_version); + dependency_used_as = used_as; + } + + +let make_solution ?(explicitly_depended : string option) ?(test_only : bool = false) (package_name : package_name) (s_version : string) (deps : locked_dependency list) : package_solution = + { + lock = Lock.Registered(make_registered_lock package_name s_version); + locked_source = NoSource; + locked_dependencies = deps; + used_in_test_only = test_only; + explicitly_depended; + explicitly_test_depended = None; + } + + +let check package_context dependencies_with_flags expected = + let got = PackageConstraintSolver.solve package_context dependencies_with_flags in + Alcotest.(check (option (list (of_pp pp_package_solution)))) "solutions" expected got + + +let make_registered_package_impls = + List.fold_left (fun map (package_name, impls) -> + let registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value } in + map |> RegisteredPackageIdMap.add registered_package_id impls + ) RegisteredPackageIdMap.empty + + +let solve_test_1 () = + let package_context = + let local_fixed_dependencies = LocalFixedPackageIdMap.empty in + let registered_package_impls = + make_registered_package_impls [ + ("foo", [ + make_impl "1.0.0" []; + make_impl "2.0.0" []; + ]); + ("bar", [ + make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"Foo" "foo" "2.0.0" ]; + ]); + ("qux", [ + make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"Foo" "foo" "1.0.0" ]; + ]); + ] + in + { language_version; local_fixed_dependencies; registered_package_impls } + in + let dependencies_with_flags = + [ + (SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0"); + (SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0"); + ] + in + let expected = + Some([ + make_solution ~explicitly_depended:"Bar" + "bar" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "2.0.0" ]; + make_solution + "foo" "1.0.0" []; + make_solution + "foo" "2.0.0" []; + make_solution ~explicitly_depended:"Qux" + "qux" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "1.0.0" ]; + ]) + in + check package_context dependencies_with_flags expected + + +let solve_test_2 () = + let package_context = + let local_fixed_dependencies = LocalFixedPackageIdMap.empty in + let registered_package_impls = + make_registered_package_impls [ + ("foo", [ + make_impl "1.0.0" []; + make_impl "1.1.0" []; + ]); + ("bar", [ + make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"FooA" "foo" "1.1.0" ]; + ]); + ("qux", [ + make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"FooB" "foo" "1.0.0" ]; + ]); + ] + in + { language_version; local_fixed_dependencies; registered_package_impls } + in + let dependencies_with_flags = + [ + (SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0"); + (SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0"); + ] + in + let expected = + Some([ + make_solution ~explicitly_depended:"Bar" + "bar" "1.0.0" [ make_locked_dependency ~used_as:"FooA" "foo" "1.1.0" ]; + make_solution + "foo" "1.1.0" []; + make_solution ~explicitly_depended:"Qux" + "qux" "1.0.0" [ make_locked_dependency ~used_as:"FooB" "foo" "1.1.0" ]; + ]) + in + check package_context dependencies_with_flags expected + + +let test_cases = + Alcotest.[ + test_case "solve 1" `Quick solve_test_1; + test_case "solve 2" `Quick solve_test_2; + ] diff --git a/test/saphe/sapheTest.ml b/test/saphe/sapheTest.ml new file mode 100644 index 000000000..1511687cf --- /dev/null +++ b/test/saphe/sapheTest.ml @@ -0,0 +1,7 @@ + +let () = + let open Alcotest in + run "Saphe Test" [ + ("PackageConfig", PackageConfigTest.test_cases); + ("PackageConstraintSolver", PackageConstraintSolverTest.test_cases); + ] diff --git a/test/saphe/sapheTestUtil.ml b/test/saphe/sapheTestUtil.ml new file mode 100644 index 000000000..28b2d5850 --- /dev/null +++ b/test/saphe/sapheTestUtil.ml @@ -0,0 +1,5 @@ + +let make_version (s_version : string) : SemanticVersion.t = + match SemanticVersion.parse s_version with + | Some(semver) -> semver + | None -> assert false From 986f0c88c56396ce6ea27ab644ab48b6cdc3e55d Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 01:34:06 +0900 Subject: [PATCH 116/381] disable debug prints in `AbsPath` --- src-util/absPath.ml | 1 - 1 file changed, 1 deletion(-) diff --git a/src-util/absPath.ml b/src-util/absPath.ml index b0777495c..0f65aa772 100644 --- a/src-util/absPath.ml +++ b/src-util/absPath.ml @@ -83,7 +83,6 @@ let of_string_exn (s : string) : t = | uch_first :: uchs_rest -> if Uchar.equal uch_first (Uchar.of_char '/') then let ncompos = separate_to_non_normal_components Alist.empty Alist.empty uchs_rest in - Format.printf "%a\n" (Format.pp_print_list ~pp_sep:(fun ppf () -> Format.fprintf ppf "|") pp_non_normal_component) ncompos; (* TODO: remove this *) match normalize ncompos with | None -> assert false | Some(compos) -> AbsPath(compos) From 65c8857892630d90c9eb5a1c146565a91213502a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 01:50:40 +0900 Subject: [PATCH 117/381] start to develop `LocalFixedPackageCollector` --- src-saphe/localFixedPackageCollector.ml | 7 +++++++ src-saphe/sapheMain.ml | 3 +-- src-util/absPath.ml | 1 - 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 src-saphe/localFixedPackageCollector.ml diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml new file mode 100644 index 000000000..485e33942 --- /dev/null +++ b/src-saphe/localFixedPackageCollector.ml @@ -0,0 +1,7 @@ + +open PackageSystemBase + + +let main (_deps_with_flags : (dependency_flag * package_dependency) list) : (package_dependency list) LocalFixedPackageIdMap.t = + LocalFixedPackageIdMap.empty + (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index f6516ed4e..1a6b956ae 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -837,8 +837,7 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; let local_fixed_dependencies = - LocalFixedPackageIdMap.empty - (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) + LocalFixedPackageCollector.main dependencies_with_flags in (* Arranges the store root config: *) diff --git a/src-util/absPath.ml b/src-util/absPath.ml index 0f65aa772..d75392266 100644 --- a/src-util/absPath.ml +++ b/src-util/absPath.ml @@ -31,7 +31,6 @@ type non_normal_component = | Component of component | Current | Parent -[@@deriving show { with_path = false }] let make_non_normal_components (uchs : Uchar.t list) : non_normal_component = From 4d5f3214f1f59504f48ff76bd3d997a07cb482be Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 02:24:50 +0900 Subject: [PATCH 118/381] implement `LocalFixedPackageCollector` --- src-saphe/configError.ml | 3 ++ src-saphe/localFixedPackageCollector.ml | 50 ++++++++++++++++++++++++- src-saphe/sapheMain.ml | 10 ++++- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 2779d0140..acb331f87 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -148,3 +148,6 @@ type config_error = path : abs_path; message : string; } + | NotALibraryLocalFixed of { + dir : abs_path; + } diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml index 485e33942..4ef9deead 100644 --- a/src-saphe/localFixedPackageCollector.ml +++ b/src-saphe/localFixedPackageCollector.ml @@ -1,7 +1,53 @@ +open MyUtil open PackageSystemBase +open ConfigError -let main (_deps_with_flags : (dependency_flag * package_dependency) list) : (package_dependency list) LocalFixedPackageIdMap.t = - LocalFixedPackageIdMap.empty +type collection = (package_dependency list) LocalFixedPackageIdMap.t + + +let get_dependencies (absdir_package : abs_path) : (package_dependency list, config_error) result = + let open ResultMonad in + let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in + let* + PackageConfig.{ + language_requirement = _; (* TODO: check that this requirement meets the selected language version *) + package_contents; + registry_remotes = _; (* TODO: append to the target's `registry_remotes` *) + _ + } = PackageConfig.load abspath_package_config + in + match package_contents with + | PackageConfig.Library{ dependencies; _ } -> + (* Ignores `test_dependencies` here. *) + return dependencies + + | PackageConfig.Font(_) -> + return [] + + | PackageConfig.Document(_) -> + err @@ NotALibraryLocalFixed{ dir = absdir_package } + + +let rec aux (gained : collection) (deps : package_dependency list) : (collection, config_error) result = + let open ResultMonad in + deps |> foldM (fun gained dep -> + let PackageDependency{ spec; _ } = dep in + match spec with + | RegisteredDependency(_) -> + return gained + + | LocalFixedDependency{ absolute_path } -> + if gained |> LocalFixedPackageIdMap.mem absolute_path then + return gained + else + let* deps_sub = get_dependencies absolute_path in + let gained = gained |> LocalFixedPackageIdMap.add absolute_path deps_sub in + aux gained deps_sub + ) gained + + +let main (deps : package_dependency list) : (collection, config_error) result = + aux LocalFixedPackageIdMap.empty deps (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 1a6b956ae..d6ea2a33c 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -353,6 +353,12 @@ let report_config_error = function DisplayLine(message); ] + | NotALibraryLocalFixed{ dir = absdir_package } -> + report_error [ + NormalLine(Printf.sprintf "the following local package is not a library:"); + DisplayLine(get_abs_path_string absdir_package); + ] + type solve_input = | PackageSolveInput of { @@ -836,8 +842,8 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; - let local_fixed_dependencies = - LocalFixedPackageCollector.main dependencies_with_flags + let* local_fixed_dependencies = + LocalFixedPackageCollector.main (List.map Stdlib.snd dependencies_with_flags) in (* Arranges the store root config: *) From d1e1d43789a41d4d910e5c732f104fb0a2079db0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 04:02:34 +0900 Subject: [PATCH 119/381] add an integration test for local fixed packages --- src-saphe/packageConstraintSolver.ml | 34 +++++++++++++++---- tests/local-fixed/doc.saphe.yaml | 21 ++++++++++++ tests/local-fixed/doc.saty | 13 +++++++ tests/local-fixed/show-value/saphe.yaml | 21 ++++++++++++ .../show-value/src/show-value.satyh | 4 +++ 5 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 tests/local-fixed/doc.saphe.yaml create mode 100644 tests/local-fixed/doc.saty create mode 100644 tests/local-fixed/show-value/saphe.yaml create mode 100644 tests/local-fixed/show-value/src/show-value.satyh diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index ad3b6e2b8..b0bd1c6d8 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -78,6 +78,13 @@ module SolverInput = struct | VersionRequirement of SemanticVersion.requirement | AsIs + let pp_restriction ppf = function + | VersionRequirement(SemanticVersion.CompatibleWith(semver)) -> + Format.fprintf ppf "~%s" (SemanticVersion.to_string semver) + + | AsIs -> + Format.fprintf ppf "AS-IS" + type dependency = | Dependency of { role : Role.t; @@ -85,6 +92,9 @@ module SolverInput = struct restriction : restriction; } + let pp_dependency ppf (Dependency{ role; used_as; restriction }) = + Format.fprintf ppf "%a (used as %s, %a)" Role.pp role used_as pp_restriction restriction + type dep_info = { dep_role : Role.t; dep_importance : [ `Essential | `Recommended | `Restricts ]; @@ -135,7 +145,7 @@ module SolverInput = struct Format.fprintf ppf "target" | LocalFixedImpl{ absolute_path; _ } -> - Format.fprintf ppf "local '%s'" (get_abs_path_string absolute_path) + Format.fprintf ppf "local impl '%s'" (get_abs_path_string absolute_path) | Impl{ package_name; version; _ } -> Format.fprintf ppf "%s %s" package_name (SemanticVersion.to_string version) @@ -168,12 +178,14 @@ module SolverInput = struct { dep_role = role; dep_importance = `Essential; dep_required_commands = [] } - let requires (_role : Role.t) (impl : impl) : dependency list * command_name list = + let requires (role : Role.t) (impl : impl) : dependency list * command_name list = + let (dependencies, cmds) = (* TODO: remove this *) match impl with | DummyImpl -> ([], []) | TargetImpl{ dependencies } -> (dependencies, []) | LocalFixedImpl{ dependencies; _} -> (dependencies, []) | Impl{ dependencies; _ } -> (dependencies, []) + in Format.printf "DEPS: (role: %a) %a ->@,@[ %a@]@," Role.pp role pp_impl impl (Format.pp_print_list pp_dependency) dependencies; (dependencies, cmds) (* TODO: remove this *) (* Unused *) @@ -244,6 +256,7 @@ module SolverInput = struct None ) in + Format.printf "IMPLS: %a =@,@[ %a@]@," Role.pp role (Format.pp_print_list pp_impl) impls; (* TODO: remove this *) { replacement = None; impls } | LocalFixedRole{ absolute_path; context } -> @@ -253,13 +266,15 @@ module SolverInput = struct | Some(requires) -> requires in let dependencies = make_internal_dependency context requires in - let impls = [ LocalFixedImpl{ absolute_path; dependencies } ] in - { replacement = None; impls } + let impl = LocalFixedImpl{ absolute_path; dependencies } in + Format.printf "IMPLS: %a = %a@," Role.pp role pp_impl impl; (* TODO: remove this *) + { replacement = None; impls = [ impl ] } | TargetRole{ requires; context } -> let dependencies = make_internal_dependency context requires in - let impls = [ TargetImpl{ dependencies } ] in - { replacement = None; impls } + let impl = TargetImpl{ dependencies } in + Format.printf "IMPLS: %a = %a@," Role.pp role pp_impl impl; (* TODO: remove this *) + { replacement = None; impls = [ impl ] } let restrictions (dep : dependency) : restriction list = @@ -392,15 +407,20 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla ) (PackageIdMap.empty, PackageIdMap.empty, Alist.empty) in let requires = Alist.to_list dependency_acc in + let target_role = SolverInput.Role.TargetRole{ requires; context } in + Format.printf "@["; (* TODO: remove this *) let output_opt = InternalSolver.do_solve ~closest_match:false { - role = TargetRole{ requires; context }; + role = target_role; command = None; } in + Format.printf "@]"; (* TODO: remove this *) output_opt |> Option.map (fun output -> let open InternalSolver in + Format.printf "EXPLAIN: %s@," (Output.explain output target_role); + (* Adds vertices to the graph: *) let rolemap = output |> Output.to_map in let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = diff --git a/tests/local-fixed/doc.saphe.yaml b/tests/local-fixed/doc.saphe.yaml new file mode 100644 index 000000000..52d673f23 --- /dev/null +++ b/tests/local-fixed/doc.saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "local-fixed" +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + document: + dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" + - used_as: "ShowValue" + local: + path: "./show-value/" diff --git a/tests/local-fixed/doc.saty b/tests/local-fixed/doc.saty new file mode 100644 index 000000000..71c3aa8ed --- /dev/null +++ b/tests/local-fixed/doc.saty @@ -0,0 +1,13 @@ +use package open StdJaReport +use package ShowValue + +document (| + title = {The Title of Your Document}, + author = {Your Name}, +|) '< + +chapter{First Chapter}< + +p{ + Hello, world! \ShowValue.int(42 + 57); + } + > +> diff --git a/tests/local-fixed/show-value/saphe.yaml b/tests/local-fixed/show-value/saphe.yaml new file mode 100644 index 000000000..1ef46bcbf --- /dev/null +++ b/tests/local-fixed/show-value/saphe.yaml @@ -0,0 +1,21 @@ +ecosystem: "^0.0.1" +language: "^0.1.0" +name: "show-value" +authors: + - "Your Name" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +contents: + library: + main_module: "ShowValue" + source_directories: + - "./src" + dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/tests/local-fixed/show-value/src/show-value.satyh b/tests/local-fixed/show-value/src/show-value.satyh new file mode 100644 index 000000000..6e9de0184 --- /dev/null +++ b/tests/local-fixed/show-value/src/show-value.satyh @@ -0,0 +1,4 @@ +module ShowValue = struct + val inline \int n = + embed-string (arabic n) +end From b2973c15a4a80803d2d0614d5e758defa4053422 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 04:13:22 +0900 Subject: [PATCH 120/381] make `Makefile` run the local fixed package test (which fails so far) --- tests/Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Makefile b/tests/Makefile index 29475b5ce..7a986f7dc 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,6 +1,7 @@ INIT_DOC = init-doc/foo INIT_MD = init-md/foo INIT_LIB = init-lib +LOCAL_FIXED = local-fixed/doc DOC_TARGETS = \ clip.pdf \ @@ -16,6 +17,7 @@ DOC_TARGETS = \ rename-dep1.pdf \ $(INIT_DOC).pdf \ $(INIT_MD).pdf \ + $(LOCAL_FIXED).pdf \ # first.pdf \ # math1.pdf \ # refactor4.pdf \ @@ -78,6 +80,7 @@ clean-init:: rm -f $(INIT_MD).md $(INIT_MD).saphe.yaml rm -f $(INIT_MD).saphe.lock.yaml $(INIT_MD).satysfi-deps.yaml $(INIT_MD).satysfi-aux $(INIT_MD).pdf rm -rf $(INIT_LIB) + rm -f $(LOCAL_FIXED).saphe.lock.yaml # Dependencies on program files: clip.pdf: head.satyh @@ -116,3 +119,10 @@ $(INIT_LIB)/saphe.lock.yaml: $(INIT_LIB)/saphe.yaml $(INIT_LIB)/satysfi-deps.yaml: $(INIT_LIB)/saphe.lock.yaml $(SAPHE) build $(INIT_LIB) $(SAPHE) test $(INIT_LIB) + +# Tests for local fixed packages: +$(LOCAL_FIXED).saphe.lock.yaml: $(LOCAL_FIXED).saty $(LOCAL_FIXED).saphe.yaml + $(SAPHE) solve $< + +$(LOCAL_FIXED).pdf: $(LOCAL_FIXED).saty $(LOCAL_FIXED).saphe.lock.yaml + $(SAPHE) build $< -o $@ From 01627c775c297c0eafd058a5363107c535c1bf77 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 04:41:02 +0900 Subject: [PATCH 121/381] add a unit test for `PackageConstraintSolver` about local fixed packages (but it fails) --- src-saphe/packageConstraintSolver.ml | 2 + test/saphe/packageConstraintSolverTest.ml | 95 +++++++++++++++++++---- 2 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index b0bd1c6d8..105f0f942 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -283,6 +283,7 @@ module SolverInput = struct let meets_restriction (impl : impl) (restr : restriction) : bool = + let b = (* TODO: remove this *) match impl with | DummyImpl -> false @@ -306,6 +307,7 @@ module SolverInput = struct | AsIs -> false end + in Format.printf "MEETS: %a |= %a --> %B@," pp_impl impl pp_restriction restr b; b (* TODO: remove this *) (* Unused *) diff --git a/test/saphe/packageConstraintSolverTest.ml b/test/saphe/packageConstraintSolverTest.ml index 07e1993d1..fa53dda7c 100644 --- a/test/saphe/packageConstraintSolverTest.ml +++ b/test/saphe/packageConstraintSolverTest.ml @@ -13,7 +13,7 @@ let language_version = make_version "0.1.0" -let make_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency = +let make_registered_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency = PackageDependency{ used_as; spec = @@ -24,6 +24,13 @@ let make_dependency ~(used_as : string) (package_name : package_name) (s_version } +let make_local_fixed_dependency ~(used_as : string) (abspathstr : string) : package_dependency = + PackageDependency{ + used_as; + spec = LocalFixedDependency{ absolute_path = AbsPath.of_string_exn abspathstr }; + } + + let make_dependency_in_registry ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency_in_registry = PackageDependencyInRegistry{ used_as; @@ -55,7 +62,7 @@ let make_locked_dependency ~(used_as : string) (package_name : package_name) (s_ } -let make_solution ?(explicitly_depended : string option) ?(test_only : bool = false) (package_name : package_name) (s_version : string) (deps : locked_dependency list) : package_solution = +let make_registered_solution ?(explicitly_depended : string option) ?(test_only : bool = false) (package_name : package_name) (s_version : string) (deps : locked_dependency list) : package_solution = { lock = Lock.Registered(make_registered_lock package_name s_version); locked_source = NoSource; @@ -66,6 +73,17 @@ let make_solution ?(explicitly_depended : string option) ?(test_only : bool = fa } +let make_local_fixed_solution ?(explicitly_depended : string option) ?(test_only : bool = false) (abspathstr : string) (deps : locked_dependency list) : package_solution = + { + lock = Lock.LocalFixed{ absolute_path = AbsPath.of_string_exn abspathstr }; + locked_source = NoSource; + locked_dependencies = deps; + used_in_test_only = test_only; + explicitly_depended; + explicitly_test_depended = None; + } + + let check package_context dependencies_with_flags expected = let got = PackageConstraintSolver.solve package_context dependencies_with_flags in Alcotest.(check (option (list (of_pp pp_package_solution)))) "solutions" expected got @@ -78,9 +96,15 @@ let make_registered_package_impls = ) RegisteredPackageIdMap.empty +let make_local_fixed_dependencies = + List.fold_left (fun lfpkgmap (abspathstr, deps) -> + LocalFixedPackageIdMap.add (AbsPath.of_string_exn abspathstr) deps lfpkgmap + ) LocalFixedPackageIdMap.empty + + let solve_test_1 () = let package_context = - let local_fixed_dependencies = LocalFixedPackageIdMap.empty in + let local_fixed_dependencies = make_local_fixed_dependencies [] in let registered_package_impls = make_registered_package_impls [ ("foo", [ @@ -99,19 +123,19 @@ let solve_test_1 () = in let dependencies_with_flags = [ - (SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0"); - (SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0"); + (SourceDependency, make_registered_dependency ~used_as:"Bar" "bar" "1.0.0"); + (SourceDependency, make_registered_dependency ~used_as:"Qux" "qux" "1.0.0"); ] in let expected = Some([ - make_solution ~explicitly_depended:"Bar" + make_registered_solution ~explicitly_depended:"Bar" "bar" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "2.0.0" ]; - make_solution + make_registered_solution "foo" "1.0.0" []; - make_solution + make_registered_solution "foo" "2.0.0" []; - make_solution ~explicitly_depended:"Qux" + make_registered_solution ~explicitly_depended:"Qux" "qux" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "1.0.0" ]; ]) in @@ -120,7 +144,7 @@ let solve_test_1 () = let solve_test_2 () = let package_context = - let local_fixed_dependencies = LocalFixedPackageIdMap.empty in + let local_fixed_dependencies = make_local_fixed_dependencies [] in let registered_package_impls = make_registered_package_impls [ ("foo", [ @@ -139,25 +163,66 @@ let solve_test_2 () = in let dependencies_with_flags = [ - (SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0"); - (SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0"); + (SourceDependency, make_registered_dependency ~used_as:"Bar" "bar" "1.0.0"); + (SourceDependency, make_registered_dependency ~used_as:"Qux" "qux" "1.0.0"); ] in let expected = Some([ - make_solution ~explicitly_depended:"Bar" + make_registered_solution ~explicitly_depended:"Bar" "bar" "1.0.0" [ make_locked_dependency ~used_as:"FooA" "foo" "1.1.0" ]; - make_solution + make_registered_solution "foo" "1.1.0" []; - make_solution ~explicitly_depended:"Qux" + make_registered_solution ~explicitly_depended:"Qux" "qux" "1.0.0" [ make_locked_dependency ~used_as:"FooB" "foo" "1.1.0" ]; ]) in check package_context dependencies_with_flags expected +let solve_test_3 () = + let package_context = + let local_fixed_dependencies = + make_local_fixed_dependencies [ + ("/home/john/path/to/sub/", [ + make_registered_dependency ~used_as:"FooB" "foo" "1.0.0"; + ]); + ] + in + let registered_package_impls = + make_registered_package_impls [ + ("foo", [ + make_impl "1.0.0" []; + ]); + ("bar", [ + make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"FooA" "foo" "1.0.0" ]; + ]); + ] + in + { language_version; local_fixed_dependencies; registered_package_impls } + in + let dependencies_with_flags = + [ + (SourceDependency, make_registered_dependency ~used_as:"Bar" "bar" "1.0.0"); + (SourceDependency, make_local_fixed_dependency ~used_as:"Sub" "/home/john/path/to/sub/"); + ] + in + let expected = + Some([ + make_registered_solution ~explicitly_depended:"Bar" + "bar" "1.0.0" [ make_locked_dependency ~used_as:"FooA" "foo" "1.0.0" ]; + make_registered_solution + "foo" "1.0.0" []; + make_local_fixed_solution ~explicitly_depended:"Sub" + "/home/john/path/to/sub/" [ make_locked_dependency ~used_as:"FooB" "foo" "1.0.0" ]; + ]) + in + check package_context dependencies_with_flags expected + + let test_cases = Alcotest.[ test_case "solve 1" `Quick solve_test_1; test_case "solve 2" `Quick solve_test_2; + test_case "solve 3" `Quick solve_test_3; ] From 56a7465e4f66bb3f26859b38a9639711c8f7ee1a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 05:56:44 +0900 Subject: [PATCH 122/381] fix `conflict_class` --- src-saphe/packageConstraintSolver.ml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index 105f0f942..726f0697e 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -317,12 +317,18 @@ module SolverInput = struct let conflict_class (impl : impl) : conflict_class list = match impl with - | DummyImpl | TargetImpl(_) | LocalFixedImpl(_) -> - [ "*" ] + | DummyImpl -> + [ "dummy" ] + + | TargetImpl(_) -> + [ "target" ] + + | LocalFixedImpl{ absolute_path; _ } -> + [ Printf.sprintf "local/%s" (get_abs_path_string absolute_path) ] | Impl{ package_name; version; _ } -> let compat = SemanticVersion.get_compatibility_unit version in - [ Printf.sprintf "%s/%s" package_name compat ] + [ Printf.sprintf "registered/%s/%s" package_name compat ] let rejects (_role : Role.t) : (impl * rejection) list * string list = From f0578f4b2a3c97887c8725ad904e073c94b8e0b7 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 06:10:58 +0900 Subject: [PATCH 123/381] FIRST SUCCESS in SOLVING CONSTRAINTS ABOUT LOCAL FIXED PACKAGES --- src-saphe/packageConstraintSolver.ml | 40 ++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index 726f0697e..ebc625058 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -438,8 +438,29 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla | DummyImpl | TargetImpl(_) -> acc - | LocalFixedImpl(_) -> - acc (* TODO: reconsider this *) + | LocalFixedImpl{ absolute_path; dependencies } -> + let package_id = PackageId.LocalFixed{ absolute_path } in + let source = NoSource in (* TODO: reconsider this *) + let lock = Lock.LocalFixed{ absolute_path } in + let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = acc in + let (graph, vertex) = + match graph |> LockDependencyGraph.add_vertex lock () with + | Error(_) -> assert false + | Ok(pair) -> pair + in + let quad_acc = Alist.extend quad_acc (lock, source, dependencies, vertex) in + let explicit_vertex_to_used_as = + match explicit_source_dependencies |> PackageIdMap.find_opt package_id with + | Some(used_as) -> explicit_vertex_to_used_as |> VertexMap.add vertex used_as + | None -> explicit_vertex_to_used_as + in + let explicit_test_vertex_to_used_as = + match explicit_test_dependencies |> PackageIdMap.find_opt package_id with + | Some(used_as) -> explicit_test_vertex_to_used_as |> VertexMap.add vertex used_as + | None -> explicit_test_vertex_to_used_as + in + let lock_to_vertex_map = lock_to_vertex_map |> LockMap.add lock vertex in + (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in @@ -483,6 +504,21 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla (locked_dependency_acc, graph) | LocalFixedRole(_) -> + let lock_dep = + match rolemap |> Output.RoleMap.find_opt role_dep |> Option.map Output.unwrap with + | None | Some(DummyImpl) | Some(TargetImpl(_)) | Some(Impl(_)) -> + assert false + + | Some(LocalFixedImpl{ absolute_path; _ }) -> + Lock.LocalFixed{ absolute_path } + in + let locked_dependency = + { + depended_lock = lock_dep; + dependency_used_as = used_as; + } + in + let locked_dependency_acc = Alist.extend locked_dependency_acc locked_dependency in (locked_dependency_acc, graph) (* TODO: reconsider this *) From 60d3effdca98206d85aa40c9c86af46823b04540 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 06:38:17 +0900 Subject: [PATCH 124/381] change exit status codes when the invocation of `satysfi` fails --- src-saphe/sapheMain.ml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index d6ea2a33c..81fbde055 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -1134,7 +1134,7 @@ let build Logging.end_deps_config_output abspath_deps_config; (* Builds the package by invoking `satysfi`: *) - let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + let SatysfiCommand.{ exit_status; command = _ } = SatysfiCommand.(build_package ~envelope:abspath_envelope_config ~deps:abspath_deps_config @@ -1142,7 +1142,7 @@ let build ~mode:text_mode_formats_str_opt ~options) in - return () + return exit_status | DocumentBuildInput{ doc = abspath_doc; @@ -1159,7 +1159,7 @@ let build Logging.end_deps_config_output abspath_deps_config; (* Builds the document by invoking `satysfi`: *) - let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + let SatysfiCommand.{ exit_status; command = _ } = SatysfiCommand.(build_document ~doc:abspath_doc ~out:abspath_out @@ -1169,11 +1169,11 @@ let build ~mode:text_mode_formats_str_opt ~options) in - return () + return exit_status in match res with - | Ok(()) -> () - | Error(e) -> report_config_error e; exit 1 + | Ok(exit_status) -> exit exit_status + | Error(e) -> report_config_error e; exit 1 type test_input = @@ -1225,16 +1225,16 @@ let test Logging.end_deps_config_output abspath_deps_config; (* Builds the package by invoking `satysfi`: *) - let SatysfiCommand.{ exit_status = _; command = _ } = (* TODO: use `exit_status` *) + let SatysfiCommand.{ exit_status; command = _ } = SatysfiCommand.(test_package ~envelope:abspath_envelope_config ~deps:abspath_deps_config ~base_dir:absdir_store_root ~mode:text_mode_formats_str_opt) in - return () + return exit_status in match res with - | Ok(()) -> () - | Error(e) -> report_config_error e; exit 1 + | Ok(exit_status) -> exit exit_status + | Error(e) -> report_config_error e; exit 1 From 0c17fafe3f93b05c8be525df76cc69abee75a937 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 07:21:47 +0900 Subject: [PATCH 125/381] check the language version required by local fixed packages --- src-saphe/configError.ml | 5 +++++ src-saphe/localFixedPackageCollector.ml | 26 +++++++++++++++++-------- src-saphe/sapheMain.ml | 12 +++++++++++- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index acb331f87..632df1303 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -151,3 +151,8 @@ type config_error = | NotALibraryLocalFixed of { dir : abs_path; } + | LocalFixedDoesNotSupportLanguageVersion of { + dir : abs_path; + language_version : SemanticVersion.t; + language_requirement : SemanticVersion.requirement; + } diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml index 4ef9deead..4502652dd 100644 --- a/src-saphe/localFixedPackageCollector.ml +++ b/src-saphe/localFixedPackageCollector.ml @@ -7,20 +7,30 @@ open ConfigError type collection = (package_dependency list) LocalFixedPackageIdMap.t -let get_dependencies (absdir_package : abs_path) : (package_dependency list, config_error) result = +let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : abs_path) : (package_dependency list, config_error) result = let open ResultMonad in let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in let* PackageConfig.{ - language_requirement = _; (* TODO: check that this requirement meets the selected language version *) + language_requirement; package_contents; registry_remotes = _; (* TODO: append to the target's `registry_remotes` *) _ } = PackageConfig.load abspath_package_config in + let* () = + if language_version |> SemanticVersion.fulfill language_requirement then + return () + else + err @@ LocalFixedDoesNotSupportLanguageVersion{ + dir = absdir_package; + language_version; + language_requirement; + } + in match package_contents with | PackageConfig.Library{ dependencies; _ } -> - (* Ignores `test_dependencies` here. *) + (* Ignores `test_dependencies` here, because we do not run the tests of depended packages. *) return dependencies | PackageConfig.Font(_) -> @@ -30,7 +40,7 @@ let get_dependencies (absdir_package : abs_path) : (package_dependency list, con err @@ NotALibraryLocalFixed{ dir = absdir_package } -let rec aux (gained : collection) (deps : package_dependency list) : (collection, config_error) result = +let rec aux ~(language_version : SemanticVersion.t) (gained : collection) (deps : package_dependency list) : (collection, config_error) result = let open ResultMonad in deps |> foldM (fun gained dep -> let PackageDependency{ spec; _ } = dep in @@ -42,12 +52,12 @@ let rec aux (gained : collection) (deps : package_dependency list) : (collection if gained |> LocalFixedPackageIdMap.mem absolute_path then return gained else - let* deps_sub = get_dependencies absolute_path in + let* deps_sub = get_dependencies ~language_version absolute_path in let gained = gained |> LocalFixedPackageIdMap.add absolute_path deps_sub in - aux gained deps_sub + aux ~language_version gained deps_sub ) gained -let main (deps : package_dependency list) : (collection, config_error) result = - aux LocalFixedPackageIdMap.empty deps +let main ~(language_version : SemanticVersion.t) (deps : package_dependency list) : (collection, config_error) result = + aux ~language_version LocalFixedPackageIdMap.empty deps (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 81fbde055..da40c8bd2 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -359,6 +359,16 @@ let report_config_error = function DisplayLine(get_abs_path_string absdir_package); ] + | LocalFixedDoesNotSupportLanguageVersion{ dir = absdir_package; language_version; language_requirement } -> + let s_version = SemanticVersion.to_string language_version in + let s_req = SemanticVersion.requirement_to_string language_requirement in + report_error [ + NormalLine(Printf.sprintf "the local package"); + DisplayLine(get_abs_path_string absdir_package); + NormalLine(Printf.sprintf "requires the language version to be %s," s_req); + NormalLine(Printf.sprintf "but we are using %s." s_version); + ] + type solve_input = | PackageSolveInput of { @@ -843,7 +853,7 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; let* local_fixed_dependencies = - LocalFixedPackageCollector.main (List.map Stdlib.snd dependencies_with_flags) + LocalFixedPackageCollector.main ~language_version (List.map Stdlib.snd dependencies_with_flags) in (* Arranges the store root config: *) From 6dbd53b89228569ffeea7968c72f82f00923a6c2 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 07:28:27 +0900 Subject: [PATCH 126/381] fix `doc-primitives.saphe.yaml` --- doc/doc-primitives.saphe.lock.yaml.expected | 2 ++ doc/doc-primitives.saphe.yaml | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/doc/doc-primitives.saphe.lock.yaml.expected b/doc/doc-primitives.saphe.lock.yaml.expected index 0de5dbafc..fcdf20093 100644 --- a/doc/doc-primitives.saphe.lock.yaml.expected +++ b/doc/doc-primitives.saphe.lock.yaml.expected @@ -108,6 +108,8 @@ locks: package_name: stdlib version: 0.0.1 dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 used_as: Itemize - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 diff --git a/doc/doc-primitives.saphe.yaml b/doc/doc-primitives.saphe.yaml index f61959111..ac646c576 100644 --- a/doc/doc-primitives.saphe.yaml +++ b/doc/doc-primitives.saphe.yaml @@ -31,3 +31,8 @@ contents: registry: "default" name: "std-ja-book" requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" From 9e0124d7eeeaa0092068f58db0b7befcc99039ee Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 07:52:12 +0900 Subject: [PATCH 127/381] take registry specs by local fixed packages into account --- src-saphe/localFixedPackageCollector.ml | 32 ++++++++++++++----------- src-saphe/sapheMain.ml | 27 ++++++++++++++++++++- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml index 4502652dd..cab2b5df3 100644 --- a/src-saphe/localFixedPackageCollector.ml +++ b/src-saphe/localFixedPackageCollector.ml @@ -7,14 +7,14 @@ open ConfigError type collection = (package_dependency list) LocalFixedPackageIdMap.t -let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : abs_path) : (package_dependency list, config_error) result = +let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : abs_path) : (package_dependency list * registry_remote list, config_error) result = let open ResultMonad in let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in let* PackageConfig.{ language_requirement; package_contents; - registry_remotes = _; (* TODO: append to the target's `registry_remotes` *) + registry_remotes; _ } = PackageConfig.load abspath_package_config in @@ -31,33 +31,37 @@ let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : a match package_contents with | PackageConfig.Library{ dependencies; _ } -> (* Ignores `test_dependencies` here, because we do not run the tests of depended packages. *) - return dependencies + return (dependencies, registry_remotes) | PackageConfig.Font(_) -> - return [] + return ([], registry_remotes) | PackageConfig.Document(_) -> err @@ NotALibraryLocalFixed{ dir = absdir_package } -let rec aux ~(language_version : SemanticVersion.t) (gained : collection) (deps : package_dependency list) : (collection, config_error) result = +let rec aux ~(language_version : SemanticVersion.t) (gained : collection) (deps : package_dependency list) (registry_remote_acc : registry_remote Alist.t) : (collection * registry_remote Alist.t, config_error) result = let open ResultMonad in - deps |> foldM (fun gained dep -> + deps |> foldM (fun (gained, registry_remote_acc) dep -> let PackageDependency{ spec; _ } = dep in match spec with | RegisteredDependency(_) -> - return gained + return (gained, registry_remote_acc) | LocalFixedDependency{ absolute_path } -> if gained |> LocalFixedPackageIdMap.mem absolute_path then - return gained + return (gained, registry_remote_acc) else - let* deps_sub = get_dependencies ~language_version absolute_path in + let* (deps_sub, registry_remotes_sub) = get_dependencies ~language_version absolute_path in let gained = gained |> LocalFixedPackageIdMap.add absolute_path deps_sub in - aux ~language_version gained deps_sub - ) gained + let registry_remote_acc = Alist.append registry_remote_acc registry_remotes_sub in + aux ~language_version gained deps_sub registry_remote_acc + ) (gained, registry_remote_acc) -let main ~(language_version : SemanticVersion.t) (deps : package_dependency list) : (collection, config_error) result = - aux ~language_version LocalFixedPackageIdMap.empty deps - (* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *) +let main ~(language_version : SemanticVersion.t) (deps : package_dependency list) : (collection * registry_remote list, config_error) result = + let open ResultMonad in + let* (gained, registry_remote_acc) = + aux ~language_version LocalFixedPackageIdMap.empty deps Alist.empty + in + return (gained, Alist.to_list registry_remote_acc) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index da40c8bd2..4af100a4d 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -782,6 +782,16 @@ let make_solve_input ~(dir_current : string) ~(fpath_in : string) : solve_input } +module CanonicalRegistryRemoteSet = Set.Make(struct + type t = registry_remote + + let compare (r1 : t) (r2 : t) = + let GitRegistry{ url = canonical_url1; branch = branch1 } = r1 in + let GitRegistry{ url = canonical_url2; branch = branch2 } = r2 in + List.compare String.compare [ canonical_url1; branch1 ] [ canonical_url2; branch2 ] +end) + + let solve ~(fpath_in : string) = let res = let open ResultMonad in @@ -852,7 +862,8 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; - let* local_fixed_dependencies = + (* Collects the local fixed packages used by the target: *) + let* (local_fixed_dependencies, registry_remotes_sub) = LocalFixedPackageCollector.main ~language_version (List.map Stdlib.snd dependencies_with_flags) in @@ -865,6 +876,20 @@ let solve ~(fpath_in : string) = if created then Logging.store_root_config_updated ~created:true abspath_store_root_config end; + (* Removes duplicate remote registries: *) + let* registry_remote_set = + (List.append registry_remotes registry_remotes_sub) |> foldM (fun set registry_remote -> + let GitRegistry{ url; branch } = registry_remote in + let* canonical_url = + CanonicalRegistryUrl.make url + |> Result.map_error (fun e -> CanonicalRegistryUrlError(e)) + in + let canonical_registry_remote = GitRegistry{ url = canonical_url; branch } in + return (set |> CanonicalRegistryRemoteSet.add canonical_registry_remote) + ) CanonicalRegistryRemoteSet.empty + in + let registry_remotes = CanonicalRegistryRemoteSet.elements registry_remote_set in + (* Constructs a map that associates a package with its implementations: *) let* registered_package_impls = registry_remotes |> foldM (fun registered_package_impls registry_remote -> From 537950a59788ec4b9ec4a9edd151e5e56c7b28f9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 08:11:47 +0900 Subject: [PATCH 128/381] create the envelop config for each local fixed package --- src-saphe/localFixedPackageCollector.ml | 43 ++++++++++++++++++++----- src-saphe/sapheMain.ml | 16 ++++++++- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml index cab2b5df3..595e05faf 100644 --- a/src-saphe/localFixedPackageCollector.ml +++ b/src-saphe/localFixedPackageCollector.ml @@ -1,13 +1,14 @@ open MyUtil +open EnvelopeSystemBase open PackageSystemBase open ConfigError -type collection = (package_dependency list) LocalFixedPackageIdMap.t +type collection = (package_dependency list * envelope_contents) LocalFixedPackageIdMap.t -let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : abs_path) : (package_dependency list * registry_remote list, config_error) result = +let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : abs_path) : (package_dependency list * envelope_contents * registry_remote list, config_error) result = let open ResultMonad in let abspath_package_config = Constant.library_package_config_path ~dir:absdir_package in let* @@ -29,12 +30,36 @@ let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : a } in match package_contents with - | PackageConfig.Library{ dependencies; _ } -> + | PackageConfig.Library{ + main_module_name; + source_directories; + test_directories; + markdown_conversion; + dependencies; + _ + } -> (* Ignores `test_dependencies` here, because we do not run the tests of depended packages. *) - return (dependencies, registry_remotes) + let envelope_contents = + EnvelopeSystemBase.Library{ + main_module_name; + source_directories; + test_directories; + markdown_conversion; + } + in + return (dependencies, envelope_contents, registry_remotes) - | PackageConfig.Font(_) -> - return ([], registry_remotes) + | PackageConfig.Font{ + main_module_name; + font_file_descriptions; + } -> + let envelope_contents = + EnvelopeSystemBase.Font{ + main_module_name; + font_file_descriptions; + } + in + return ([], envelope_contents, registry_remotes) | PackageConfig.Document(_) -> err @@ NotALibraryLocalFixed{ dir = absdir_package } @@ -52,8 +77,10 @@ let rec aux ~(language_version : SemanticVersion.t) (gained : collection) (deps if gained |> LocalFixedPackageIdMap.mem absolute_path then return (gained, registry_remote_acc) else - let* (deps_sub, registry_remotes_sub) = get_dependencies ~language_version absolute_path in - let gained = gained |> LocalFixedPackageIdMap.add absolute_path deps_sub in + let* (deps_sub, envelope_contents, registry_remotes_sub) = + get_dependencies ~language_version absolute_path + in + let gained = gained |> LocalFixedPackageIdMap.add absolute_path (deps_sub, envelope_contents) in let registry_remote_acc = Alist.append registry_remote_acc registry_remotes_sub in aux ~language_version gained deps_sub registry_remote_acc ) (gained, registry_remote_acc) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 4af100a4d..6c014feed 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -863,10 +863,24 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_before_solving dependencies_with_flags; (* Collects the local fixed packages used by the target: *) - let* (local_fixed_dependencies, registry_remotes_sub) = + let* (local_fixed_package_map, registry_remotes_sub) = LocalFixedPackageCollector.main ~language_version (List.map Stdlib.snd dependencies_with_flags) in + (* Creates the envelope config for each local fixed packages, + while extracting `local_fixed_dependencies` from `local_fixed_package_map`: *) + let* local_fixed_dependencies = + LocalFixedPackageIdMap.fold (fun absdir_package (deps, envelope_contents) res -> + let* local_fixed_dependencies = res in + let abspath_envelope_config = Constant.envelope_config_path ~dir:absdir_package in + let* () = + EnvelopeConfig.write abspath_envelope_config { envelope_contents } + |> Result.map_error (fun message -> FailedToWriteFile{ path = abspath_envelope_config; message }) + in + return (local_fixed_dependencies |> LocalFixedPackageIdMap.add absdir_package deps) + ) local_fixed_package_map (return LocalFixedPackageIdMap.empty) + in + (* Arranges the store root config: *) let* absdir_store_root = get_store_root () in let abspath_store_root_config = Constant.store_root_config_path ~store_root:absdir_store_root in From baf0988e8a930252b00b362b4e93a87cdcbec296 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 08:32:56 +0900 Subject: [PATCH 129/381] SUCCEED IN RUNNING THE LOCAL FIXED PACKAGE TEST --- src-saphe/sapheMain.ml | 5 +- tests/.gitignore | 2 +- tests/Makefile | 1 + .../local-fixed/doc.saphe.lock.yaml.expected | 113 ++++++++++++++++++ tests/local-fixed/show-value/.gitignore | 1 + 5 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 tests/local-fixed/doc.saphe.lock.yaml.expected create mode 100644 tests/local-fixed/show-value/.gitignore diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 6c014feed..18003c502 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -877,6 +877,7 @@ let solve ~(fpath_in : string) = EnvelopeConfig.write abspath_envelope_config { envelope_contents } |> Result.map_error (fun message -> FailedToWriteFile{ path = abspath_envelope_config; message }) in + Logging.end_envelope_config_output abspath_envelope_config; return (local_fixed_dependencies |> LocalFixedPackageIdMap.add absdir_package deps) ) local_fixed_package_map (return LocalFixedPackageIdMap.empty) in @@ -1081,8 +1082,8 @@ let make_envelope_spec ~(store_root : abs_path) (locked_package : LockConfig.loc | Lock.Registered(reglock) -> get_abs_path_string (Constant.registered_lock_envelope_config ~store_root reglock) - | LocalFixed{ absolute_path } -> - get_abs_path_string absolute_path + | Lock.LocalFixed{ absolute_path } -> + get_abs_path_string (Constant.envelope_config_path ~dir:absolute_path) in let envelope_dependencies = lock_dependencies |> List.map make_envelope_dependency in { diff --git a/tests/.gitignore b/tests/.gitignore index f2e49a00d..a03590ca7 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,4 +1,4 @@ *.saphe.lock.yaml !*.saphe.lock.yaml.expected *.satysfi-deps.yaml -init-lib/ +/init-lib/ diff --git a/tests/Makefile b/tests/Makefile index 7a986f7dc..dad4e4b3c 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -123,6 +123,7 @@ $(INIT_LIB)/satysfi-deps.yaml: $(INIT_LIB)/saphe.lock.yaml # Tests for local fixed packages: $(LOCAL_FIXED).saphe.lock.yaml: $(LOCAL_FIXED).saty $(LOCAL_FIXED).saphe.yaml $(SAPHE) solve $< + diff $@ $(LOCAL_FIXED).saphe.lock.yaml.expected $(LOCAL_FIXED).pdf: $(LOCAL_FIXED).saty $(LOCAL_FIXED).saphe.lock.yaml $(SAPHE) build $< -o $@ diff --git a/tests/local-fixed/doc.saphe.lock.yaml.expected b/tests/local-fixed/doc.saphe.lock.yaml.expected new file mode 100644 index 000000000..d91946e85 --- /dev/null +++ b/tests/local-fixed/doc.saphe.lock.yaml.expected @@ -0,0 +1,113 @@ +ecosystem: ^0.0.1 +locks: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: annot + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: code + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-ipa-ex + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-junicode + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: font-latin-modern-math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: footnote-scheme + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: math + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 + used_as: Math + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 + used_as: Annot + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.code.0.0.1 + used_as: Code + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 + used_as: FootnoteScheme + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-junicode.0.0.1 + used_as: FontJunicode + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 + used_as: FontLatinModern + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 + used_as: FontIpaEx + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 + used_as: FontLatinModernMath + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: std-ja-report + version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: stdlib + version: 0.0.1 +- name: local./Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value + dependencies: + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 + used_as: Stdlib + test_only: false + local: + absolute_path: /Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value +dependencies: +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 + used_as: StdJaReport +- name: local./Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value + used_as: ShowValue +test_dependencies: [] diff --git a/tests/local-fixed/show-value/.gitignore b/tests/local-fixed/show-value/.gitignore new file mode 100644 index 000000000..cd41a46b7 --- /dev/null +++ b/tests/local-fixed/show-value/.gitignore @@ -0,0 +1 @@ +satysfi-envelope.yaml From c9f905d65854833429b35d0dde3eb252456791e1 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 09:00:50 +0900 Subject: [PATCH 130/381] implement `AbsPath.make_relative` --- src-saphe/packageConstraintSolver.ml | 21 +----------------- src-util/absPath.ml | 33 ++++++++++++++++++++++++++++ src-util/absPath.mli | 2 ++ test/common/absPathTest.ml | 15 +++++++++++++ 4 files changed, 51 insertions(+), 20 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index ebc625058..dae618beb 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -78,13 +78,6 @@ module SolverInput = struct | VersionRequirement of SemanticVersion.requirement | AsIs - let pp_restriction ppf = function - | VersionRequirement(SemanticVersion.CompatibleWith(semver)) -> - Format.fprintf ppf "~%s" (SemanticVersion.to_string semver) - - | AsIs -> - Format.fprintf ppf "AS-IS" - type dependency = | Dependency of { role : Role.t; @@ -92,9 +85,6 @@ module SolverInput = struct restriction : restriction; } - let pp_dependency ppf (Dependency{ role; used_as; restriction }) = - Format.fprintf ppf "%a (used as %s, %a)" Role.pp role used_as pp_restriction restriction - type dep_info = { dep_role : Role.t; dep_importance : [ `Essential | `Recommended | `Restricts ]; @@ -178,14 +168,12 @@ module SolverInput = struct { dep_role = role; dep_importance = `Essential; dep_required_commands = [] } - let requires (role : Role.t) (impl : impl) : dependency list * command_name list = - let (dependencies, cmds) = (* TODO: remove this *) + let requires (_role : Role.t) (impl : impl) : dependency list * command_name list = match impl with | DummyImpl -> ([], []) | TargetImpl{ dependencies } -> (dependencies, []) | LocalFixedImpl{ dependencies; _} -> (dependencies, []) | Impl{ dependencies; _ } -> (dependencies, []) - in Format.printf "DEPS: (role: %a) %a ->@,@[ %a@]@," Role.pp role pp_impl impl (Format.pp_print_list pp_dependency) dependencies; (dependencies, cmds) (* TODO: remove this *) (* Unused *) @@ -256,7 +244,6 @@ module SolverInput = struct None ) in - Format.printf "IMPLS: %a =@,@[ %a@]@," Role.pp role (Format.pp_print_list pp_impl) impls; (* TODO: remove this *) { replacement = None; impls } | LocalFixedRole{ absolute_path; context } -> @@ -267,13 +254,11 @@ module SolverInput = struct in let dependencies = make_internal_dependency context requires in let impl = LocalFixedImpl{ absolute_path; dependencies } in - Format.printf "IMPLS: %a = %a@," Role.pp role pp_impl impl; (* TODO: remove this *) { replacement = None; impls = [ impl ] } | TargetRole{ requires; context } -> let dependencies = make_internal_dependency context requires in let impl = TargetImpl{ dependencies } in - Format.printf "IMPLS: %a = %a@," Role.pp role pp_impl impl; (* TODO: remove this *) { replacement = None; impls = [ impl ] } @@ -283,7 +268,6 @@ module SolverInput = struct let meets_restriction (impl : impl) (restr : restriction) : bool = - let b = (* TODO: remove this *) match impl with | DummyImpl -> false @@ -307,7 +291,6 @@ module SolverInput = struct | AsIs -> false end - in Format.printf "MEETS: %a |= %a --> %B@," pp_impl impl pp_restriction restr b; b (* TODO: remove this *) (* Unused *) @@ -416,14 +399,12 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla in let requires = Alist.to_list dependency_acc in let target_role = SolverInput.Role.TargetRole{ requires; context } in - Format.printf "@["; (* TODO: remove this *) let output_opt = InternalSolver.do_solve ~closest_match:false { role = target_role; command = None; } in - Format.printf "@]"; (* TODO: remove this *) output_opt |> Option.map (fun output -> let open InternalSolver in diff --git a/src-util/absPath.ml b/src-util/absPath.ml index d75392266..dfcdc8924 100644 --- a/src-util/absPath.ml +++ b/src-util/absPath.ml @@ -98,3 +98,36 @@ let to_components (AbsPath(compos) : t) = compos let compare (AbsPath(compos1)) (AbsPath(compos2)) = List.compare String.compare compos1 compos2 + + +type relative_component = + | RelParent + | RelComponent of string + + +let stringify_relative_component = function + | RelParent -> ".." + | RelComponent(compo) -> compo + + +let make_relative ~from:(AbsPath(compos_seen_from) : t) (AbsPath(compos_target) : t) = + let rec aux compos_seen_from compos_target = + match (compos_seen_from, compos_target) with + | (compo_seen_from :: compos_seen_from_rest, compo_target :: compos_target_rest) -> + if String.equal compo_seen_from compo_target then + aux compos_seen_from_rest compos_target_rest + else + let ncompos0 = List.map (fun _ -> RelParent) compos_seen_from in + let ncompos1 = List.map (fun compo -> RelComponent(compo)) compos_target in + List.append ncompos0 ncompos1 + + | (_ :: _, []) -> + List.map (fun _ -> RelParent) compos_seen_from + + | ([], _) -> + List.map (fun compo -> RelComponent(compo)) compos_target + in + let relcompos = aux compos_seen_from compos_target in + match relcompos with + | [] -> "." + | _ :: _ -> String.concat "/" (List.map stringify_relative_component relcompos) diff --git a/src-util/absPath.mli b/src-util/absPath.mli index 0b69eeffe..fe74433b8 100644 --- a/src-util/absPath.mli +++ b/src-util/absPath.mli @@ -9,3 +9,5 @@ val to_string : t -> string val to_components : t -> string list val compare : t -> t -> int + +val make_relative : from:t -> t -> string diff --git a/test/common/absPathTest.ml b/test/common/absPathTest.ml index 036e5372b..5e17db4d8 100644 --- a/test/common/absPathTest.ml +++ b/test/common/absPathTest.ml @@ -11,7 +11,22 @@ let of_string_exn_test () = ] +let make_relative_test () = + List.iter (fun (s_from, s_target, expected) -> + let from = AbsPath.of_string_exn s_from in + let target = AbsPath.of_string_exn s_target in + let got = AbsPath.make_relative ~from target in + Alcotest.(check string) "make_relative" expected got + ) [ + ("/foo/bar", "/foo/bar/baz.txt", "baz.txt"); + ("/foo/bar/qux", "/foo/bar/baz.txt", "../baz.txt"); + ("/foo/bar/qux/quux", "/foo/bar/baz.txt", "../../baz.txt"); + ("/foo/bar", "/foo/bar", "."); + ] + + let test_cases = Alcotest.[ test_case "of_string_exn" `Quick of_string_exn_test; + test_case "make_relative" `Quick make_relative_test; ] From eaf46a10893502313cd6ae7ada2a7a51ed014dda Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 09:13:41 +0900 Subject: [PATCH 131/381] disable debug prints --- src-saphe/packageConstraintSolver.ml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index dae618beb..f7c600130 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -408,8 +408,6 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla output_opt |> Option.map (fun output -> let open InternalSolver in - Format.printf "EXPLAIN: %s@," (Output.explain output target_role); - (* Adds vertices to the graph: *) let rolemap = output |> Output.to_map in let (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) = From b5f6c5806e5bafbed99a7cde8644e1de7c5e6d85 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 09:14:14 +0900 Subject: [PATCH 132/381] read/write local fixed packages by relative paths --- src-saphe/lockConfig.ml | 30 +++++++++++++++--------------- src-saphe/sapheMain.ml | 25 ++++++++++++++----------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index 40e1b15c9..2a6e57e2f 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -26,7 +26,7 @@ type t = { } -let lock_contents_decoder : Lock.t ConfigDecoder.t = +let lock_contents_decoder ~dir:(absdir_lock_config : abs_path) : Lock.t ConfigDecoder.t = let open ConfigDecoder in branch [ "registered" ==> begin @@ -38,15 +38,15 @@ let lock_contents_decoder : Lock.t ConfigDecoder.t = succeed @@ Lock.Registered(reglock) end; "local" ==> begin - get "absolute_path" string >>= fun abspathstr -> (* TODO: fix this *) + get "relative_path" string >>= fun relpathstr -> succeed @@ Lock.LocalFixed{ - absolute_path = make_abs_path abspathstr; + absolute_path = append_to_abs_directory absdir_lock_config relpathstr; } end; ] -let lock_contents_encoder (contents : Lock.t) : (string * Yaml.value) list = +let lock_contents_encoder ~dir:(absdir_lock_config : abs_path) (contents : Lock.t) : (string * Yaml.value) list = match contents with | Lock.Registered(reglock) -> let RegisteredLock.{ registered_package_id; locked_version } = reglock in @@ -62,7 +62,7 @@ let lock_contents_encoder (contents : Lock.t) : (string * Yaml.value) list = | Lock.LocalFixed{ absolute_path } -> [ ("local", `O([ - ("absolute_path", `String(get_abs_path_string absolute_path)); (* TODO: fix this *) + ("relative_path", `String(AbsPath.make_relative ~from:absdir_lock_config absolute_path)); ])); ] @@ -81,16 +81,16 @@ let lock_dependency_encoder (dep : lock_dependency) : Yaml.value = ]) -let lock_decoder : locked_package ConfigDecoder.t = +let lock_decoder ~(dir : abs_path) : locked_package ConfigDecoder.t = let open ConfigDecoder in get "name" string >>= fun lock_name -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun lock_dependencies -> get_or_else "test_only" bool false >>= fun test_only_lock -> - lock_contents_decoder >>= fun lock_contents -> + lock_contents_decoder ~dir >>= fun lock_contents -> succeed { lock_name; lock_contents; lock_dependencies; test_only_lock } -let lock_encoder (lock : locked_package) : Yaml.value = +let lock_encoder ~(dir : abs_path) (lock : locked_package) : Yaml.value = let fields_common = [ ("name", `String(lock.lock_name)); @@ -98,25 +98,25 @@ let lock_encoder (lock : locked_package) : Yaml.value = ("test_only", `Bool(lock.test_only_lock)); ] in - let fields_contents = lock_contents_encoder lock.lock_contents in + let fields_contents = lock_contents_encoder ~dir lock.lock_contents in `O(List.append fields_common fields_contents) -let lock_config_decoder : t ConfigDecoder.t = +let lock_config_decoder ~(dir : abs_path) : t ConfigDecoder.t = let open ConfigDecoder in get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> - get_or_else "locks" (list lock_decoder) [] >>= fun locked_packages -> + get_or_else "locks" (list (lock_decoder ~dir)) [] >>= fun locked_packages -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun explicit_dependencies -> get_or_else "test_dependencies" (list lock_dependency_decoder) [] >>= fun explicit_test_dependencies -> succeed { locked_packages; explicit_dependencies; explicit_test_dependencies } -let lock_config_encoder (lock_config : t) : Yaml.value = +let lock_config_encoder ~(dir : abs_path) (lock_config : t) : Yaml.value = let { locked_packages; explicit_dependencies; explicit_test_dependencies } = lock_config in let requirement = SemanticVersion.CompatibleWith(Constant.current_ecosystem_version) in `O([ ("ecosystem", `String(SemanticVersion.requirement_to_string requirement)); - ("locks", `A(locked_packages |> List.map lock_encoder)); + ("locks", `A(locked_packages |> List.map (lock_encoder ~dir))); ("dependencies", `A(explicit_dependencies |> List.map lock_dependency_encoder)); ("test_dependencies", `A(explicit_test_dependencies |> List.map lock_dependency_encoder)); ]) @@ -128,12 +128,12 @@ let load (abspath_lock_config : abs_path) : t ok = read_file abspath_lock_config |> Result.map_error (fun _ -> LockConfigNotFound(abspath_lock_config)) in - ConfigDecoder.run lock_config_decoder s + ConfigDecoder.run (lock_config_decoder ~dir:(dirname abspath_lock_config)) s |> Result.map_error (fun e -> LockConfigError(abspath_lock_config, e)) let write (abspath_lock_config : abs_path) (lock_config : t) : (unit, config_error) result = - let yaml = lock_config_encoder lock_config in + let yaml = lock_config_encoder ~dir:(dirname abspath_lock_config) lock_config in let data = encode_yaml yaml in write_file abspath_lock_config data |> Result.map_error (fun message -> diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 18003c502..7e9b57e45 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -400,7 +400,7 @@ let update_store_root_config_if_needed (registries : registry_remote RegistryHas return () -let make_lock_name (lock : Lock.t) : lock_name = +let make_lock_name ~seen_from:(absdir_seen_from : abs_path) (lock : Lock.t) : lock_name = match lock with | Lock.Registered({ registered_package_id; locked_version }) -> let RegisteredPackageId.{ registry_hash_value; package_name } = registered_package_id in @@ -411,26 +411,25 @@ let make_lock_name (lock : Lock.t) : lock_name = | Lock.LocalFixed{ absolute_path } -> Printf.sprintf "local.%s" - (get_abs_path_string absolute_path) - (* TODO: fix this *) + (AbsPath.make_relative ~from:absdir_seen_from absolute_path) -let make_lock_dependency (dep : locked_dependency) : LockConfig.lock_dependency = +let make_lock_dependency ~(seen_from : abs_path) (dep : locked_dependency) : LockConfig.lock_dependency = { - depended_lock_name = make_lock_name dep.depended_lock; + depended_lock_name = make_lock_name ~seen_from dep.depended_lock; used_as = dep.dependency_used_as; } -let convert_solutions_to_lock_config (solutions : package_solution list) : LockConfig.t * implementation_spec list = +let convert_solutions_to_lock_config ~(seen_from : abs_path) (solutions : package_solution list) : LockConfig.t * implementation_spec list = let (locked_package_acc, impl_spec_acc) = solutions |> List.fold_left (fun (locked_package_acc, impl_spec_acc) solution -> let { lock; locked_source; _ } = solution in let locked_package = LockConfig.{ - lock_name = make_lock_name lock; + lock_name = make_lock_name ~seen_from lock; lock_contents = lock; - lock_dependencies = solution.locked_dependencies |> List.map make_lock_dependency; + lock_dependencies = solution.locked_dependencies |> List.map (make_lock_dependency ~seen_from); test_only_lock = solution.used_in_test_only; } in @@ -442,7 +441,7 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC solutions |> List.filter_map (fun solution -> solution.explicitly_depended |> Option.map (fun used_as -> LockConfig.{ - depended_lock_name = make_lock_name solution.lock; + depended_lock_name = make_lock_name ~seen_from solution.lock; used_as; } ) @@ -452,7 +451,7 @@ let convert_solutions_to_lock_config (solutions : package_solution list) : LockC solutions |> List.filter_map (fun solution -> solution.explicitly_test_depended |> Option.map (fun used_as -> LockConfig.{ - depended_lock_name = make_lock_name solution.lock; + depended_lock_name = make_lock_name ~seen_from solution.lock; used_as; } ) @@ -961,7 +960,11 @@ let solve ~(fpath_in : string) = Logging.show_package_dependency_solutions solutions; - let (lock_config, impl_specs) = convert_solutions_to_lock_config solutions in + let (lock_config, impl_specs) = + convert_solutions_to_lock_config + ~seen_from:(dirname abspath_lock_config) + solutions + in let wget_command = "wget" in (* TODO: make this changeable *) let tar_command = "tar" in (* TODO: make this changeable *) From 5c4e45e201e3419e8586bc752365d4ae402c3ad1 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Thu, 15 Feb 2024 09:16:03 +0900 Subject: [PATCH 133/381] update the integration test in `tests/local-fixed/` --- tests/local-fixed/doc.saphe.lock.yaml.expected | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/local-fixed/doc.saphe.lock.yaml.expected b/tests/local-fixed/doc.saphe.lock.yaml.expected index d91946e85..5ba9e4cea 100644 --- a/tests/local-fixed/doc.saphe.lock.yaml.expected +++ b/tests/local-fixed/doc.saphe.lock.yaml.expected @@ -98,16 +98,16 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: stdlib version: 0.0.1 -- name: local./Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value +- name: local.show-value dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 used_as: Stdlib test_only: false local: - absolute_path: /Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value + relative_path: show-value dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.std-ja-report.0.0.1 used_as: StdJaReport -- name: local./Users/tsuwa/codes/SATySFi/tests/local-fixed/show-value +- name: local.show-value used_as: ShowValue test_dependencies: [] From 2f19916262a19a281eb6d2fb2628cc9a82a7eb75 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 04:18:47 +0900 Subject: [PATCH 134/381] separate `PackageConfigImpl` from `PackageSystemBase` --- src-saphe/configUtil.ml | 1 + src-saphe/packageConfig.ml | 3 ++ src-saphe/packageConfig.mli | 1 + src-saphe/packageConfigImpl.ml | 50 ++++++++++++++++++++++++++++++++++ src-saphe/packageSystemBase.ml | 49 --------------------------------- 5 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 src-saphe/packageConfigImpl.ml diff --git a/src-saphe/configUtil.ml b/src-saphe/configUtil.ml index ac367743f..558a177f8 100644 --- a/src-saphe/configUtil.ml +++ b/src-saphe/configUtil.ml @@ -1,5 +1,6 @@ open ConfigError +open PackageConfigImpl open PackageSystemBase diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 926200713..777d3b9bc 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -4,10 +4,13 @@ open ConfigError open ConfigUtil open EnvelopeSystemBase open PackageSystemBase +open PackageConfigImpl type 'a ok = ('a, config_error) result +module RegistryLocalNameMap = Map.Make(String) + type package_contents = | Library of { main_module_name : string; diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index 08cdd3cd3..f226dba45 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -1,6 +1,7 @@ open MyUtil open ConfigError +open PackageConfigImpl open EnvelopeSystemBase open PackageSystemBase diff --git a/src-saphe/packageConfigImpl.ml b/src-saphe/packageConfigImpl.ml new file mode 100644 index 000000000..67b37e524 --- /dev/null +++ b/src-saphe/packageConfigImpl.ml @@ -0,0 +1,50 @@ + +open EnvelopeSystemBase +open PackageSystemBase + + +type parsed_package_dependency_spec = + | ParsedRegisteredDependency of { + package_name : package_name; + registry_local_name : registry_local_name; + version_requirement : SemanticVersion.requirement; + } + | ParsedLocalFixedDependency of { + relative_path : relative_path; + } +[@@deriving show { with_path = false }] + +type parsed_package_dependency = + | ParsedPackageDependency of { + used_as : string; + spec : parsed_package_dependency_spec; + } +[@@deriving show { with_path = false }] + +type parsed_package_contents = + | ParsedLibrary of { + main_module_name : string; + source_directories : relative_path list; + test_directories : relative_path list; + dependencies : parsed_package_dependency list; + test_dependencies : parsed_package_dependency list; + markdown_conversion : markdown_conversion option; + } + | ParsedFont of { + main_module_name : string; + font_file_descriptions : font_file_description list; + } + | ParsedDocument of { + dependencies : parsed_package_dependency list; + } +[@@deriving show { with_path = false }] + +type parsed_package_config = ParsedPackageConfig of { + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_authors : string list; + registry_specs : (registry_local_name * registry_remote) list; + external_resources : (string * external_resource) list; + package_contents : parsed_package_contents; +} +[@@deriving show { with_path = false }] diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 06e647ec2..2b16d3856 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -1,6 +1,5 @@ open MyUtil -open EnvelopeSystemBase type lock_name = string [@@deriving show] @@ -21,26 +20,6 @@ type package_name = string type registry_local_name = string [@@deriving show { with_path = false }] -module RegistryLocalNameMap = Map.Make(String) - -type parsed_package_dependency_spec = - | ParsedRegisteredDependency of { - package_name : package_name; - registry_local_name : registry_local_name; - version_requirement : SemanticVersion.requirement; - } - | ParsedLocalFixedDependency of { - relative_path : string; - } -[@@deriving show { with_path = false }] - -type parsed_package_dependency = - | ParsedPackageDependency of { - used_as : string; - spec : parsed_package_dependency_spec; - } -[@@deriving show { with_path = false }] - module RegisteredPackageId = struct type t = { registry_hash_value : string; @@ -229,31 +208,3 @@ type external_resource = extractions : extraction list; } [@@deriving show { with_path = false }] - -type parsed_package_contents = - | ParsedLibrary of { - main_module_name : string; - source_directories : relative_path list; - test_directories : relative_path list; - dependencies : parsed_package_dependency list; - test_dependencies : parsed_package_dependency list; - markdown_conversion : markdown_conversion option; - } - | ParsedFont of { - main_module_name : string; - font_file_descriptions : font_file_description list; - } - | ParsedDocument of { - dependencies : parsed_package_dependency list; - } -[@@deriving show { with_path = false }] - -type parsed_package_config = ParsedPackageConfig of { - language_requirement : SemanticVersion.requirement; - package_name : package_name; - package_authors : string list; - registry_specs : (registry_local_name * registry_remote) list; - external_resources : (string * external_resource) list; - package_contents : parsed_package_contents; -} -[@@deriving show { with_path = false }] From 784a4e44cb33247b1ad2e9df0430b1abad3714ce Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 04:39:44 +0900 Subject: [PATCH 135/381] change the format of the package config, i.e., `saphe.yaml` --- src-saphe/localFixedPackageCollector.ml | 45 +++++++++++------------ src-saphe/packageConfig.ml | 31 ++++++++-------- src-saphe/packageConfig.mli | 4 +-- src-saphe/packageConfigImpl.ml | 4 +-- src-saphe/sapheMain.ml | 31 ++++++++-------- test/saphe/packageConfigTest.ml | 47 +++++++++++++------------ 6 files changed, 79 insertions(+), 83 deletions(-) diff --git a/src-saphe/localFixedPackageCollector.ml b/src-saphe/localFixedPackageCollector.ml index 595e05faf..33b3c2e36 100644 --- a/src-saphe/localFixedPackageCollector.ml +++ b/src-saphe/localFixedPackageCollector.ml @@ -16,8 +16,10 @@ let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : a language_requirement; package_contents; registry_remotes; + source_dependencies; _ } = PackageConfig.load abspath_package_config + (* Ignores `test_dependencies` here, because we do not run the tests of depended packages. *) in let* () = if language_version |> SemanticVersion.fulfill language_requirement then @@ -29,40 +31,35 @@ let get_dependencies ~(language_version : SemanticVersion.t) (absdir_package : a language_requirement; } in - match package_contents with - | PackageConfig.Library{ - main_module_name; - source_directories; - test_directories; - markdown_conversion; - dependencies; - _ - } -> - (* Ignores `test_dependencies` here, because we do not run the tests of depended packages. *) - let envelope_contents = - EnvelopeSystemBase.Library{ + let* envelope_contents = + match package_contents with + | PackageConfig.Library{ + main_module_name; + source_directories; + test_directories; + markdown_conversion; + _ + } -> + return @@ EnvelopeSystemBase.Library{ main_module_name; source_directories; test_directories; markdown_conversion; } - in - return (dependencies, envelope_contents, registry_remotes) - | PackageConfig.Font{ - main_module_name; - font_file_descriptions; - } -> - let envelope_contents = - EnvelopeSystemBase.Font{ + | PackageConfig.Font{ + main_module_name; + font_file_descriptions; + } -> + return @@ EnvelopeSystemBase.Font{ main_module_name; font_file_descriptions; } - in - return ([], envelope_contents, registry_remotes) - | PackageConfig.Document(_) -> - err @@ NotALibraryLocalFixed{ dir = absdir_package } + | PackageConfig.Document(_) -> + err @@ NotALibraryLocalFixed{ dir = absdir_package } + in + return (source_dependencies, envelope_contents, registry_remotes) let rec aux ~(language_version : SemanticVersion.t) (gained : collection) (deps : package_dependency list) (registry_remote_acc : registry_remote Alist.t) : (collection * registry_remote Alist.t, config_error) result = diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index 777d3b9bc..f7176c4e3 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -16,8 +16,6 @@ type package_contents = main_module_name : string; source_directories : relative_path list; test_directories : relative_path list; - dependencies : package_dependency list; - test_dependencies : package_dependency list; markdown_conversion : markdown_conversion option; } | Font of { @@ -35,6 +33,8 @@ type t = { external_resources : (string * external_resource) list; package_contents : package_contents; registry_remotes : registry_remote list; + source_dependencies : package_dependency list; + test_dependencies : package_dependency list; } @@ -157,15 +157,11 @@ let contents_decoder : parsed_package_contents ConfigDecoder.t = get "main_module" string >>= fun main_module_name -> get "source_directories" (list string) >>= fun source_directories -> get_or_else "test_directories" (list string) [] >>= fun test_directories -> - get_or_else "dependencies" (list dependency_decoder) [] >>= fun dependencies -> - get_or_else "test_dependencies" (list dependency_decoder) [] >>= fun test_dependencies -> get_opt "markdown_conversion" markdown_conversion_decoder >>= fun markdown_conversion -> succeed @@ ParsedLibrary { main_module_name; source_directories; test_directories; - dependencies; - test_dependencies; markdown_conversion; } end; @@ -210,13 +206,15 @@ let external_resource_decoder : (string * external_resource) ConfigDecoder.t = let config_decoder : parsed_package_config ConfigDecoder.t = let open ConfigDecoder in - get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> - get "language" requirement_decoder >>= fun language_requirement -> + get "saphe" (version_checker Constant.current_ecosystem_version) >>= fun () -> + get "satysfi" requirement_decoder >>= fun language_requirement -> get "name" package_name_decoder >>= fun package_name -> get "authors" (list string) >>= fun package_authors -> get_or_else "registries" (list registry_spec_decoder) [] >>= fun registry_specs -> get_or_else "external_resources" (list external_resource_decoder) [] >>= fun external_resources -> get "contents" contents_decoder >>= fun package_contents -> + get_or_else "dependencies" (list dependency_decoder) [] >>= fun source_dependencies -> + get_or_else "test_dependencies" (list dependency_decoder) [] >>= fun test_dependencies -> succeed @@ ParsedPackageConfig{ language_requirement; package_name; @@ -224,6 +222,8 @@ let config_decoder : parsed_package_config ConfigDecoder.t = registry_specs; external_resources; package_contents; + source_dependencies; + test_dependencies; } @@ -265,18 +265,12 @@ let validate_contents_spec ~(dir : abs_path) (localmap : registry_remote Regist main_module_name; source_directories; test_directories; - dependencies; - test_dependencies; markdown_conversion; } -> - let* dependencies = mapM (validate_dependency ~dir localmap) dependencies in - let* test_dependencies = mapM (validate_dependency ~dir localmap) test_dependencies in return @@ Library{ main_module_name; source_directories; test_directories; - dependencies; - test_dependencies; markdown_conversion; } @@ -298,6 +292,8 @@ let validate ~(dir : abs_path) (p_package_config : parsed_package_config) : t ok external_resources; package_contents; registry_specs; + source_dependencies; + test_dependencies; } = p_package_config in let* (localmap, registry_remote_acc) = @@ -310,14 +306,19 @@ let validate ~(dir : abs_path) (p_package_config : parsed_package_config) : t ok return (localmap, registry_remote_acc) ) (RegistryLocalNameMap.empty, Alist.empty) in + let registry_remotes = Alist.to_list registry_remote_acc in let* package_contents = validate_contents_spec ~dir localmap package_contents in + let* source_dependencies = mapM (validate_dependency ~dir localmap) source_dependencies in + let* test_dependencies = mapM (validate_dependency ~dir localmap) test_dependencies in return { language_requirement; package_name; package_authors; external_resources; package_contents; - registry_remotes = Alist.to_list registry_remote_acc; + registry_remotes; + source_dependencies; + test_dependencies; } diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index f226dba45..d55a60e9a 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -10,8 +10,6 @@ type package_contents = main_module_name : string; source_directories : relative_path list; test_directories : relative_path list; - dependencies : package_dependency list; - test_dependencies : package_dependency list; markdown_conversion : markdown_conversion option; } | Font of { @@ -29,6 +27,8 @@ type t = { external_resources : (string * external_resource) list; package_contents : package_contents; registry_remotes : registry_remote list; + source_dependencies : package_dependency list; + test_dependencies : package_dependency list; } val parse : string -> (parsed_package_config, yaml_error) result diff --git a/src-saphe/packageConfigImpl.ml b/src-saphe/packageConfigImpl.ml index 67b37e524..1de03025e 100644 --- a/src-saphe/packageConfigImpl.ml +++ b/src-saphe/packageConfigImpl.ml @@ -26,8 +26,6 @@ type parsed_package_contents = main_module_name : string; source_directories : relative_path list; test_directories : relative_path list; - dependencies : parsed_package_dependency list; - test_dependencies : parsed_package_dependency list; markdown_conversion : markdown_conversion option; } | ParsedFont of { @@ -46,5 +44,7 @@ type parsed_package_config = ParsedPackageConfig of { registry_specs : (registry_local_name * registry_remote) list; external_resources : (string * external_resource) list; package_contents : parsed_package_contents; + source_dependencies : parsed_package_dependency list; + test_dependencies : parsed_package_dependency list; } [@@deriving show { with_path = false }] diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 7e9b57e45..0b5be6a67 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -497,20 +497,6 @@ let make_envelope_config (abspath_package_config : abs_path) (package_contents : err @@ NotAPackageButADocument(abspath_package_config) -let make_dependencies_with_flags (package_contents : PackageConfig.package_contents) = - match package_contents with - | PackageConfig.Library{ dependencies; test_dependencies; _ } -> - List.append - (dependencies |> List.map (fun dep -> (SourceDependency, dep))) - (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) - - | PackageConfig.Font(_) -> - [] - - | PackageConfig.Document{ dependencies } -> - dependencies |> List.map (fun dep -> (SourceDependency, dep)) - - let get_minimum_language_version (language_requirement : SemanticVersion.requirement) : SemanticVersion.t = match language_requirement with | SemanticVersion.CompatibleWith(semver) -> semver @@ -815,6 +801,8 @@ let solve ~(fpath_in : string) = language_requirement; package_contents; registry_remotes; + source_dependencies; + test_dependencies; _ } = PackageConfig.load abspath_package_config in @@ -833,7 +821,11 @@ let solve ~(fpath_in : string) = in Logging.end_envelope_config_output abspath_envelope_config; - let dependencies_with_flags = make_dependencies_with_flags package_contents in + let dependencies_with_flags = + List.append + (source_dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) + in return (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) | DocumentSolveInput{ @@ -845,8 +837,9 @@ let solve ~(fpath_in : string) = let* PackageConfig.{ language_requirement; - package_contents; registry_remotes; + source_dependencies; + test_dependencies; _ } = PackageConfig.load abspath_package_config in @@ -855,7 +848,11 @@ let solve ~(fpath_in : string) = (* TODO: consider taking dependencies into account when selecting a language version *) let language_version = get_minimum_language_version language_requirement in - let dependencies_with_flags = make_dependencies_with_flags package_contents in + let dependencies_with_flags = + List.append + (source_dependencies |> List.map (fun dep -> (SourceDependency, dep))) + (test_dependencies |> List.map (fun dep -> (TestOnlyDependency, dep))) + in return (language_version, dependencies_with_flags, abspath_lock_config, registry_remotes) in diff --git a/test/saphe/packageConfigTest.ml b/test/saphe/packageConfigTest.ml index dc730371d..15d7f4ba1 100644 --- a/test/saphe/packageConfigTest.ml +++ b/test/saphe/packageConfigTest.ml @@ -2,12 +2,13 @@ open SapheTestUtil open SapheMain__ConfigError open SapheMain__PackageSystemBase +open SapheMain__PackageConfigImpl module PackageConfig = SapheMain__PackageConfig let input1 = {yaml| -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "stdlib" authors: - "Takashi Suwa" @@ -20,16 +21,16 @@ contents: library: main_module: "Stdlib" source_directories: - - "./src" + - "./src" test_directories: - - "./test" - dependencies: [] - test_dependencies: - - used_as: "Testing" - registered: - registry: "default" - name: "testing" - requirement: "^0.0.1" + - "./test" +dependencies: [] +test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" |yaml} @@ -44,18 +45,6 @@ let expected1 = main_module_name = "Stdlib"; source_directories = [ "./src" ]; test_directories = [ "./test" ]; - dependencies = []; - test_dependencies = [ - ParsedPackageDependency{ - used_as = "Testing"; - spec = - ParsedRegisteredDependency{ - package_name = "testing"; - registry_local_name = "default"; - version_requirement = SemanticVersion.CompatibleWith(make_version "0.0.1"); - }; - }; - ]; markdown_conversion = None; }; registry_specs = [ @@ -64,6 +53,18 @@ let expected1 = branch = "temp-dev-saphe"; }); ]; + source_dependencies = []; + test_dependencies = [ + ParsedPackageDependency{ + used_as = "Testing"; + spec = + ParsedRegisteredDependency{ + package_name = "testing"; + registry_local_name = "default"; + version_requirement = SemanticVersion.CompatibleWith(make_version "0.0.1"); + }; + }; + ]; } From 0c080da139a47a9a57c40b0566e02c049e78d444 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 05:05:38 +0900 Subject: [PATCH 136/381] change the format of lock config and the files generated by `saphe init` --- src-saphe/lockConfig.ml | 4 +-- src-saphe/sapheMain.ml | 60 ++++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src-saphe/lockConfig.ml b/src-saphe/lockConfig.ml index 2a6e57e2f..f6cd39564 100644 --- a/src-saphe/lockConfig.ml +++ b/src-saphe/lockConfig.ml @@ -104,7 +104,7 @@ let lock_encoder ~(dir : abs_path) (lock : locked_package) : Yaml.value = let lock_config_decoder ~(dir : abs_path) : t ConfigDecoder.t = let open ConfigDecoder in - get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> + get "saphe" (version_checker Constant.current_ecosystem_version) >>= fun () -> get_or_else "locks" (list (lock_decoder ~dir)) [] >>= fun locked_packages -> get_or_else "dependencies" (list lock_dependency_decoder) [] >>= fun explicit_dependencies -> get_or_else "test_dependencies" (list lock_dependency_decoder) [] >>= fun explicit_test_dependencies -> @@ -115,7 +115,7 @@ let lock_config_encoder ~(dir : abs_path) (lock_config : t) : Yaml.value = let { locked_packages; explicit_dependencies; explicit_test_dependencies } = lock_config in let requirement = SemanticVersion.CompatibleWith(Constant.current_ecosystem_version) in `O([ - ("ecosystem", `String(SemanticVersion.requirement_to_string requirement)); + ("saphe", `String(SemanticVersion.requirement_to_string requirement)); ("locks", `A(locked_packages |> List.map (lock_encoder ~dir))); ("dependencies", `A(explicit_dependencies |> List.map lock_dependency_encoder)); ("test_dependencies", `A(explicit_test_dependencies |> List.map lock_dependency_encoder)); diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 0b5be6a67..58d7e0544 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -551,8 +551,8 @@ Hello, world! let initial_document_package_config_contents = Core.String.lstrip (Printf.sprintf {string| -ecosystem: "^%s" -language: "^0.1.0" +saphe: "^%s" +satysfi: "^0.1.0" name: "your-document" authors: - "Your Name" @@ -563,18 +563,18 @@ registries: branch: "temp-dev-saphe" contents: document: - dependencies: - - used_as: "StdJaReport" - registered: - registry: "default" - name: "std-ja-report" - requirement: "^0.0.1" +dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" |string} (SemanticVersion.to_string Constant.current_ecosystem_version)) let initial_markdown_package_config_contents = Core.String.lstrip (Printf.sprintf {string| -ecosystem: "^%s" -language: "^0.1.0" +saphe: "^%s" +satysfi: "^0.1.0" name: "your-document" authors: - "Your Name" @@ -585,18 +585,18 @@ registries: branch: "temp-dev-saphe" contents: document: - dependencies: - - used_as: "MDJa" - registered: - registry: "default" - name: "md-ja" - requirement: "^0.0.1" +dependencies: + - used_as: "MDJa" + registered: + registry: "default" + name: "md-ja" + requirement: "^0.0.1" |string} (SemanticVersion.to_string Constant.current_ecosystem_version)) let initial_library_package_config_contents = Core.String.lstrip (Printf.sprintf {string| -ecosystem: "^%s" -language: "^0.1.0" +saphe: "^%s" +satysfi: "^0.1.0" name: "your-library" authors: - "Your Name" @@ -612,18 +612,18 @@ contents: - "./src" test_directories: - "./test" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - test_dependencies: - - used_as: "Testing" - registered: - registry: "default" - name: "testing" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" +test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" |string} (SemanticVersion.to_string Constant.current_ecosystem_version)) From 9b74733b4c3f39291739d6a9939042c2e5142118 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 05:06:41 +0900 Subject: [PATCH 137/381] slightly generalize `check-packages.sh` about the executable name --- check-packages.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/check-packages.sh b/check-packages.sh index ea3b7a94c..ca3b9e387 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -1,17 +1,19 @@ #!/bin/sh +SAPHE="${1:-saphe}" + FAILED=0 for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" echo " ==== $DIR ====" - saphe solve "$DIR" + "$SAPHE" solve "$DIR" if [ $? -ne 0 ]; then echo "! FAILED (not solved)" FAILED=1 fi if diff "$DIR/saphe.lock.yaml" "$DIR/saphe.lock.yaml.expected"; then if diff "$DIR/satysfi-envelope.yaml" "$DIR/satysfi-envelope.yaml.expected"; then - saphe build "$DIR" + "$SAPHE" build "$DIR" if [ $? -ne 0 ]; then echo "! FAILED (cannot build)" FAILED=1 From 3381d214ce0adacabf24600a6ae2e5cf15e214cf Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 05:11:47 +0900 Subject: [PATCH 138/381] update packages about `ecosystem`, `dependencies`, etc. --- .../annot.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/annot/annot.0.0.1/saphe.yaml | 16 +-- .../code/code.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/code/code.0.0.1/saphe.yaml | 26 ++--- .../saphe.lock.yaml.expected | 2 +- .../font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml | 4 +- .../saphe.lock.yaml.expected | 2 +- .../font-junicode.0.0.1/saphe.yaml | 6 +- .../saphe.lock.yaml.expected | 2 +- .../font-latin-modern-math.0.0.1/saphe.yaml | 6 +- .../saphe.lock.yaml.expected | 2 +- .../font-latin-modern.0.0.1/saphe.yaml | 4 +- .../saphe.lock.yaml.expected | 2 +- .../footnote-scheme.0.0.1/saphe.yaml | 16 +-- .../itemize.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/itemize/itemize.0.0.1/saphe.yaml | 16 +-- .../math/math.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/math/math.0.0.1/saphe.yaml | 16 +-- .../md-ja.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/md-ja/md-ja.0.0.1/saphe.yaml | 106 +++++++++--------- .../proof.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/proof/proof.0.0.1/saphe.yaml | 16 +-- .../saphe.lock.yaml.expected | 2 +- .../std-ja-book/std-ja-book.0.0.1/saphe.yaml | 96 ++++++++-------- .../saphe.lock.yaml.expected | 2 +- .../std-ja-report.0.0.1/saphe.yaml | 96 ++++++++-------- .../std-ja.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/std-ja/std-ja.0.0.1/saphe.yaml | 86 +++++++------- .../stdlib.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/stdlib/stdlib.0.0.1/saphe.yaml | 18 +-- .../tabular.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/tabular/tabular.0.0.1/saphe.yaml | 16 +-- .../testing.0.0.1/saphe.lock.yaml.expected | 2 +- .../packages/testing/testing.0.0.1/saphe.yaml | 4 +- 34 files changed, 291 insertions(+), 291 deletions(-) diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml b/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml index 3187f4b42..1d8f3266b 100644 --- a/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/annot/annot.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "annot" authors: - "Daiki Matsunaga <@matsud224>" @@ -14,9 +14,9 @@ contents: main_module: "Annot" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected index eda47e998..2b5e4f8eb 100644 --- a/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/code/code.0.0.1/saphe.yaml b/lib-satysfi/packages/code/code.0.0.1/saphe.yaml index f72d35e0d..84525b279 100644 --- a/lib-satysfi/packages/code/code.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/code/code.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "code" authors: - "Takashi Suwa <@gfngfn>" @@ -14,14 +14,14 @@ contents: main_module: "Code" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml index 690a10656..f6fc0d629 100644 --- a/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-ipa-ex/font-ipa-ex.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "font-ipa-ex" authors: [] external_resources: diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml index 4ffa02167..977112004 100644 --- a/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-junicode/font-junicode.0.0.1/saphe.yaml @@ -1,11 +1,11 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "font-junicode" authors: [] external_resources: - name: "junicode-1.002" zip: - url: "http://downloads.sourceforge.net/project/junicode/junicode/junicode-1.002/junicode-1.002.zip" + url: "https://downloads.sourceforge.net/project/junicode/junicode/junicode-1.002/junicode-1.002.zip" checksum: "b1d6ed8796d8d1eacd733c0d568d939f" extractions: - from: "Junicode.ttf" diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml index 8ba7b34ae..d59c3a603 100644 --- a/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-latin-modern-math/font-latin-modern-math.0.0.1/saphe.yaml @@ -1,11 +1,11 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "font-latin-modern-math" authors: [] external_resources: - name: "latinmodern-math-1959" zip: - url: "http://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" + url: "https://www.gust.org.pl/projects/e-foundry/lm-math/download/latinmodern-math-1959.zip" checksum: "bc82f6d4184ec0ea3ba2c0798e6be719" extractions: - from: "latinmodern-math-1959/otf/latinmodern-math.otf" diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml index b9ac7f831..8ab4a523b 100644 --- a/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/font-latin-modern/font-latin-modern.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "font-latin-modern" authors: [] external_resources: diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml index 24def4032..910b90253 100644 --- a/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/footnote-scheme/footnote-scheme.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "footnote-scheme" authors: - "Takashi Suwa <@gfngfn>" @@ -13,9 +13,9 @@ contents: main_module: "FootnoteScheme" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml index cb9e6a66c..540c56857 100644 --- a/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/itemize/itemize.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "itemize" authors: - "Takashi Suwa <@gfngfn>" @@ -13,9 +13,9 @@ contents: main_module: "Itemize" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/math/math.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/math/math.0.0.1/saphe.yaml b/lib-satysfi/packages/math/math.0.0.1/saphe.yaml index 48d522cf3..82d4263ec 100644 --- a/lib-satysfi/packages/math/math.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/math/math.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "math" authors: - "Takashi Suwa <@gfngfn>" @@ -19,9 +19,9 @@ contents: main_module: "Math" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected index 9ef31d5e3..8a3269919 100644 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml index 267dafc92..b1e6dbe48 100644 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "md-ja" authors: - "Takashi Suwa <@gfngfn>" @@ -14,57 +14,6 @@ contents: main_module: "MDJa" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" - - used_as: "Code" - registered: - registry: "default" - name: "code" - requirement: "^0.0.1" - - used_as: "FootnoteScheme" - registered: - registry: "default" - name: "footnote-scheme" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" markdown_conversion: document: "MDJa.document" paragraph: "+MDJa.p" @@ -85,3 +34,54 @@ contents: code: "\\MDJa.code" link: "\\MDJa.link" img: "\\MDJa.img" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/proof/proof.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml b/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml index d050aac9d..db43e406e 100644 --- a/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/proof/proof.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "proof" authors: - "Takashi Suwa <@gfngfn>" @@ -13,9 +13,9 @@ contents: main_module: "Proof" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected index 2268748a5..560117523 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml index a1745005d..8888f4bd6 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "std-ja-book" authors: - "Takashi Suwa <@gfngfn>" @@ -16,49 +16,49 @@ contents: main_module: "StdJaBook" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" - - used_as: "Code" - registered: - registry: "default" - name: "code" - requirement: "^0.0.1" - - used_as: "FootnoteScheme" - registered: - registry: "default" - name: "footnote-scheme" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected index 2268748a5..560117523 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml index 43c1262de..c0d1e090c 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "std-ja-book" authors: - "Takashi Suwa <@gfngfn>" @@ -17,49 +17,49 @@ contents: main_module: "StdJaReport" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" - - used_as: "Code" - registered: - registry: "default" - name: "code" - requirement: "^0.0.1" - - used_as: "FootnoteScheme" - registered: - registry: "default" - name: "footnote-scheme" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FootnoteScheme" + registered: + registry: "default" + name: "footnote-scheme" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected index e15a423e2..cea94b0b6 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml index 60b7d6773..e1b880303 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "std-ja" authors: - "Takashi Suwa <@gfngfn>" @@ -16,44 +16,44 @@ contents: main_module: "StdJa" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" - - used_as: "Code" - registered: - registry: "default" - name: "code" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected index 90c7da8da..eebb662a6 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.testing.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml index 052465c25..a1183ce60 100644 --- a/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/stdlib/stdlib.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "stdlib" authors: - "Takashi Suwa <@gfngfn>" @@ -16,10 +16,10 @@ contents: - "./src" test_directories: - "./test" - dependencies: [] - test_dependencies: - - used_as: "Testing" - registered: - registry: "default" - name: "testing" - requirement: "^0.0.1" +dependencies: [] +test_dependencies: +- used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected index 9942316ac..b08ac674b 100644 --- a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 dependencies: [] diff --git a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml index a00d9afbe..1ac6855c5 100644 --- a/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/tabular/tabular.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "tabular" authors: - "Takashi Suwa <@gfngfn>" @@ -13,9 +13,9 @@ contents: main_module: "Tabular" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - name: "stdlib" - registry: "default" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + name: "stdlib" + registry: "default" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml index 604632a59..a70457e84 100644 --- a/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/testing/testing.0.0.1/saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "testing" authors: - "Takashi Suwa <@gfngfn>" From 987347bfe40690a2a0c97a69f35bc00833c4fc27 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:00:10 +0900 Subject: [PATCH 139/381] update registered packages --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index ef5dca526..9ceb530ef 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -e05296ff831684ce9c7060383bcb358d384dcdc3 refs/heads/temp-dev-saphe +0f2cbf2950380ef15821b4e7374ac9fc4db269b8 refs/heads/temp-dev-saphe From 52e15d3a55e137fd00a459c4ad1a095ee09e9239 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:00:41 +0900 Subject: [PATCH 140/381] make the top-level `name` in package configs omissible --- src-saphe/packageConfig.ml | 4 ++-- src-saphe/packageConfig.mli | 2 +- src-saphe/packageConfigImpl.ml | 2 +- src-saphe/sapheMain.ml | 2 -- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src-saphe/packageConfig.ml b/src-saphe/packageConfig.ml index f7176c4e3..15e78688e 100644 --- a/src-saphe/packageConfig.ml +++ b/src-saphe/packageConfig.ml @@ -28,7 +28,7 @@ type package_contents = type t = { language_requirement : SemanticVersion.requirement; - package_name : package_name; + package_name : package_name option; package_authors : string list; external_resources : (string * external_resource) list; package_contents : package_contents; @@ -208,7 +208,7 @@ let config_decoder : parsed_package_config ConfigDecoder.t = let open ConfigDecoder in get "saphe" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "satysfi" requirement_decoder >>= fun language_requirement -> - get "name" package_name_decoder >>= fun package_name -> + get_opt "name" package_name_decoder >>= fun package_name -> get "authors" (list string) >>= fun package_authors -> get_or_else "registries" (list registry_spec_decoder) [] >>= fun registry_specs -> get_or_else "external_resources" (list external_resource_decoder) [] >>= fun external_resources -> diff --git a/src-saphe/packageConfig.mli b/src-saphe/packageConfig.mli index d55a60e9a..465861409 100644 --- a/src-saphe/packageConfig.mli +++ b/src-saphe/packageConfig.mli @@ -22,7 +22,7 @@ type package_contents = type t = { language_requirement : SemanticVersion.requirement; - package_name : package_name; + package_name : package_name option; package_authors : string list; external_resources : (string * external_resource) list; package_contents : package_contents; diff --git a/src-saphe/packageConfigImpl.ml b/src-saphe/packageConfigImpl.ml index 1de03025e..2930bc122 100644 --- a/src-saphe/packageConfigImpl.ml +++ b/src-saphe/packageConfigImpl.ml @@ -39,7 +39,7 @@ type parsed_package_contents = type parsed_package_config = ParsedPackageConfig of { language_requirement : SemanticVersion.requirement; - package_name : package_name; + package_name : package_name option; package_authors : string list; registry_specs : (registry_local_name * registry_remote) list; external_resources : (string * external_resource) list; diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 58d7e0544..0dd1bdce3 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -553,7 +553,6 @@ Hello, world! let initial_document_package_config_contents = Core.String.lstrip (Printf.sprintf {string| saphe: "^%s" satysfi: "^0.1.0" -name: "your-document" authors: - "Your Name" registries: @@ -575,7 +574,6 @@ dependencies: let initial_markdown_package_config_contents = Core.String.lstrip (Printf.sprintf {string| saphe: "^%s" satysfi: "^0.1.0" -name: "your-document" authors: - "Your Name" registries: From 3dc4fca6a5881bd116ea075c5c0b8c468c406cd9 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:14:08 +0900 Subject: [PATCH 141/381] fix the package configs generated by `saphe init` --- src-saphe/sapheMain.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 0dd1bdce3..d611e9b63 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -561,7 +561,7 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: + document: {} dependencies: - used_as: "StdJaReport" registered: @@ -582,7 +582,7 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: + document: {} dependencies: - used_as: "MDJa" registered: From c7915d410b0108d357d0eb521a6737a16f77d5b2 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:21:01 +0900 Subject: [PATCH 142/381] fix the integration tests --- tests/clip.saphe.lock.yaml.expected | 2 +- tests/clip.saphe.yaml | 69 +++++++++---------- tests/glue1.saphe.lock.yaml.expected | 2 +- tests/glue1.saphe.yaml | 69 +++++++++---------- tests/images/test.saphe.lock.yaml.expected | 2 +- tests/images/test.saphe.yaml | 39 +++++------ tests/init-doc/foo.saphe.lock.yaml.expected | 2 +- tests/init-md/foo.saphe.lock.yaml.expected | 2 +- .../local-fixed/doc.saphe.lock.yaml.expected | 2 +- tests/local-fixed/doc.saphe.yaml | 25 ++++--- tests/local-fixed/doc.saty | 2 +- tests/local-fixed/show-value/saphe.yaml | 18 ++--- .../show-value/src/show-value.satyh | 6 +- tests/macro1.saphe.lock.yaml.expected | 2 +- tests/macro1.saphe.yaml | 19 +++-- tests/math-typefaces.saphe.lock.yaml.expected | 2 +- tests/math-typefaces.saphe.yaml | 49 +++++++------ tests/math2.saphe.lock.yaml.expected | 2 +- tests/math2.saphe.yaml | 69 +++++++++---------- tests/md/test.saphe.lock.yaml.expected | 2 +- tests/md/test.saphe.yaml | 19 +++-- tests/refactor1.saphe.lock.yaml.expected | 2 +- tests/refactor1.saphe.yaml | 59 ++++++++-------- tests/refactor2.saphe.lock.yaml.expected | 2 +- tests/refactor2.saphe.yaml | 38 +++++----- tests/refactor3.saphe.lock.yaml.expected | 2 +- tests/refactor3.saphe.yaml | 39 +++++------ tests/refactor5.saphe.lock.yaml.expected | 2 +- tests/refactor5.saphe.yaml | 39 +++++------ tests/rename-dep1.saphe.lock.yaml.expected | 2 +- tests/rename-dep1.saphe.yaml | 19 +++-- tests/staged1.saphe.lock.yaml.expected | 2 +- tests/staged1.saphe.yaml | 19 +++-- tests/text_mode/test.saphe.lock.yaml.expected | 2 +- tests/text_mode/test.saphe.yaml | 9 ++- 35 files changed, 314 insertions(+), 326 deletions(-) diff --git a/tests/clip.saphe.lock.yaml.expected b/tests/clip.saphe.lock.yaml.expected index 8dc1fd9d6..77636281b 100644 --- a/tests/clip.saphe.lock.yaml.expected +++ b/tests/clip.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/clip.saphe.yaml b/tests/clip.saphe.yaml index 8016671eb..cdd847012 100644 --- a/tests/clip.saphe.yaml +++ b/tests/clip.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "clip" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,35 +8,35 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/glue1.saphe.lock.yaml.expected b/tests/glue1.saphe.lock.yaml.expected index 8dc1fd9d6..77636281b 100644 --- a/tests/glue1.saphe.lock.yaml.expected +++ b/tests/glue1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/glue1.saphe.yaml b/tests/glue1.saphe.yaml index f65ec54ba..cdd847012 100644 --- a/tests/glue1.saphe.yaml +++ b/tests/glue1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "glue1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,35 +8,35 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/images/test.saphe.lock.yaml.expected b/tests/images/test.saphe.lock.yaml.expected index 43504447b..9ee516238 100644 --- a/tests/images/test.saphe.lock.yaml.expected +++ b/tests/images/test.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/images/test.saphe.yaml b/tests/images/test.saphe.yaml index fcaf3a4f4..060056cd9 100644 --- a/tests/images/test.saphe.yaml +++ b/tests/images/test.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "test" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Daichi OOHASHI <@leque>" - "Takashi Suwa" @@ -10,20 +9,20 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "StdJa" - registered: - registry: "default" - name: "std-ja" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" diff --git a/tests/init-doc/foo.saphe.lock.yaml.expected b/tests/init-doc/foo.saphe.lock.yaml.expected index ae13af04f..6894384da 100644 --- a/tests/init-doc/foo.saphe.lock.yaml.expected +++ b/tests/init-doc/foo.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/init-md/foo.saphe.lock.yaml.expected b/tests/init-md/foo.saphe.lock.yaml.expected index 4980d1629..cc5c99dd5 100644 --- a/tests/init-md/foo.saphe.lock.yaml.expected +++ b/tests/init-md/foo.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/local-fixed/doc.saphe.lock.yaml.expected b/tests/local-fixed/doc.saphe.lock.yaml.expected index 5ba9e4cea..ffe40d6c3 100644 --- a/tests/local-fixed/doc.saphe.lock.yaml.expected +++ b/tests/local-fixed/doc.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/local-fixed/doc.saphe.yaml b/tests/local-fixed/doc.saphe.yaml index 52d673f23..8bc461f7c 100644 --- a/tests/local-fixed/doc.saphe.yaml +++ b/tests/local-fixed/doc.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "local-fixed" +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,13 +8,13 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "StdJaReport" - registered: - registry: "default" - name: "std-ja-report" - requirement: "^0.0.1" - - used_as: "ShowValue" - local: - path: "./show-value/" + document: {} +dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" + - used_as: "ShowValue" + local: + path: "./show-value/" diff --git a/tests/local-fixed/doc.saty b/tests/local-fixed/doc.saty index 71c3aa8ed..36ffed6e1 100644 --- a/tests/local-fixed/doc.saty +++ b/tests/local-fixed/doc.saty @@ -7,7 +7,7 @@ document (| |) '< +chapter{First Chapter}< +p{ - Hello, world! \ShowValue.int(42 + 57); + Hello, world! \ShowValue.int-sum([42, 57]); } > > diff --git a/tests/local-fixed/show-value/saphe.yaml b/tests/local-fixed/show-value/saphe.yaml index 1ef46bcbf..b203e7fe6 100644 --- a/tests/local-fixed/show-value/saphe.yaml +++ b/tests/local-fixed/show-value/saphe.yaml @@ -1,8 +1,8 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "show-value" authors: - - "Your Name" + - "Takashi Suwa" registries: - name: "default" git: @@ -13,9 +13,9 @@ contents: main_module: "ShowValue" source_directories: - "./src" - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" diff --git a/tests/local-fixed/show-value/src/show-value.satyh b/tests/local-fixed/show-value/src/show-value.satyh index 6e9de0184..192663dd9 100644 --- a/tests/local-fixed/show-value/src/show-value.satyh +++ b/tests/local-fixed/show-value/src/show-value.satyh @@ -1,4 +1,6 @@ +use package open Stdlib + module ShowValue = struct - val inline \int n = - embed-string (arabic n) + val inline \int-sum ns = + embed-string (arabic (List.fold-left (+) 0 ns)) end diff --git a/tests/macro1.saphe.lock.yaml.expected b/tests/macro1.saphe.lock.yaml.expected index ae13af04f..6894384da 100644 --- a/tests/macro1.saphe.lock.yaml.expected +++ b/tests/macro1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/macro1.saphe.yaml b/tests/macro1.saphe.yaml index c1ab17019..6bbdfc145 100644 --- a/tests/macro1.saphe.yaml +++ b/tests/macro1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "macro1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,10 +8,10 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "StdJaReport" - registered: - registry: "default" - name: "std-ja-report" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" diff --git a/tests/math-typefaces.saphe.lock.yaml.expected b/tests/math-typefaces.saphe.lock.yaml.expected index ccc544e3f..28d8229e4 100644 --- a/tests/math-typefaces.saphe.lock.yaml.expected +++ b/tests/math-typefaces.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/math-typefaces.saphe.yaml b/tests/math-typefaces.saphe.yaml index f1f5f8d67..6d6c3d730 100644 --- a/tests/math-typefaces.saphe.yaml +++ b/tests/math-typefaces.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "math-typefaces" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,25 +8,25 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "StdJaReport" - registered: - registry: "default" - name: "std-ja-report" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJaReport" + registered: + registry: "default" + name: "std-ja-report" + requirement: "^0.0.1" diff --git a/tests/math2.saphe.lock.yaml.expected b/tests/math2.saphe.lock.yaml.expected index 8dc1fd9d6..77636281b 100644 --- a/tests/math2.saphe.lock.yaml.expected +++ b/tests/math2.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/math2.saphe.yaml b/tests/math2.saphe.yaml index f311fd8b5..cdd847012 100644 --- a/tests/math2.saphe.yaml +++ b/tests/math2.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "math2" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,35 +8,35 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/md/test.saphe.lock.yaml.expected b/tests/md/test.saphe.lock.yaml.expected index 4980d1629..cc5c99dd5 100644 --- a/tests/md/test.saphe.lock.yaml.expected +++ b/tests/md/test.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/md/test.saphe.yaml b/tests/md/test.saphe.yaml index 0c2ad325d..8524b54c9 100644 --- a/tests/md/test.saphe.yaml +++ b/tests/md/test.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "test" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,10 +8,10 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "MDJa" - registered: - registry: "default" - name: "md-ja" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "MDJa" + registered: + registry: "default" + name: "md-ja" + requirement: "^0.0.1" diff --git a/tests/refactor1.saphe.lock.yaml.expected b/tests/refactor1.saphe.lock.yaml.expected index f0e387243..de3aff77b 100644 --- a/tests/refactor1.saphe.lock.yaml.expected +++ b/tests/refactor1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/refactor1.saphe.yaml b/tests/refactor1.saphe.yaml index 254ab0e15..b0ad77194 100644 --- a/tests/refactor1.saphe.yaml +++ b/tests/refactor1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "refactor1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,30 +8,30 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor2.saphe.lock.yaml.expected b/tests/refactor2.saphe.lock.yaml.expected index d95fb1476..86b64da37 100644 --- a/tests/refactor2.saphe.lock.yaml.expected +++ b/tests/refactor2.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/refactor2.saphe.yaml b/tests/refactor2.saphe.yaml index b59194ff5..c1019c7f3 100644 --- a/tests/refactor2.saphe.yaml +++ b/tests/refactor2.saphe.yaml @@ -1,5 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" +saphe: "^0.0.1" +satysfi: "^0.1.0" name: "refactor2" #TODO: remove this authors: - "Takashi Suwa" @@ -9,20 +9,20 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor3.saphe.lock.yaml.expected b/tests/refactor3.saphe.lock.yaml.expected index d95fb1476..86b64da37 100644 --- a/tests/refactor3.saphe.lock.yaml.expected +++ b/tests/refactor3.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/refactor3.saphe.yaml b/tests/refactor3.saphe.yaml index 1f85f0d74..16df25bff 100644 --- a/tests/refactor3.saphe.yaml +++ b/tests/refactor3.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "refactor3" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,20 +8,20 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/refactor5.saphe.lock.yaml.expected b/tests/refactor5.saphe.lock.yaml.expected index d95fb1476..86b64da37 100644 --- a/tests/refactor5.saphe.lock.yaml.expected +++ b/tests/refactor5.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-ipa-ex.0.0.1 dependencies: [] diff --git a/tests/refactor5.saphe.yaml b/tests/refactor5.saphe.yaml index b04ef0411..16df25bff 100644 --- a/tests/refactor5.saphe.yaml +++ b/tests/refactor5.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "refactor5" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,20 +8,20 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "FontJunicode" - registered: - registry: "default" - name: "font-junicode" - requirement: "^0.0.1" - - used_as: "FontIpaEx" - registered: - registry: "default" - name: "font-ipa-ex" - requirement: "^0.0.1" - - used_as: "FontLatinModernMath" - registered: - registry: "default" - name: "font-latin-modern-math" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "FontJunicode" + registered: + registry: "default" + name: "font-junicode" + requirement: "^0.0.1" + - used_as: "FontIpaEx" + registered: + registry: "default" + name: "font-ipa-ex" + requirement: "^0.0.1" + - used_as: "FontLatinModernMath" + registered: + registry: "default" + name: "font-latin-modern-math" + requirement: "^0.0.1" diff --git a/tests/rename-dep1.saphe.lock.yaml.expected b/tests/rename-dep1.saphe.lock.yaml.expected index 84f59c978..7e758431e 100644 --- a/tests/rename-dep1.saphe.lock.yaml.expected +++ b/tests/rename-dep1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/rename-dep1.saphe.yaml b/tests/rename-dep1.saphe.yaml index c34f1be3e..2fda05f9c 100644 --- a/tests/rename-dep1.saphe.yaml +++ b/tests/rename-dep1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "rename-dep1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,10 +8,10 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "StdJaRenamed" #Renames the main module here - registered: - registry: "default" - name: "std-ja" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "StdJaRenamed" #Renames the main module here + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/tests/staged1.saphe.lock.yaml.expected b/tests/staged1.saphe.lock.yaml.expected index d89672ec5..9600b2703 100644 --- a/tests/staged1.saphe.lock.yaml.expected +++ b/tests/staged1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/tests/staged1.saphe.yaml b/tests/staged1.saphe.yaml index 6b1565661..74a86b8a8 100644 --- a/tests/staged1.saphe.yaml +++ b/tests/staged1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "staged1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,10 +8,10 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "StdJa" - registered: - registry: "default" - name: "std-ja" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/tests/text_mode/test.saphe.lock.yaml.expected b/tests/text_mode/test.saphe.lock.yaml.expected index 70fa3cdac..1490cf00b 100644 --- a/tests/text_mode/test.saphe.lock.yaml.expected +++ b/tests/text_mode/test.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: [] dependencies: [] test_dependencies: [] diff --git a/tests/text_mode/test.saphe.yaml b/tests/text_mode/test.saphe.yaml index a29aeaf57..5109da8a8 100644 --- a/tests/text_mode/test.saphe.yaml +++ b/tests/text_mode/test.saphe.yaml @@ -1,9 +1,8 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "test" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: [] contents: - document: - dependencies: [] + document: {} +dependencies: [] From 67918b5745879a2d32e72b5081920b5dfbe0f5ea Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:27:49 +0900 Subject: [PATCH 143/381] fix unit tests about package names --- test/saphe/packageConfigTest.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/saphe/packageConfigTest.ml b/test/saphe/packageConfigTest.ml index 15d7f4ba1..4e60dd14d 100644 --- a/test/saphe/packageConfigTest.ml +++ b/test/saphe/packageConfigTest.ml @@ -37,7 +37,7 @@ test_dependencies: let expected1 = ParsedPackageConfig{ language_requirement = SemanticVersion.CompatibleWith(make_version "0.1.0"); - package_name = "stdlib"; + package_name = Some("stdlib"); package_authors = ["Takashi Suwa"]; external_resources = []; package_contents = From a6125f355af9a611393c0fd53ad122b63d27a4e0 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sat, 17 Feb 2024 06:41:31 +0900 Subject: [PATCH 144/381] update `{demo,doc}/*.saphe.yaml` --- demo/demo.saphe.lock.yaml.expected | 2 +- demo/demo.saphe.yaml | 89 ++++++++++----------- doc/doc-lang.saphe.lock.yaml.expected | 2 +- doc/doc-lang.saphe.yaml | 49 ++++++------ doc/doc-primitives.saphe.lock.yaml.expected | 2 +- doc/doc-primitives.saphe.yaml | 59 +++++++------- doc/math1.saphe.lock.yaml.expected | 2 +- doc/math1.saphe.yaml | 59 +++++++------- 8 files changed, 130 insertions(+), 134 deletions(-) diff --git a/demo/demo.saphe.lock.yaml.expected b/demo/demo.saphe.lock.yaml.expected index 2dff01024..1ed79a636 100644 --- a/demo/demo.saphe.lock.yaml.expected +++ b/demo/demo.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/demo/demo.saphe.yaml b/demo/demo.saphe.yaml index 5718b457f..8ff130155 100644 --- a/demo/demo.saphe.yaml +++ b/demo/demo.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "demo" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,45 +8,45 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Annot" - registered: - registry: "default" - name: "annot" - requirement: "^0.0.1" - - used_as: "Code" - registered: - registry: "default" - name: "code" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "Proof" - registered: - registry: "default" - name: "proof" - requirement: "^0.0.1" - - used_as: "Tabular" - registered: - registry: "default" - name: "tabular" - requirement: "^0.0.1" - - used_as: "StdJaBook" - registered: - registry: "default" - name: "std-ja-book" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Annot" + registered: + registry: "default" + name: "annot" + requirement: "^0.0.1" + - used_as: "Code" + registered: + registry: "default" + name: "code" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "Proof" + registered: + registry: "default" + name: "proof" + requirement: "^0.0.1" + - used_as: "Tabular" + registered: + registry: "default" + name: "tabular" + requirement: "^0.0.1" + - used_as: "StdJaBook" + registered: + registry: "default" + name: "std-ja-book" + requirement: "^0.0.1" diff --git a/doc/doc-lang.saphe.lock.yaml.expected b/doc/doc-lang.saphe.lock.yaml.expected index 841a00257..19ba35597 100644 --- a/doc/doc-lang.saphe.lock.yaml.expected +++ b/doc/doc-lang.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/doc/doc-lang.saphe.yaml b/doc/doc-lang.saphe.yaml index f449e219a..67df6edb2 100644 --- a/doc/doc-lang.saphe.yaml +++ b/doc/doc-lang.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "doc-lang" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,25 +8,25 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "StdJa" - registered: - registry: "default" - name: "std-ja" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" diff --git a/doc/doc-primitives.saphe.lock.yaml.expected b/doc/doc-primitives.saphe.lock.yaml.expected index fcdf20093..80e3010a8 100644 --- a/doc/doc-primitives.saphe.lock.yaml.expected +++ b/doc/doc-primitives.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/doc/doc-primitives.saphe.yaml b/doc/doc-primitives.saphe.yaml index ac646c576..d2d084884 100644 --- a/doc/doc-primitives.saphe.yaml +++ b/doc/doc-primitives.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "doc-primitives" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,30 +8,30 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Itemize" - registered: - registry: "default" - name: "itemize" - requirement: "^0.0.1" - - used_as: "StdJaBook" - registered: - registry: "default" - name: "std-ja-book" - requirement: "^0.0.1" - - used_as: "FontLatinModern" - registered: - registry: "default" - name: "font-latin-modern" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Itemize" + registered: + registry: "default" + name: "itemize" + requirement: "^0.0.1" + - used_as: "StdJaBook" + registered: + registry: "default" + name: "std-ja-book" + requirement: "^0.0.1" + - used_as: "FontLatinModern" + registered: + registry: "default" + name: "font-latin-modern" + requirement: "^0.0.1" diff --git a/doc/math1.saphe.lock.yaml.expected b/doc/math1.saphe.lock.yaml.expected index 76255ef5e..e82fee487 100644 --- a/doc/math1.saphe.lock.yaml.expected +++ b/doc/math1.saphe.lock.yaml.expected @@ -1,4 +1,4 @@ -ecosystem: ^0.0.1 +saphe: ^0.0.1 locks: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.annot.0.0.1 dependencies: diff --git a/doc/math1.saphe.yaml b/doc/math1.saphe.yaml index 23a7dd0fe..8d65fd9dd 100644 --- a/doc/math1.saphe.yaml +++ b/doc/math1.saphe.yaml @@ -1,6 +1,5 @@ -ecosystem: "^0.0.1" -language: "^0.1.0" -name: "math1" #TODO: remove this +saphe: "^0.0.1" +satysfi: "^0.1.0" authors: - "Takashi Suwa" registries: @@ -9,30 +8,30 @@ registries: url: "https://github.com/SATySFi/default-registry" branch: "temp-dev-saphe" contents: - document: - dependencies: - - used_as: "Stdlib" - registered: - registry: "default" - name: "stdlib" - requirement: "^0.0.1" - - used_as: "Math" - registered: - registry: "default" - name: "math" - requirement: "^0.0.1" - - used_as: "Proof" - registered: - registry: "default" - name: "proof" - requirement: "^0.0.1" - - used_as: "Tabular" - registered: - registry: "default" - name: "tabular" - requirement: "^0.0.1" - - used_as: "StdJa" - registered: - registry: "default" - name: "std-ja" - requirement: "^0.0.1" + document: {} +dependencies: + - used_as: "Stdlib" + registered: + registry: "default" + name: "stdlib" + requirement: "^0.0.1" + - used_as: "Math" + registered: + registry: "default" + name: "math" + requirement: "^0.0.1" + - used_as: "Proof" + registered: + registry: "default" + name: "proof" + requirement: "^0.0.1" + - used_as: "Tabular" + registered: + registry: "default" + name: "tabular" + requirement: "^0.0.1" + - used_as: "StdJa" + registered: + registry: "default" + name: "std-ja" + requirement: "^0.0.1" From 520664cc54f72129b55110a9af5e9d900aa3937e Mon Sep 17 00:00:00 2001 From: kyori19 Date: Wed, 20 Mar 2024 07:58:13 +0000 Subject: [PATCH 145/381] make_parse_error_message --- src/frontend/main.ml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index bfa4db1e4..6bd1559c5 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -385,20 +385,20 @@ let make_unification_error_message (dispmap : DisplayMap.t) (ue : unification_er [] (* TODO (error): detailed report *) -let report_parse_error = function +let make_parse_error_message = function | CannotProgressParsing(rng) -> - report_error Parser [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); ] | IllegalItemDepth{ range = rng; before; current } -> - report_error Parser [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "illegal item depth %d after %d" before current); ] | EmptyInputFile(rng) -> - report_error Parser [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("empty input."); ] @@ -961,7 +961,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit ] | FailedToParse(e) -> - report_parse_error e + report_error Parser (make_parse_error_message e) | MainModuleNameMismatch{ expected; got } -> report_error Interface [ From 77b18d4a5a7a1fc9e602582872e2314a580eec3f Mon Sep 17 00:00:00 2001 From: kyori19 Date: Wed, 20 Mar 2024 08:03:46 +0000 Subject: [PATCH 146/381] make_type_error_message --- src/frontend/main.ml | 115 +++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 6bd1559c5..2280cc7cd 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -404,20 +404,20 @@ let make_parse_error_message = function ] -let report_type_error = function +let make_type_error_message = function | UndefinedVariable(rng, varnm, candidates) -> let candidates_message_lines = match make_candidates_message candidates with | None -> [] | Some(s) -> [ NormalLine(s) ] in - report_error Typechecker (List.concat [ + List.concat [ [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined variable '%s'." varnm); ]; candidates_message_lines; - ]) + ] | UndefinedConstructor(rng, constrnm, candidates) -> let candidates_message_lines = @@ -425,66 +425,67 @@ let report_type_error = function | None -> [] | Some(s) -> [ NormalLine(s) ] in - report_error Typechecker (List.concat [ + List.concat [ [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined constructor '%s'." constrnm); ]; candidates_message_lines; - ]) + ] | UndefinedTypeName(rng, tynm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined type '%s'." tynm); ] | UndefinedTypeVariable(rng, tyvarnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined type variable '%s'." tyvarnm); ] | UndefinedRowVariable(rng, rowvarnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined row variable '%s'." rowvarnm); ] | UndefinedKindName(rng, kdnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined kind '%s'." kdnm); ] | UndefinedModuleName(rng, modnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined module '%s'." modnm); ] | UndefinedSignatureName(rng, signm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined signature '%s'." signm); ] + | UndefinedMacro(rng, csnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined macro '%s'." csnm); ] | InvalidNumberOfMacroArguments(rng, macparamtys) -> - report_error Typechecker (List.append [ + List.append [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("invalid number of macro arguments; types expected on arguments are:"); ] (macparamtys |> List.map (function | LateMacroParameter(ty) -> DisplayLine(Printf.sprintf "* %s" (Display.show_mono_type ty)) | EarlyMacroParameter(ty) -> DisplayLine(Printf.sprintf "* ~%s" (Display.show_mono_type ty)) - ))) + )) | LateMacroArgumentExpected(rng, ty) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("an early macro argument is given, but a late argument of type"); DisplayLine(Display.show_mono_type ty); @@ -492,7 +493,7 @@ let report_type_error = function ] | EarlyMacroArgumentExpected(rng, ty) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("a late macro argument is given, but an early argument of type"); DisplayLine(Display.show_mono_type ty); @@ -500,75 +501,74 @@ let report_type_error = function ] | UnknownUnitOfLength(rng, unitnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "undefined unit of length '%s'." unitnm); ] | InlineCommandInMath(rng) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("an inline command is used as a math command."); ] | MathCommandInInline(rng) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("a math command is used as an inline command."); ] | BreaksValueRestriction(rng) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("this expression breaks the value restriction;"); NormalLine("it should be a syntactic function."); ] | MultiplePatternVariable(rng1, rng2, varnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); NormalLine(Printf.sprintf "and at %s:" (Range.to_string rng2)); NormalLine(Printf.sprintf "pattern variable '%s' is bound more than once." varnm); ] | LabelUsedMoreThanOnce(rng, label) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "'%s' is used more than once." label); ] | InvalidExpressionAsToStaging(rng, stage) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("invalid expression as to stage;"); NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); ] | InvalidOccurrenceAsToStaging(rng, varnm, stage) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "invalid occurrence of variable '%s' as to stage;" varnm); NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); ] | ApplicationOfNonFunction(rng, ty) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("this expression has type"); DisplayLine(Display.show_mono_type ty); NormalLine("and thus it cannot be applied to arguments."); ] - | MultiCharacterMathScriptWithoutBrace(rng) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("more than one character is used as a math sub/superscript without braces;"); NormalLine("use braces for making association explicit."); ] | IllegalNumberOfTypeArguments(rng, tynm, lenexp, lenerr) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "'%s' is expected to have %d type argument(s)," tynm lenexp); NormalLine(Printf.sprintf "but it has %d type argument(s) here." lenerr); @@ -604,7 +604,7 @@ let report_type_error = function ]) in let detail = make_unification_error_message dispmap ue in - report_error Typechecker (List.concat [ + List.concat [ [ NormalLine(posmsg); NormalLine("this expression has type"); @@ -614,7 +614,7 @@ let report_type_error = function ]; detail; additional; - ]) + ] | RowUnificationError(rng, row1, row2, ue) -> let dispmap = @@ -625,7 +625,7 @@ let report_type_error = function let str_row1 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in let str_row2 = Display.show_mono_row_by_map dispmap row2 |> Option.value ~default:"" in let detail = make_unification_error_message dispmap ue in - report_error Typechecker (List.concat [ + List.concat [ [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("the option row is"); @@ -635,72 +635,72 @@ let report_type_error = function NormalLine("at the same time, but these are incompatible."); ]; detail; - ]) + ] | TypeParameterBoundMoreThanOnce(rng, tyvarnm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "type variable %s is bound more than once." tyvarnm); ] | ConflictInSignature(rng, member) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "'%s' is declared more than once in a signature." member); ] | NotAStructureSignature(rng, _fsig) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("not a structure signature (TODO (enhance): detailed report)"); ] | NotAFunctorSignature(rng, _ssig) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("not a functor signature (TODO (enhance): detailed report)"); ] | MissingRequiredValueName(rng, x, pty) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required value '%s' of type" x); DisplayLine(Display.show_poly_type pty); ] | MissingRequiredMacroName(rng, csnm, pmacty) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required macro '%s' of type" csnm); DisplayLine(Display.show_poly_macro_type pmacty); ] | MissingRequiredConstructorName(rng, ctornm, _centry) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required constructor '%s' (TODO (enhance): detailed report)" ctornm); ] | MissingRequiredTypeName(rng, tynm, arity) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required type '%s' of arity %d" tynm arity); ] | MissingRequiredModuleName(rng, modnm, _modsig) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required module '%s' (TODO (enhance): detailed report)" modnm); ] | MissingRequiredSignatureName(rng, signm, _absmodsig) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "missing required signature '%s' (TODO (enhance): detailed report)" signm); ] | NotASubtypeAboutValue(rng, x, pty1, pty2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "not a subtype about value '%s'; type" x); DisplayLine(Display.show_poly_type pty1); @@ -709,7 +709,7 @@ let report_type_error = function ] | NotASubtypeAboutValueStage(rng, x, stage1, stage2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "not a subtype about the stage of value '%s';" x); DisplayLine(string_of_stage stage1); @@ -718,7 +718,7 @@ let report_type_error = function ] | NotASubtypeAboutMacro(rng, csnm, pmacty1, pmacty2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "not a subtype about macro '%s'; type" csnm); DisplayLine(Display.show_poly_macro_type pmacty1); @@ -727,26 +727,26 @@ let report_type_error = function ] | NotASubtypeAboutConstructor(rng, ctornm, _tyscheme1, _tyscheme2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "not a subtype about constructor '%s' (TODO (enhance): detailed report)" ctornm); ] | NotASubtypeAboutType(rng, tynm, tentry1, tentry2) -> Format.printf "1: %a,@ 2: %a@," pp_type_entry tentry1 pp_type_entry tentry2; (* TODO: remove this *) - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "not a subtype about type '%s' (TODO (enhance): detailed report)" tynm); ] | NotASubtypeSignature(rng, _modsig1, _modsig2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("not a subtype signature (TODO (enhance): detailed report)"); ] | UnexpectedOptionalLabel(rng, label, ty_cmd) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "unexpected application of label '%s';" label); NormalLine(Printf.sprintf "the command used here has type"); @@ -754,14 +754,14 @@ let report_type_error = function ] | InvalidArityOfCommandApplication(rng, arity_expected, arity_actual) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "this command expects %d argument(s)," arity_expected); NormalLine(Printf.sprintf "but is applied to %d argument(s) here." arity_actual); ] | CannotRestrictTransparentType(rng, tynm) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "cannot restrict transparent type '%s'." tynm); ] @@ -769,7 +769,7 @@ let report_type_error = function | KindContradiction(rng, tynm, kd_expected, kd_actual) -> let Kind(bkds_expected) = kd_expected in let Kind(bkds_actual) = kd_actual in - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "type '%s' expects %d type argument(s)," tynm (List.length bkds_expected)); NormalLine(Printf.sprintf "but is applied to %d type argument(s)." (List.length bkds_actual)); @@ -787,24 +787,23 @@ let report_type_error = function DisplayLine(Printf.sprintf "- '%s' (%s)" tynm (Range.to_string rng)) ) in - report_error Typechecker - (NormalLine("the following synonym types are cyclic:") :: lines) + (NormalLine("the following synonym types are cyclic:") :: lines) | MultipleSynonymTypeDefinition(tynm, rng1, rng2) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); NormalLine(Printf.sprintf "and %s:" (Range.to_string rng2)); NormalLine(Printf.sprintf "synonym type '%s' is defined more than once." tynm); ] | ValueAttributeError(ValueAttribute.Unexpected(rng)) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("unexpected value attributes."); ] | TestMustBeStage1NonRec(rng) -> - report_error Typechecker [ + [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine("tests must be stage-1 non-recursive bindings."); ] @@ -915,7 +914,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit ] | TypeError(tyerr) -> - report_type_error tyerr + report_error Typechecker (make_type_error_message tyerr) | CyclicFileDependency(cycle) -> let pairs = From 82f48bfb81fb5a18d34655132f68707db2db742a Mon Sep 17 00:00:00 2001 From: kyori19 Date: Wed, 20 Mar 2024 08:05:45 +0000 Subject: [PATCH 147/381] make_yaml_error_message --- src/frontend/main.ml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2280cc7cd..2897f669f 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -819,7 +819,7 @@ let show_yaml_context (yctx : YamlDecoder.context) = Printf.sprintf "(context: %s)" (YamlDecoder.show_yaml_context yctx) -let make_yaml_error_lines : yaml_error -> line list = function +let make_yaml_error_message : yaml_error -> line list = function | ParseError(s) -> [ NormalLine(Printf.sprintf "parse error: %s" s) ] @@ -1021,7 +1021,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit report_error Interface (List.append [ NormalLine("failed to load a deps config:"); DisplayLine(get_abs_path_string abspath_deps_config); - ] (make_yaml_error_lines e)) + ] (make_yaml_error_message e)) | EnvelopeConfigNotFound(abspath_envelope_config) -> report_error Interface [ @@ -1033,7 +1033,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit report_error Interface (List.append [ NormalLine("failed to load an envelope config:"); DisplayLine(get_abs_path_string abspath_envelope_config); - ] (make_yaml_error_lines e)) + ] (make_yaml_error_message e)) | DependedEnvelopeNotFound(envelope_name) -> report_error Interface [ From cc4634298a89b99643f4cbfacd7d9e4f895aec1a Mon Sep 17 00:00:00 2001 From: kyori19 Date: Wed, 20 Mar 2024 08:09:20 +0000 Subject: [PATCH 148/381] make_font_error_message --- src/frontend/main.ml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 2897f669f..4aff83784 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1065,37 +1065,37 @@ let report_config_error (display_config : Logging.config) : config_error -> unit end -let report_font_error (display_config : Logging.config) = function +let make_font_error_message (display_config : Logging.config) = function | FailedToReadFont(abspath, msg) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "cannot load font file '%s';" fname); DisplayLine(msg); ] | FailedToDecodeFont(abspath, e) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "cannot decode font file '%s';" fname); NormalLine(Format.asprintf "%a" Otfed.Decode.Error.pp e); ] | FailedToMakeSubset(abspath, e) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "cannot make a subset of font file '%s';" fname); NormalLine(Format.asprintf "%a" Otfed.Subset.Error.pp e); ] | NotASingleFont(abspath) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "the font file '%s' is not a single font file." fname); ] | NotAFontCollectionElement(abspath, index) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "the font file '%s' (used with index %d) is not a collection." fname index); ] @@ -1105,30 +1105,29 @@ let report_font_error (display_config : Logging.config) = function DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) ) in - report_error Interface - (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) + (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) | NoMathTable(abspath) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "font file '%s' does not have a 'MATH' table." fname); ] | PostscriptNameNotFound(abspath) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "font file '%s' does not have a PostScript name." fname); ] | CannotFindUnicodeCmap(abspath) -> let fname = Logging.show_path display_config abspath in - report_error Interface [ + [ NormalLine(Printf.sprintf "font file '%s' does not have a 'cmap' subtable for Unicode code points." fname); ] | CollectionIndexOutOfBounds{ path; index; num_elements } -> let fname = Logging.show_path display_config path in - report_error Interface [ + [ NormalLine(Printf.sprintf "%d: index out of bounds;" index); NormalLine(Printf.sprintf "font file '%s' has %d elements." fname num_elements); ] @@ -1163,7 +1162,7 @@ let error_log_environment (display_config : Logging.config) (suspended : unit -> ] | FontInfo.FontInfoError(e) -> - report_font_error display_config e + report_error Interface (make_font_error_message display_config e) | ImageHashTable.CannotLoadPdf(msg, abspath, pageno) -> let fname = Logging.show_path display_config abspath in From 3bc19c3d01e16303c28f2f6f567a6a979d2a49d6 Mon Sep 17 00:00:00 2001 From: kyori19 Date: Thu, 21 Mar 2024 06:00:28 +0000 Subject: [PATCH 149/381] make_error_message and report_and_exit --- src/frontend/main.ml | 100 +++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 4aff83784..736ea9d53 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1,4 +1,5 @@ +open Format open MyUtil open EnvelopeSystemBase open Types @@ -266,26 +267,38 @@ let show_error_category = function | System -> "Error" -let report_error (cat : error_category) (lines : line list) = - print_string (Printf.sprintf "! [%s] " (show_error_category cat)); +let report_and_exit msg = + print_string msg; + exit 1 + + +let make_error_message (cat : error_category) (lines : line list) = + let buf = Buffer.create 512 in + let formatter = formatter_of_buffer buf in + let f_print_endline s = + pp_print_string formatter s; + pp_print_newline formatter () + in + pp_print_string formatter (Printf.sprintf "! [%s] " (show_error_category cat)); lines |> List.fold_left (fun (is_first : bool) (line : line) -> begin match line with | NormalLine(s) -> if is_first then - print_endline s + f_print_endline s else - print_endline (" " ^ s) + f_print_endline (" " ^ s) | DisplayLine(s) -> if is_first then - print_endline ("\n " ^ s) + f_print_endline ("\n " ^ s) else - print_endline (" " ^ s) + f_print_endline (" " ^ s) end; false ) true |> ignore; - exit 1 + pp_print_flush formatter (); + Buffer.contents buf let make_candidates_message (candidates : string list) = @@ -863,58 +876,58 @@ let make_yaml_error_message : yaml_error -> line list = function [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] -let report_config_error (display_config : Logging.config) : config_error -> unit = function +let make_config_error_message (display_config : Logging.config) : config_error -> string = function | UnexpectedExtension(ext) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); ] | NotALibraryFile(abspath) -> - report_error Typechecker [ + make_error_message Typechecker [ NormalLine("the following file is expected to be a library file, but is not:"); DisplayLine(get_abs_path_string abspath); ] | NotADocumentFile(abspath_in, ty) -> let fname = Logging.show_path display_config abspath_in in - report_error Typechecker [ + make_error_message Typechecker [ NormalLine(Printf.sprintf "file '%s' is not a document file; it is of type" fname); DisplayLine(Display.show_mono_type ty); ] | NotAStringFile(abspath_in, ty) -> let fname = Logging.show_path display_config abspath_in in - report_error Typechecker [ + make_error_message Typechecker [ NormalLine(Printf.sprintf "file '%s' is not a file for generating text; it is of type" fname); DisplayLine(Display.show_mono_type ty); ] | FileModuleNotFound(rng, modnm) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "cannot find a source file that defines module '%s'." modnm); ] | FileModuleNameConflict(modnm, abspath1, abspath2) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "more than one file defines module '%s':" modnm); DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath1)); DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath2)); ] | NoMainModule(modnm) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "no main module '%s'." modnm); ] | UnknownPackageDependency(rng, modnm) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "dependency on unknown package '%s'" modnm); ] | TypeError(tyerr) -> - report_error Typechecker (make_type_error_message tyerr) + make_error_message Typechecker (make_type_error_message tyerr) | CyclicFileDependency(cycle) -> let pairs = @@ -922,58 +935,58 @@ let report_config_error (display_config : Logging.config) : config_error -> unit | Loop(pair) -> [ pair ] | Cycle(pairs) -> pairs |> TupleList.to_list in - report_error Interface ( + make_error_message Interface ( (NormalLine("cyclic dependency detected:")) :: (pairs |> List.map (fun (abspath, _) -> DisplayLine(get_abs_path_string abspath))) ) | CannotReadFileOwingToSystem(msg) -> - report_error Interface [ + make_error_message Interface [ NormalLine("cannot read file:"); DisplayLine(msg); ] | LibraryContainsWholeReturnValue(abspath) -> let fname = get_abs_path_string abspath in - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "file '%s' is not a library; it has a return value." fname); ] | DocumentLacksWholeReturnValue(abspath) -> let fname = get_abs_path_string abspath in - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "file '%s' is not a document; it lacks a return value." fname); ] | CannotUseHeaderUse((rng, mod_chain)) -> let modnm = module_name_chain_to_string mod_chain in - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "cannot specify 'use %s' here; use 'use %s of ...' instead." modnm modnm); ] | CannotUseHeaderUseOf((rng, mod_chain)) -> let modnm = module_name_chain_to_string mod_chain in - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); NormalLine(Printf.sprintf "cannot specify 'use %s of ...' here; use 'use %s' instead." modnm modnm); ] | FailedToParse(e) -> - report_error Parser (make_parse_error_message e) + make_error_message Parser (make_parse_error_message e) | MainModuleNameMismatch{ expected; got } -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "main module name mismatch; expected '%s' but got '%s'." expected got); ] | EnvelopeNameConflict(envelope_name) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "envelope name conflict: '%s'" envelope_name); ] | DependencyOnUnknownEnvelope{ depending; depended } -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "unknown depended envelope '%s' of '%s'." depended depending); ] @@ -988,7 +1001,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit DisplayLine(Printf.sprintf "- '%s'" modnm) ) in - report_error Interface + make_error_message Interface (NormalLine("the following envelopes are cyclic:") :: lines) | LibraryRootConfigNotFoundIn(libpath, candidates) -> @@ -997,7 +1010,7 @@ let report_config_error (display_config : Logging.config) : config_error -> unit DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) ) in - report_error Interface (List.concat [ + make_error_message Interface (List.concat [ [ NormalLine(Printf.sprintf "cannot find a library root config '%s'. candidates:" (get_lib_path_string libpath)) ]; lines; ]) @@ -1008,45 +1021,45 @@ let report_config_error (display_config : Logging.config) : config_error -> unit DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) ) in - report_error Interface + make_error_message Interface (NormalLine(Printf.sprintf "cannot find local file '%s'. candidates:" relative) :: lines) | DepsConfigNotFound(abspath_deps_config) -> - report_error Interface [ + make_error_message Interface [ NormalLine("cannot find a deps config at:"); DisplayLine(get_abs_path_string abspath_deps_config); ] | DepsConfigError(abspath_deps_config, e) -> - report_error Interface (List.append [ + make_error_message Interface (List.append [ NormalLine("failed to load a deps config:"); DisplayLine(get_abs_path_string abspath_deps_config); ] (make_yaml_error_message e)) | EnvelopeConfigNotFound(abspath_envelope_config) -> - report_error Interface [ + make_error_message Interface [ NormalLine("cannot find an envelope config at:"); DisplayLine(get_abs_path_string abspath_envelope_config); ] | EnvelopeConfigError(abspath_envelope_config, e) -> - report_error Interface (List.append [ + make_error_message Interface (List.append [ NormalLine("failed to load an envelope config:"); DisplayLine(get_abs_path_string abspath_envelope_config); ] (make_yaml_error_message e)) | DependedEnvelopeNotFound(envelope_name) -> - report_error Interface [ + make_error_message Interface [ NormalLine(Printf.sprintf "unknown depended envelope '%s'" envelope_name); ] | MarkdownClassNotFound -> - report_error Interface [ + make_error_message Interface [ NormalLine("Markdown class not found"); ] | NoMarkdownConversion -> - report_error Interface [ + make_error_message Interface [ NormalLine("no Markdown conversion"); ] @@ -1054,12 +1067,12 @@ let report_config_error (display_config : Logging.config) : config_error -> unit begin match e with | InvalidHeaderComment -> - report_error Interface [ + make_error_message Interface [ NormalLine("invalid or missing header comment of a Markdown document."); ] | InvalidExtraExpression -> - report_error Interface [ + make_error_message Interface [ NormalLine("cannot parse an extra expression in a Markdown document."); ] end @@ -1134,6 +1147,9 @@ let make_font_error_message (display_config : Logging.config) = function let error_log_environment (display_config : Logging.config) (suspended : unit -> ('a, config_error) result) : ('a, config_error) result = + let report_error kind lines = + report_and_exit (make_error_message kind lines) + in try suspended () with @@ -1372,7 +1388,7 @@ let build_package ) |> function | Ok(()) -> () - | Error(e) -> report_config_error display_config e; exit 1 + | Error(e) -> report_and_exit (make_config_error_message display_config e) let build_document @@ -1480,7 +1496,7 @@ let open ResultMonad in ) |> function | Ok(()) -> () - | Error(e) -> report_config_error display_config e + | Error(e) -> report_and_exit (make_config_error_message display_config e) @@ -1576,4 +1592,4 @@ let test_package end | Error(e) -> - report_config_error display_config e + report_and_exit (make_config_error_message display_config e) From f66c1b168103416eb4fd31859389839c3841f60f Mon Sep 17 00:00:00 2001 From: kyori19 Date: Thu, 21 Mar 2024 06:18:24 +0000 Subject: [PATCH 150/381] ErrorReporting --- src/frontend/errorReporting.ml | 1022 +++++++++++++++++++++++++++++++ src/frontend/errorReporting.mli | 11 + src/frontend/main.ml | 1017 +----------------------------- 3 files changed, 1034 insertions(+), 1016 deletions(-) create mode 100644 src/frontend/errorReporting.ml create mode 100644 src/frontend/errorReporting.mli diff --git a/src/frontend/errorReporting.ml b/src/frontend/errorReporting.ml new file mode 100644 index 000000000..79ef675ad --- /dev/null +++ b/src/frontend/errorReporting.ml @@ -0,0 +1,1022 @@ + +open ConfigError +open FontError +open Format +open MyUtil +open StaticEnv +open Types +open TypeError + + +type line = + | NormalLine of string + | DisplayLine of string + + +type error_category = + | Lexer + | Parser + | Typechecker + | Evaluator + | Interface + | System + + +let show_error_category = function + | Lexer -> "Syntax Error at Lexer" + | Parser -> "Syntax Error at Parser" + | Typechecker -> "Type Error" + | Evaluator -> "Error during Evaluation" + | Interface -> "Error" + | System -> "Error" + + +let report_and_exit msg = + print_string msg; + exit 1 + + +let make_error_message (cat : error_category) (lines : line list) = + let buf = Buffer.create 512 in + let formatter = formatter_of_buffer buf in + let f_print_endline s = + pp_print_string formatter s; + pp_print_newline formatter () + in + pp_print_string formatter (Printf.sprintf "! [%s] " (show_error_category cat)); + lines |> List.fold_left (fun (is_first : bool) (line : line) -> + begin + match line with + | NormalLine(s) -> + if is_first then + f_print_endline s + else + f_print_endline (" " ^ s) + + | DisplayLine(s) -> + if is_first then + f_print_endline ("\n " ^ s) + else + f_print_endline (" " ^ s) + end; + false + ) true |> ignore; + pp_print_flush formatter (); + Buffer.contents buf + + +let make_candidates_message (candidates : string list) = + let quote s = Printf.sprintf "'%s'" s in + let aux (rev_rest : string list) (last : string) = + match rev_rest with + | [] -> quote last + | _ :: _ -> Printf.sprintf "%s or %s" (String.concat ", " (List.map quote (List.rev rev_rest))) (quote last) + in + match List.rev candidates with + | [] -> None + | last :: rev_rest -> Some(Printf.sprintf "Did you mean %s?" (aux rev_rest last)) + + +let make_unification_error_message (dispmap : DisplayMap.t) (ue : unification_error) = + match ue with + | TypeContradiction(ty1_sub, ty2_sub) -> + let dispmap = + dispmap + |> Display.collect_ids_mono ty1_sub + |> Display.collect_ids_mono ty2_sub + in + let str_ty1_sub = Display.show_mono_type_by_map dispmap ty1_sub in + let str_ty2_sub = Display.show_mono_type_by_map dispmap ty2_sub in + [ + NormalLine("Type"); + DisplayLine(str_ty1_sub); + NormalLine("is not compatible with"); + DisplayLine(Printf.sprintf "%s." str_ty2_sub); + ] + + | TypeVariableInclusion(fid, ty) -> + let dispmap = dispmap |> Display.collect_ids_mono ty in + let (dispmap, str_fid) = dispmap |> DisplayMap.add_free_id fid in + let str_ty = Display.show_mono_type_by_map dispmap ty in + [ + NormalLine(Printf.sprintf "Type variable %s occurs in" str_fid); + DisplayLine(Printf.sprintf "%s." str_ty); + ] + + | RowContradiction(row1, row2) -> + let dispmap = + dispmap + |> Display.collect_ids_mono_row row1 + |> Display.collect_ids_mono_row row2 + in + let str_row1 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in + let str_row2 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in + [ + NormalLine("Row"); + DisplayLine(str_row1); + NormalLine("is not compatible with"); + DisplayLine(Printf.sprintf "%s." str_row2); + ] + + | RowVariableInclusion(frid, row) -> + let labset = FreeRowID.get_label_set frid in + let (dispmap, str_frid) = dispmap |> DisplayMap.add_free_row_id frid labset in + let dispmap = dispmap |> Display.collect_ids_mono_row row in + let str_row = Display.show_mono_row_by_map dispmap row |> Option.value ~default:"" in + [ + NormalLine(Printf.sprintf "Row variable %s occurs in" str_frid); + DisplayLine(Printf.sprintf "%s." str_row); + ] + + | CommandArityMismatch(len1, len2) -> + [ + NormalLine(Printf.sprintf "The command type has %d type argument(s), but is expected to have %d." len1 len2); + ] + + | CommandOptionalLabelMismatch(label) -> + [ + NormalLine(Printf.sprintf "Label '%s' in a command type makes the contradiction." label); + ] + + | BreaksRowDisjointness(label) -> + [ + NormalLine(Printf.sprintf "The row must not contain label '%s'." label); + ] + + | BreaksLabelMembershipByFreeRowVariable(_frid, label, _labset) -> + [ + NormalLine(Printf.sprintf "The row does not contain label '%s'." label); + ] (* TODO (error): detailed report *) + + | BreaksLabelMembershipByBoundRowVariable(_mbbrid, label) -> + [ + NormalLine(Printf.sprintf "The row does not contain label '%s'." label); + ] (* TODO (error): detailed report *) + + | BreaksLabelMembershipByEmptyRow(label) -> + [ + NormalLine(Printf.sprintf "The row does not contain label '%s'." label); + ] + + | InsufficientRowVariableConstraint(_mbbrid, _labset_expected, _labset_actual) -> + [] (* TODO (error): detailed report *) + + +let make_parse_error_message = function + | CannotProgressParsing(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + ] + + | IllegalItemDepth{ range = rng; before; current } -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "illegal item depth %d after %d" before current); + ] + + | EmptyInputFile(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("empty input."); + ] + + +let make_type_error_message = function + | UndefinedVariable(rng, varnm, candidates) -> + let candidates_message_lines = + match make_candidates_message candidates with + | None -> [] + | Some(s) -> [ NormalLine(s) ] + in + List.concat [ + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined variable '%s'." varnm); + ]; + candidates_message_lines; + ] + + | UndefinedConstructor(rng, constrnm, candidates) -> + let candidates_message_lines = + match make_candidates_message candidates with + | None -> [] + | Some(s) -> [ NormalLine(s) ] + in + List.concat [ + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined constructor '%s'." constrnm); + ]; + candidates_message_lines; + ] + + | UndefinedTypeName(rng, tynm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined type '%s'." tynm); + ] + + | UndefinedTypeVariable(rng, tyvarnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined type variable '%s'." tyvarnm); + ] + + | UndefinedRowVariable(rng, rowvarnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined row variable '%s'." rowvarnm); + ] + + | UndefinedKindName(rng, kdnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined kind '%s'." kdnm); + ] + + | UndefinedModuleName(rng, modnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined module '%s'." modnm); + ] + + | UndefinedSignatureName(rng, signm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined signature '%s'." signm); + ] + + | UndefinedMacro(rng, csnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined macro '%s'." csnm); + ] + + | InvalidNumberOfMacroArguments(rng, macparamtys) -> + List.append [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("invalid number of macro arguments; types expected on arguments are:"); + ] (macparamtys |> List.map (function + | LateMacroParameter(ty) -> DisplayLine(Printf.sprintf "* %s" (Display.show_mono_type ty)) + | EarlyMacroParameter(ty) -> DisplayLine(Printf.sprintf "* ~%s" (Display.show_mono_type ty)) + )) + + | LateMacroArgumentExpected(rng, ty) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("an early macro argument is given, but a late argument of type"); + DisplayLine(Display.show_mono_type ty); + NormalLine("is expected."); + ] + + | EarlyMacroArgumentExpected(rng, ty) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("a late macro argument is given, but an early argument of type"); + DisplayLine(Display.show_mono_type ty); + NormalLine("is expected."); + ] + + | UnknownUnitOfLength(rng, unitnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "undefined unit of length '%s'." unitnm); + ] + + | InlineCommandInMath(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("an inline command is used as a math command."); + ] + + | MathCommandInInline(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("a math command is used as an inline command."); + ] + + | BreaksValueRestriction(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("this expression breaks the value restriction;"); + NormalLine("it should be a syntactic function."); + ] + + | MultiplePatternVariable(rng1, rng2, varnm) -> + [ + NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); + NormalLine(Printf.sprintf "and at %s:" (Range.to_string rng2)); + NormalLine(Printf.sprintf "pattern variable '%s' is bound more than once." varnm); + ] + + | LabelUsedMoreThanOnce(rng, label) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "'%s' is used more than once." label); + ] + + | InvalidExpressionAsToStaging(rng, stage) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("invalid expression as to stage;"); + NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); + ] + + | InvalidOccurrenceAsToStaging(rng, varnm, stage) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "invalid occurrence of variable '%s' as to stage;" varnm); + NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); + ] + + | ApplicationOfNonFunction(rng, ty) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("this expression has type"); + DisplayLine(Display.show_mono_type ty); + NormalLine("and thus it cannot be applied to arguments."); + ] + + | MultiCharacterMathScriptWithoutBrace(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("more than one character is used as a math sub/superscript without braces;"); + NormalLine("use braces for making association explicit."); + ] + + | IllegalNumberOfTypeArguments(rng, tynm, lenexp, lenerr) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "'%s' is expected to have %d type argument(s)," tynm lenexp); + NormalLine(Printf.sprintf "but it has %d type argument(s) here." lenerr); + ] + + | TypeUnificationError(((rng1, _) as ty1), ((rng2, _) as ty2), ue) -> + let dispmap = + DisplayMap.empty + |> Display.collect_ids_mono ty1 + |> Display.collect_ids_mono ty2 + in + let strty1 = Display.show_mono_type_by_map dispmap ty1 in + let strty2 = Display.show_mono_type_by_map dispmap ty2 in + let strrng1 = Range.to_string rng1 in + let strrng2 = Range.to_string rng2 in + let (posmsg, strtyA, strtyB, additional) = + match (Range.is_dummy rng1, Range.is_dummy rng2) with + | (true, true) -> + (Printf.sprintf "(cannot report position; '%s', '%s')" (Range.message rng1) (Range.message rng2), + strty1, strty2, []) + + | (true, false) -> + (Printf.sprintf "at %s:" strrng2, strty2, strty1, []) + + | (false, true) -> + (Printf.sprintf "at %s:" strrng1, strty1, strty2, []) + + | (false, false) -> + (Printf.sprintf "at %s:" strrng1, strty1, strty2, + [ + NormalLine("This constraint is required by the expression"); + NormalLine(Printf.sprintf "at %s." strrng2); + ]) + in + let detail = make_unification_error_message dispmap ue in + List.concat [ + [ + NormalLine(posmsg); + NormalLine("this expression has type"); + DisplayLine(Printf.sprintf "%s," strtyA); + NormalLine("but is expected of type"); + DisplayLine(Printf.sprintf "%s." strtyB); + ]; + detail; + additional; + ] + + | RowUnificationError(rng, row1, row2, ue) -> + let dispmap = + DisplayMap.empty + |> Display.collect_ids_mono_row row1 + |> Display.collect_ids_mono_row row2 + in + let str_row1 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in + let str_row2 = Display.show_mono_row_by_map dispmap row2 |> Option.value ~default:"" in + let detail = make_unification_error_message dispmap ue in + List.concat [ + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("the option row is"); + DisplayLine(str_row1); + NormalLine("and"); + DisplayLine(Printf.sprintf "%s," str_row2); + NormalLine("at the same time, but these are incompatible."); + ]; + detail; + ] + + | TypeParameterBoundMoreThanOnce(rng, tyvarnm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "type variable %s is bound more than once." tyvarnm); + ] + + | ConflictInSignature(rng, member) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "'%s' is declared more than once in a signature." member); + ] + + | NotAStructureSignature(rng, _fsig) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("not a structure signature (TODO (enhance): detailed report)"); + ] + + | NotAFunctorSignature(rng, _ssig) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("not a functor signature (TODO (enhance): detailed report)"); + ] + + | MissingRequiredValueName(rng, x, pty) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required value '%s' of type" x); + DisplayLine(Display.show_poly_type pty); + ] + + | MissingRequiredMacroName(rng, csnm, pmacty) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required macro '%s' of type" csnm); + DisplayLine(Display.show_poly_macro_type pmacty); + ] + + | MissingRequiredConstructorName(rng, ctornm, _centry) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required constructor '%s' (TODO (enhance): detailed report)" ctornm); + ] + + | MissingRequiredTypeName(rng, tynm, arity) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required type '%s' of arity %d" tynm arity); + ] + + | MissingRequiredModuleName(rng, modnm, _modsig) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required module '%s' (TODO (enhance): detailed report)" modnm); + ] + + | MissingRequiredSignatureName(rng, signm, _absmodsig) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required signature '%s' (TODO (enhance): detailed report)" signm); + ] + + | NotASubtypeAboutValue(rng, x, pty1, pty2) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "not a subtype about value '%s'; type" x); + DisplayLine(Display.show_poly_type pty1); + NormalLine("is not a subtype of"); + DisplayLine(Display.show_poly_type pty2); + ] + + | NotASubtypeAboutValueStage(rng, x, stage1, stage2) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "not a subtype about the stage of value '%s';" x); + DisplayLine(string_of_stage stage1); + NormalLine("is not consistent with"); + DisplayLine(string_of_stage stage2); + ] + + | NotASubtypeAboutMacro(rng, csnm, pmacty1, pmacty2) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "not a subtype about macro '%s'; type" csnm); + DisplayLine(Display.show_poly_macro_type pmacty1); + NormalLine("is not a subtype of"); + DisplayLine(Display.show_poly_macro_type pmacty2); + ] + + | NotASubtypeAboutConstructor(rng, ctornm, _tyscheme1, _tyscheme2) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "not a subtype about constructor '%s' (TODO (enhance): detailed report)" ctornm); + ] + + | NotASubtypeAboutType(rng, tynm, tentry1, tentry2) -> + Format.printf "1: %a,@ 2: %a@," pp_type_entry tentry1 pp_type_entry tentry2; (* TODO: remove this *) + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "not a subtype about type '%s' (TODO (enhance): detailed report)" tynm); + ] + + | NotASubtypeSignature(rng, _modsig1, _modsig2) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("not a subtype signature (TODO (enhance): detailed report)"); + ] + + | UnexpectedOptionalLabel(rng, label, ty_cmd) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "unexpected application of label '%s';" label); + NormalLine(Printf.sprintf "the command used here has type"); + DisplayLine(Display.show_mono_type ty_cmd); + ] + + | InvalidArityOfCommandApplication(rng, arity_expected, arity_actual) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "this command expects %d argument(s)," arity_expected); + NormalLine(Printf.sprintf "but is applied to %d argument(s) here." arity_actual); + ] + + | CannotRestrictTransparentType(rng, tynm) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "cannot restrict transparent type '%s'." tynm); + ] + + | KindContradiction(rng, tynm, kd_expected, kd_actual) -> + let Kind(bkds_expected) = kd_expected in + let Kind(bkds_actual) = kd_actual in + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "type '%s' expects %d type argument(s)," tynm (List.length bkds_expected)); + NormalLine(Printf.sprintf "but is applied to %d type argument(s)." (List.length bkds_actual)); + ] + + | CyclicSynonymTypeDefinition(cycle) -> + let pairs = + match cycle with + | Loop(pair) -> [ pair ] + | Cycle(pairs) -> pairs |> TupleList.to_list + in + let lines = + pairs |> List.map (fun (tynm, data) -> + let rng = data.SynonymDependencyGraph.position in + DisplayLine(Printf.sprintf "- '%s' (%s)" tynm (Range.to_string rng)) + ) + in + (NormalLine("the following synonym types are cyclic:") :: lines) + + | MultipleSynonymTypeDefinition(tynm, rng1, rng2) -> + [ + NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); + NormalLine(Printf.sprintf "and %s:" (Range.to_string rng2)); + NormalLine(Printf.sprintf "synonym type '%s' is defined more than once." tynm); + ] + + | ValueAttributeError(ValueAttribute.Unexpected(rng)) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("unexpected value attributes."); + ] + + | TestMustBeStage1NonRec(rng) -> + [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("tests must be stage-1 non-recursive bindings."); + ] + + +let module_name_chain_to_string (((_, modnm0), modidents) : module_name_chain) = + let modidents = modidents |> List.map (fun (_, modnm) -> modnm) in + let modidents = modnm0 :: modidents in + modidents |> String.concat "." + + +let show_yaml_context (yctx : YamlDecoder.context) = + Printf.sprintf "(context: %s)" (YamlDecoder.show_yaml_context yctx) + + +let make_yaml_error_message : yaml_error -> line list = function + | ParseError(s) -> + [ NormalLine(Printf.sprintf "parse error: %s" s) ] + + | FieldNotFound(yctx, field) -> + [ NormalLine(Printf.sprintf "field '%s' not found %s" field (show_yaml_context yctx)) ] + + | NotAFloat(yctx) -> + [ NormalLine(Printf.sprintf "not a float value %s" (show_yaml_context yctx)) ] + + | NotAString(yctx) -> + [ NormalLine(Printf.sprintf "not a string value %s" (show_yaml_context yctx)) ] + + | NotABool(yctx) -> + [ NormalLine(Printf.sprintf "not a Boolean value %s" (show_yaml_context yctx)) ] + + | NotAnArray(yctx) -> + [ NormalLine(Printf.sprintf "not an array %s" (show_yaml_context yctx)) ] + + | NotAnObject(yctx) -> + [ NormalLine(Printf.sprintf "not an object %s" (show_yaml_context yctx)) ] + + | BranchNotFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "expected tags not found; should contain exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine("but only contains:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + | MoreThanOneBranchFound{ context = yctx; expected_tags; got_tags } -> + [ + NormalLine(Printf.sprintf "more than one expected tag found:"); + DisplayLine(got_tags |> String.concat ", "); + NormalLine("should be exactly one of:"); + DisplayLine(expected_tags |> String.concat ", "); + NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); + ] + + | NotACommand{ context = yctx; prefix = _; string = s } -> + [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] + + +let make_config_error_message (display_config : Logging.config) : config_error -> string = function + | UnexpectedExtension(ext) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); + ] + + | NotALibraryFile(abspath) -> + make_error_message Typechecker [ + NormalLine("the following file is expected to be a library file, but is not:"); + DisplayLine(get_abs_path_string abspath); + ] + + | NotADocumentFile(abspath_in, ty) -> + let fname = Logging.show_path display_config abspath_in in + make_error_message Typechecker [ + NormalLine(Printf.sprintf "file '%s' is not a document file; it is of type" fname); + DisplayLine(Display.show_mono_type ty); + ] + + | NotAStringFile(abspath_in, ty) -> + let fname = Logging.show_path display_config abspath_in in + make_error_message Typechecker [ + NormalLine(Printf.sprintf "file '%s' is not a file for generating text; it is of type" fname); + DisplayLine(Display.show_mono_type ty); + ] + + | FileModuleNotFound(rng, modnm) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "cannot find a source file that defines module '%s'." modnm); + ] + + | FileModuleNameConflict(modnm, abspath1, abspath2) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "more than one file defines module '%s':" modnm); + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath1)); + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath2)); + ] + + | NoMainModule(modnm) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "no main module '%s'." modnm); + ] + + | UnknownPackageDependency(rng, modnm) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "dependency on unknown package '%s'" modnm); + ] + + | TypeError(tyerr) -> + make_error_message Typechecker (make_type_error_message tyerr) + + | CyclicFileDependency(cycle) -> + let pairs = + match cycle with + | Loop(pair) -> [ pair ] + | Cycle(pairs) -> pairs |> TupleList.to_list + in + make_error_message Interface ( + (NormalLine("cyclic dependency detected:")) :: + (pairs |> List.map (fun (abspath, _) -> DisplayLine(get_abs_path_string abspath))) + ) + + | CannotReadFileOwingToSystem(msg) -> + make_error_message Interface [ + NormalLine("cannot read file:"); + DisplayLine(msg); + ] + + | LibraryContainsWholeReturnValue(abspath) -> + let fname = get_abs_path_string abspath in + make_error_message Interface [ + NormalLine(Printf.sprintf "file '%s' is not a library; it has a return value." fname); + ] + + | DocumentLacksWholeReturnValue(abspath) -> + let fname = get_abs_path_string abspath in + make_error_message Interface [ + NormalLine(Printf.sprintf "file '%s' is not a document; it lacks a return value." fname); + ] + + | CannotUseHeaderUse((rng, mod_chain)) -> + let modnm = module_name_chain_to_string mod_chain in + make_error_message Interface [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "cannot specify 'use %s' here; use 'use %s of ...' instead." modnm modnm); + ] + + | CannotUseHeaderUseOf((rng, mod_chain)) -> + let modnm = module_name_chain_to_string mod_chain in + make_error_message Interface [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "cannot specify 'use %s of ...' here; use 'use %s' instead." modnm modnm); + ] + + | FailedToParse(e) -> + make_error_message Parser (make_parse_error_message e) + + | MainModuleNameMismatch{ expected; got } -> + make_error_message Interface [ + NormalLine(Printf.sprintf "main module name mismatch; expected '%s' but got '%s'." expected got); + ] + + | EnvelopeNameConflict(envelope_name) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "envelope name conflict: '%s'" envelope_name); + ] + + | DependencyOnUnknownEnvelope{ depending; depended } -> + make_error_message Interface [ + NormalLine(Printf.sprintf "unknown depended envelope '%s' of '%s'." depended depending); + ] + + | CyclicEnvelopeDependency(cycle) -> + let pairs = + match cycle with + | Loop(pair) -> [ pair ] + | Cycle(pairs) -> pairs |> TupleList.to_list + in + let lines = + pairs |> List.map (fun (modnm, _envelope) -> + DisplayLine(Printf.sprintf "- '%s'" modnm) + ) + in + make_error_message Interface + (NormalLine("the following envelopes are cyclic:") :: lines) + + | LibraryRootConfigNotFoundIn(libpath, candidates) -> + let lines = + candidates |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + make_error_message Interface (List.concat [ + [ NormalLine(Printf.sprintf "cannot find a library root config '%s'. candidates:" (get_lib_path_string libpath)) ]; + lines; + ]) + + | LocalFileNotFound{ relative; candidates } -> + let lines = + candidates |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + make_error_message Interface + (NormalLine(Printf.sprintf "cannot find local file '%s'. candidates:" relative) :: lines) + + | DepsConfigNotFound(abspath_deps_config) -> + make_error_message Interface [ + NormalLine("cannot find a deps config at:"); + DisplayLine(get_abs_path_string abspath_deps_config); + ] + + | DepsConfigError(abspath_deps_config, e) -> + make_error_message Interface (List.append [ + NormalLine("failed to load a deps config:"); + DisplayLine(get_abs_path_string abspath_deps_config); + ] (make_yaml_error_message e)) + + | EnvelopeConfigNotFound(abspath_envelope_config) -> + make_error_message Interface [ + NormalLine("cannot find an envelope config at:"); + DisplayLine(get_abs_path_string abspath_envelope_config); + ] + + | EnvelopeConfigError(abspath_envelope_config, e) -> + make_error_message Interface (List.append [ + NormalLine("failed to load an envelope config:"); + DisplayLine(get_abs_path_string abspath_envelope_config); + ] (make_yaml_error_message e)) + + | DependedEnvelopeNotFound(envelope_name) -> + make_error_message Interface [ + NormalLine(Printf.sprintf "unknown depended envelope '%s'" envelope_name); + ] + + | MarkdownClassNotFound -> + make_error_message Interface [ + NormalLine("Markdown class not found"); + ] + + | NoMarkdownConversion -> + make_error_message Interface [ + NormalLine("no Markdown conversion"); + ] + + | MarkdownError(e) -> + begin + match e with + | InvalidHeaderComment -> + make_error_message Interface [ + NormalLine("invalid or missing header comment of a Markdown document."); + ] + + | InvalidExtraExpression -> + make_error_message Interface [ + NormalLine("cannot parse an extra expression in a Markdown document."); + ] + end + + +let make_font_error_message (display_config : Logging.config) = function + | FailedToReadFont(abspath, msg) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "cannot load font file '%s';" fname); + DisplayLine(msg); + ] + + | FailedToDecodeFont(abspath, e) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "cannot decode font file '%s';" fname); + NormalLine(Format.asprintf "%a" Otfed.Decode.Error.pp e); + ] + + | FailedToMakeSubset(abspath, e) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "cannot make a subset of font file '%s';" fname); + NormalLine(Format.asprintf "%a" Otfed.Subset.Error.pp e); + ] + + | NotASingleFont(abspath) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "the font file '%s' is not a single font file." fname); + ] + + | NotAFontCollectionElement(abspath, index) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "the font file '%s' (used with index %d) is not a collection." fname index); + ] + + | CannotFindLibraryFileAsToFont(libpath, candidates) -> + let lines = + candidates |> List.map (fun abspath -> + DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) + ) + in + (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) + + | NoMathTable(abspath) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "font file '%s' does not have a 'MATH' table." fname); + ] + + | PostscriptNameNotFound(abspath) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "font file '%s' does not have a PostScript name." fname); + ] + + | CannotFindUnicodeCmap(abspath) -> + let fname = Logging.show_path display_config abspath in + [ + NormalLine(Printf.sprintf "font file '%s' does not have a 'cmap' subtable for Unicode code points." fname); + ] + + | CollectionIndexOutOfBounds{ path; index; num_elements } -> + let fname = Logging.show_path display_config path in + [ + NormalLine(Printf.sprintf "%d: index out of bounds;" index); + NormalLine(Printf.sprintf "font file '%s' has %d elements." fname num_elements); + ] + + +let error_log_environment (display_config : Logging.config) (suspended : unit -> ('a, config_error) result) : ('a, config_error) result = + let report_error kind lines = + report_and_exit (make_error_message kind lines) + in + try + suspended () + with + | RemainsToBeImplemented(msg) -> + report_error Interface [ + NormalLine("remains to be supported:"); + DisplayLine(msg); + ] + + | LoadHyph.InvalidPatternElement(rng) -> + report_error System [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine("invalid string for hyphenation pattern."); + ] + + | HorzBox.FontIsNotSet{ raw; normalized } -> + report_error Interface [ + NormalLine("font is not set;"); + DisplayLine(Printf.sprintf "- raw script: %s" (CharBasis.show_script raw)); + DisplayLine(Printf.sprintf "- normalized script: %s" (CharBasis.show_script normalized)); + ] + + | HorzBox.MathFontIsNotSet -> + report_error Interface [ + NormalLine("math font is not set."); + ] + + | FontInfo.FontInfoError(e) -> + report_error Interface (make_font_error_message display_config e) + + | ImageHashTable.CannotLoadPdf(msg, abspath, pageno) -> + let fname = Logging.show_path display_config abspath in + report_error Interface [ + NormalLine(Printf.sprintf "cannot load PDF file '%s' page #%d;" fname pageno); + DisplayLine(msg); + ] + + | ImageHashTable.CannotLoadImage(msg, abspath) -> + let fname = Logging.show_path display_config abspath in + report_error Interface [ + NormalLine(Printf.sprintf "cannot load image file '%s';" fname); + DisplayLine(msg); + ] + + | ImageHashTable.ImageOfWrongFileType(abspath) -> + let fname = Logging.show_path display_config abspath in + report_error Interface [ + NormalLine(Printf.sprintf "cannot load image file '%s';" fname); + DisplayLine("This file format is not supported."); + ] + + | ImageHashTable.UnsupportedColorModel(_, abspath) -> + let fname = Logging.show_path display_config abspath in + report_error Interface [ + NormalLine(Printf.sprintf "cannot load image file '%s';" fname); + DisplayLine("This color model is not supported."); + ] + + | Lexer.LexError(rng, s) -> + report_error Lexer [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(s); + ] + + | MyYojsonUtil.SyntaxError(fname, msg) -> + report_error System [ + NormalLine(Printf.sprintf "in '%s':" fname); + NormalLine(msg); + ] + + | MyYojsonUtil.MultipleDesignation(rng, key) -> + report_error System [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "multiple designation for key '%s'." key); + ] + + | Yojson.SafePos.Util.Type_error(msg, (pos, _)) -> + let rng = MyYojsonUtil.make_range pos in + report_error System [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(msg); + ] + + | MyYojsonUtil.MissingRequiredKey(rng, key) -> + report_error System [ + NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); + NormalLine(Printf.sprintf "missing required key '%s'." key); + ] + + | Evaluator.EvalError(s) + | Vm.ExecError(s) + -> report_error Evaluator [ NormalLine(s); ] + + | State.NotDuringPageBreak -> + report_error Evaluator [ + NormalLine("a primitive as to PDF annotation was called before page breaking starts."); + ] + + | PageBreak.PageNumberLimitExceeded(m) -> + report_error Evaluator [ + NormalLine(Printf.sprintf "page number limit (= %d) exceeded." m); + NormalLine(Printf.sprintf "If you really want to output more than %d pages, use '--page-number-limit'." m); + ] + + | Sys_error(s) -> + report_error System [ NormalLine(s); ] diff --git a/src/frontend/errorReporting.mli b/src/frontend/errorReporting.mli new file mode 100644 index 000000000..21398670e --- /dev/null +++ b/src/frontend/errorReporting.mli @@ -0,0 +1,11 @@ + +open ConfigError + + +val make_config_error_message : Logging.config -> config_error -> string + + +val error_log_environment : Logging.config -> (unit -> ('a, config_error) result) -> ('a, config_error) result + + +val report_and_exit : string -> unit diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 736ea9d53..e74f89b4f 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -1,12 +1,10 @@ -open Format open MyUtil open EnvelopeSystemBase +open ErrorReporting open Types open StaticEnv open ConfigError -open FontError -open TypeError let version = @@ -245,1019 +243,6 @@ let preprocess_and_evaluate (display_config : Logging.config) (pdf_config : Hand eval_document_file display_config pdf_config ~page_number_limit ~is_bytecomp_mode output_mode env ast_doc abspath_out abspath_dump -type line = - | NormalLine of string - | DisplayLine of string - -type error_category = - | Lexer - | Parser - | Typechecker - | Evaluator - | Interface - | System - - -let show_error_category = function - | Lexer -> "Syntax Error at Lexer" - | Parser -> "Syntax Error at Parser" - | Typechecker -> "Type Error" - | Evaluator -> "Error during Evaluation" - | Interface -> "Error" - | System -> "Error" - - -let report_and_exit msg = - print_string msg; - exit 1 - - -let make_error_message (cat : error_category) (lines : line list) = - let buf = Buffer.create 512 in - let formatter = formatter_of_buffer buf in - let f_print_endline s = - pp_print_string formatter s; - pp_print_newline formatter () - in - pp_print_string formatter (Printf.sprintf "! [%s] " (show_error_category cat)); - lines |> List.fold_left (fun (is_first : bool) (line : line) -> - begin - match line with - | NormalLine(s) -> - if is_first then - f_print_endline s - else - f_print_endline (" " ^ s) - - | DisplayLine(s) -> - if is_first then - f_print_endline ("\n " ^ s) - else - f_print_endline (" " ^ s) - end; - false - ) true |> ignore; - pp_print_flush formatter (); - Buffer.contents buf - - -let make_candidates_message (candidates : string list) = - let quote s = Printf.sprintf "'%s'" s in - let aux (rev_rest : string list) (last : string) = - match rev_rest with - | [] -> quote last - | _ :: _ -> Printf.sprintf "%s or %s" (String.concat ", " (List.map quote (List.rev rev_rest))) (quote last) - in - match List.rev candidates with - | [] -> None - | last :: rev_rest -> Some(Printf.sprintf "Did you mean %s?" (aux rev_rest last)) - - -let make_unification_error_message (dispmap : DisplayMap.t) (ue : unification_error) = - match ue with - | TypeContradiction(ty1_sub, ty2_sub) -> - let dispmap = - dispmap - |> Display.collect_ids_mono ty1_sub - |> Display.collect_ids_mono ty2_sub - in - let str_ty1_sub = Display.show_mono_type_by_map dispmap ty1_sub in - let str_ty2_sub = Display.show_mono_type_by_map dispmap ty2_sub in - [ - NormalLine("Type"); - DisplayLine(str_ty1_sub); - NormalLine("is not compatible with"); - DisplayLine(Printf.sprintf "%s." str_ty2_sub); - ] - - | TypeVariableInclusion(fid, ty) -> - let dispmap = dispmap |> Display.collect_ids_mono ty in - let (dispmap, str_fid) = dispmap |> DisplayMap.add_free_id fid in - let str_ty = Display.show_mono_type_by_map dispmap ty in - [ - NormalLine(Printf.sprintf "Type variable %s occurs in" str_fid); - DisplayLine(Printf.sprintf "%s." str_ty); - ] - - | RowContradiction(row1, row2) -> - let dispmap = - dispmap - |> Display.collect_ids_mono_row row1 - |> Display.collect_ids_mono_row row2 - in - let str_row1 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in - let str_row2 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in - [ - NormalLine("Row"); - DisplayLine(str_row1); - NormalLine("is not compatible with"); - DisplayLine(Printf.sprintf "%s." str_row2); - ] - - | RowVariableInclusion(frid, row) -> - let labset = FreeRowID.get_label_set frid in - let (dispmap, str_frid) = dispmap |> DisplayMap.add_free_row_id frid labset in - let dispmap = dispmap |> Display.collect_ids_mono_row row in - let str_row = Display.show_mono_row_by_map dispmap row |> Option.value ~default:"" in - [ - NormalLine(Printf.sprintf "Row variable %s occurs in" str_frid); - DisplayLine(Printf.sprintf "%s." str_row); - ] - - | CommandArityMismatch(len1, len2) -> - [ - NormalLine(Printf.sprintf "The command type has %d type argument(s), but is expected to have %d." len1 len2); - ] - - | CommandOptionalLabelMismatch(label) -> - [ - NormalLine(Printf.sprintf "Label '%s' in a command type makes the contradiction." label); - ] - - | BreaksRowDisjointness(label) -> - [ - NormalLine(Printf.sprintf "The row must not contain label '%s'." label); - ] - - | BreaksLabelMembershipByFreeRowVariable(_frid, label, _labset) -> - [ - NormalLine(Printf.sprintf "The row does not contain label '%s'." label); - ] (* TODO (error): detailed report *) - - | BreaksLabelMembershipByBoundRowVariable(_mbbrid, label) -> - [ - NormalLine(Printf.sprintf "The row does not contain label '%s'." label); - ] (* TODO (error): detailed report *) - - | BreaksLabelMembershipByEmptyRow(label) -> - [ - NormalLine(Printf.sprintf "The row does not contain label '%s'." label); - ] - - | InsufficientRowVariableConstraint(_mbbrid, _labset_expected, _labset_actual) -> - [] (* TODO (error): detailed report *) - - -let make_parse_error_message = function - | CannotProgressParsing(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - ] - - | IllegalItemDepth{ range = rng; before; current } -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "illegal item depth %d after %d" before current); - ] - - | EmptyInputFile(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("empty input."); - ] - - -let make_type_error_message = function - | UndefinedVariable(rng, varnm, candidates) -> - let candidates_message_lines = - match make_candidates_message candidates with - | None -> [] - | Some(s) -> [ NormalLine(s) ] - in - List.concat [ - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined variable '%s'." varnm); - ]; - candidates_message_lines; - ] - - | UndefinedConstructor(rng, constrnm, candidates) -> - let candidates_message_lines = - match make_candidates_message candidates with - | None -> [] - | Some(s) -> [ NormalLine(s) ] - in - List.concat [ - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined constructor '%s'." constrnm); - ]; - candidates_message_lines; - ] - - | UndefinedTypeName(rng, tynm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined type '%s'." tynm); - ] - - | UndefinedTypeVariable(rng, tyvarnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined type variable '%s'." tyvarnm); - ] - - | UndefinedRowVariable(rng, rowvarnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined row variable '%s'." rowvarnm); - ] - - | UndefinedKindName(rng, kdnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined kind '%s'." kdnm); - ] - - | UndefinedModuleName(rng, modnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined module '%s'." modnm); - ] - - | UndefinedSignatureName(rng, signm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined signature '%s'." signm); - ] - - | UndefinedMacro(rng, csnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined macro '%s'." csnm); - ] - - | InvalidNumberOfMacroArguments(rng, macparamtys) -> - List.append [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("invalid number of macro arguments; types expected on arguments are:"); - ] (macparamtys |> List.map (function - | LateMacroParameter(ty) -> DisplayLine(Printf.sprintf "* %s" (Display.show_mono_type ty)) - | EarlyMacroParameter(ty) -> DisplayLine(Printf.sprintf "* ~%s" (Display.show_mono_type ty)) - )) - - | LateMacroArgumentExpected(rng, ty) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("an early macro argument is given, but a late argument of type"); - DisplayLine(Display.show_mono_type ty); - NormalLine("is expected."); - ] - - | EarlyMacroArgumentExpected(rng, ty) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("a late macro argument is given, but an early argument of type"); - DisplayLine(Display.show_mono_type ty); - NormalLine("is expected."); - ] - - | UnknownUnitOfLength(rng, unitnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "undefined unit of length '%s'." unitnm); - ] - - | InlineCommandInMath(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("an inline command is used as a math command."); - ] - - | MathCommandInInline(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("a math command is used as an inline command."); - ] - - | BreaksValueRestriction(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("this expression breaks the value restriction;"); - NormalLine("it should be a syntactic function."); - ] - - | MultiplePatternVariable(rng1, rng2, varnm) -> - [ - NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); - NormalLine(Printf.sprintf "and at %s:" (Range.to_string rng2)); - NormalLine(Printf.sprintf "pattern variable '%s' is bound more than once." varnm); - ] - - | LabelUsedMoreThanOnce(rng, label) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "'%s' is used more than once." label); - ] - - | InvalidExpressionAsToStaging(rng, stage) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("invalid expression as to stage;"); - NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); - ] - - | InvalidOccurrenceAsToStaging(rng, varnm, stage) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "invalid occurrence of variable '%s' as to stage;" varnm); - NormalLine(Printf.sprintf "should be used at %s." (string_of_stage stage)); - ] - - | ApplicationOfNonFunction(rng, ty) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("this expression has type"); - DisplayLine(Display.show_mono_type ty); - NormalLine("and thus it cannot be applied to arguments."); - ] - - | MultiCharacterMathScriptWithoutBrace(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("more than one character is used as a math sub/superscript without braces;"); - NormalLine("use braces for making association explicit."); - ] - - | IllegalNumberOfTypeArguments(rng, tynm, lenexp, lenerr) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "'%s' is expected to have %d type argument(s)," tynm lenexp); - NormalLine(Printf.sprintf "but it has %d type argument(s) here." lenerr); - ] - - | TypeUnificationError(((rng1, _) as ty1), ((rng2, _) as ty2), ue) -> - let dispmap = - DisplayMap.empty - |> Display.collect_ids_mono ty1 - |> Display.collect_ids_mono ty2 - in - let strty1 = Display.show_mono_type_by_map dispmap ty1 in - let strty2 = Display.show_mono_type_by_map dispmap ty2 in - let strrng1 = Range.to_string rng1 in - let strrng2 = Range.to_string rng2 in - let (posmsg, strtyA, strtyB, additional) = - match (Range.is_dummy rng1, Range.is_dummy rng2) with - | (true, true) -> - (Printf.sprintf "(cannot report position; '%s', '%s')" (Range.message rng1) (Range.message rng2), - strty1, strty2, []) - - | (true, false) -> - (Printf.sprintf "at %s:" strrng2, strty2, strty1, []) - - | (false, true) -> - (Printf.sprintf "at %s:" strrng1, strty1, strty2, []) - - | (false, false) -> - (Printf.sprintf "at %s:" strrng1, strty1, strty2, - [ - NormalLine("This constraint is required by the expression"); - NormalLine(Printf.sprintf "at %s." strrng2); - ]) - in - let detail = make_unification_error_message dispmap ue in - List.concat [ - [ - NormalLine(posmsg); - NormalLine("this expression has type"); - DisplayLine(Printf.sprintf "%s," strtyA); - NormalLine("but is expected of type"); - DisplayLine(Printf.sprintf "%s." strtyB); - ]; - detail; - additional; - ] - - | RowUnificationError(rng, row1, row2, ue) -> - let dispmap = - DisplayMap.empty - |> Display.collect_ids_mono_row row1 - |> Display.collect_ids_mono_row row2 - in - let str_row1 = Display.show_mono_row_by_map dispmap row1 |> Option.value ~default:"" in - let str_row2 = Display.show_mono_row_by_map dispmap row2 |> Option.value ~default:"" in - let detail = make_unification_error_message dispmap ue in - List.concat [ - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("the option row is"); - DisplayLine(str_row1); - NormalLine("and"); - DisplayLine(Printf.sprintf "%s," str_row2); - NormalLine("at the same time, but these are incompatible."); - ]; - detail; - ] - - | TypeParameterBoundMoreThanOnce(rng, tyvarnm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "type variable %s is bound more than once." tyvarnm); - ] - - | ConflictInSignature(rng, member) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "'%s' is declared more than once in a signature." member); - ] - - | NotAStructureSignature(rng, _fsig) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("not a structure signature (TODO (enhance): detailed report)"); - ] - - | NotAFunctorSignature(rng, _ssig) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("not a functor signature (TODO (enhance): detailed report)"); - ] - - | MissingRequiredValueName(rng, x, pty) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required value '%s' of type" x); - DisplayLine(Display.show_poly_type pty); - ] - - | MissingRequiredMacroName(rng, csnm, pmacty) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required macro '%s' of type" csnm); - DisplayLine(Display.show_poly_macro_type pmacty); - ] - - | MissingRequiredConstructorName(rng, ctornm, _centry) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required constructor '%s' (TODO (enhance): detailed report)" ctornm); - ] - - | MissingRequiredTypeName(rng, tynm, arity) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required type '%s' of arity %d" tynm arity); - ] - - | MissingRequiredModuleName(rng, modnm, _modsig) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required module '%s' (TODO (enhance): detailed report)" modnm); - ] - - | MissingRequiredSignatureName(rng, signm, _absmodsig) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required signature '%s' (TODO (enhance): detailed report)" signm); - ] - - | NotASubtypeAboutValue(rng, x, pty1, pty2) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "not a subtype about value '%s'; type" x); - DisplayLine(Display.show_poly_type pty1); - NormalLine("is not a subtype of"); - DisplayLine(Display.show_poly_type pty2); - ] - - | NotASubtypeAboutValueStage(rng, x, stage1, stage2) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "not a subtype about the stage of value '%s';" x); - DisplayLine(string_of_stage stage1); - NormalLine("is not consistent with"); - DisplayLine(string_of_stage stage2); - ] - - | NotASubtypeAboutMacro(rng, csnm, pmacty1, pmacty2) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "not a subtype about macro '%s'; type" csnm); - DisplayLine(Display.show_poly_macro_type pmacty1); - NormalLine("is not a subtype of"); - DisplayLine(Display.show_poly_macro_type pmacty2); - ] - - | NotASubtypeAboutConstructor(rng, ctornm, _tyscheme1, _tyscheme2) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "not a subtype about constructor '%s' (TODO (enhance): detailed report)" ctornm); - ] - - | NotASubtypeAboutType(rng, tynm, tentry1, tentry2) -> - Format.printf "1: %a,@ 2: %a@," pp_type_entry tentry1 pp_type_entry tentry2; (* TODO: remove this *) - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "not a subtype about type '%s' (TODO (enhance): detailed report)" tynm); - ] - - | NotASubtypeSignature(rng, _modsig1, _modsig2) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("not a subtype signature (TODO (enhance): detailed report)"); - ] - - | UnexpectedOptionalLabel(rng, label, ty_cmd) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "unexpected application of label '%s';" label); - NormalLine(Printf.sprintf "the command used here has type"); - DisplayLine(Display.show_mono_type ty_cmd); - ] - - | InvalidArityOfCommandApplication(rng, arity_expected, arity_actual) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "this command expects %d argument(s)," arity_expected); - NormalLine(Printf.sprintf "but is applied to %d argument(s) here." arity_actual); - ] - - | CannotRestrictTransparentType(rng, tynm) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "cannot restrict transparent type '%s'." tynm); - ] - - | KindContradiction(rng, tynm, kd_expected, kd_actual) -> - let Kind(bkds_expected) = kd_expected in - let Kind(bkds_actual) = kd_actual in - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "type '%s' expects %d type argument(s)," tynm (List.length bkds_expected)); - NormalLine(Printf.sprintf "but is applied to %d type argument(s)." (List.length bkds_actual)); - ] - - | CyclicSynonymTypeDefinition(cycle) -> - let pairs = - match cycle with - | Loop(pair) -> [ pair ] - | Cycle(pairs) -> pairs |> TupleList.to_list - in - let lines = - pairs |> List.map (fun (tynm, data) -> - let rng = data.SynonymDependencyGraph.position in - DisplayLine(Printf.sprintf "- '%s' (%s)" tynm (Range.to_string rng)) - ) - in - (NormalLine("the following synonym types are cyclic:") :: lines) - - | MultipleSynonymTypeDefinition(tynm, rng1, rng2) -> - [ - NormalLine(Printf.sprintf "at %s" (Range.to_string rng1)); - NormalLine(Printf.sprintf "and %s:" (Range.to_string rng2)); - NormalLine(Printf.sprintf "synonym type '%s' is defined more than once." tynm); - ] - - | ValueAttributeError(ValueAttribute.Unexpected(rng)) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("unexpected value attributes."); - ] - - | TestMustBeStage1NonRec(rng) -> - [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("tests must be stage-1 non-recursive bindings."); - ] - - -let module_name_chain_to_string (((_, modnm0), modidents) : module_name_chain) = - let modidents = modidents |> List.map (fun (_, modnm) -> modnm) in - let modidents = modnm0 :: modidents in - modidents |> String.concat "." - - -let show_yaml_context (yctx : YamlDecoder.context) = - Printf.sprintf "(context: %s)" (YamlDecoder.show_yaml_context yctx) - - -let make_yaml_error_message : yaml_error -> line list = function - | ParseError(s) -> - [ NormalLine(Printf.sprintf "parse error: %s" s) ] - - | FieldNotFound(yctx, field) -> - [ NormalLine(Printf.sprintf "field '%s' not found %s" field (show_yaml_context yctx)) ] - - | NotAFloat(yctx) -> - [ NormalLine(Printf.sprintf "not a float value %s" (show_yaml_context yctx)) ] - - | NotAString(yctx) -> - [ NormalLine(Printf.sprintf "not a string value %s" (show_yaml_context yctx)) ] - - | NotABool(yctx) -> - [ NormalLine(Printf.sprintf "not a Boolean value %s" (show_yaml_context yctx)) ] - - | NotAnArray(yctx) -> - [ NormalLine(Printf.sprintf "not an array %s" (show_yaml_context yctx)) ] - - | NotAnObject(yctx) -> - [ NormalLine(Printf.sprintf "not an object %s" (show_yaml_context yctx)) ] - - | BranchNotFound{ context = yctx; expected_tags; got_tags } -> - [ - NormalLine(Printf.sprintf "expected tags not found; should contain exactly one of:"); - DisplayLine(expected_tags |> String.concat ", "); - NormalLine("but only contains:"); - DisplayLine(got_tags |> String.concat ", "); - NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); - ] - - | MoreThanOneBranchFound{ context = yctx; expected_tags; got_tags } -> - [ - NormalLine(Printf.sprintf "more than one expected tag found:"); - DisplayLine(got_tags |> String.concat ", "); - NormalLine("should be exactly one of:"); - DisplayLine(expected_tags |> String.concat ", "); - NormalLine(Printf.sprintf "%s" (show_yaml_context yctx)); - ] - - | NotACommand{ context = yctx; prefix = _; string = s } -> - [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] - - -let make_config_error_message (display_config : Logging.config) : config_error -> string = function - | UnexpectedExtension(ext) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "unexpected file extension '%s'." ext); - ] - - | NotALibraryFile(abspath) -> - make_error_message Typechecker [ - NormalLine("the following file is expected to be a library file, but is not:"); - DisplayLine(get_abs_path_string abspath); - ] - - | NotADocumentFile(abspath_in, ty) -> - let fname = Logging.show_path display_config abspath_in in - make_error_message Typechecker [ - NormalLine(Printf.sprintf "file '%s' is not a document file; it is of type" fname); - DisplayLine(Display.show_mono_type ty); - ] - - | NotAStringFile(abspath_in, ty) -> - let fname = Logging.show_path display_config abspath_in in - make_error_message Typechecker [ - NormalLine(Printf.sprintf "file '%s' is not a file for generating text; it is of type" fname); - DisplayLine(Display.show_mono_type ty); - ] - - | FileModuleNotFound(rng, modnm) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "cannot find a source file that defines module '%s'." modnm); - ] - - | FileModuleNameConflict(modnm, abspath1, abspath2) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "more than one file defines module '%s':" modnm); - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath1)); - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath2)); - ] - - | NoMainModule(modnm) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "no main module '%s'." modnm); - ] - - | UnknownPackageDependency(rng, modnm) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "dependency on unknown package '%s'" modnm); - ] - - | TypeError(tyerr) -> - make_error_message Typechecker (make_type_error_message tyerr) - - | CyclicFileDependency(cycle) -> - let pairs = - match cycle with - | Loop(pair) -> [ pair ] - | Cycle(pairs) -> pairs |> TupleList.to_list - in - make_error_message Interface ( - (NormalLine("cyclic dependency detected:")) :: - (pairs |> List.map (fun (abspath, _) -> DisplayLine(get_abs_path_string abspath))) - ) - - | CannotReadFileOwingToSystem(msg) -> - make_error_message Interface [ - NormalLine("cannot read file:"); - DisplayLine(msg); - ] - - | LibraryContainsWholeReturnValue(abspath) -> - let fname = get_abs_path_string abspath in - make_error_message Interface [ - NormalLine(Printf.sprintf "file '%s' is not a library; it has a return value." fname); - ] - - | DocumentLacksWholeReturnValue(abspath) -> - let fname = get_abs_path_string abspath in - make_error_message Interface [ - NormalLine(Printf.sprintf "file '%s' is not a document; it lacks a return value." fname); - ] - - | CannotUseHeaderUse((rng, mod_chain)) -> - let modnm = module_name_chain_to_string mod_chain in - make_error_message Interface [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "cannot specify 'use %s' here; use 'use %s of ...' instead." modnm modnm); - ] - - | CannotUseHeaderUseOf((rng, mod_chain)) -> - let modnm = module_name_chain_to_string mod_chain in - make_error_message Interface [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "cannot specify 'use %s of ...' here; use 'use %s' instead." modnm modnm); - ] - - | FailedToParse(e) -> - make_error_message Parser (make_parse_error_message e) - - | MainModuleNameMismatch{ expected; got } -> - make_error_message Interface [ - NormalLine(Printf.sprintf "main module name mismatch; expected '%s' but got '%s'." expected got); - ] - - | EnvelopeNameConflict(envelope_name) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "envelope name conflict: '%s'" envelope_name); - ] - - | DependencyOnUnknownEnvelope{ depending; depended } -> - make_error_message Interface [ - NormalLine(Printf.sprintf "unknown depended envelope '%s' of '%s'." depended depending); - ] - - | CyclicEnvelopeDependency(cycle) -> - let pairs = - match cycle with - | Loop(pair) -> [ pair ] - | Cycle(pairs) -> pairs |> TupleList.to_list - in - let lines = - pairs |> List.map (fun (modnm, _envelope) -> - DisplayLine(Printf.sprintf "- '%s'" modnm) - ) - in - make_error_message Interface - (NormalLine("the following envelopes are cyclic:") :: lines) - - | LibraryRootConfigNotFoundIn(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - make_error_message Interface (List.concat [ - [ NormalLine(Printf.sprintf "cannot find a library root config '%s'. candidates:" (get_lib_path_string libpath)) ]; - lines; - ]) - - | LocalFileNotFound{ relative; candidates } -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - make_error_message Interface - (NormalLine(Printf.sprintf "cannot find local file '%s'. candidates:" relative) :: lines) - - | DepsConfigNotFound(abspath_deps_config) -> - make_error_message Interface [ - NormalLine("cannot find a deps config at:"); - DisplayLine(get_abs_path_string abspath_deps_config); - ] - - | DepsConfigError(abspath_deps_config, e) -> - make_error_message Interface (List.append [ - NormalLine("failed to load a deps config:"); - DisplayLine(get_abs_path_string abspath_deps_config); - ] (make_yaml_error_message e)) - - | EnvelopeConfigNotFound(abspath_envelope_config) -> - make_error_message Interface [ - NormalLine("cannot find an envelope config at:"); - DisplayLine(get_abs_path_string abspath_envelope_config); - ] - - | EnvelopeConfigError(abspath_envelope_config, e) -> - make_error_message Interface (List.append [ - NormalLine("failed to load an envelope config:"); - DisplayLine(get_abs_path_string abspath_envelope_config); - ] (make_yaml_error_message e)) - - | DependedEnvelopeNotFound(envelope_name) -> - make_error_message Interface [ - NormalLine(Printf.sprintf "unknown depended envelope '%s'" envelope_name); - ] - - | MarkdownClassNotFound -> - make_error_message Interface [ - NormalLine("Markdown class not found"); - ] - - | NoMarkdownConversion -> - make_error_message Interface [ - NormalLine("no Markdown conversion"); - ] - - | MarkdownError(e) -> - begin - match e with - | InvalidHeaderComment -> - make_error_message Interface [ - NormalLine("invalid or missing header comment of a Markdown document."); - ] - - | InvalidExtraExpression -> - make_error_message Interface [ - NormalLine("cannot parse an extra expression in a Markdown document."); - ] - end - - -let make_font_error_message (display_config : Logging.config) = function - | FailedToReadFont(abspath, msg) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "cannot load font file '%s';" fname); - DisplayLine(msg); - ] - - | FailedToDecodeFont(abspath, e) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "cannot decode font file '%s';" fname); - NormalLine(Format.asprintf "%a" Otfed.Decode.Error.pp e); - ] - - | FailedToMakeSubset(abspath, e) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "cannot make a subset of font file '%s';" fname); - NormalLine(Format.asprintf "%a" Otfed.Subset.Error.pp e); - ] - - | NotASingleFont(abspath) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "the font file '%s' is not a single font file." fname); - ] - - | NotAFontCollectionElement(abspath, index) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "the font file '%s' (used with index %d) is not a collection." fname index); - ] - - | CannotFindLibraryFileAsToFont(libpath, candidates) -> - let lines = - candidates |> List.map (fun abspath -> - DisplayLine(Printf.sprintf "- %s" (get_abs_path_string abspath)) - ) - in - (NormalLine(Printf.sprintf "cannot find '%s'. candidates:" (get_lib_path_string libpath)) :: lines) - - | NoMathTable(abspath) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "font file '%s' does not have a 'MATH' table." fname); - ] - - | PostscriptNameNotFound(abspath) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "font file '%s' does not have a PostScript name." fname); - ] - - | CannotFindUnicodeCmap(abspath) -> - let fname = Logging.show_path display_config abspath in - [ - NormalLine(Printf.sprintf "font file '%s' does not have a 'cmap' subtable for Unicode code points." fname); - ] - - | CollectionIndexOutOfBounds{ path; index; num_elements } -> - let fname = Logging.show_path display_config path in - [ - NormalLine(Printf.sprintf "%d: index out of bounds;" index); - NormalLine(Printf.sprintf "font file '%s' has %d elements." fname num_elements); - ] - - -let error_log_environment (display_config : Logging.config) (suspended : unit -> ('a, config_error) result) : ('a, config_error) result = - let report_error kind lines = - report_and_exit (make_error_message kind lines) - in - try - suspended () - with - | RemainsToBeImplemented(msg) -> - report_error Interface [ - NormalLine("remains to be supported:"); - DisplayLine(msg); - ] - - | LoadHyph.InvalidPatternElement(rng) -> - report_error System [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine("invalid string for hyphenation pattern."); - ] - - | HorzBox.FontIsNotSet{ raw; normalized } -> - report_error Interface [ - NormalLine("font is not set;"); - DisplayLine(Printf.sprintf "- raw script: %s" (CharBasis.show_script raw)); - DisplayLine(Printf.sprintf "- normalized script: %s" (CharBasis.show_script normalized)); - ] - - | HorzBox.MathFontIsNotSet -> - report_error Interface [ - NormalLine("math font is not set."); - ] - - | FontInfo.FontInfoError(e) -> - report_error Interface (make_font_error_message display_config e) - - | ImageHashTable.CannotLoadPdf(msg, abspath, pageno) -> - let fname = Logging.show_path display_config abspath in - report_error Interface [ - NormalLine(Printf.sprintf "cannot load PDF file '%s' page #%d;" fname pageno); - DisplayLine(msg); - ] - - | ImageHashTable.CannotLoadImage(msg, abspath) -> - let fname = Logging.show_path display_config abspath in - report_error Interface [ - NormalLine(Printf.sprintf "cannot load image file '%s';" fname); - DisplayLine(msg); - ] - - | ImageHashTable.ImageOfWrongFileType(abspath) -> - let fname = Logging.show_path display_config abspath in - report_error Interface [ - NormalLine(Printf.sprintf "cannot load image file '%s';" fname); - DisplayLine("This file format is not supported."); - ] - - | ImageHashTable.UnsupportedColorModel(_, abspath) -> - let fname = Logging.show_path display_config abspath in - report_error Interface [ - NormalLine(Printf.sprintf "cannot load image file '%s';" fname); - DisplayLine("This color model is not supported."); - ] - - | Lexer.LexError(rng, s) -> - report_error Lexer [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(s); - ] - - | MyYojsonUtil.SyntaxError(fname, msg) -> - report_error System [ - NormalLine(Printf.sprintf "in '%s':" fname); - NormalLine(msg); - ] - - | MyYojsonUtil.MultipleDesignation(rng, key) -> - report_error System [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "multiple designation for key '%s'." key); - ] - - | Yojson.SafePos.Util.Type_error(msg, (pos, _)) -> - let rng = MyYojsonUtil.make_range pos in - report_error System [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(msg); - ] - - | MyYojsonUtil.MissingRequiredKey(rng, key) -> - report_error System [ - NormalLine(Printf.sprintf "at %s:" (Range.to_string rng)); - NormalLine(Printf.sprintf "missing required key '%s'." key); - ] - - | Evaluator.EvalError(s) - | Vm.ExecError(s) - -> report_error Evaluator [ NormalLine(s); ] - - | State.NotDuringPageBreak -> - report_error Evaluator [ - NormalLine("a primitive as to PDF annotation was called before page breaking starts."); - ] - - | PageBreak.PageNumberLimitExceeded(m) -> - report_error Evaluator [ - NormalLine(Printf.sprintf "page number limit (= %d) exceeded." m); - NormalLine(Printf.sprintf "If you really want to output more than %d pages, use '--page-number-limit'." m); - ] - - | Sys_error(s) -> - report_error System [ NormalLine(s); ] - - let get_candidate_file_extensions (output_mode : output_mode) = match output_mode with | PdfMode -> [ ".satyh"; ".satyg" ] From 912e94fb0a57e31e7b7bc4a5954831e74cff05be Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 24 Mar 2024 21:45:55 +0900 Subject: [PATCH 151/381] modify the store root config format (`ecosystem` -> `saphe`) --- src-saphe/storeRootConfig.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src-saphe/storeRootConfig.ml b/src-saphe/storeRootConfig.ml index 5b14f232b..23b41dd74 100644 --- a/src-saphe/storeRootConfig.ml +++ b/src-saphe/storeRootConfig.ml @@ -46,7 +46,7 @@ let registry_spec_encoder (registry_hash_value, registry_remote) = let config_decoder : t ConfigDecoder.t = let open ConfigDecoder in - get "ecosystem" (version_checker Constant.current_ecosystem_version) >>= fun () -> + get "saphe" (version_checker Constant.current_ecosystem_version) >>= fun () -> get "registries" (list registry_spec_decoder) >>= fun registries -> registries |> foldM (fun map (registry_hash_value, registry_remote) -> if map |> RegistryHashValueMap.mem registry_hash_value then @@ -63,7 +63,7 @@ let config_encoder (store_root_config : t) : Yaml.value = store_root_config.registries |> RegistryHashValueMap.bindings |> List.map registry_spec_encoder in `O[ - ("ecosystem", `String(language)); + ("saphe", `String(language)); ("registries", `A(registry_specs)); ] From ffd48d1fbcbbb06d01366d2b24364d8d7f40c38b Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Sun, 24 Mar 2024 23:12:30 +0900 Subject: [PATCH 152/381] begin to develop `packageReleaseConfig` and `PackageRegistryReader` --- src-saphe/configError.ml | 4 +- src-saphe/packageConstraintSolver.ml | 32 +++++------ src-saphe/packageRegistryConfig.ml | 54 ++----------------- src-saphe/packageRegistryReader.ml | 7 +++ src-saphe/packageReleaseConfig.ml | 66 +++++++++++++++++++++++ src-saphe/packageSystemBase.ml | 11 ++-- src-saphe/sapheMain.ml | 23 ++++++-- test/saphe/packageConstraintSolverTest.ml | 14 +++-- test/saphe/packageReleaseConfigTest.ml | 58 ++++++++++++++++++++ test/saphe/sapheTest.ml | 1 + 10 files changed, 191 insertions(+), 79 deletions(-) create mode 100644 src-saphe/packageRegistryReader.ml create mode 100644 src-saphe/packageReleaseConfig.ml create mode 100644 test/saphe/packageReleaseConfigTest.ml diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index 632df1303..be81b39fc 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -30,7 +30,7 @@ type yaml_error = registry_hash_value : registry_hash_value; } | CannotBeUsedAsAName of YamlDecoder.context * string - | UnsupportedConfigFormat of string + | UnsupportedRegistryFormat of string | NotACommand of { context : YamlDecoder.context; prefix : char; @@ -63,6 +63,8 @@ type config_error = | LockConfigError of abs_path * yaml_error | RegistryConfigNotFound of abs_path | RegistryConfigError of abs_path * yaml_error + | ReleaseConfigNotFound of abs_path + | ReleaseConfigError of abs_path * yaml_error | StoreRootConfigNotFound of abs_path | StoreRootConfigError of abs_path * yaml_error | LockNameConflict of lock_name diff --git a/src-saphe/packageConstraintSolver.ml b/src-saphe/packageConstraintSolver.ml index f7c600130..57b7cd199 100644 --- a/src-saphe/packageConstraintSolver.ml +++ b/src-saphe/packageConstraintSolver.ml @@ -107,7 +107,7 @@ module SolverInput = struct } | Impl of { package_name : package_name; - version : SemanticVersion.t; + package_version : SemanticVersion.t; registry_hash_value : registry_hash_value; source : implementation_source; dependencies : dependency list; @@ -137,8 +137,8 @@ module SolverInput = struct | LocalFixedImpl{ absolute_path; _ } -> Format.fprintf ppf "local impl '%s'" (get_abs_path_string absolute_path) - | Impl{ package_name; version; _ } -> - Format.fprintf ppf "%s %s" package_name (SemanticVersion.to_string version) + | Impl{ package_name; package_version; _ } -> + Format.fprintf ppf "%s %s" package_name (SemanticVersion.to_string package_version) let pp_impl_long (ppf : Format.formatter) (impl : impl) = @@ -152,10 +152,10 @@ module SolverInput = struct let pp_version (ppf : Format.formatter) (impl : impl) = match impl with - | DummyImpl -> Format.fprintf ppf "dummy" - | TargetImpl(_) -> Format.fprintf ppf "target" - | LocalFixedImpl(_) -> Format.fprintf ppf "as-is" - | Impl{ version; _ } -> Format.fprintf ppf "%s" (SemanticVersion.to_string version) + | DummyImpl -> Format.fprintf ppf "dummy" + | TargetImpl(_) -> Format.fprintf ppf "target" + | LocalFixedImpl(_) -> Format.fprintf ppf "as-is" + | Impl{ package_version; _ } -> Format.fprintf ppf "%s" (SemanticVersion.to_string package_version) (* Unused *) @@ -231,13 +231,13 @@ module SolverInput = struct in let impls = impl_records |> List.filter_map (fun impl_record -> - let ImplRecord{ version; source; language_requirement; dependencies } = impl_record in + let ImplRecord{ package_version; source; language_requirement; dependencies; _ } = impl_record in if context.language_version |> SemanticVersion.fulfill language_requirement then - if String.equal (SemanticVersion.get_compatibility_unit version) compatibility then + if String.equal (SemanticVersion.get_compatibility_unit package_version) compatibility then let dependencies = make_internal_dependency_from_registry registry_hash_value context dependencies in - Some(Impl{ package_name; version; registry_hash_value; source; dependencies }) + Some(Impl{ package_name; package_version; registry_hash_value; source; dependencies }) else None else @@ -282,7 +282,7 @@ module SolverInput = struct | _ -> false end - | Impl{ version = semver_provided; _} -> + | Impl{ package_version = semver_provided; _} -> begin match restr with | VersionRequirement(SemanticVersion.CompatibleWith(semver_required)) -> @@ -309,8 +309,8 @@ module SolverInput = struct | LocalFixedImpl{ absolute_path; _ } -> [ Printf.sprintf "local/%s" (get_abs_path_string absolute_path) ] - | Impl{ package_name; version; _ } -> - let compat = SemanticVersion.get_compatibility_unit version in + | Impl{ package_name; package_version; _ } -> + let compat = SemanticVersion.get_compatibility_unit package_version in [ Printf.sprintf "registered/%s/%s" package_name compat ] @@ -332,7 +332,7 @@ module SolverInput = struct | (LocalFixedImpl(_), _) -> 1 | (_, LocalFixedImpl(_)) -> -1 - | (Impl{ version = semver1; _ }, Impl{ version = semver2; _ }) -> + | (Impl{ package_version = semver1; _ }, Impl{ package_version = semver2; _ }) -> SemanticVersion.compare semver1 semver2 @@ -441,7 +441,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla let lock_to_vertex_map = lock_to_vertex_map |> LockMap.add lock vertex in (quad_acc, graph, explicit_vertex_to_used_as, explicit_test_vertex_to_used_as, lock_to_vertex_map) - | Impl{ package_name; version = locked_version; registry_hash_value; source; dependencies } -> + | Impl{ package_name; package_version = locked_version; registry_hash_value; source; dependencies } -> let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in let package_id = PackageId.Registered(registered_package_id) in let reglock = RegisteredLock.{ registered_package_id; locked_version } in @@ -507,7 +507,7 @@ let solve (context : package_context) (dependencies_with_flags : (dependency_fla | None | Some(DummyImpl) | Some(TargetImpl(_)) | Some(LocalFixedImpl(_)) -> assert false - | Some(Impl{ version = version_dep; _ }) -> + | Some(Impl{ package_version = version_dep; _ }) -> Lock.Registered{ registered_package_id = registered_package_id_dep; locked_version = version_dep; diff --git a/src-saphe/packageRegistryConfig.ml b/src-saphe/packageRegistryConfig.ml index c7ec16b84..41d97d67a 100644 --- a/src-saphe/packageRegistryConfig.ml +++ b/src-saphe/packageRegistryConfig.ml @@ -2,64 +2,18 @@ open MyUtil open ConfigError open ConfigUtil -open PackageSystemBase type 'a ok = ('a, config_error) result -type t = { - packages : (package_name * (implementation_record list)) list; -} - - -let source_decoder : implementation_source ConfigDecoder.t = - let open ConfigDecoder in - branch [ - "tar_gzip" ==> begin - get "url" string >>= fun url -> - get "checksum" string >>= fun checksum -> - succeed @@ TarGzip{ url; checksum } - end; - ] - - -let dependency_in_registry_config_decoder = - let open ConfigDecoder in - get "used_as" string >>= fun used_as -> - get "name" package_name_decoder >>= fun package_name -> - get "requirement" requirement_decoder >>= fun version_requirement -> - succeed @@ PackageDependencyInRegistry{ - used_as; - package_name; - version_requirement; - } - - -let implementation_decoder : implementation_record ConfigDecoder.t = - let open ConfigDecoder in - get "version" version_decoder >>= fun version -> - get_or_else "source" source_decoder NoSource >>= fun source -> - get "language" requirement_decoder >>= fun language_requirement -> - get "dependencies" (list dependency_in_registry_config_decoder) >>= fun dependencies -> - succeed @@ ImplRecord{ version; source; language_requirement; dependencies } - - -let package_decoder : (package_name * implementation_record list) ConfigDecoder.t = - let open ConfigDecoder in - get "name" package_name_decoder >>= fun package_name -> - get "implementations" (list implementation_decoder) >>= fun implementations -> - succeed (package_name, implementations) +type t = unit let registry_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in - get "format" string >>= function - | "1" -> - get "packages" (list package_decoder) >>= fun packages -> - succeed { packages } - - | format -> - failure (fun _yctx -> UnsupportedConfigFormat(format)) + get "registry_format" string >>= function + | "1" -> succeed () + | format -> failure (fun _yctx -> UnsupportedRegistryFormat(format)) let load (abspath_registry_config : abs_path) : t ok = diff --git a/src-saphe/packageRegistryReader.ml b/src-saphe/packageRegistryReader.ml new file mode 100644 index 000000000..8d1abc05a --- /dev/null +++ b/src-saphe/packageRegistryReader.ml @@ -0,0 +1,7 @@ + +open MyUtil + + +let main (_absdir_registry_repo : abs_path) = + let open ResultMonad in + return [] diff --git a/src-saphe/packageReleaseConfig.ml b/src-saphe/packageReleaseConfig.ml new file mode 100644 index 000000000..92100d3a5 --- /dev/null +++ b/src-saphe/packageReleaseConfig.ml @@ -0,0 +1,66 @@ + +open MyUtil +open ConfigError +open ConfigUtil +open PackageSystemBase + + +type 'a ok = ('a, config_error) result + +type t = implementation_record +[@@deriving show { with_path = false }] + + +let source_decoder : implementation_source ConfigDecoder.t = + let open ConfigDecoder in + branch [ + "tar_gzip" ==> begin + get "url" string >>= fun url -> + get "checksum" string >>= fun checksum -> + succeed @@ TarGzip{ url; checksum } + end; + ] + + +let dependency_in_registry_config_decoder = + let open ConfigDecoder in + get "used_as" string >>= fun used_as -> + get "name" package_name_decoder >>= fun package_name -> + get "requirement" requirement_decoder >>= fun version_requirement -> + succeed @@ PackageDependencyInRegistry{ + used_as; + package_name; + version_requirement; + } + + +let release_config_decoder : implementation_record ConfigDecoder.t = + let open ConfigDecoder in + get "saphe" requirement_decoder >>= fun ecosystem_requirement -> + get "satysfi" requirement_decoder >>= fun language_requirement -> + get "name" string >>= fun package_name -> + get "version" version_decoder >>= fun package_version -> + get_or_else "source" source_decoder NoSource >>= fun source -> + get "dependencies" (list dependency_in_registry_config_decoder) >>= fun dependencies -> + succeed @@ ImplRecord{ + ecosystem_requirement; + language_requirement; + package_name; + package_version; + source; + dependencies; + } + + +let parse (s : string) : (t, yaml_error) result = + ConfigDecoder.run release_config_decoder s + + +let load (abspath_release_config : abs_path) : t ok = + let open ResultMonad in + let* s = + read_file abspath_release_config + |> Result.map_error (fun _ -> ReleaseConfigNotFound(abspath_release_config)) + in + parse s + |> Result.map_error (fun e -> ReleaseConfigError(abspath_release_config, e)) diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 2b16d3856..9ac6b5273 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -145,11 +145,14 @@ type implementation_source = type implementation_record = | ImplRecord of { - version : SemanticVersion.t; - source : implementation_source; - language_requirement : SemanticVersion.requirement; - dependencies : package_dependency_in_registry list; + ecosystem_requirement : SemanticVersion.requirement; + language_requirement : SemanticVersion.requirement; + package_name : package_name; + package_version : SemanticVersion.t; + source : implementation_source; + dependencies : package_dependency_in_registry list; } +[@@deriving show { with_path = false }] type package_context = { language_version : SemanticVersion.t; diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index d611e9b63..0f620c3b4 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -80,8 +80,8 @@ let make_yaml_error_lines : yaml_error -> line list = function | CannotBeUsedAsAName(yctx, s) -> [ NormalLine(Printf.sprintf "'%s' cannot be used as a name %s" s (show_yaml_context yctx)) ] - | UnsupportedConfigFormat(format) -> - [ NormalLine(Printf.sprintf "unsupported config format '%s'" format) ] + | UnsupportedRegistryFormat(format) -> + [ NormalLine(Printf.sprintf "unsupported registry format '%s'" format) ] | NotACommand{ context = yctx; prefix = _; string = s } -> [ NormalLine(Printf.sprintf "not a command: '%s' %s" s (show_yaml_context yctx)) ] @@ -165,6 +165,18 @@ let report_config_error = function make_yaml_error_lines e; ]) + | ReleaseConfigNotFound(abspath_release_config) -> + report_error [ + NormalLine("cannot find a release config:"); + DisplayLine(get_abs_path_string abspath_release_config); + ] + + | ReleaseConfigError(abspath, e) -> + report_error (List.concat [ + [ NormalLine(Printf.sprintf "in %s: release config error;" (get_abs_path_string abspath)) ]; + make_yaml_error_lines e; + ]) + | StoreRootConfigNotFound(abspath) -> report_error [ NormalLine("cannot find a store root config at:"); @@ -926,13 +938,16 @@ let solve ~(fpath_in : string) = if created then Logging.package_registry_updated ~created:true absdir_registry_repo end; - (* Loads the registry config and grows `registered_package_impls`: *) - let* PackageRegistryConfig.{ packages } = + (* Loads the registry config: *) + let* () = let abspath_registry_config = Constant.package_registry_config_path ~registry_dir:absdir_registry_repo in PackageRegistryConfig.load abspath_registry_config in + + (* Reads the registry and grows `registered_package_impls`: *) + let* packages = PackageRegistryReader.main absdir_registry_repo in packages |> foldM (fun registered_package_impls (package_name, impls) -> let registered_package_id = RegisteredPackageId.{ registry_hash_value; package_name } in if registered_package_impls |> RegisteredPackageIdMap.mem registered_package_id then diff --git a/test/saphe/packageConstraintSolverTest.ml b/test/saphe/packageConstraintSolverTest.ml index fa53dda7c..14a1fc2e0 100644 --- a/test/saphe/packageConstraintSolverTest.ml +++ b/test/saphe/packageConstraintSolverTest.ml @@ -9,6 +9,10 @@ let registry_hash_value = "c0bebeef4423" +let ecosystem_version = + make_version "0.1.0" + + let language_version = make_version "0.1.0" @@ -41,10 +45,12 @@ let make_dependency_in_registry ~(used_as : string) (package_name : package_name let make_impl (s_version : string) (deps : package_dependency_in_registry list) : implementation_record = ImplRecord{ - version = make_version s_version; - source = NoSource; - language_requirement = SemanticVersion.CompatibleWith(language_version); - dependencies = deps; + ecosystem_requirement = SemanticVersion.CompatibleWith(ecosystem_version); (* TODO: remove this *) + language_requirement = SemanticVersion.CompatibleWith(language_version); + package_name = ""; (* TODO: remove this *) + package_version = make_version s_version; + source = NoSource; + dependencies = deps; } diff --git a/test/saphe/packageReleaseConfigTest.ml b/test/saphe/packageReleaseConfigTest.ml new file mode 100644 index 000000000..a6c022755 --- /dev/null +++ b/test/saphe/packageReleaseConfigTest.ml @@ -0,0 +1,58 @@ + +open SapheMain__ConfigError +open SapheMain__PackageSystemBase +open SapheTestUtil +module PackageReleaseConfig = SapheMain__PackageReleaseConfig + + +let input1 = {yaml| +saphe: "^0.0.1" +satysfi: "^0.1.0" +name: "stdlib" +version: "0.0.1" +source: + tar_gzip: + url: "B" + checksum: "A" +authors: + - "Takashi Suwa" +registries: + - name: "default" + git: + url: "https://github.com/SATySFi/default-registry" + branch: "temp-dev-saphe" +dependencies: [] +test_dependencies: + - used_as: "Testing" + registered: + registry: "default" + name: "testing" + requirement: "^0.0.1" +|yaml} + + +let expected1 = + ImplRecord{ + ecosystem_requirement = CompatibleWith(make_version "0.0.1"); + language_requirement = CompatibleWith(make_version "0.1.0"); + package_name = "stdlib"; + package_version = make_version "0.0.1"; + source = TarGzip{ url = "B"; checksum = "A" }; + dependencies = []; + } + + +let parsed_release_config = Alcotest.of_pp PackageReleaseConfig.pp +let yaml_error = Alcotest.of_pp pp_yaml_error + + +let parse_test_1 () = + let got = PackageReleaseConfig.parse input1 in + let expected = Ok(expected1) in + Alcotest.(check (result parsed_release_config yaml_error)) "parse" expected got + + +let test_cases = + Alcotest.[ + test_case "parse 1" `Quick parse_test_1; + ] diff --git a/test/saphe/sapheTest.ml b/test/saphe/sapheTest.ml index 1511687cf..3d4bbea99 100644 --- a/test/saphe/sapheTest.ml +++ b/test/saphe/sapheTest.ml @@ -3,5 +3,6 @@ let () = let open Alcotest in run "Saphe Test" [ ("PackageConfig", PackageConfigTest.test_cases); + ("PackageReleaseConfig", PackageReleaseConfigTest.test_cases); ("PackageConstraintSolver", PackageConstraintSolverTest.test_cases); ] From 6570a085af1695ac769a1af0312c9fefba5328db Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 01:28:00 +0900 Subject: [PATCH 153/381] small refactoring on `PackageReleaseConfig` --- src-saphe/packageReleaseConfig.ml | 20 +++++++++++++------- src-saphe/packageSystemBase.ml | 10 ++++------ test/saphe/packageConstraintSolverTest.ml | 2 -- test/saphe/packageReleaseConfigTest.ml | 12 +++++++----- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src-saphe/packageReleaseConfig.ml b/src-saphe/packageReleaseConfig.ml index 92100d3a5..886f64468 100644 --- a/src-saphe/packageReleaseConfig.ml +++ b/src-saphe/packageReleaseConfig.ml @@ -7,7 +7,11 @@ open PackageSystemBase type 'a ok = ('a, config_error) result -type t = implementation_record +type t = { + ecosystem_requirement : SemanticVersion.requirement; + package_name : package_name; + implementation : implementation_record; +} [@@deriving show { with_path = false }] @@ -34,7 +38,7 @@ let dependency_in_registry_config_decoder = } -let release_config_decoder : implementation_record ConfigDecoder.t = +let release_config_decoder : t ConfigDecoder.t = let open ConfigDecoder in get "saphe" requirement_decoder >>= fun ecosystem_requirement -> get "satysfi" requirement_decoder >>= fun language_requirement -> @@ -42,13 +46,15 @@ let release_config_decoder : implementation_record ConfigDecoder.t = get "version" version_decoder >>= fun package_version -> get_or_else "source" source_decoder NoSource >>= fun source -> get "dependencies" (list dependency_in_registry_config_decoder) >>= fun dependencies -> - succeed @@ ImplRecord{ + succeed @@ { ecosystem_requirement; - language_requirement; package_name; - package_version; - source; - dependencies; + implementation = ImplRecord{ + language_requirement; + package_version; + source; + dependencies; + }; } diff --git a/src-saphe/packageSystemBase.ml b/src-saphe/packageSystemBase.ml index 9ac6b5273..a90f593db 100644 --- a/src-saphe/packageSystemBase.ml +++ b/src-saphe/packageSystemBase.ml @@ -145,12 +145,10 @@ type implementation_source = type implementation_record = | ImplRecord of { - ecosystem_requirement : SemanticVersion.requirement; - language_requirement : SemanticVersion.requirement; - package_name : package_name; - package_version : SemanticVersion.t; - source : implementation_source; - dependencies : package_dependency_in_registry list; + language_requirement : SemanticVersion.requirement; + package_version : SemanticVersion.t; + source : implementation_source; + dependencies : package_dependency_in_registry list; } [@@deriving show { with_path = false }] diff --git a/test/saphe/packageConstraintSolverTest.ml b/test/saphe/packageConstraintSolverTest.ml index 14a1fc2e0..decd3ed91 100644 --- a/test/saphe/packageConstraintSolverTest.ml +++ b/test/saphe/packageConstraintSolverTest.ml @@ -45,9 +45,7 @@ let make_dependency_in_registry ~(used_as : string) (package_name : package_name let make_impl (s_version : string) (deps : package_dependency_in_registry list) : implementation_record = ImplRecord{ - ecosystem_requirement = SemanticVersion.CompatibleWith(ecosystem_version); (* TODO: remove this *) language_requirement = SemanticVersion.CompatibleWith(language_version); - package_name = ""; (* TODO: remove this *) package_version = make_version s_version; source = NoSource; dependencies = deps; diff --git a/test/saphe/packageReleaseConfigTest.ml b/test/saphe/packageReleaseConfigTest.ml index a6c022755..1e91d91ca 100644 --- a/test/saphe/packageReleaseConfigTest.ml +++ b/test/saphe/packageReleaseConfigTest.ml @@ -32,13 +32,15 @@ test_dependencies: let expected1 = - ImplRecord{ + PackageReleaseConfig.{ ecosystem_requirement = CompatibleWith(make_version "0.0.1"); - language_requirement = CompatibleWith(make_version "0.1.0"); package_name = "stdlib"; - package_version = make_version "0.0.1"; - source = TarGzip{ url = "B"; checksum = "A" }; - dependencies = []; + implementation = ImplRecord{ + language_requirement = CompatibleWith(make_version "0.1.0"); + package_version = make_version "0.0.1"; + source = TarGzip{ url = "B"; checksum = "A" }; + dependencies = []; + }; } From a4926f6b111284694f43f062e441c4a2f8808dd6 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 02:54:09 +0900 Subject: [PATCH 154/381] implement `PackageRegistryReader` --- src-saphe/configError.ml | 10 +++ src-saphe/constant.ml | 10 ++- src-saphe/packageRegistryReader.ml | 106 ++++++++++++++++++++++++++++- src-saphe/sapheMain.ml | 20 ++++++ src-util/semanticVersion.ml | 13 ++-- src-util/semanticVersion.mli | 2 + 6 files changed, 154 insertions(+), 7 deletions(-) diff --git a/src-saphe/configError.ml b/src-saphe/configError.ml index be81b39fc..ed00fc724 100644 --- a/src-saphe/configError.ml +++ b/src-saphe/configError.ml @@ -158,3 +158,13 @@ type config_error = language_version : SemanticVersion.t; language_requirement : SemanticVersion.requirement; } + | PackageNameMismatchOfRelease of { + path : abs_path; + from_filename : package_name; + from_content : package_name; + } + | PackageVersionMismatchOfRelease of { + path : abs_path; + from_filename : SemanticVersion.t; + from_content : SemanticVersion.t; + } diff --git a/src-saphe/constant.ml b/src-saphe/constant.ml index 6f6d6da40..dbc7efcfa 100644 --- a/src-saphe/constant.ml +++ b/src-saphe/constant.ml @@ -51,10 +51,18 @@ let store_root_config_path ~store_root:(absdir_store_root : abs_path) : abs_path make_abs_path (Filename.concat (get_abs_path_string absdir_store_root) "saphe-store-root.yaml") -let package_registry_config_path ~registry_dir:(absdir_registry_repo : abs_path) = +let package_registry_config_path ~registry_dir:(absdir_registry_repo : abs_path) : abs_path = append_to_abs_directory absdir_registry_repo "saphe-registry.yaml" +let registry_repo_package_store ~registry_repo_root:(absdir_registry_repo : abs_path) : abs_path = + append_to_abs_directory absdir_registry_repo "packages" + + +let release_config_extension = + ".saphe-release.yaml" + + let library_package_config_path ~dir:(absdir_library : abs_path) : abs_path = make_abs_path (Filename.concat (get_abs_path_string absdir_library) "saphe.yaml") diff --git a/src-saphe/packageRegistryReader.ml b/src-saphe/packageRegistryReader.ml index 8d1abc05a..0e119dcf3 100644 --- a/src-saphe/packageRegistryReader.ml +++ b/src-saphe/packageRegistryReader.ml @@ -1,7 +1,109 @@ open MyUtil +open ConfigError +open PackageSystemBase -let main (_absdir_registry_repo : abs_path) = +let listup_package_directories (absdir_package_store : abs_path) : ((package_name * abs_path) list, config_error) result = let open ResultMonad in - return [] + let filenames = Sys.readdir (get_abs_path_string absdir_package_store) |> Array.to_list in + let* acc = + filenames |> foldM (fun acc filename -> + let abspath = append_to_abs_directory absdir_package_store filename in + if (try Sys.is_directory (get_abs_path_string abspath) with _ -> false) then + let absdir = abspath in + let package_name = filename in (* TODO: check that `filename` is a lowercased identifier *) + return @@ Alist.extend acc (package_name, absdir) + else + (* If `filename` is not a directory, ignores it: *) + return acc + ) Alist.empty + in + return @@ Alist.to_list acc + + +let listup_release_configs (package_name : package_name) (absdir_single_package : abs_path) : (SemanticVersion.t * abs_path) list = + let filenames = Sys.readdir (get_abs_path_string absdir_single_package) |> Array.to_list in + let acc = + filenames |> List.fold_left (fun acc filename -> + match Core.String.chop_suffix filename ~suffix:Constant.release_config_extension with + | None -> + (* If `filename` does not end with the release config extension, ignores it: *) + acc + + | Some(s) -> + begin + match Core.String.chop_prefix s ~prefix:(Printf.sprintf "%s." package_name) with + | None -> + (* If `filename` does not start with the expected package name, ignores it: *) + acc + + | Some(s) -> + begin + match SemanticVersion.parse s with + | None -> + (* If the middle part of `filename` is not a semver, ignores it: *) + acc + + | Some(semver) -> + let abspath = append_to_abs_directory absdir_single_package filename in + Alist.extend acc (semver, abspath) + end + end + ) Alist.empty + in + Alist.to_list acc + + +let main (absdir_registry_repo : abs_path) : ((package_name * implementation_record list) list, config_error) result = + let open ResultMonad in + + (* Lists up package directories: *) + let* package_dirs = + let absdir_package_store = Constant.registry_repo_package_store ~registry_repo_root:absdir_registry_repo in + listup_package_directories absdir_package_store + in + + let* acc = + package_dirs |> foldM (fun acc (package_name, absdir_single_package) -> + (* Lists up all paths to the release configs: *) + let config_paths = listup_release_configs package_name absdir_single_package in + + (* Reads all the release configs: *) + let* implacc = + config_paths |> foldM (fun implacc (package_version, abspath_release_config) -> + let* + PackageReleaseConfig.{ + ecosystem_requirement; + package_name = package_name_for_checking; + implementation; + } = PackageReleaseConfig.load abspath_release_config + in + let ImplRecord{ package_version = package_version_for_checking; _ } = implementation in + if not (SemanticVersion.fulfill ecosystem_requirement Constant.current_ecosystem_version) then + (* If the package release config is not for the current version of Saphe, ignores it: *) + return implacc + else if not (String.equal package_name_for_checking package_name) then + (* TODO: warn and ignore this instead of emitting errors *) + err @@ PackageNameMismatchOfRelease{ + path = abspath_release_config; + from_filename = package_name; + from_content = package_name_for_checking; + } + else if not (SemanticVersion.equal package_version_for_checking package_version) then + (* TODO: warn and ignore this instead of emitting errors *) + err @@ PackageVersionMismatchOfRelease{ + path = abspath_release_config; + from_filename = package_version; + from_content = package_version_for_checking; + } + else + return @@ Alist.extend implacc implementation + ) Alist.empty + in + return @@ Alist.extend acc (package_name, Alist.to_list implacc) + + ) Alist.empty + in + + return @@ Alist.to_list acc diff --git a/src-saphe/sapheMain.ml b/src-saphe/sapheMain.ml index 0f620c3b4..6b391f773 100644 --- a/src-saphe/sapheMain.ml +++ b/src-saphe/sapheMain.ml @@ -381,6 +381,26 @@ let report_config_error = function NormalLine(Printf.sprintf "but we are using %s." s_version); ] + | PackageNameMismatchOfRelease{ path; from_filename; from_content } -> + report_error [ + NormalLine(Printf.sprintf "the release config"); + DisplayLine(get_abs_path_string path); + NormalLine("is inconsistent as package name;"); + NormalLine(Printf.sprintf "its filename says the package name is '%s'," from_filename); + NormalLine(Printf.sprintf "but the content says '%s'." from_content); + ] + + | PackageVersionMismatchOfRelease{ path; from_filename; from_content } -> + let s_version1 = SemanticVersion.to_string from_filename in + let s_version2 = SemanticVersion.to_string from_content in + report_error [ + NormalLine(Printf.sprintf "the release config"); + DisplayLine(get_abs_path_string path); + NormalLine("is inconsistent as package version;"); + NormalLine(Printf.sprintf "its filename says the package version is '%s'," s_version1); + NormalLine(Printf.sprintf "but the content says '%s'." s_version2); + ] + type solve_input = | PackageSolveInput of { diff --git a/src-util/semanticVersion.ml b/src-util/semanticVersion.ml index a66260a4d..9b4809925 100644 --- a/src-util/semanticVersion.ml +++ b/src-util/semanticVersion.ml @@ -1,12 +1,17 @@ type t = Semver.t -let parse (s : string) : t option = - Semver.of_string s +let equal = + Semver.equal -let to_string (semver : t) : string = - Semver.to_string semver + +let parse = + Semver.of_string + + +let to_string = + Semver.to_string let pp ppf semver = diff --git a/src-util/semanticVersion.mli b/src-util/semanticVersion.mli index 1115f718d..45fcdccc3 100644 --- a/src-util/semanticVersion.mli +++ b/src-util/semanticVersion.mli @@ -2,6 +2,8 @@ type t [@@deriving show] +val equal : t -> t -> bool + val parse : string -> t option val to_string : t -> string From 759dbb2351af5eda6965528b2aaa9b4e236b0696 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 03:01:06 +0900 Subject: [PATCH 155/381] modify tests for `PackageReleaseConfig` --- test/saphe/packageReleaseConfigTest.ml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/test/saphe/packageReleaseConfigTest.ml b/test/saphe/packageReleaseConfigTest.ml index 1e91d91ca..bbbdd2797 100644 --- a/test/saphe/packageReleaseConfigTest.ml +++ b/test/saphe/packageReleaseConfigTest.ml @@ -12,22 +12,11 @@ name: "stdlib" version: "0.0.1" source: tar_gzip: - url: "B" - checksum: "A" + url: "https://example.com/packages/stdlib.tar.gz" + checksum: "c0bebeef4423abad1dea" authors: - "Takashi Suwa" -registries: - - name: "default" - git: - url: "https://github.com/SATySFi/default-registry" - branch: "temp-dev-saphe" dependencies: [] -test_dependencies: - - used_as: "Testing" - registered: - registry: "default" - name: "testing" - requirement: "^0.0.1" |yaml} @@ -38,7 +27,10 @@ let expected1 = implementation = ImplRecord{ language_requirement = CompatibleWith(make_version "0.1.0"); package_version = make_version "0.0.1"; - source = TarGzip{ url = "B"; checksum = "A" }; + source = TarGzip{ + url = "https://example.com/packages/stdlib.tar.gz"; + checksum = "c0bebeef4423abad1dea"; + }; dependencies = []; }; } From 3ede5f7c1bfb4794074df8edb4d4f16898fe7ceb Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 03:30:58 +0900 Subject: [PATCH 156/381] update `default-registry-commit-hash.txt` --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index 9ceb530ef..527d819f1 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -0f2cbf2950380ef15821b4e7374ac9fc4db269b8 refs/heads/temp-dev-saphe +fd0685fc3be78942759bbf95ff66b0d037a79f6e refs/heads/temp-dev-saphe From 765022908db442112562ea77f15ed0ef170b19cd Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 14:07:54 +0900 Subject: [PATCH 157/381] take the prerelease part of semvers into account --- src-util/semanticVersion.ml | 48 ++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src-util/semanticVersion.ml b/src-util/semanticVersion.ml index 9b4809925..84e4159c1 100644 --- a/src-util/semanticVersion.ml +++ b/src-util/semanticVersion.ml @@ -1,4 +1,5 @@ +(* Same as `Semver.t`, but build metada should be empty. *) type t = Semver.t @@ -6,8 +7,13 @@ let equal = Semver.equal -let parse = - Semver.of_string +let parse (s : string) : t option = + let open OptionMonad in + let* semver = Semver.of_string s in + let Semver.{ build; _ } = semver in + match build with + | [] -> return semver + | _ :: _ -> None let to_string = @@ -28,14 +34,23 @@ let compare = let is_compatible ~(old : t) ~(new_ : t) = let open Semver in - match (old.major, new_.major) with - | (0, 0) -> - old.minor = new_.minor && old.patch <= new_.patch + let { prerelease = prerelease_old; _ } = old in + let { prerelease = prerelease_new; _ } = new_ in + match (prerelease_old, prerelease_new) with + | ([], []) -> + begin + match (old.major, new_.major) with + | (0, 0) -> + old.minor = new_.minor && old.patch <= new_.patch - | _ -> - old.major = new_.major && - ((old.minor < new_.minor) || - (old.minor == new_.minor && old.patch <= new_.patch)) + | _ -> + old.major = new_.major && + ((old.minor < new_.minor) || + (old.minor == new_.minor && old.patch <= new_.patch)) + end + + | (_ :: _, _) | (_, _ :: _) -> + Semver.equal old new_ type requirement = @@ -68,8 +83,13 @@ let fulfill (req : requirement) (semver : t) : bool = let get_compatibility_unit (semver : t) : string = - let Semver.{ major; minor; _ } = semver in - if major = 0 then - Printf.sprintf "0.%d" minor - else - Printf.sprintf "%d" major + let Semver.{ major; minor; prerelease; _ } = semver in + match prerelease with + | [] -> + if major = 0 then + Printf.sprintf "0.%d" minor + else + Printf.sprintf "%d" major + + | _ :: _ -> + to_string semver From 514a9a9ad4b242c22245d5ec586a96296e6d4e48 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Mon, 25 Mar 2024 14:55:02 +0900 Subject: [PATCH 158/381] add tests for `SemanticVersion` --- src-util/semanticVersion.ml | 6 ++++ src-util/semanticVersion.mli | 4 +++ test/common/commonTest.ml | 1 + test/common/semanticVersionTest.ml | 57 ++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 test/common/semanticVersionTest.ml diff --git a/src-util/semanticVersion.ml b/src-util/semanticVersion.ml index 84e4159c1..ae58a7978 100644 --- a/src-util/semanticVersion.ml +++ b/src-util/semanticVersion.ml @@ -93,3 +93,9 @@ let get_compatibility_unit (semver : t) : string = | _ :: _ -> to_string semver + + +module ForTest = struct + let get_content (semver : t) : Semver.t = + semver +end diff --git a/src-util/semanticVersion.mli b/src-util/semanticVersion.mli index 45fcdccc3..7a3466cec 100644 --- a/src-util/semanticVersion.mli +++ b/src-util/semanticVersion.mli @@ -23,3 +23,7 @@ val requirement_to_string : requirement -> string val fulfill : requirement -> t -> bool val get_compatibility_unit : t -> string + +module ForTest : sig + val get_content : t -> Semver.t +end diff --git a/test/common/commonTest.ml b/test/common/commonTest.ml index 159349fe9..1c9baecd5 100644 --- a/test/common/commonTest.ml +++ b/test/common/commonTest.ml @@ -4,4 +4,5 @@ let () = run "SATySFi-Util Test" [ ("DependencyGraph", DependencyGraphTest.test_cases); ("AbsPath", AbsPathTest.test_cases); + ("SemanticVersion", SemanticVersionTest.test_cases); ] diff --git a/test/common/semanticVersionTest.ml b/test/common/semanticVersionTest.ml new file mode 100644 index 000000000..89b5b407b --- /dev/null +++ b/test/common/semanticVersionTest.ml @@ -0,0 +1,57 @@ + +(* Assumes that `Semver` works correctly: *) +let semver_from_parts major minor patch prerelease build = + match Semver.from_parts major minor patch prerelease build with + | Some(semver) -> semver + | None -> assert false + + +(* Do "non-pretty" pretty printing instead of using `Semver.pp`: *) +let pp_semver ppf (Semver.{ major; minor; patch; prerelease; build }) = + let pp_sep ppf () = Format.fprintf ppf "; " in + Format.fprintf ppf "{major = %d; minor = %d, patch = %d, prerelease = [%a], build = [%a]}" + major minor patch + (Format.pp_print_list ~pp_sep Format.pp_print_string) prerelease + (Format.pp_print_list ~pp_sep Format.pp_print_string) build + + +let parse_test () = + List.iter (fun (input, expected) -> + let got = Option.map SemanticVersion.ForTest.get_content (SemanticVersion.parse input) in + Alcotest.(check (option (of_pp pp_semver))) "parse" expected got + ) [ + ("0.1.0", Some(semver_from_parts 0 1 0 [] [])); + ("-0.1.0", None); + ("0.-1.0", None); + ("0.1.0-", None); + ("0.1.0+", None); + ("0.1.0-alpha.1", Some(semver_from_parts 0 1 0 ["alpha"; "1"] [])); + ("0.1.0+20240325", None); + ("0.1.0-alpha.1+20240325", None); + ] + + +(* Assumes that `SemanticVersion.parse` works fine henceforth: *) +let make_version (s_version : string) : SemanticVersion.t = + match SemanticVersion.parse s_version with + | Some(semver) -> semver + | None -> assert false + + +let get_compatibility_unit_test () = + List.iter (fun (input, expected) -> + let got = SemanticVersion.get_compatibility_unit input in + Alcotest.(check string) "get_compatibility_unit" expected got + ) [ + (make_version "0.1.0", "0.1"); + (make_version "1.1.0", "1"); + (make_version "0.1.0-alpha.1", "0.1.0-alpha.1"); + (make_version "1.1.0-alpha.1", "1.1.0-alpha.1"); + ] + + +let test_cases = + Alcotest.[ + test_case "parse" `Quick parse_test; + test_case "get_compatibility_unit" `Quick get_compatibility_unit_test; + ] From 52d5d7773b4deb5cb635d645b24693676d7efee6 Mon Sep 17 00:00:00 2001 From: kyori19 Date: Sun, 24 Mar 2024 07:11:56 +0000 Subject: [PATCH 159/381] Remove output path from HandlePdf.t --- src/backend/handlePdf.ml | 12 ++++++------ src/backend/handlePdf.mli | 4 ++-- src/backend/pageBreak.ml | 9 ++++----- src/backend/pageBreak.mli | 5 ++--- src/frontend/main.ml | 12 ++++++------ 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/backend/handlePdf.ml b/src/backend/handlePdf.ml index 7f312220a..60f5b55d8 100644 --- a/src/backend/handlePdf.ml +++ b/src/backend/handlePdf.ml @@ -6,7 +6,7 @@ open HorzBox type t = - | PDF of Pdf.t * Pdfpage.t Alist.t * abs_path + | PDF of Pdf.t * Pdfpage.t Alist.t type config = { debug_show_bbox : bool; @@ -467,7 +467,7 @@ let add_column_to_page Page(paper, pagecontsch, Alist.cat opacc opacccolumn, pbinfo) -let write_page (config : config) (Page(paper, _pagecontsch, opaccpage, pbinfo) : page) (pagepartsf : page_parts_scheme_func) ((PDF(pdf, pageacc, flnm)) : t) : t = +let write_page (config : config) (Page(paper, _pagecontsch, opaccpage, pbinfo) : page) (pagepartsf : page_parts_scheme_func) ((PDF(pdf, pageacc)) : t) : t = let fs = fs_pdf config in let paper_height = get_paper_height paper in @@ -495,15 +495,15 @@ let write_page (config : config) (Page(paper, _pagecontsch, opaccpage, pbinfo) : in let pagenew = Annotation.add_to_pdf pdf pagenew in let () = NamedDest.notify_pagebreak pbinfo.current_page_number in - PDF(pdf, Alist.extend pageacc pagenew, flnm) + PDF(pdf, Alist.extend pageacc pagenew) -let create_empty_pdf (abspath : abs_path) : t = +let create_empty_pdf () : t = let pdf = Pdf.empty () in - PDF(pdf, Alist.empty, abspath) + PDF(pdf, Alist.empty) -let write_to_file ((PDF(pdf, pageacc, abspath)) : t) : unit = +let write_to_file (abspath : abs_path) ((PDF(pdf, pageacc)) : t) : unit = Logging.begin_to_embed_fonts (); let pdfdict_font = FontInfo.get_font_dictionary pdf in let pdfarr_procset = diff --git a/src/backend/handlePdf.mli b/src/backend/handlePdf.mli index a4682c5fc..67150b409 100644 --- a/src/backend/handlePdf.mli +++ b/src/backend/handlePdf.mli @@ -5,7 +5,7 @@ open HorzBox type t -val create_empty_pdf : abs_path -> t +val create_empty_pdf : unit -> t type config = { debug_show_bbox : bool; @@ -19,7 +19,7 @@ type page val write_page : config -> page -> page_parts_scheme_func -> t -> t -val write_to_file : t -> unit +val write_to_file : abs_path -> t -> unit val make_empty_page : paper_size:(length * length) -> page_break_info -> page_content_scheme -> page diff --git a/src/backend/pageBreak.ml b/src/backend/pageBreak.ml index d5d4902f2..6a02f787e 100644 --- a/src/backend/pageBreak.ml +++ b/src/backend/pageBreak.ml @@ -1,6 +1,5 @@ (* -*- coding: utf-8 -*- *) -open MyUtil open LengthInterface open HorzBox @@ -693,9 +692,9 @@ let chop_single_column_with_insertion (pbinfo : page_break_info) (content_height chop_single_column pbinfo content_height (List.append pbvblst_inserted pbvblst) -let main (pdf_config : HandlePdf.config) (absname_out : abs_path) ~(paper_size : length * length) (columnhookf : column_hook_func) (pagecontf : page_content_scheme_func) (pagepartsf : page_parts_scheme_func) (vblst : vert_box list) : HandlePdf.t = +let main (pdf_config : HandlePdf.config) ~(paper_size : length * length) (columnhookf : column_hook_func) (pagecontf : page_content_scheme_func) (pagepartsf : page_parts_scheme_func) (vblst : vert_box list) : HandlePdf.t = - let pdfinit = HandlePdf.create_empty_pdf absname_out in + let pdfinit = HandlePdf.create_empty_pdf () in let rec aux pageno (pdfacc : HandlePdf.t) pbvblst = let pbinfo = { current_page_number = pageno; } in @@ -714,9 +713,9 @@ let main (pdf_config : HandlePdf.config) (absname_out : abs_path) ~(paper_size : aux 1 pdfinit pbvblst -let main_multicolumn (pdf_config : HandlePdf.config) ~(page_number_limit : int) (absname_out : abs_path) ~(paper_size : length * length) (origin_shifts : length list) (columnhookf : column_hook_func) (columnendhookf : column_hook_func) (pagecontf : page_content_scheme_func) (pagepartsf : page_parts_scheme_func) (vblst : vert_box list) : HandlePdf.t = +let main_multicolumn (pdf_config : HandlePdf.config) ~(page_number_limit : int) ~(paper_size : length * length) (origin_shifts : length list) (columnhookf : column_hook_func) (columnendhookf : column_hook_func) (pagecontf : page_content_scheme_func) (pagepartsf : page_parts_scheme_func) (vblst : vert_box list) : HandlePdf.t = - let pdfinit = HandlePdf.create_empty_pdf absname_out in + let pdfinit = HandlePdf.create_empty_pdf () in let rec iter_on_column (pbinfo : page_break_info) (content_height : length) diff --git a/src/backend/pageBreak.mli b/src/backend/pageBreak.mli index 0485d254b..0a498e545 100644 --- a/src/backend/pageBreak.mli +++ b/src/backend/pageBreak.mli @@ -1,5 +1,4 @@ -open MyUtil open LengthInterface open HorzBox @@ -7,9 +6,9 @@ exception PageNumberLimitExceeded of int val solidify : vert_box list -> intermediate_vert_box list -val main : HandlePdf.config -> abs_path -> paper_size:(length * length) -> column_hook_func -> page_content_scheme_func -> page_parts_scheme_func -> vert_box list -> HandlePdf.t +val main : HandlePdf.config -> paper_size:(length * length) -> column_hook_func -> page_content_scheme_func -> page_parts_scheme_func -> vert_box list -> HandlePdf.t -val main_multicolumn : HandlePdf.config -> page_number_limit:int -> abs_path -> paper_size:(length * length) -> length list -> column_hook_func -> column_hook_func -> page_content_scheme_func -> page_parts_scheme_func -> vert_box list -> HandlePdf.t +val main_multicolumn : HandlePdf.config -> page_number_limit:int -> paper_size:(length * length) -> length list -> column_hook_func -> column_hook_func -> page_content_scheme_func -> page_parts_scheme_func -> vert_box list -> HandlePdf.t val adjust_to_first_line : intermediate_vert_box list -> length * length diff --git a/src/frontend/main.ml b/src/frontend/main.ml index e74f89b4f..d4fb4a772 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -100,8 +100,8 @@ let unfreeze_environment (frenv : frozen_environment) : environment = } -let output_pdf (pdfret : HandlePdf.t) : unit = - HandlePdf.write_to_file pdfret +let output_pdf (abspath_out : abs_path) (pdfret : HandlePdf.t) : unit = + HandlePdf.write_to_file abspath_out pdfret let output_text (abspath_out : abs_path) (data : string) : unit = @@ -174,11 +174,11 @@ let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf let pdf = match pbstyle with | SingleColumn -> - PageBreak.main pdf_config abspath_out ~paper_size + PageBreak.main pdf_config ~paper_size columnhookf pagecontf pagepartsf imvblst | MultiColumn(origin_shifts) -> - PageBreak.main_multicolumn pdf_config ~page_number_limit abspath_out ~paper_size + PageBreak.main_multicolumn pdf_config ~page_number_limit ~paper_size origin_shifts columnhookf columnendhookf pagecontf pagepartsf imvblst in begin @@ -189,13 +189,13 @@ let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf | CrossRef.CountMax -> Logging.achieve_count_max (); - output_pdf pdf; + output_pdf abspath_out pdf; Logging.end_output display_config abspath_out; return () | CrossRef.CanTerminate unresolved_crossrefs -> Logging.achieve_fixpoint unresolved_crossrefs; - output_pdf pdf; + output_pdf abspath_out pdf; Logging.end_output display_config abspath_out; return () end From ff9f13c7aaf687df22c90e1c225e6eb1bb406b0e Mon Sep 17 00:00:00 2001 From: kyori19 Date: Mon, 25 Mar 2024 05:08:07 +0000 Subject: [PATCH 160/381] Separate eval_document_file to BuildDocument --- src/backend/buildDocument.ml | 144 ++++++++++++++++++++++++++++++ src/backend/buildDocument.mli | 17 ++++ src/frontend/main.ml | 159 +--------------------------------- 3 files changed, 162 insertions(+), 158 deletions(-) create mode 100644 src/backend/buildDocument.ml create mode 100644 src/backend/buildDocument.mli diff --git a/src/backend/buildDocument.ml b/src/backend/buildDocument.ml new file mode 100644 index 000000000..b1882a9aa --- /dev/null +++ b/src/backend/buildDocument.ml @@ -0,0 +1,144 @@ + +open ConfigError +open MyUtil +open Types + + +module StoreIDMap = Map.Make(StoreID) + + +type frozen_environment = { + frozen_main : location EvalVarIDMap.t; + frozen_store_ref : (syntactic_value StoreIDHashTable.t) ref; + frozen_store_map : syntactic_value StoreIDMap.t; + frozen_config : runtime_config; +} + + +let freeze_environment (env : environment) : frozen_environment = + let + { + env_main = valenv; + env_store = stenvref; + env_config = runtime_config; + } = env + in + let stmap = + StoreIDMap.empty |> StoreIDHashTable.fold (fun stid value stmap -> + stmap |> StoreIDMap.add stid value + ) (!stenvref) + in + { + frozen_main = valenv; + frozen_store_ref = stenvref; + frozen_store_map = stmap; + frozen_config = runtime_config; + } + + +let unfreeze_environment (frenv : frozen_environment) : environment = + let + { + frozen_main = valenv; + frozen_store_ref = stenvref; + frozen_store_map = stmap; + frozen_config = runtime_config; + } = frenv + in + let stenv = StoreIDHashTable.create 128 in + stmap |> StoreIDMap.iter (fun stid value -> StoreIDHashTable.add stenv stid value); + stenvref := stenv; + { + env_main = valenv; + env_store = ref stenv; + env_config = runtime_config; + } + + +let transform_pdf (pdf_config : HandlePdf.config) ~(page_number_limit : int) = function + | BaseConstant(BCDocument(paper_size, pbstyle, columnhookf, columnendhookf, pagecontf, pagepartsf, imvblst)) -> + begin + Logging.start_page_break (); + State.start_page_break (); + match pbstyle with + | SingleColumn -> + PageBreak.main pdf_config ~paper_size + columnhookf pagecontf pagepartsf imvblst + + | MultiColumn(origin_shifts) -> + PageBreak.main_multicolumn pdf_config ~page_number_limit ~paper_size + origin_shifts columnhookf columnendhookf pagecontf pagepartsf imvblst + end + + | value -> + EvalUtil.report_bug_value "main; not a DocumentValue(...)" value + + +let transform_text = + EvalUtil.get_string + + +let output_pdf (abspath_out : abs_path) (pdfret : HandlePdf.t) : unit = + HandlePdf.write_to_file abspath_out pdfret + + +let output_text (abspath_out : abs_path) (data : string) : unit = + Core.Out_channel.write_all (get_abs_path_string abspath_out) ~data + + +(* Initialization that should be performed before every cross-reference-solving loop *) +let reset_pdf () = + ImageInfo.initialize (); + NamedDest.initialize (); + () + + +let evaluate (reset : unit -> unit) ~(is_bytecomp_mode : bool) (i : int) (env_freezed : frozen_environment) (ast : abstract_tree) : (syntactic_value, config_error) result = + let open ResultMonad in + Logging.start_evaluation i; + reset (); + let env = unfreeze_environment env_freezed in + let value = + if is_bytecomp_mode then + let (value, _) = Bytecomp.compile_and_exec_0 env ast in + value + else + Evaluator.interpret_0 env ast + in + Logging.end_evaluation (); + return value + + +let build_document (transform : syntactic_value -> 'a) (reset : unit -> unit) (output : abs_path -> 'a -> unit) (display_config : Logging.config) ~(is_bytecomp_mode : bool) (env : environment) (ast : abstract_tree) (abspath_out : abs_path) (abspath_dump : abs_path) = + let open ResultMonad in + let env_freezed = freeze_environment env in + let rec aux (i : int) = + let* value = evaluate reset ~is_bytecomp_mode i env_freezed ast in + let document = transform value in + match CrossRef.needs_another_trial abspath_dump with + | CrossRef.NeedsAnotherTrial -> + Logging.needs_another_trial (); + aux (i + 1) + + | CrossRef.CountMax -> + Logging.achieve_count_max (); + output abspath_out document; + Logging.end_output display_config abspath_out; + return () + + | CrossRef.CanTerminate unresolved_crossrefs -> + Logging.achieve_fixpoint unresolved_crossrefs; + output abspath_out document; + Logging.end_output display_config abspath_out; + return () + in + aux 1 + + +let main (output_mode : output_mode) (pdf_config : HandlePdf.config) ~(page_number_limit : int) = + match output_mode with + | PdfMode -> + build_document (transform_pdf pdf_config ~page_number_limit) reset_pdf output_pdf + + | TextMode(_) -> + build_document transform_text Fun.id output_text diff --git a/src/backend/buildDocument.mli b/src/backend/buildDocument.mli new file mode 100644 index 000000000..557f96c1e --- /dev/null +++ b/src/backend/buildDocument.mli @@ -0,0 +1,17 @@ + +open ConfigError +open MyUtil +open Types + + +val main : + output_mode -> + HandlePdf.config -> + page_number_limit:int -> + Logging.config -> + is_bytecomp_mode:bool -> + environment -> + abstract_tree -> + abs_path -> + abs_path -> + (unit, config_error) result diff --git a/src/frontend/main.ml b/src/frontend/main.ml index d4fb4a772..459942613 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -12,19 +12,6 @@ let version = (SemanticVersion.to_string Constant.current_language_version) -(* Initialization that should be performed before every cross-reference-solving loop *) -let reset (output_mode : output_mode) = - let open ResultMonad in - match output_mode with - | TextMode(_) -> - return () - - | PdfMode -> - ImageInfo.initialize (); - NamedDest.initialize (); - return () - - (* Initialization that should be performed before typechecking *) let initialize ~(base_dir : abs_path) ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_config : runtime_config) : Typeenv.t * environment = FreeID.initialize (); @@ -49,65 +36,6 @@ let initialize ~(base_dir : abs_path) ~(is_bytecomp_mode : bool) (output_mode : (tyenv, env) -module StoreIDMap = Map.Make(StoreID) - - -type frozen_environment = { - frozen_main : location EvalVarIDMap.t; - frozen_store_ref : (syntactic_value StoreIDHashTable.t) ref; - frozen_store_map : syntactic_value StoreIDMap.t; - frozen_config : runtime_config; -} - - -let freeze_environment (env : environment) : frozen_environment = - let - { - env_main = valenv; - env_store = stenvref; - env_config = runtime_config; - } = env - in - let stmap = - StoreIDMap.empty |> StoreIDHashTable.fold (fun stid value stmap -> - stmap |> StoreIDMap.add stid value - ) (!stenvref) - in - { - frozen_main = valenv; - frozen_store_ref = stenvref; - frozen_store_map = stmap; - frozen_config = runtime_config; - } - - -let unfreeze_environment (frenv : frozen_environment) : environment = - let - { - frozen_main = valenv; - frozen_store_ref = stenvref; - frozen_store_map = stmap; - frozen_config = runtime_config; - } = frenv - in - let stenv = StoreIDHashTable.create 128 in - stmap |> StoreIDMap.iter (fun stid value -> StoreIDHashTable.add stenv stid value); - stenvref := stenv; - { - env_main = valenv; - env_store = ref stenv; - env_config = runtime_config; - } - - -let output_pdf (abspath_out : abs_path) (pdfret : HandlePdf.t) : unit = - HandlePdf.write_to_file abspath_out pdfret - - -let output_text (abspath_out : abs_path) (data : string) : unit = - Core.Out_channel.write_all (get_abs_path_string abspath_out) ~data - - let eval_library_file (display_config : Logging.config) ~(is_bytecomp_mode : bool) ~(run_tests : bool) (env : environment) (abspath : abs_path) (binds : binding list) : environment = Logging.begin_to_eval_file display_config abspath; if is_bytecomp_mode then @@ -121,91 +49,6 @@ let eval_library_file (display_config : Logging.config) ~(is_bytecomp_mode : boo env -let eval_main ~(is_bytecomp_mode : bool) (output_mode : output_mode) (i : int) (env_freezed : frozen_environment) (ast : abstract_tree) : (syntactic_value, config_error) result = - let open ResultMonad in - Logging.start_evaluation i; - let* () = reset output_mode in - let env = unfreeze_environment env_freezed in - let value = - if is_bytecomp_mode then - let (value, _) = Bytecomp.compile_and_exec_0 env ast in - value - else - Evaluator.interpret_0 env ast - in - Logging.end_evaluation (); - return value - - -let eval_document_file (display_config : Logging.config) (pdf_config : HandlePdf.config) ~(page_number_limit : int) ~(is_bytecomp_mode : bool) (output_mode : output_mode) (env : environment) (ast : abstract_tree) (abspath_out : abs_path) (abspath_dump : abs_path) = - let open ResultMonad in - let env_freezed = freeze_environment env in - match output_mode with - | TextMode(_) -> - let rec aux (i : int) = - let* value_str = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in - let s = EvalUtil.get_string value_str in - match CrossRef.needs_another_trial abspath_dump with - | CrossRef.NeedsAnotherTrial -> - Logging.needs_another_trial (); - aux (i + 1) - - | CrossRef.CountMax -> - Logging.achieve_count_max (); - output_text abspath_out s; - Logging.end_output display_config abspath_out; - return () - - | CrossRef.CanTerminate unresolved_crossrefs -> - Logging.achieve_fixpoint unresolved_crossrefs; - output_text abspath_out s; - Logging.end_output display_config abspath_out; - return () - in - aux 1 - - | PdfMode -> - let rec aux (i : int) = - let* value_doc = eval_main ~is_bytecomp_mode output_mode i env_freezed ast in - match value_doc with - | BaseConstant(BCDocument(paper_size, pbstyle, columnhookf, columnendhookf, pagecontf, pagepartsf, imvblst)) -> - Logging.start_page_break (); - State.start_page_break (); - let pdf = - match pbstyle with - | SingleColumn -> - PageBreak.main pdf_config ~paper_size - columnhookf pagecontf pagepartsf imvblst - - | MultiColumn(origin_shifts) -> - PageBreak.main_multicolumn pdf_config ~page_number_limit ~paper_size - origin_shifts columnhookf columnendhookf pagecontf pagepartsf imvblst - in - begin - match CrossRef.needs_another_trial abspath_dump with - | CrossRef.NeedsAnotherTrial -> - Logging.needs_another_trial (); - aux (i + 1) - - | CrossRef.CountMax -> - Logging.achieve_count_max (); - output_pdf abspath_out pdf; - Logging.end_output display_config abspath_out; - return () - - | CrossRef.CanTerminate unresolved_crossrefs -> - Logging.achieve_fixpoint unresolved_crossrefs; - output_pdf abspath_out pdf; - Logging.end_output display_config abspath_out; - return () - end - - | _ -> - EvalUtil.report_bug_value "main; not a DocumentValue(...)" value_doc - in - aux 1 - - (* Performs preprecessing. the evaluation is run by the naive interpreter regardless of whether `--bytecomp` was specified. *) let preprocess_bindings (display_config : Logging.config) ~(run_tests : bool) (env : environment) (libs : (abs_path * binding list) list) : environment * (abs_path * code_rec_or_nonrec list) list = @@ -240,7 +83,7 @@ let preprocess_and_evaluate (display_config : Logging.config) (pdf_config : Hand (* Performs evaluation: *) let env = evaluate_bindings display_config ~is_bytecomp_mode ~run_tests env codebinds in let ast_doc = unlift_code code_doc in - eval_document_file display_config pdf_config ~page_number_limit ~is_bytecomp_mode output_mode env ast_doc abspath_out abspath_dump + BuildDocument.main output_mode pdf_config ~page_number_limit display_config ~is_bytecomp_mode env ast_doc abspath_out abspath_dump let get_candidate_file_extensions (output_mode : output_mode) = From 1362c84ef215563c0a9484f4b11353ab2a3cc6f4 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 04:15:36 +0900 Subject: [PATCH 161/381] add a token `here` for getting the directory path of the source file --- src/frontend/lexer.mll | 5 +++-- src/frontend/openFileDependencyResolver.ml | 2 +- src/frontend/parser.mly | 6 ++++++ src/frontend/parserInterface.ml | 12 ++++++------ src/frontend/parserInterface.mli | 4 ++-- src/md/markdownParser.ml | 9 +++++---- src/md/markdownParser.mli | 3 ++- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/frontend/lexer.mll b/src/frontend/lexer.mll index f94b955b0..408ac8ad2 100644 --- a/src/frontend/lexer.mll +++ b/src/frontend/lexer.mll @@ -31,11 +31,11 @@ let get_pos (lexbuf : Lexing.lexbuf) : Range.t = let posS = Lexing.lexeme_start_p lexbuf in let posE = Lexing.lexeme_end_p lexbuf in - let fname = posS.Lexing.pos_fname in + let abspathstr = posS.Lexing.pos_fname in let lnum = posS.Lexing.pos_lnum in let cnumS = posS.Lexing.pos_cnum - posS.Lexing.pos_bol in let cnumE = posE.Lexing.pos_cnum - posE.Lexing.pos_bol in - Range.make fname lnum cnumS cnumE + Range.make abspathstr lnum cnumS cnumE let report_error lexbuf errmsg = @@ -321,6 +321,7 @@ rule lex_program stack = parse | "end" -> END(pos) | "false" -> FALSE(pos) | "fun" -> FUN(pos) + | "here" -> HERE(pos, (Lexing.lexeme_start_p lexbuf).Lexing.pos_fname) | "if" -> IF(pos) | "in" -> IN(pos) | "include" -> INCLUDE(pos) diff --git a/src/frontend/openFileDependencyResolver.ml b/src/frontend/openFileDependencyResolver.ml index 366bd73cf..9dcdd451f 100644 --- a/src/frontend/openFileDependencyResolver.ml +++ b/src/frontend/openFileDependencyResolver.ml @@ -133,7 +133,7 @@ let register_markdown_file (display_config : Logging.config) (configenv : Envelo Logging.begin_to_parse_file display_config abspath_in; let* md = match read_file abspath_in with - | Ok(data) -> MarkdownParser.decode data |> Result.map_error (fun e -> MarkdownError(e)) + | Ok(data) -> MarkdownParser.decode abspath_in data |> Result.map_error (fun e -> MarkdownError(e)) | Error(msg) -> err (CannotReadFileOwingToSystem(msg)) in let class_module_name = MarkdownParser.get_class_module_name md in diff --git a/src/frontend/parser.mly b/src/frontend/parser.mly index 994d65b66..f417deda3 100644 --- a/src/frontend/parser.mly +++ b/src/frontend/parser.mly @@ -276,6 +276,7 @@ %token CHAR %token STRING %token POSITIONED_STRING +%token HERE %token SPACE BREAK %token MATHCHARS @@ -943,6 +944,11 @@ expr_bot: let (rng, ipos, s) = tok in make_standard (Tok rng) (Tok rng) (UTPositionedString(ipos, s)) } + | tok=HERE + { + let (rng, abspathstr) = tok in + make_standard (Tok rng) (Tok rng) (UTStringConstant(abspathstr)) + } | tokL=L_PAREN; ident=binop; tokR=R_PAREN { make_standard (Tok tokL) (Tok tokR) (UTContentOf([], ident)) } | tokL=L_PAREN; COMMAND; long_ident=backslash_cmd; tokR=R_PAREN diff --git a/src/frontend/parserInterface.ml b/src/frontend/parserInterface.ml index a8d07686e..43127a876 100644 --- a/src/frontend/parserInterface.ml +++ b/src/frontend/parserInterface.ml @@ -22,10 +22,11 @@ let k_fail chkpt = assert false -let process_common (fname : string) (lexbuf : Lexing.lexbuf) = +let process_common (abspath : abs_path) (lexbuf : Lexing.lexbuf) = let open ResultMonad in + let abspathstr = get_abs_path_string abspath in let stack = Lexer.reset_to_program () in - lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with pos_fname = fname }; + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with pos_fname = abspathstr }; let supplier = I.lexer_lexbuf_to_supplier (Lexer.cut_token stack) lexbuf in try return @@ I.loop_handle k_success k_fail supplier (Parser.Incremental.main lexbuf.Lexing.lex_curr_p) @@ -35,14 +36,13 @@ let process_common (fname : string) (lexbuf : Lexing.lexbuf) = let process_file (abspath : abs_path) = - let fname = basename_abs abspath in let inc = open_in_abs abspath in let lexbuf = Lexing.from_channel inc in - let res = process_common fname lexbuf in + let res = process_common abspath lexbuf in close_in inc; res -let process_text (fname : string) (s : string) = +let process_text (abspath : abs_path) (s : string) = let lexbuf = Lexing.from_string s in - process_common fname lexbuf + process_common abspath lexbuf diff --git a/src/frontend/parserInterface.mli b/src/frontend/parserInterface.mli index 1d0b114f9..cf0b377be 100644 --- a/src/frontend/parserInterface.mli +++ b/src/frontend/parserInterface.mli @@ -2,8 +2,8 @@ open MyUtil open Types -val process_common : string -> Lexing.lexbuf -> (untyped_source_file, parse_error) result +val process_common : abs_path -> Lexing.lexbuf -> (untyped_source_file, parse_error) result val process_file : abs_path -> (untyped_source_file, parse_error) result -val process_text : string -> string -> (untyped_source_file, parse_error) result +val process_text : abs_path -> string -> (untyped_source_file, parse_error) result diff --git a/src/md/markdownParser.ml b/src/md/markdownParser.ml index c2b4cb538..2b122c506 100644 --- a/src/md/markdownParser.ml +++ b/src/md/markdownParser.ml @@ -1,4 +1,5 @@ +open MyUtil open EnvelopeSystemBase open Types @@ -375,9 +376,9 @@ let extract_comment (s : string) : string option = None -let parse_expression (s_expr : string) : untyped_abstract_tree ok = +let parse_expression (abspath : abs_path) (s_expr : string) : untyped_abstract_tree ok = let open ResultMonad in - match ParserInterface.process_text "(markdown)" s_expr with + match ParserInterface.process_text abspath s_expr with | Ok(UTDocumentFile([], [], utast)) -> return utast | _ -> err InvalidExtraExpression @@ -389,7 +390,7 @@ type t = { } -let decode (s : string) : t ok = +let decode (abspath : abs_path) (s : string) : t ok = let open ResultMonad in let obs = Omd.of_string s in let* (class_module_name, s_extra, obs) = @@ -405,7 +406,7 @@ let decode (s : string) : t ok = | _ -> err InvalidHeaderComment in - let* utast_extra = parse_expression s_extra in + let* utast_extra = parse_expression abspath s_extra in return { class_module_name = class_module_name; extra_expression = utast_extra; diff --git a/src/md/markdownParser.mli b/src/md/markdownParser.mli index 5b33ea1dd..7ae0cea5d 100644 --- a/src/md/markdownParser.mli +++ b/src/md/markdownParser.mli @@ -1,4 +1,5 @@ +open MyUtil open EnvelopeSystemBase open Types @@ -8,7 +9,7 @@ type error = type t -val decode : string -> (t, error) result +val decode : abs_path -> string -> (t, error) result val get_class_module_name : t -> module_name From eb121ed1a49fbcd4cf6843214493021a9e7bc91e Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 04:34:51 +0900 Subject: [PATCH 162/381] add a base type `hyphenation` --- src/frontend/display.ml | 1 + src/frontend/primitives.cppo.ml | 1 + src/frontend/types.cppo.ml | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/frontend/display.ml b/src/frontend/display.ml index 3c4ca8e88..faa8aecb4 100644 --- a/src/frontend/display.ml +++ b/src/frontend/display.ml @@ -225,6 +225,7 @@ let show_base_type = function | RegExpType -> "regexp" | TextInfoType -> "text-info" | InputPosType -> "input-position" + | HyphenationType -> "hyphenation" type paren_level = diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index d1def3229..b5bd8cf2b 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -47,6 +47,7 @@ let tDOC = (~! "document" , BaseType(DocumentType)) let tRE = (~! "regexp" , BaseType(RegExpType)) let tTCTX = (~! "text-info" , BaseType(TextInfoType)) let tIPOS = (~! "input-position", BaseType(InputPosType)) +let tHYPH = (~! "hyphenation" , BaseType(HyphenationType)) let tL ty = (~! "list", ListType(ty)) let tR ty = (~! "ref", RefType(ty)) diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index 201c72733..b07b733e0 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -120,6 +120,7 @@ type base_type = | RegExpType | TextInfoType | InputPosType + | HyphenationType [@@deriving show] @@ -175,6 +176,7 @@ let base_type_map : base_type TypeNameMap.t = ("regexp" , RegExpType); ("text-info" , TextInfoType); ("input-position", InputPosType); + ("hyphenation" , HyphenationType); ] From 4f676e0593ad971389209e146f6be0902c27b632 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 04:53:37 +0900 Subject: [PATCH 163/381] add a primitive `set-hyphenation-dictionary` --- src/frontend/evalUtil.ml | 5 +++++ src/frontend/types.cppo.ml | 2 ++ tools/gencode/type.ml | 1 + tools/gencode/type.mli | 1 + tools/gencode/vminst.ml | 13 +++++++++++++ 5 files changed, 22 insertions(+) diff --git a/src/frontend/evalUtil.ml b/src/frontend/evalUtil.ml index cefca8bf8..1e94cc012 100644 --- a/src/frontend/evalUtil.ml +++ b/src/frontend/evalUtil.ml @@ -462,6 +462,11 @@ let get_prepath (value : syntactic_value) : PrePath.t = | _ -> report_bug_value "get_prepath" value +let get_hyphenation : syntactic_value -> LoadHyph.t = function + | BaseConstant(BCHyphenation(hyph)) -> hyph + | value -> report_bug_value "get_hyphenation" value + + let get_outline (value : syntactic_value) = match value with | Tuple([ diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index b07b733e0..d3fe5191f 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -708,6 +708,8 @@ type base_constant = [@printer (fun fmt _ -> Format.fprintf fmt "")] | BCDocument of (length * length) * page_break_style * HorzBox.column_hook_func * HorzBox.column_hook_func * HorzBox.page_content_scheme_func * HorzBox.page_parts_scheme_func * HorzBox.vert_box list | BCInputPos of input_position + | BCHyphenation of LoadHyph.t + [@printer (fun fmt _ -> Format.fprintf fmt "")] [@@deriving show { with_path = false; }] type 'a letrec_binding_scheme = diff --git a/tools/gencode/type.ml b/tools/gencode/type.ml index fa04fb4b0..f6fa1be62 100644 --- a/tools/gencode/type.ml +++ b/tools/gencode/type.ml @@ -139,6 +139,7 @@ let tDECO = tycon0 "tDECO" "deco" let tIGR = tycon0 "tIGR" "inline-graphics" let tIGRO = tycon0 "tIGRO" "inline-graphics-outer" let tDOCINFODIC = tycon0 "tDOCINFODIC" "document-information-dictionary" +let tHYPH = tycon0 "tHYPH" "hyphenation" let tL = tycon1 "tL" "list" let tR = tycon1 "tR" "ref" let tOPT = tycon1 "tOPT" "option" diff --git a/tools/gencode/type.mli b/tools/gencode/type.mli index f923bd1e7..1b4e3e83b 100644 --- a/tools/gencode/type.mli +++ b/tools/gencode/type.mli @@ -63,6 +63,7 @@ val tIGR : t val tIGRO : t val tDASH : t val tDOCINFODIC : t +val tHYPH : t val tPROD : t list -> t diff --git a/tools/gencode/vminst.ml b/tools/gencode/vminst.ml index bc998a549..f2312fc6c 100644 --- a/tools/gencode/vminst.ml +++ b/tools/gencode/vminst.ml @@ -124,6 +124,19 @@ Context(ctx, { ctxsub with math_command = mcmd; }) ~is_pdf_mode_primitive:true ~code:{| Context(ctx, { ctxsub with code_text_command = ctcmd; }) +|} + ; inst "PrimitiveSetHyphenationDictionary" + ~name:"set-hyphenation-dictionary" + ~type_:Type.(tHYPH @-> tCTX @-> tCTX) + ~fields:[ + ] + ~params:[ + param "hyph" ~type_:"hyphenation"; + param "(ctx, ctxsub)" ~type_:"context"; + ] + ~is_pdf_mode_primitive:true + ~code:{| +Context({ ctx with hyphen_dictionary = hyph; }, ctxsub) |} ; inst "PrimitiveGetLeftMathClass" ~name:"get-left-math-class" From b944260b041181cf4a74d9b560c06dcbc4b48a4a Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 05:12:43 +0900 Subject: [PATCH 164/381] fix tests for the parser about paths --- test/parsing/parser.expected | 1153 ++++++++++++++++++++-------------- test/parsing/parser_test.ml | 9 +- 2 files changed, 671 insertions(+), 491 deletions(-) diff --git a/test/parsing/parser.expected b/test/parsing/parser.expected index 8b5e9458c..7f8773ec6 100644 --- a/test/parsing/parser.expected +++ b/test/parsing/parser.expected @@ -4,253 +4,315 @@ ;; nx.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Nx"), None, - [((Range.Normal ), + (((Range.Normal ), "Nx"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "xs"), + (((Range.Normal ), "xs"), (UTListCons ((UTIntegerConstant 1), (UTListCons ((UTIntegerConstant 2), (UTListCons ((UTIntegerConstant 3), UTEndOfList)))) )))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "ys"), + (((Range.Normal ), "ys"), (UTListCons ((UTIntegerConstant 1), (UTListCons ((UTIntegerConstant 2), (UTListCons ((UTIntegerConstant 3), UTEndOfList)))) )))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, - (UTNonRec (((Range.Normal ), "r0"), (UTRecord []))) + (UTNonRec + (((Range.Normal ), "r0"), (UTRecord []))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "r1"), + (((Range.Normal ), "r1"), (UTRecord - [(((Range.Normal ), "x"), + [(((Range.Normal ), "x"), (UTIntegerConstant 1))]))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "r2"), + (((Range.Normal ), "r2"), (UTRecord - [(((Range.Normal ), "x"), + [(((Range.Normal ), "x"), (UTIntegerConstant 1)); - (((Range.Normal ), "y"), + (((Range.Normal ), "y"), (UTIntegerConstant 2)) ]))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "r2semi"), + (((Range.Normal ), "r2semi"), (UTRecord - [(((Range.Normal ), "x"), + [(((Range.Normal ), "x"), (UTIntegerConstant 1)); - (((Range.Normal ), "y"), + (((Range.Normal ), "y"), (UTIntegerConstant 2)) ]))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "tp2"), + (((Range.Normal ), "tp2"), (UTTuple (UTIntegerConstant 1) (UTIntegerConstant 2) ))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "tp3"), + (((Range.Normal ), "tp3"), (UTTuple (UTIntegerConstant 1) (UTIntegerConstant 2) (UTIntegerConstant 3)))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "op-test"), + (((Range.Normal ), "op-test"), (UTTuple (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "||"))), + ((Range.Normal ), "||") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "||"))), + ((Range.Normal ), + "||") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "&&"))), + ((Range.Normal ), "&&") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "&&"))), + ((Range.Normal ), + "&&") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "=="))), + ((Range.Normal ), "==") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), ">"))), + ((Range.Normal ), + ">") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "<"))), + ((Range.Normal ), + "<") + )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), + "c") + )) )), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), + "d") + )) )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "^"))), + ((Range.Normal ), "^"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "::"))), + ((Range.Normal ), + "::") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "+"))), + ((Range.Normal ), "+"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "+"))), + ((Range.Normal ), + "+") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-'"))), + ((Range.Normal ), "-'") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), + "-") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "+"))), + ((Range.Normal ), "+"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "+"))), + ((Range.Normal ), + "+") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-") + ((Range.Normal ), + "-") )), (UTContentOf ([], - ((Range.Normal ), "b") + ((Range.Normal ), + "b") )) )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), + "c") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*'"))), + ((Range.Normal ), + "*'") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), + "b") + )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "/"))), + ((Range.Normal ), + "/") + )), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), + "c") + )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "mod") + ((Range.Normal ), + "mod") )), (UTContentOf ([], - ((Range.Normal ), "d") + ((Range.Normal ), + "d") )) )), (UTContentOf ([], - ((Range.Normal ), "e"))) + ((Range.Normal ), + "e") + )) )) )) )) @@ -258,125 +320,139 @@ (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), + "-") + )), (UTIntegerConstant 0))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "||"))), + ((Range.Normal ), "||") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "&&"))), + ((Range.Normal ), + "&&") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "=="))), + ((Range.Normal ), + "==") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "^") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "b") )) )), (UTContentOf ([], - ((Range.Normal ), "c") + ((Range.Normal ), + "c") )) )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), ">") + ((Range.Normal ), + ">") )), (UTContentOf ([], - ((Range.Normal ), "d") + ((Range.Normal ), + "d") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "<") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "e") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "^") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "f") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "::") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "g") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "+") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "h") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "-'") )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "-") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "i") )) )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "j") )) )) @@ -384,22 +460,22 @@ (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "*") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "k") )) )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "*'") )), (UTContentOf ([], - ((Range.Normal ), + ((Range.Normal ), "l") )) )), @@ -407,12 +483,12 @@ (UTApply ([], (UTContentOf ( [], - ((Range.Normal ), + ((Range.Normal ), "/") )), (UTContentOf ( [], - ((Range.Normal ), + ((Range.Normal ), "m") )) )), @@ -420,18 +496,18 @@ (UTApply ([], (UTContentOf ( [], - ((Range.Normal ), + ((Range.Normal ), "mod") )), (UTContentOf ( [], - ((Range.Normal ), + ((Range.Normal ), "n") )) )), (UTContentOf ( [], - ((Range.Normal ), + ((Range.Normal ), "o") )) )) @@ -450,225 +526,263 @@ (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), + "-") + )), (UTIntegerConstant 0))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "not"))), + ((Range.Normal ), + "not") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTConstructor ([], "F", (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTConstructor ([], "A", UTUnitConstant)))), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "+"))), + ((Range.Normal ), "+"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "f"))), + ((Range.Normal ), "f") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), "-"))), (UTContentOf ([], - ((Range.Normal ), "f"))) + ((Range.Normal ), "f"))) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "&&"))), + ((Range.Normal ), "&&") + )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "not"))), + ((Range.Normal ), + "not") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "||"))), + ((Range.Normal ), "||") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "not"))), + ((Range.Normal ), "not") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "not"))), + ((Range.Normal ), "not") + )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTConstructor ([], "F", (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b") + )) )) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a"))) )), (UTConstructor ([], "B", UTUnitConstant)))) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "not"))), + ((Range.Normal ), + "not") + )), (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), + "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*") + )), (UTConstructor ([], "F", (UTContentOf ([], - ((Range.Normal ), "a"))) + ((Range.Normal ), "a") + )) )) )), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "*"))), + ((Range.Normal ), "*"))), (UTConstructor ([], "A", UTUnitConstant)))), (UTContentOf ([], - ((Range.Normal ), "b"))) + ((Range.Normal ), "b"))) ))))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "uminus"), + (((Range.Normal ), "uminus"), (UTTuple (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), "-") + )), (UTIntegerConstant 0))), (UTIntegerConstant 1))) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), "-") + )), (UTIntegerConstant 0))), (UTIntegerConstant 42))) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-."))), + ((Range.Normal ), "-.") + )), (UTFloatConstant 0.))), (UTFloatConstant 1.))) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-."))), + ((Range.Normal ), "-.") + )), (UTFloatConstant 0.))), (UTFloatConstant 3.14))) (UTLengthDescription (-1., "mm")) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-'"))), + ((Range.Normal ), "-'") + )), (UTLengthDescription (0., "cm")))), (UTLengthDescription (2.71828, "cm")))) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), "-") + )), (UTIntegerConstant 0))), (UTContentOf ([], - ((Range.Normal ), "x"))) + ((Range.Normal ), "x"))) )) (UTApply ([], (UTApply ([], (UTContentOf ([], - ((Range.Normal ), "-"))), + ((Range.Normal ), "-") + )), (UTIntegerConstant 0))), (UTContentOf ([], - ((Range.Normal ), "x"))) + ((Range.Normal ), "x"))) ))))) ))) ]))) @@ -676,30 +790,34 @@ ;; variants.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Variants"), None, - [((Range.Normal ), + (((Range.Normal ), "Variants"), None, + [((Range.Normal ), (UTBindType - [(((Range.Normal ), "t"), [], + [(((Range.Normal ), "t"), [], (UTBindVariant [(UTConstructorBranch ( - ((Range.Normal ), "X"), None)); + ((Range.Normal ), "X"), + None)); (UTConstructorBranch ( - ((Range.Normal ), "Y"), None)) + ((Range.Normal ), "Y"), + None)) ])); - (((Range.Normal ), "s"), [], + (((Range.Normal ), "s"), [], (UTBindVariant [(UTConstructorBranch ( - ((Range.Normal ), "Z"), - (Some ((Range.Normal ), + ((Range.Normal ), "Z"), + (Some ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "t"), + ((Range.Normal ), + "t"), [])))) )); (UTConstructorBranch ( - ((Range.Normal ), "W"), - (Some ((Range.Normal ), + ((Range.Normal ), "W"), + (Some ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "u"), + ((Range.Normal ), + "u"), [])))) )) ])) @@ -709,35 +827,37 @@ ;; txprod.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Txprod"), None, - [((Range.Normal ), + (((Range.Normal ), "Txprod"), None, + [((Range.Normal ), (UTBindType - [(((Range.Normal ), "t"), [], + [(((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MProductType - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), []))) - ((Range.Normal ), + ((Range.Normal ), "a"), + []))) + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "b"), []))) + ((Range.Normal ), "b"), + []))) )))); - (((Range.Normal ), "s"), [], + (((Range.Normal ), "s"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MProductType - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), + ((Range.Normal ), "a"), []))) - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "b"), + ((Range.Normal ), "b"), []))) - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "c"), + ((Range.Normal ), "c"), []))))))) ])) ]))) @@ -745,49 +865,54 @@ ;; txlist.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Txlist"), None, - [((Range.Normal ), + (((Range.Normal ), "Txlist"), None, + [((Range.Normal ), (UTBindType - [(((Range.Normal ), "t"), [], + [(((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MInlineCommandType [(Types.MArgType ( - [(((Range.Normal ), "foo"), - ((Range.Normal ), + [(((Range.Normal ), + "foo"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "u"), + ((Range.Normal ), + "u"), [])))) ], - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "s"), + ((Range.Normal ), + "s"), []))) )) ])))); - (((Range.Normal ), "t"), [], + (((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MInlineCommandType [])))); - (((Range.Normal ), "t"), [], + (((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MInlineCommandType [(Types.MArgType ([], - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "s"), + ((Range.Normal ), + "s"), []))) )) ])))); - (((Range.Normal ), "t"), [], + (((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MInlineCommandType [(Types.MArgType ([], - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "s"), + ((Range.Normal ), + "s"), []))) )) ])))) @@ -797,49 +922,54 @@ ;; txrecord.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Txrecord"), None, - [((Range.Normal ), + (((Range.Normal ), "Txrecord"), None, + [((Range.Normal ), (UTBindType - [(((Range.Normal ), "t"), [], + [(((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MRecordType ( - [(((Range.Normal ), "x"), - ((Range.Normal ), + [(((Range.Normal ), "x"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), + ((Range.Normal ), + "a"), [])))); - (((Range.Normal ), "y"), - ((Range.Normal ), + (((Range.Normal ), "y"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "b"), + ((Range.Normal ), + "b"), [])))) ], None))))); - (((Range.Normal ), "t"), [], + (((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MRecordType ( - [(((Range.Normal ), "x"), - ((Range.Normal ), + [(((Range.Normal ), "x"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), + ((Range.Normal ), + "a"), [])))); - (((Range.Normal ), "y"), - ((Range.Normal ), + (((Range.Normal ), "y"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "b"), + ((Range.Normal ), + "b"), [])))) ], None))))); - (((Range.Normal ), "t"), [], + (((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MRecordType ( - [(((Range.Normal ), "x"), - ((Range.Normal ), + [(((Range.Normal ), "x"), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), + ((Range.Normal ), + "a"), [])))) ], None))))) @@ -849,33 +979,36 @@ ;; pats.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Pats"), None, - [((Range.Normal ), + (((Range.Normal ), "Pats"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "pats-test1"), + (((Range.Normal ), "pats-test1"), (UTPatternMatch ( - (UTContentOf ([], ((Range.Normal ), "a") - )), + (UTContentOf ([], + ((Range.Normal ), "a"))), [(UTPatternBranch ( - ((Range.Normal ), (UTPVariable "b")), + ((Range.Normal ), + (UTPVariable "b")), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d"))) )) ] )))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "pats-test2"), + (((Range.Normal ), "pats-test2"), (UTPatternMatch ( - (UTContentOf ([], ((Range.Normal ), "a") - )), + (UTContentOf ([], + ((Range.Normal ), "a"))), [(UTPatternBranch ( - ((Range.Normal ), (UTPVariable "b")), + ((Range.Normal ), + (UTPVariable "b")), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d") + )) )) ] )))) @@ -885,24 +1018,26 @@ ;; pattuple.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Pattuple"), None, - [((Range.Normal ), + (((Range.Normal ), "Pattuple"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "pattuple-test"), + (((Range.Normal ), + "pattuple-test"), (UTPatternMatch ( (UTContentOf ([], - ((Range.Normal ), "a"))), + ((Range.Normal ), "a"))), [(UTPatternBranch ( - ((Range.Normal ), + ((Range.Normal ), (UTPTuple - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "b")) - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "c")) )), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d") + )) )) ] )))) @@ -912,52 +1047,55 @@ ;; patlist.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Patlist"), None, - [((Range.Normal ), + (((Range.Normal ), "Patlist"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "pat-test"), + (((Range.Normal ), "pat-test"), (UTPatternMatch ( (UTContentOf ([], - ((Range.Normal ), "a"))), + ((Range.Normal ), "a"))), [(UTPatternBranch ( - ((Range.Normal ), + ((Range.Normal ), (UTPListCons ( - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "b")), ((Range.Dummy "list-pattern-nil"), UTPEndOfList)))), (UTContentOf ([], - ((Range.Normal ), "c"))) + ((Range.Normal ), "c") + )) )); (UTPatternBranch ( - ((Range.Normal ), + ((Range.Normal ), (UTPListCons ( - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "b")), ((Range.Dummy "list-pattern-cons"), (UTPListCons ( - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "c")), ((Range.Dummy "list-pattern-nil"), UTPEndOfList) ))) ))), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d") + )) )); (UTPatternBranch ( - ((Range.Normal ), + ((Range.Normal ), (UTPListCons ( - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "b")), ((Range.Dummy "list-pattern-cons"), (UTPListCons ( - ((Range.Normal ), + ((Range.Normal ), (UTPVariable "c")), ((Range.Dummy "list-pattern-nil"), UTPEndOfList) ))) ))), (UTContentOf ([], - ((Range.Normal ), "d"))) + ((Range.Normal ), "d") + )) )) ] )))) @@ -967,15 +1105,16 @@ ;; sxlist.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Sxlist"), None, - [((Range.Normal ), + (((Range.Normal ), "Sxlist"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, - (UTNonRec (((Range.Normal ), "x"), UTEndOfList)) + (UTNonRec + (((Range.Normal ), "x"), UTEndOfList)) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "y"), + (((Range.Normal ), "y"), (UTListCons ((UTInlineText [IT:aa]), (UTListCons ((UTInlineText [IT:bb]), UTEndOfList)))))) ))) @@ -984,237 +1123,273 @@ ;; mathlist.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Mathlist"), None, - [((Range.Normal ), + (((Range.Normal ), "Mathlist"), None, + [((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "x"), UTEndOfList)) + (((Range.Normal ), "x"), + UTEndOfList)) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "y"), + (((Range.Normal ), "y"), (UTListCons ( (UTMathText - [((Range.Normal ), + [((Range.Normal ), UTMathTextElement {base = (UTMathTextChar "a"); sup = None; sub = None}) ]), (UTListCons ( (UTMathText - [((Range.Normal ), + [((Range.Normal ), UTMathTextElement {base = (UTMathTextChar "a"); sup = None; sub = None}); - ((Range.Normal ), + ((Range.Normal ), UTMathTextElement {base = (UTMathTextChar "b"); sup = None; sub = None}) ]), UTEndOfList)) )))) ))); - ((Range.Normal ), + ((Range.Normal ), (UTBindValue ([], Stage1, (UTNonRec - (((Range.Normal ), "z"), + (((Range.Normal ), "z"), (UTBlockText [BC:(UTContentOf ([], - ((Range.Normal ), "+p"))) ( - UTCommandArg ([], - (UTInlineText - [(UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); sup = None; - sub = None}) - ])); - IT: + ((Range.Normal ), "+p") + )) (UTCommandArg ([], + (UTInlineText + [(UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = None; sub = None}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = None}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = None}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); sup = None; - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = None; + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (true, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "′"); - sup = None; sub = None}) - ])); - sub = None}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (true, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "′"); + sup = None; + sub = None}) + ])); + sub = None}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "′"); - sup = None; sub = None}); - ((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = None}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "′"); + sup = None; + sub = None}); + ((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = None}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (true, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "′"); - sup = None; sub = None}) - ])); - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (true, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "′"); + sup = None; + sub = None}) + ])); + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "′"); - sup = None; sub = None}); - ((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])); - IT: + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "′"); + sup = None; + sub = None}); + ((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])); + IT: ; - (UTInlineTextEmbeddedMath - (UTMathText - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "a"); - sup = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "′"); - sup = None; sub = None}); - ((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "1"); - sup = None; sub = None}) - ])); - sub = - (Some (false, - [((Range.Normal ), - UTMathTextElement { - base = (UTMathTextChar "2"); - sup = None; sub = None}) - ]))}) - ])) - ]) - )) + (UTInlineTextEmbeddedMath + (UTMathText + [((Range.Normal ), + UTMathTextElement { + base = (UTMathTextChar "a"); + sup = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "′"); + sup = None; + sub = None}); + ((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "1"); + sup = None; + sub = None}) + ])); + sub = + (Some (false, + [((Range.Normal ), + UTMathTextElement { + base = + (UTMathTextChar "2"); + sup = None; + sub = None}) + ]))}) + ])) + ]) + )) ]))) ))) ]))) @@ -1222,35 +1397,39 @@ ;; toplevel.saty (UTLibraryFile ([], [], - (((Range.Normal ), "Toplevel"), None, - [((Range.Normal ), + (((Range.Normal ), "Toplevel"), None, + [((Range.Normal ), (UTBindType - [(((Range.Normal ), "t"), [], + [(((Range.Normal ), "t"), [], (UTBindSynonym - ((Range.Normal ), + ((Range.Normal ), (Types.MFuncType ([], None, - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "a"), + ((Range.Normal ), "a"), []))), - ((Range.Normal ), + ((Range.Normal ), (Types.MTypeName ([], - ((Range.Normal ), "b"), + ((Range.Normal ), "b"), []))) ))))); - (((Range.Normal ), "s"), [], + (((Range.Normal ), "s"), [], (UTBindVariant [(UTConstructorBranch ( - ((Range.Normal ), "A"), None)); + ((Range.Normal ), "A"), + None)); (UTConstructorBranch ( - ((Range.Normal ), "B"), None)) + ((Range.Normal ), "B"), + None)) ])); - (((Range.Normal ), "u"), [], + (((Range.Normal ), "u"), [], (UTBindVariant [(UTConstructorBranch ( - ((Range.Normal ), "A"), None)); + ((Range.Normal ), "A"), + None)); (UTConstructorBranch ( - ((Range.Normal ), "B"), None)) + ((Range.Normal ), "B"), + None)) ])) ])) ]))) diff --git a/test/parsing/parser_test.ml b/test/parsing/parser_test.ml index c7c2250f8..9c2c93d0a 100644 --- a/test/parsing/parser_test.ml +++ b/test/parsing/parser_test.ml @@ -1,4 +1,5 @@ open Core +open MyUtil open Main__ let () = @@ -16,12 +17,12 @@ let () = |> Array.to_list |> List.tl |> Option.value ~default:[] - |> List.iter ~f:begin fun fn -> - Out_channel.printf "\n;; %s\n" fn; - In_channel.with_file fn + |> List.iter ~f:begin fun fname -> + Out_channel.printf "\n;; %s\n" fname; + In_channel.with_file fname ~f:(fun in_ch -> Lexing.from_channel in_ch - |> ParserInterface.process_common fn + |> ParserInterface.process_common (make_abs_path (Filename.concat "/path/to" fname)) ) |> proj (argv.(0)) |> [%derive.show: Types.untyped_source_file] From 98a956b54033e2e2ef1944ca63092601ff83dd0c Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 05:21:34 +0900 Subject: [PATCH 165/381] add primitive `load-hyphenation-dictionary` --- tools/gencode/vminst.ml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/gencode/vminst.ml b/tools/gencode/vminst.ml index f2312fc6c..5e68cb178 100644 --- a/tools/gencode/vminst.ml +++ b/tools/gencode/vminst.ml @@ -137,6 +137,20 @@ Context(ctx, { ctxsub with code_text_command = ctcmd; }) ~is_pdf_mode_primitive:true ~code:{| Context({ ctx with hyphen_dictionary = hyph; }, ctxsub) +|} + ; inst "LoadHyphenationDictionary" + ~name:"load-hyphenation-dictionary" + ~type_:Type.(tS @-> tHYPH) + ~fields:[ + ] + ~params:[ + param "abspathstr_hyph" ~type_:"string"; + ] + ~is_pdf_mode_primitive:true + ~code:{| +let abspath_hyph = MyUtil.make_abs_path abspathstr_hyph in +let hyph = LoadHyph.main abspath_hyph in +BaseConstant(BCHyphenation(hyph)) |} ; inst "PrimitiveGetLeftMathClass" ~name:"get-left-math-class" From c65c31876f7e4a34c909fd450a552cea3c0a6210 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 14:02:19 +0900 Subject: [PATCH 166/381] create package `hyph-english` --- check-packages.sh | 1 + .../hyph-english}/hyph/english.satysfi-hyph | 0 .../packages/hyph-english/saphe.lock.yaml.expected | 4 ++++ lib-satysfi/packages/hyph-english/saphe.yaml | 11 +++++++++++ .../hyph-english/satysfi-envelope.yaml.expected | 5 +++++ .../packages/hyph-english/src/hyph-english.satyh | 7 +++++++ 6 files changed, 28 insertions(+) rename lib-satysfi/{ => packages/hyph-english}/hyph/english.satysfi-hyph (100%) create mode 100644 lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected create mode 100644 lib-satysfi/packages/hyph-english/saphe.yaml create mode 100644 lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected create mode 100644 lib-satysfi/packages/hyph-english/src/hyph-english.satyh diff --git a/check-packages.sh b/check-packages.sh index ca3b9e387..bf6e7b943 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -30,5 +30,6 @@ for FILE in $(find lib-satysfi -name saphe.yaml); do fi done if [ $FAILED -ne 0 ]; then + echo "! some test has failed." exit 1 fi diff --git a/lib-satysfi/hyph/english.satysfi-hyph b/lib-satysfi/packages/hyph-english/hyph/english.satysfi-hyph similarity index 100% rename from lib-satysfi/hyph/english.satysfi-hyph rename to lib-satysfi/packages/hyph-english/hyph/english.satysfi-hyph diff --git a/lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected b/lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected new file mode 100644 index 000000000..1490cf00b --- /dev/null +++ b/lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected @@ -0,0 +1,4 @@ +saphe: ^0.0.1 +locks: [] +dependencies: [] +test_dependencies: [] diff --git a/lib-satysfi/packages/hyph-english/saphe.yaml b/lib-satysfi/packages/hyph-english/saphe.yaml new file mode 100644 index 000000000..6654583bc --- /dev/null +++ b/lib-satysfi/packages/hyph-english/saphe.yaml @@ -0,0 +1,11 @@ +saphe: "^0.0.1" +satysfi: "^0.1.0" +name: "hyph-english" +authors: + - "Takashi Suwa <@gfngfn>" +contents: + library: + main_module: "HyphEnglish" + source_directories: + - "./src" +dependencies: [] diff --git a/lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected b/lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected new file mode 100644 index 000000000..b9f156209 --- /dev/null +++ b/lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected @@ -0,0 +1,5 @@ +library: + main_module: HyphEnglish + source_directories: + - ./src + test_directories: [] diff --git a/lib-satysfi/packages/hyph-english/src/hyph-english.satyh b/lib-satysfi/packages/hyph-english/src/hyph-english.satyh new file mode 100644 index 000000000..fe9c3e1a6 --- /dev/null +++ b/lib-satysfi/packages/hyph-english/src/hyph-english.satyh @@ -0,0 +1,7 @@ +module HyphEnglish :> sig + val hyphenation : hyphenation +end = struct + val hyphenation = + load-hyphenation-dictionary + (here ^ `/../hyph/english.satysfi-hyph`) +end From 8e584da2081b6d9101abfb5828226090582b3488 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 14:07:16 +0900 Subject: [PATCH 167/381] remove the hardcoded loading operation of `english.satysfi-hyph` --- src/frontend/main.ml | 2 +- src/frontend/primitives.cppo.ml | 10 ++-------- src/frontend/primitives.mli | 3 +-- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/frontend/main.ml b/src/frontend/main.ml index 459942613..f3299f7de 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -25,7 +25,7 @@ let initialize ~(base_dir : abs_path) ~(is_bytecomp_mode : bool) (output_mode : Primitives.make_text_mode_environments runtime_config | PdfMode -> - Primitives.make_pdf_mode_environments ~base_dir runtime_config + Primitives.make_pdf_mode_environments runtime_config in begin if is_bytecomp_mode then diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index b5bd8cf2b..aef2c4a82 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -628,9 +628,6 @@ let default_math_class_map = ] -let default_hyphen_dictionary = ref LoadHyph.empty - - let default_script_space_map = let space_latin_cjk = (0.24, 0.08, 0.16) in let open CharBasis in @@ -644,7 +641,7 @@ let default_script_space_map = let get_pdf_mode_initial_context wid = let open HorzBox in { - hyphen_dictionary = !default_hyphen_dictionary; + hyphen_dictionary = LoadHyph.empty; hyphen_badness = 100; font_scheme = CharBasis.ScriptSchemeMap.empty; font_size = pdfpt 12.; @@ -761,10 +758,7 @@ let make_environments (runtime_config : runtime_config) table = (tyenv, env) -(* TODO: should depend on the current language *) -let make_pdf_mode_environments ~base_dir:(absdir_base : abs_path) (runtime_config : runtime_config) = - let abspath_hyphen = append_to_abs_directory absdir_base "hyph/english.satysfi-hyph" in - default_hyphen_dictionary := LoadHyph.main abspath_hyphen; +let make_pdf_mode_environments (runtime_config : runtime_config) = make_environments runtime_config pdf_mode_table diff --git a/src/frontend/primitives.mli b/src/frontend/primitives.mli index 74bf848e2..0ab300078 100644 --- a/src/frontend/primitives.mli +++ b/src/frontend/primitives.mli @@ -1,5 +1,4 @@ -open MyUtil open Types open StaticEnv open LengthInterface @@ -10,7 +9,7 @@ val itemize_type : unit -> ('a, 'b) typ val get_pdf_mode_initial_context : length -> HorzBox.context_main -val make_pdf_mode_environments : base_dir:abs_path -> runtime_config -> Typeenv.t * environment +val make_pdf_mode_environments : runtime_config -> Typeenv.t * environment val make_text_mode_environments : runtime_config -> Typeenv.t * environment From 08639695cc0536a2bb43ba0b68dc9b323f048035 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 14:22:02 +0900 Subject: [PATCH 168/381] fix where to put `hyph-english` --- .../{ => hyph-english.0.0.1}/hyph/english.satysfi-hyph | 0 .../{ => hyph-english.0.0.1}/saphe.lock.yaml.expected | 0 .../packages/hyph-english/{ => hyph-english.0.0.1}/saphe.yaml | 0 .../{ => hyph-english.0.0.1}/satysfi-envelope.yaml.expected | 0 .../hyph-english/{ => hyph-english.0.0.1}/src/hyph-english.satyh | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename lib-satysfi/packages/hyph-english/{ => hyph-english.0.0.1}/hyph/english.satysfi-hyph (100%) rename lib-satysfi/packages/hyph-english/{ => hyph-english.0.0.1}/saphe.lock.yaml.expected (100%) rename lib-satysfi/packages/hyph-english/{ => hyph-english.0.0.1}/saphe.yaml (100%) rename lib-satysfi/packages/hyph-english/{ => hyph-english.0.0.1}/satysfi-envelope.yaml.expected (100%) rename lib-satysfi/packages/hyph-english/{ => hyph-english.0.0.1}/src/hyph-english.satyh (100%) diff --git a/lib-satysfi/packages/hyph-english/hyph/english.satysfi-hyph b/lib-satysfi/packages/hyph-english/hyph-english.0.0.1/hyph/english.satysfi-hyph similarity index 100% rename from lib-satysfi/packages/hyph-english/hyph/english.satysfi-hyph rename to lib-satysfi/packages/hyph-english/hyph-english.0.0.1/hyph/english.satysfi-hyph diff --git a/lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected b/lib-satysfi/packages/hyph-english/hyph-english.0.0.1/saphe.lock.yaml.expected similarity index 100% rename from lib-satysfi/packages/hyph-english/saphe.lock.yaml.expected rename to lib-satysfi/packages/hyph-english/hyph-english.0.0.1/saphe.lock.yaml.expected diff --git a/lib-satysfi/packages/hyph-english/saphe.yaml b/lib-satysfi/packages/hyph-english/hyph-english.0.0.1/saphe.yaml similarity index 100% rename from lib-satysfi/packages/hyph-english/saphe.yaml rename to lib-satysfi/packages/hyph-english/hyph-english.0.0.1/saphe.yaml diff --git a/lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected b/lib-satysfi/packages/hyph-english/hyph-english.0.0.1/satysfi-envelope.yaml.expected similarity index 100% rename from lib-satysfi/packages/hyph-english/satysfi-envelope.yaml.expected rename to lib-satysfi/packages/hyph-english/hyph-english.0.0.1/satysfi-envelope.yaml.expected diff --git a/lib-satysfi/packages/hyph-english/src/hyph-english.satyh b/lib-satysfi/packages/hyph-english/hyph-english.0.0.1/src/hyph-english.satyh similarity index 100% rename from lib-satysfi/packages/hyph-english/src/hyph-english.satyh rename to lib-satysfi/packages/hyph-english/hyph-english.0.0.1/src/hyph-english.satyh From 6f229f81e99ab0407d9f556d471719e2af66d1fb Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 16:19:50 +0900 Subject: [PATCH 169/381] use `hyph-english` in document classes --- check-packages.sh | 7 +++++++ default-registry-commit-hash.txt | 2 +- .../packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected | 9 +++++++++ lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml | 5 +++++ lib-satysfi/packages/md-ja/md-ja.0.0.1/src/md-ja.satyh | 3 +++ .../std-ja-book.0.0.1/saphe.lock.yaml.expected | 9 +++++++++ .../packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml | 5 +++++ .../std-ja-book/std-ja-book.0.0.1/src/std-ja-book.satyh | 3 +++ .../std-ja-report.0.0.1/saphe.lock.yaml.expected | 9 +++++++++ .../std-ja-report/std-ja-report.0.0.1/saphe.yaml | 5 +++++ .../std-ja-report.0.0.1/src/std-ja-report.satyh | 3 +++ .../std-ja/std-ja.0.0.1/saphe.lock.yaml.expected | 9 +++++++++ lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml | 5 +++++ .../packages/std-ja/std-ja.0.0.1/src/std-ja.satyh | 3 +++ 14 files changed, 76 insertions(+), 1 deletion(-) diff --git a/check-packages.sh b/check-packages.sh index bf6e7b943..ed159e225 100755 --- a/check-packages.sh +++ b/check-packages.sh @@ -3,8 +3,15 @@ SAPHE="${1:-saphe}" FAILED=0 +FIRST=1 for FILE in $(find lib-satysfi -name saphe.yaml); do DIR="$(dirname "$FILE")" + if [ $FIRST -eq 1 ]; then + echo "UPDATING..." + "$SAPHE" update "$DIR" + FIRST=0 + echo "UPDATED." + fi echo " ==== $DIR ====" "$SAPHE" solve "$DIR" if [ $? -ne 0 ]; then diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index 527d819f1..96850122c 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -fd0685fc3be78942759bbf95ff66b0d037a79f6e refs/heads/temp-dev-saphe +b6226b902ccdbba0d04cf411d40c87e7f39f33cc refs/heads/temp-dev-saphe diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected index 8a3269919..b25fcf8e7 100644 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -97,6 +104,8 @@ dependencies: used_as: FontLatinModernMath - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 used_as: Itemize - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml index b1e6dbe48..360931375 100644 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/saphe.yaml @@ -85,3 +85,8 @@ dependencies: registry: "default" name: "font-latin-modern-math" requirement: "^0.0.1" + - used_as: "HyphEnglish" + registered: + registry: "default" + name: "hyph-english" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/md-ja/md-ja.0.0.1/src/md-ja.satyh b/lib-satysfi/packages/md-ja/md-ja.0.0.1/src/md-ja.satyh index 8b041b578..6ea7ca58d 100644 --- a/lib-satysfi/packages/md-ja/md-ja.0.0.1/src/md-ja.satyh +++ b/lib-satysfi/packages/md-ja/md-ja.0.0.1/src/md-ja.satyh @@ -4,6 +4,8 @@ use package Code use package Itemize use package Annot +use package HyphEnglish + use package FontJunicode use package FontIpaEx use package FontLatinModern @@ -88,6 +90,7 @@ end = struct val initial-context = get-initial-context text-width (command \Math.math) + |> set-hyphenation-dictionary HyphEnglish.hyphenation |> set-dominant-narrow-script Latin |> set-dominant-wide-script Kana |> set-latin-font font-latin-roman diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected index 560117523..4dd3642bf 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -88,6 +95,8 @@ dependencies: used_as: FontLatinModernMath - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml index 8888f4bd6..1b3e72c83 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/saphe.yaml @@ -62,3 +62,8 @@ dependencies: registry: "default" name: "font-latin-modern-math" requirement: "^0.0.1" + - used_as: "HyphEnglish" + registered: + registry: "default" + name: "hyph-english" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/src/std-ja-book.satyh b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/src/std-ja-book.satyh index eff36ca92..92b7c6f9a 100644 --- a/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/src/std-ja-book.satyh +++ b/lib-satysfi/packages/std-ja-book/std-ja-book.0.0.1/src/std-ja-book.satyh @@ -4,6 +4,8 @@ use package Annot use package Code use package FootnoteScheme +use package HyphEnglish + use package FontJunicode use package FontIpaEx use package FontLatinModern @@ -132,6 +134,7 @@ end = struct val get-standard-context wid = get-initial-context wid (command \Math.math) |> set-code-text-command (command \Code.code) + |> set-hyphenation-dictionary HyphEnglish.hyphenation |> set-dominant-wide-script Kana |> set-language Kana Japanese |> set-language HanIdeographic Japanese diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected index 560117523..4dd3642bf 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -88,6 +95,8 @@ dependencies: used_as: FontLatinModernMath - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.footnote-scheme.0.0.1 used_as: FootnoteScheme +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml index c0d1e090c..d4e348168 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/saphe.yaml @@ -63,3 +63,8 @@ dependencies: registry: "default" name: "font-latin-modern-math" requirement: "^0.0.1" + - used_as: "HyphEnglish" + registered: + registry: "default" + name: "hyph-english" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/src/std-ja-report.satyh b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/src/std-ja-report.satyh index 8970a17e1..c265f66ff 100644 --- a/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/src/std-ja-report.satyh +++ b/lib-satysfi/packages/std-ja-report/std-ja-report.0.0.1/src/std-ja-report.satyh @@ -4,6 +4,8 @@ use package Code use package Annot use package FootnoteScheme +use package HyphEnglish + use package FontJunicode use package FontIpaEx use package FontLatinModern @@ -130,6 +132,7 @@ end = struct val get-standard-context wid = get-initial-context wid (command \Math.math) |> set-code-text-command (command \Code.code) + |> set-hyphenation-dictionary HyphEnglish.hyphenation |> set-dominant-wide-script Kana |> set-language Kana Japanese |> set-language HanIdeographic Japanese diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected index cea94b0b6..1ff4f5c5e 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -77,6 +84,8 @@ dependencies: used_as: FontLatinModern - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 used_as: Math - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml index e1b880303..04b3cfb30 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/saphe.yaml @@ -57,3 +57,8 @@ dependencies: registry: "default" name: "font-latin-modern-math" requirement: "^0.0.1" + - used_as: "HyphEnglish" + registered: + registry: "default" + name: "hyph-english" + requirement: "^0.0.1" diff --git a/lib-satysfi/packages/std-ja/std-ja.0.0.1/src/std-ja.satyh b/lib-satysfi/packages/std-ja/std-ja.0.0.1/src/std-ja.satyh index 93ef91e2d..ae8efabd1 100644 --- a/lib-satysfi/packages/std-ja/std-ja.0.0.1/src/std-ja.satyh +++ b/lib-satysfi/packages/std-ja/std-ja.0.0.1/src/std-ja.satyh @@ -3,6 +3,8 @@ use package Math use package Code use package Annot +use package HyphEnglish + use package FontJunicode use package FontIpaEx use package FontLatinModern @@ -113,6 +115,7 @@ end = struct val get-standard-context wid = get-initial-context wid (command \Math.math) |> set-code-text-command (command \Code.code) + |> set-hyphenation-dictionary HyphEnglish.hyphenation |> set-dominant-wide-script Kana |> set-language Kana Japanese |> set-language HanIdeographic Japanese From 81044d1deac1c6c5ba93c43ee893adfbc73385d2 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 16:28:52 +0900 Subject: [PATCH 170/381] remove installation description of hyphenation dictionaries from `install-libs.sh` --- install-libs.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install-libs.sh b/install-libs.sh index b8b2fe43e..b45b80432 100755 --- a/install-libs.sh +++ b/install-libs.sh @@ -6,11 +6,11 @@ INSTALL=${2:-install} "${INSTALL}" -d "${LIBDIR}" "${INSTALL}" -d "${LIBDIR}/unidata" "${INSTALL}" -m 644 lib-satysfi/unidata/*.txt "${LIBDIR}/unidata" -"${INSTALL}" -d "${LIBDIR}/hyph" -"${INSTALL}" -m 644 lib-satysfi/hyph/* "${LIBDIR}/hyph" # It is no longer necessary to install packages beforehand due to the package system: # +# "${INSTALL}" -d "${LIBDIR}/hyph" +# "${INSTALL}" -m 644 lib-satysfi/hyph/* "${LIBDIR}/hyph" # "${INSTALL}" -d "${LIBDIR}/packages" # (cd lib-satysfi && find packages -type f -exec "${INSTALL}" -Dm 644 "{}" "${LIBDIR}/{}" \;) # "${INSTALL}" -d "${LIBDIR}/registries" From e3b911b94648eee840992138fc92f67671096eec Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 16:43:35 +0900 Subject: [PATCH 171/381] update `default-registry-commit-hash.txt` (register document classes that use `hyph-english`) --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index 96850122c..84210c7a3 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -b6226b902ccdbba0d04cf411d40c87e7f39f33cc refs/heads/temp-dev-saphe +e50da741e1f63f9626722bb6803386b1afef3f5b refs/heads/temp-dev-saphe From 230508f5a87dad672c3bc3432eb117dda58354c3 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 17:13:03 +0900 Subject: [PATCH 172/381] update `default-registry-commit-hash.txt` (fix dependencies of document classes about `hyph-english`) --- default-registry-commit-hash.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default-registry-commit-hash.txt b/default-registry-commit-hash.txt index 84210c7a3..b9c8bfcaf 100644 --- a/default-registry-commit-hash.txt +++ b/default-registry-commit-hash.txt @@ -1 +1 @@ -e50da741e1f63f9626722bb6803386b1afef3f5b refs/heads/temp-dev-saphe +ce6060ddaf44efc0f6a9ac6609450e855b7afa0c refs/heads/temp-dev-saphe From b1b303d37b62a10753ad405559bab37de5b105be Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 17:28:40 +0900 Subject: [PATCH 173/381] fix how to convert `here` in the lexer --- src/frontend/lexer.mll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/lexer.mll b/src/frontend/lexer.mll index 408ac8ad2..3f1954609 100644 --- a/src/frontend/lexer.mll +++ b/src/frontend/lexer.mll @@ -321,7 +321,7 @@ rule lex_program stack = parse | "end" -> END(pos) | "false" -> FALSE(pos) | "fun" -> FUN(pos) - | "here" -> HERE(pos, (Lexing.lexeme_start_p lexbuf).Lexing.pos_fname) + | "here" -> HERE(pos, Filename.dirname (Lexing.lexeme_start_p lexbuf).Lexing.pos_fname) | "if" -> IF(pos) | "in" -> IN(pos) | "include" -> INCLUDE(pos) From e64eb99d3a1f40d68c77c894cbf4c2fe9a2e58ba Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 17:33:40 +0900 Subject: [PATCH 174/381] update `*.saphe.lock.yaml.expected` --- demo/demo.saphe.lock.yaml.expected | 9 +++++++++ doc/doc-lang.saphe.lock.yaml.expected | 9 +++++++++ doc/doc-primitives.saphe.lock.yaml.expected | 9 +++++++++ doc/math1.saphe.lock.yaml.expected | 9 +++++++++ tests/images/test.saphe.lock.yaml.expected | 9 +++++++++ tests/init-doc/foo.saphe.lock.yaml.expected | 9 +++++++++ tests/init-md/foo.saphe.lock.yaml.expected | 9 +++++++++ tests/local-fixed/doc.saphe.lock.yaml.expected | 9 +++++++++ tests/macro1.saphe.lock.yaml.expected | 9 +++++++++ tests/math-typefaces.saphe.lock.yaml.expected | 9 +++++++++ tests/md/test.saphe.lock.yaml.expected | 9 +++++++++ tests/rename-dep1.saphe.lock.yaml.expected | 9 +++++++++ tests/staged1.saphe.lock.yaml.expected | 9 +++++++++ 13 files changed, 117 insertions(+) diff --git a/demo/demo.saphe.lock.yaml.expected b/demo/demo.saphe.lock.yaml.expected index 1ed79a636..0818b7348 100644 --- a/demo/demo.saphe.lock.yaml.expected +++ b/demo/demo.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -104,6 +111,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/doc/doc-lang.saphe.lock.yaml.expected b/doc/doc-lang.saphe.lock.yaml.expected index 19ba35597..3200ce13b 100644 --- a/doc/doc-lang.saphe.lock.yaml.expected +++ b/doc/doc-lang.saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -84,6 +91,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/doc/doc-primitives.saphe.lock.yaml.expected b/doc/doc-primitives.saphe.lock.yaml.expected index 80e3010a8..03f93dc57 100644 --- a/doc/doc-primitives.saphe.lock.yaml.expected +++ b/doc/doc-primitives.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -95,6 +102,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/doc/math1.saphe.lock.yaml.expected b/doc/math1.saphe.lock.yaml.expected index e82fee487..26fd33194 100644 --- a/doc/math1.saphe.lock.yaml.expected +++ b/doc/math1.saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -84,6 +91,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/images/test.saphe.lock.yaml.expected b/tests/images/test.saphe.lock.yaml.expected index 9ee516238..e31748add 100644 --- a/tests/images/test.saphe.lock.yaml.expected +++ b/tests/images/test.saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -84,6 +91,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/init-doc/foo.saphe.lock.yaml.expected b/tests/init-doc/foo.saphe.lock.yaml.expected index 6894384da..2a1e9c08e 100644 --- a/tests/init-doc/foo.saphe.lock.yaml.expected +++ b/tests/init-doc/foo.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -86,6 +93,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/init-md/foo.saphe.lock.yaml.expected b/tests/init-md/foo.saphe.lock.yaml.expected index cc5c99dd5..61359dd52 100644 --- a/tests/init-md/foo.saphe.lock.yaml.expected +++ b/tests/init-md/foo.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -97,6 +104,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/local-fixed/doc.saphe.lock.yaml.expected b/tests/local-fixed/doc.saphe.lock.yaml.expected index ffe40d6c3..3d2c6a940 100644 --- a/tests/local-fixed/doc.saphe.lock.yaml.expected +++ b/tests/local-fixed/doc.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -86,6 +93,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/macro1.saphe.lock.yaml.expected b/tests/macro1.saphe.lock.yaml.expected index 6894384da..2a1e9c08e 100644 --- a/tests/macro1.saphe.lock.yaml.expected +++ b/tests/macro1.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -86,6 +93,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/math-typefaces.saphe.lock.yaml.expected b/tests/math-typefaces.saphe.lock.yaml.expected index 28d8229e4..6d325dc85 100644 --- a/tests/math-typefaces.saphe.lock.yaml.expected +++ b/tests/math-typefaces.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -95,6 +102,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/md/test.saphe.lock.yaml.expected b/tests/md/test.saphe.lock.yaml.expected index cc5c99dd5..61359dd52 100644 --- a/tests/md/test.saphe.lock.yaml.expected +++ b/tests/md/test.saphe.lock.yaml.expected @@ -57,6 +57,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: footnote-scheme version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.itemize.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -97,6 +104,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/rename-dep1.saphe.lock.yaml.expected b/tests/rename-dep1.saphe.lock.yaml.expected index 7e758431e..0840bee2a 100644 --- a/tests/rename-dep1.saphe.lock.yaml.expected +++ b/tests/rename-dep1.saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -75,6 +82,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 diff --git a/tests/staged1.saphe.lock.yaml.expected b/tests/staged1.saphe.lock.yaml.expected index 9600b2703..727df73a4 100644 --- a/tests/staged1.saphe.lock.yaml.expected +++ b/tests/staged1.saphe.lock.yaml.expected @@ -48,6 +48,13 @@ locks: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 package_name: font-latin-modern-math version: 0.0.1 +- name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + dependencies: [] + test_only: false + registered: + registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 + package_name: hyph-english + version: 0.0.1 - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.math.0.0.1 dependencies: - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.stdlib.0.0.1 @@ -75,6 +82,8 @@ locks: used_as: FontIpaEx - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.font-latin-modern-math.0.0.1 used_as: FontLatinModernMath + - name: registered.6f2b80e9bb7c4e8af2104999fc25dbb3.hyph-english.0.0.1 + used_as: HyphEnglish test_only: false registered: registry_hash_value: 6f2b80e9bb7c4e8af2104999fc25dbb3 From 79f28d452ccc2321e2eb56e36100e5981f3e0233 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 22:44:19 +0900 Subject: [PATCH 175/381] make `ScriptDataMap` and `LineBreakDataMap` tracked by contexts (midway) --- src/backend/horzBox.ml | 40 +------- src/backend/lineBreak.ml | 18 ++-- src/chardecoder/convertText.ml | 14 +-- src/chardecoder/lineBreakDataMap.ml | 33 ++++--- src/chardecoder/lineBreakDataMap.mli | 10 +- src/chardecoder/scriptDataMap.ml | 119 +++-------------------- src/chardecoder/scriptDataMap.mli | 9 +- src/chardecoder/scriptHandler.ml | 140 +++++++++++++++++++++++++++ src/chardecoder/scriptHandler.mli | 12 +++ src/frontend/primitives.cppo.ml | 2 + tools/gencode/vminst.ml | 4 +- 11 files changed, 219 insertions(+), 182 deletions(-) create mode 100644 src/chardecoder/scriptHandler.ml create mode 100644 src/chardecoder/scriptHandler.mli diff --git a/src/backend/horzBox.ml b/src/backend/horzBox.ml index 81c4168e1..02b224970 100644 --- a/src/backend/horzBox.ml +++ b/src/backend/horzBox.ml @@ -158,8 +158,12 @@ type context_main = { [@printer (fun fmt _ -> Format.fprintf fmt "")] dominant_wide_script : CharBasis.script; dominant_narrow_script : CharBasis.script; + script_map : ScriptDataMap.t; + [@printer (fun fmt _ -> Format.fprintf fmt "")] script_space_map : (float * float * float) CharBasis.ScriptSpaceMap.t; [@printer (fun fmt _ -> Format.fprintf fmt "")] + line_break_map : LineBreakDataMap.t; + [@printer (fun fmt _ -> Format.fprintf fmt "")] space_natural : float; space_shrink : float; space_stretch : float; @@ -508,42 +512,6 @@ and evaled_row = type column = cell list -let normalize_script ctx script_raw = - match script_raw with - | CharBasis.CommonNarrow - | CharBasis.Inherited -> - ctx.dominant_narrow_script - - | CharBasis.CommonWide -> - ctx.dominant_wide_script - - | _ -> script_raw - - -let get_font_with_ratio ctx script_raw = - let script = normalize_script ctx script_raw in - match ctx.font_scheme |> CharBasis.ScriptSchemeMap.find_opt script with - | None -> raise (FontIsNotSet{ raw = script_raw; normalized = script }) - | Some(fontsch) -> fontsch - - -let get_language_system ctx script_raw = - let script = normalize_script ctx script_raw in - match ctx.langsys_scheme |> CharBasis.ScriptSchemeMap.find_opt script with - | None -> CharBasis.NoLanguageSystem - | Some(langsys) -> langsys - - -let get_string_info ctx script_raw = - let (fontkey, ratio, rising_ratio) = get_font_with_ratio ctx script_raw in - { - font_key = fontkey; - text_font_size = ctx.font_size *% ratio; - text_color = ctx.text_color; - rising = ctx.manual_rising +% ctx.font_size *% rising_ratio; - } - - let get_metrics_of_evaled_horz_box ((wid, evhbmain) : evaled_horz_box) : length * length * length = let (hgt, dpt) = match evhbmain with diff --git a/src/backend/lineBreak.ml b/src/backend/lineBreak.ml index 64ce9f190..2f95217e3 100644 --- a/src/backend/lineBreak.ml +++ b/src/backend/lineBreak.ml @@ -251,14 +251,16 @@ let can_break_before tail = let is_whitespace_character (uch : Uchar.t) : bool = - match LineBreakDataMap.find uch with - | SP | INBR -> true - | _ -> false - (* -- - needs re-consideration: - it may be better to use the criterion of whether - the general category of the given character is `Zs` or not. - -- *) + match Uchar.to_int uch with + | 0x000A + | 0x000B + | 0x000C + | 0x000D + | 0x0020 + | 0x0085 -> true + | _ -> false + (* TODO: re-consider this; it may be better to use the criterion of whether + the general category of the given character is `Zs` or not. *) let rec omit_space_uchars (uchlst : Uchar.t list) : Uchar.t list = diff --git a/src/chardecoder/convertText.ml b/src/chardecoder/convertText.ml index da66288b3..970406ea7 100644 --- a/src/chardecoder/convertText.ml +++ b/src/chardecoder/convertText.ml @@ -6,8 +6,8 @@ open LineBreakBox let to_chunks (ctx : context_main) (uchs : Uchar.t list) (alw_last : break_opportunity) : break_opportunity * line_break_chunk list = - let (alw_first, tris) = LineBreakDataMap.append_break_opportunity uchs alw_last in - let scrs = ScriptDataMap.divide_by_script ctx tris in + let (alw_first, tris) = LineBreakDataMap.append_break_opportunity ctx.line_break_map uchs alw_last in + let scrs = ScriptHandler.divide_by_script ctx tris in let chunks = scrs |> List.map (fun chunkmain -> (ctx, chunkmain)) in (alw_first, chunks) @@ -56,7 +56,7 @@ let pure_space ctx : lb_pure_box = let get_corrected_font_size ctx script = - let (_, font_ratio, _) = get_font_with_ratio ctx script in + let (_, font_ratio, _) = ScriptHandler.get_font_with_ratio ctx script in ctx.font_size *% font_ratio @@ -136,7 +136,7 @@ let make_string_atom (hsinfo : horz_string_info) (uchsegs : uchar_segment list) (* Makes an alphabetic word or a CJK character. *) let inner_string (ctx : context_main) (script : script) (uchsegs : uchar_segment list) : lb_box list = - let hsinfo = get_string_info ctx script in + let hsinfo = ScriptHandler.get_string_info ctx script in match LoadHyph.lookup ctx.left_hyphen_min ctx.right_hyphen_min ctx.hyphen_dictionary uchsegs with | LoadHyph.Single(uchsegs) -> [ LBPure(make_string_atom hsinfo uchsegs) ] @@ -250,7 +250,7 @@ let space_between_chunks_pure info1 info2 : lb_pure_box list = (* Converts single CJK character, not depending on adjacent characters. *) let ideographic_single ctx script lbc (uchseg : uchar_segment) : lb_box list = let lphb_raw = - let hsinfo = get_string_info ctx script in + let hsinfo = ScriptHandler.get_string_info ctx script in LBPure(make_string_atom hsinfo [ uchseg ]) in let hwkern = halfwidth_kern ctx script in @@ -382,7 +382,7 @@ let chunks_to_boxes_pure (script_before : script) (chunklst : line_break_chunk l | AlphabeticChunk(script, lbcfirst, lbclast, uchsegs, alw) -> let opt = AccSome(((ctx, script, lbclast), alw)) in let lphblstmain = - let hsinfo = get_string_info ctx script in + let hsinfo = ScriptHandler.get_string_info ctx script in [ make_string_atom hsinfo uchsegs ] in begin @@ -403,7 +403,7 @@ let chunks_to_boxes_pure (script_before : script) (chunklst : line_break_chunk l | IdeographicChunk(script, lbc, uchseg, alw) -> let opt = AccSome(((ctx, script, lbc), alw)) in let lphblstmain = - let hsinfo = get_string_info ctx script in + let hsinfo = ScriptHandler.get_string_info ctx script in [ make_string_atom hsinfo [ uchseg ] ] in begin diff --git a/src/chardecoder/lineBreakDataMap.ml b/src/chardecoder/lineBreakDataMap.ml index 99ff2a984..ef3a6863b 100644 --- a/src/chardecoder/lineBreakDataMap.ml +++ b/src/chardecoder/lineBreakDataMap.ml @@ -103,10 +103,13 @@ let line_break_class_overriding_list = ] -let line_break_map_ref : (line_break_class BatIMap.t) ref = ref (BatIMap.empty ~eq:(=)) +type t = line_break_class BatIMap.t -let set_from_file (abspath : abs_path) = +let empty : t = BatIMap.empty ~eq:(=) + + +let make_from_file (abspath : abs_path) : t = let channel = open_in_abs abspath in let line_break_list = DataParser.main DataLexer.expr (Lexing.from_channel channel) in let line_break_map_raw = line_break_list |> CharBasis.map_of_list class_of_string in @@ -115,14 +118,14 @@ let set_from_file (abspath : abs_path) = mapacc |> BatIMap.add cp lbc ) line_break_map_raw line_break_class_overriding_list in - begin - line_break_map_ref := line_break_map; - end + line_break_map -let find uch = - try (!line_break_map_ref) |> BatIMap.find (Uchar.to_int uch) - with Not_found -> XX (* temporary *) +let find (uch : Uchar.t) (line_break_map : t) = + try + line_break_map |> BatIMap.find (Uchar.to_int uch) + with + | Not_found -> XX (* TODO: reconsider this *) let set lbclst = LBRESet(lbclst) @@ -312,8 +315,7 @@ let proj_bi (_, lbc) = lbc let proj_tri (_, lbc, _) = lbc -let append_property (uchlst : Uchar.t list) : (Uchar.t * line_break_class) list = - +let append_property (line_break_map : t) (uchlst : Uchar.t list) : (Uchar.t * line_break_class) list = let rec normalize biacc bilst = match bilst with | [] -> @@ -327,9 +329,8 @@ let append_property (uchlst : Uchar.t list) : (Uchar.t * line_break_class) list | Some(repl) -> normalize (Alist.append biacc repl) bitail end in - - let bilst = uchlst |> List.map (fun uch -> (uch, find uch)) in - normalize Alist.empty bilst + let bilst = uchlst |> List.map (fun uch -> (uch, line_break_map |> find uch)) in + normalize Alist.empty bilst type segment_record = { @@ -429,7 +430,7 @@ let cut_into_segment_record (bilst : (Uchar.t * line_break_class) list) : segmen let proj_segrcd segrcd = segrcd.line_break_class -let append_break_opportunity (uchlst : Uchar.t list) (alwlast : break_opportunity) : break_opportunity * line_break_element list = +let append_break_opportunity (line_break_map : t) (uchlst : Uchar.t list) (alwlast : break_opportunity) : break_opportunity * line_break_element list = let should_prevent_break (trirev : line_break_element list) segrcdlst = let alwopt = find_first_match line_break_rule proj_tri proj_segrcd trirev segrcdlst in @@ -479,7 +480,7 @@ let append_break_opportunity (uchlst : Uchar.t list) (alwlast : break_opportunit aux (Alist.extend triacc (uchseg, lbc, alw)) bitail end in - let bilst = append_property uchlst in + let bilst = append_property line_break_map uchlst in let segrcdlst = cut_into_segment_record bilst in let alw_first = @@ -487,7 +488,7 @@ let append_break_opportunity (uchlst : Uchar.t list) (alwlast : break_opportunit if b_first then PreventBreak else AllowBreak in let lst = aux Alist.empty segrcdlst in - (alw_first, lst) + (alw_first, lst) (* diff --git a/src/chardecoder/lineBreakDataMap.mli b/src/chardecoder/lineBreakDataMap.mli index 2c394922b..2a9f4258b 100644 --- a/src/chardecoder/lineBreakDataMap.mli +++ b/src/chardecoder/lineBreakDataMap.mli @@ -2,8 +2,12 @@ open MyUtil open CharBasis -val set_from_file : abs_path -> unit +type t -val find : Uchar.t -> line_break_class +val empty : t -val append_break_opportunity : Uchar.t list -> break_opportunity -> break_opportunity * line_break_element list +val make_from_file : abs_path -> t + +val find : Uchar.t -> t -> line_break_class + +val append_break_opportunity : t -> Uchar.t list -> break_opportunity -> break_opportunity * line_break_element list diff --git a/src/chardecoder/scriptDataMap.ml b/src/chardecoder/scriptDataMap.ml index 36c3f6cca..8710a7933 100644 --- a/src/chardecoder/scriptDataMap.ml +++ b/src/chardecoder/scriptDataMap.ml @@ -1,8 +1,6 @@ open MyUtil open CharBasis -open LineBreakBox -open HorzBox let read_east_asian_width _ data = @@ -43,10 +41,13 @@ let read_script eaw_map cp data = | _ -> OtherScript -let script_map_ref : (script BatIMap.t) ref = ref (BatIMap.empty ~eq:(=)) +type t = script BatIMap.t -let set_from_file (abspath_S : abs_path) (abspath_EAW : abs_path) = +let empty : t = BatIMap.empty ~eq:(=) + + +let make_from_file ~script:(abspath_S : abs_path) ~east_asian_width:(abspath_EAW : abs_path) : t = let eaw_map = let channel_EAW = open_in_abs abspath_EAW in let eaw_list = DataParser.main DataLexer.expr (Lexing.from_channel channel_EAW) in @@ -59,109 +60,13 @@ let set_from_file (abspath_S : abs_path) (abspath_EAW : abs_path) = close_in channel_S; script_list |> CharBasis.map_of_list (read_script eaw_map) in - begin - script_map_ref := script_map; - end + script_map -let find (ctx : context_main) ((uch, _) : uchar_segment) = +let find (uch : Uchar.t) (script_map : t) : script option = try - (!script_map_ref) |> BatIMap.find (Uchar.to_int uch) - |> normalize_script ctx - with Not_found -> OtherScript - - -let divide_by_script (ctx : context_main) (trilst : line_break_element list) : LineBreakBox.line_break_chunk_main list = - - let ideographic script lbc uchseg alw = - IdeographicChunk(script, lbc, uchseg, alw) - in - - let preword script lbcfirst lbclast uchseglst alw = - AlphabeticChunk(script, lbcfirst, lbclast, uchseglst, alw) - in - - let rec aux resacc (scraccopt : (line_break_class * script * line_break_class * uchar_segment list) option) trilst = - match trilst with - | [] -> - begin - match scraccopt with - | None -> - Alist.to_list resacc - - | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> - let chunk = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in - Alist.to_list (Alist.extend resacc chunk) - end - - | (_uch, SP, alw) :: tritail -> - let chunkspace = - match alw with - | AllowBreak -> Space - | PreventBreak -> UnbreakableSpace - in - begin - match scraccopt with - | None -> - aux (Alist.extend resacc chunkspace) None tritail - - | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> - let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in - aux (Alist.append resacc [chunkprev; chunkspace]) None tritail - end - - | (uchseg, lbc, alw) :: tritail -> - let script = find ctx uchseg in - if is_ideographic_class lbc then - (* temporary; whether 'AI' is ideographic or not should depend on the context *) - (* -- if the spotted character is ideographic -- *) - begin - match scraccopt with - | None -> - let chunkideo = ideographic script lbc uchseg alw in - aux (Alist.extend resacc chunkideo) None tritail - - | Some((lbcfirst, scriptprev, lbcprev, uchacc)) -> - (* -- if there accumulate some characters before the spotted character -- *) - let chunkideo = ideographic script lbc uchseg alw in - let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchacc) PreventBreak in - aux (Alist.append resacc [chunkprev; chunkideo]) None tritail - end - else - begin - match alw with - | AllowBreak -> - (* -- if the spotted non-ideographic character allows line break after it -- *) - begin - match scraccopt with - | None -> - let chunk = preword script lbc lbc [uchseg] AllowBreak in - aux (Alist.extend resacc chunk) None tritail - - | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> - if script_equal scriptprev script then - let chunk = preword script lbcfirst lbc (List.rev (uchseg :: uchsegacc)) AllowBreak in - aux (Alist.extend resacc chunk) None tritail - else - let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in - let chunk = preword script lbc lbc [uchseg] AllowBreak in - aux (Alist.append resacc [chunkprev; chunk]) None tritail - end - - | PreventBreak -> - begin - match scraccopt with - | None -> - aux resacc (Some((lbc, script, lbc, [uchseg]))) tritail - - | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> - if script_equal scriptprev script then - aux resacc (Some((lbcfirst, script, lbc, uchseg :: uchsegacc))) tritail - else - let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in - aux (Alist.extend resacc chunkprev) (Some((lbc, script, lbc, [uchseg]))) tritail - end - end - in - - aux Alist.empty None trilst + let script = script_map |> BatIMap.find (Uchar.to_int uch) in + Some(script) + with + | Not_found -> + None diff --git a/src/chardecoder/scriptDataMap.mli b/src/chardecoder/scriptDataMap.mli index d3f57086f..d7982ec1c 100644 --- a/src/chardecoder/scriptDataMap.mli +++ b/src/chardecoder/scriptDataMap.mli @@ -1,8 +1,11 @@ open MyUtil open CharBasis -open HorzBox -val set_from_file : abs_path -> abs_path -> unit +type t -val divide_by_script : context_main -> line_break_element list -> LineBreakBox.line_break_chunk_main list +val empty : t + +val make_from_file : script:abs_path -> east_asian_width:abs_path -> t + +val find : Uchar.t -> t -> script option diff --git a/src/chardecoder/scriptHandler.ml b/src/chardecoder/scriptHandler.ml new file mode 100644 index 000000000..79964ce3c --- /dev/null +++ b/src/chardecoder/scriptHandler.ml @@ -0,0 +1,140 @@ + +open CharBasis +open LengthInterface +open LineBreakBox +open HorzBox + + +let normalize_script (ctx : context_main) (script_raw : script) : script = + match script_raw with + | CharBasis.CommonNarrow + | CharBasis.Inherited -> ctx.dominant_narrow_script + | CharBasis.CommonWide -> ctx.dominant_wide_script + | _ -> script_raw + + + +let find (ctx : context_main) ((uch, _) : uchar_segment) : script = + match ctx.script_map |> ScriptDataMap.find uch with + | None -> OtherScript + | Some(script) -> normalize_script ctx script + + +let divide_by_script (ctx : context_main) (trilst : line_break_element list) : line_break_chunk_main list = + + let ideographic script lbc uchseg alw = + IdeographicChunk(script, lbc, uchseg, alw) + in + + let preword script lbcfirst lbclast uchseglst alw = + AlphabeticChunk(script, lbcfirst, lbclast, uchseglst, alw) + in + + let rec aux resacc (scraccopt : (line_break_class * script * line_break_class * uchar_segment list) option) trilst = + match trilst with + | [] -> + begin + match scraccopt with + | None -> + Alist.to_list resacc + + | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> + let chunk = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in + Alist.to_list (Alist.extend resacc chunk) + end + + | (_uch, SP, alw) :: tritail -> + let chunkspace = + match alw with + | AllowBreak -> Space + | PreventBreak -> UnbreakableSpace + in + begin + match scraccopt with + | None -> + aux (Alist.extend resacc chunkspace) None tritail + + | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> + let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in + aux (Alist.append resacc [chunkprev; chunkspace]) None tritail + end + + | (uchseg, lbc, alw) :: tritail -> + let script = find ctx uchseg in + if is_ideographic_class lbc then + (* temporary; whether 'AI' is ideographic or not should depend on the context *) + (* -- if the spotted character is ideographic -- *) + begin + match scraccopt with + | None -> + let chunkideo = ideographic script lbc uchseg alw in + aux (Alist.extend resacc chunkideo) None tritail + + | Some((lbcfirst, scriptprev, lbcprev, uchacc)) -> + (* -- if there accumulate some characters before the spotted character -- *) + let chunkideo = ideographic script lbc uchseg alw in + let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchacc) PreventBreak in + aux (Alist.append resacc [chunkprev; chunkideo]) None tritail + end + else + begin + match alw with + | AllowBreak -> + (* -- if the spotted non-ideographic character allows line break after it -- *) + begin + match scraccopt with + | None -> + let chunk = preword script lbc lbc [uchseg] AllowBreak in + aux (Alist.extend resacc chunk) None tritail + + | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> + if script_equal scriptprev script then + let chunk = preword script lbcfirst lbc (List.rev (uchseg :: uchsegacc)) AllowBreak in + aux (Alist.extend resacc chunk) None tritail + else + let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in + let chunk = preword script lbc lbc [uchseg] AllowBreak in + aux (Alist.append resacc [chunkprev; chunk]) None tritail + end + + | PreventBreak -> + begin + match scraccopt with + | None -> + aux resacc (Some((lbc, script, lbc, [uchseg]))) tritail + + | Some((lbcfirst, scriptprev, lbcprev, uchsegacc)) -> + if script_equal scriptprev script then + aux resacc (Some((lbcfirst, script, lbc, uchseg :: uchsegacc))) tritail + else + let chunkprev = preword scriptprev lbcfirst lbcprev (List.rev uchsegacc) PreventBreak in + aux (Alist.extend resacc chunkprev) (Some((lbc, script, lbc, [uchseg]))) tritail + end + end + in + + aux Alist.empty None trilst + + +let get_font_with_ratio (ctx : context_main) (script_raw : script) = + let script = normalize_script ctx script_raw in + match ctx.font_scheme |> CharBasis.ScriptSchemeMap.find_opt script with + | None -> raise (FontIsNotSet{ raw = script_raw; normalized = script }) + | Some(fontsch) -> fontsch + + +let get_language_system (ctx : context_main) (script_raw : script) = + let script = normalize_script ctx script_raw in + match ctx.langsys_scheme |> CharBasis.ScriptSchemeMap.find_opt script with + | None -> CharBasis.NoLanguageSystem + | Some(langsys) -> langsys + + +let get_string_info (ctx : context_main) (script_raw : script) = + let (fontkey, ratio, rising_ratio) = get_font_with_ratio ctx script_raw in + { + font_key = fontkey; + text_font_size = ctx.font_size *% ratio; + text_color = ctx.text_color; + rising = ctx.manual_rising +% ctx.font_size *% rising_ratio; + } diff --git a/src/chardecoder/scriptHandler.mli b/src/chardecoder/scriptHandler.mli new file mode 100644 index 000000000..e1ac3cfcb --- /dev/null +++ b/src/chardecoder/scriptHandler.mli @@ -0,0 +1,12 @@ + +open CharBasis +open LineBreakBox +open HorzBox + +val divide_by_script : context_main -> line_break_element list -> line_break_chunk_main list + +val get_font_with_ratio : context_main -> script -> font_with_ratio + +val get_language_system : context_main -> script -> language_system + +val get_string_info : context_main -> script -> horz_string_info diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index d1def3229..5d4d92905 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -650,7 +650,9 @@ let get_pdf_mode_initial_context wid = dominant_wide_script = CharBasis.OtherScript; dominant_narrow_script = CharBasis.OtherScript; langsys_scheme = CharBasis.ScriptSchemeMap.empty; + script_map = ScriptDataMap.empty; script_space_map = default_script_space_map; + line_break_map = LineBreakDataMap.empty; space_natural = 0.33; space_shrink = 0.08; space_stretch = 0.16; diff --git a/tools/gencode/vminst.ml b/tools/gencode/vminst.ml index bc998a549..b6ee8eddf 100644 --- a/tools/gencode/vminst.ml +++ b/tools/gencode/vminst.ml @@ -1391,7 +1391,7 @@ Context(HorzBox.({ ctx with font_scheme = font_scheme_new; }), ctxsub) ] ~is_pdf_mode_primitive:true ~code:{| -let fontwr = HorzBox.get_font_with_ratio ctx script in +let fontwr = ScriptHandler.get_font_with_ratio ctx script in make_font_with_ratio_value fontwr |} ; inst "PrimitiveSetMathFont" @@ -1484,7 +1484,7 @@ Context(HorzBox.({ ctx with ] ~is_pdf_mode_primitive:true ~code:{| -let langsys = HorzBox.get_language_system ctx script in +let langsys = ScriptHandler.get_language_system ctx script in make_language_system_value langsys |} ; inst "PrimitiveSetTextColor" From da0b4cf5052108e4e623221c8ecb3af5a10fe078 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 23:07:43 +0900 Subject: [PATCH 176/381] add `set-unicode-char-database` and `load-unicode-char-database` --- src/frontend/display.ml | 1 + src/frontend/evalUtil.ml | 5 +++++ src/frontend/fontInfo.ml | 5 ++++- src/frontend/fontInfo.mli | 2 +- src/frontend/main.ml | 16 +++++++-------- src/frontend/primitives.cppo.ml | 1 + src/frontend/types.cppo.ml | 4 ++++ tools/gencode/type.ml | 1 + tools/gencode/type.mli | 1 + tools/gencode/vminst.ml | 36 +++++++++++++++++++++++++++++++++ 10 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/frontend/display.ml b/src/frontend/display.ml index faa8aecb4..171d4a202 100644 --- a/src/frontend/display.ml +++ b/src/frontend/display.ml @@ -226,6 +226,7 @@ let show_base_type = function | TextInfoType -> "text-info" | InputPosType -> "input-position" | HyphenationType -> "hyphenation" + | UnidataType -> "unicode-char-database" type paren_level = diff --git a/src/frontend/evalUtil.ml b/src/frontend/evalUtil.ml index 1e94cc012..072045769 100644 --- a/src/frontend/evalUtil.ml +++ b/src/frontend/evalUtil.ml @@ -467,6 +467,11 @@ let get_hyphenation : syntactic_value -> LoadHyph.t = function | value -> report_bug_value "get_hyphenation" value +let get_unicode_char_database : syntactic_value -> ScriptDataMap.t * LineBreakDataMap.t = function + | BaseConstant(BCUnidata(unidata)) -> unidata + | value -> report_bug_value "get_unicode_char_database" value + + let get_outline (value : syntactic_value) = match value with | Tuple([ diff --git a/src/frontend/fontInfo.ml b/src/frontend/fontInfo.ml index b9a4bac00..47417173b 100644 --- a/src/frontend/fontInfo.ml +++ b/src/frontend/fontInfo.ml @@ -409,16 +409,19 @@ let get_font_dictionary (pdf : Pdf.t) : Pdf.pdfobject = Pdf.Dictionary(keyval) -let initialize ~base_dir:(absdir_base : abs_path) = +let initialize () = let res = let open ResultMonad in FontHashTable.initialize (); MathFontHashTable.initialize (); +(* TODO: remove the following: *) +(* let abspath_S = append_to_abs_directory absdir_base "unidata/Scripts.txt" in let abspath_EAW = append_to_abs_directory absdir_base "unidata/EastAsianWidth.txt" in ScriptDataMap.set_from_file abspath_S abspath_EAW; let abspath_LB = append_to_abs_directory absdir_base "unidata/LineBreak.txt" in LineBreakDataMap.set_from_file abspath_LB; +*) return () in match res with diff --git a/src/frontend/fontInfo.mli b/src/frontend/fontInfo.mli index 5f63fd9fb..90a09c5f3 100644 --- a/src/frontend/fontInfo.mli +++ b/src/frontend/fontInfo.mli @@ -13,7 +13,7 @@ type math_key = FontKey.t type tag = string -val initialize : base_dir:abs_path -> unit +val initialize : unit -> unit val add_single : abs_path -> key diff --git a/src/frontend/main.ml b/src/frontend/main.ml index f3299f7de..c11b41f54 100644 --- a/src/frontend/main.ml +++ b/src/frontend/main.ml @@ -13,12 +13,12 @@ let version = (* Initialization that should be performed before typechecking *) -let initialize ~(base_dir : abs_path) ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_config : runtime_config) : Typeenv.t * environment = +let initialize ~(is_bytecomp_mode : bool) (output_mode : output_mode) (runtime_config : runtime_config) : Typeenv.t * environment = FreeID.initialize (); BoundID.initialize (); EvalVarID.initialize (); StoreID.initialize (); - FontInfo.initialize ~base_dir; + FontInfo.initialize (); let (tyenv, env) = match output_mode with | TextMode(_) -> @@ -169,7 +169,7 @@ let build_package let abspath_envelope_config = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in - let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in + let _absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in (* TODO: remove this *) let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -186,7 +186,7 @@ let build_package (* Gets the initial type environment, which consists only of primitives: *) let (tyenv_prim, _env) = - initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config + initialize ~is_bytecomp_mode:false output_mode runtime_config in (* Loads the deps config: *) @@ -245,7 +245,7 @@ let open ResultMonad in let abspath_out = make_absolute_if_relative ~origin:absdir_current fpath_out in let abspath_dump = make_absolute_if_relative ~origin:absdir_current fpath_dump in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in - let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in + let _absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in (* TODO: remove this *) let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -272,7 +272,7 @@ let open ResultMonad in (* Gets the initial type environment, which consists only of primitives: *) let (tyenv_prim, env) = - initialize ~base_dir:absdir_base ~is_bytecomp_mode output_mode runtime_config + initialize ~is_bytecomp_mode output_mode runtime_config in (* Loads the deps config: *) @@ -342,7 +342,7 @@ let test_package let abspath_in = make_absolute_if_relative ~origin:absdir_current fpath_in in let abspath_deps_config = make_absolute_if_relative ~origin:absdir_current fpath_deps in - let absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in + let _absdir_base = make_absolute_if_relative ~origin:absdir_current fpath_base in (* TODO: remove this *) let output_mode = make_output_mode text_mode_formats_str_opt in let typecheck_config = @@ -359,7 +359,7 @@ let test_package (* Gets the initial type environment, which consists only of pritmives: *) let (tyenv_prim, env) = - initialize ~base_dir:absdir_base ~is_bytecomp_mode:false output_mode runtime_config + initialize ~is_bytecomp_mode:false output_mode runtime_config in (* Loads the deps config: *) diff --git a/src/frontend/primitives.cppo.ml b/src/frontend/primitives.cppo.ml index f7b2fed45..20910cc7b 100644 --- a/src/frontend/primitives.cppo.ml +++ b/src/frontend/primitives.cppo.ml @@ -48,6 +48,7 @@ let tRE = (~! "regexp" , BaseType(RegExpType)) let tTCTX = (~! "text-info" , BaseType(TextInfoType)) let tIPOS = (~! "input-position", BaseType(InputPosType)) let tHYPH = (~! "hyphenation" , BaseType(HyphenationType)) +let tUCD = (~! "unicode-char-database", BaseType(UnidataType)) let tL ty = (~! "list", ListType(ty)) let tR ty = (~! "ref", RefType(ty)) diff --git a/src/frontend/types.cppo.ml b/src/frontend/types.cppo.ml index d3fe5191f..d35ad0466 100644 --- a/src/frontend/types.cppo.ml +++ b/src/frontend/types.cppo.ml @@ -121,6 +121,7 @@ type base_type = | TextInfoType | InputPosType | HyphenationType + | UnidataType [@@deriving show] @@ -177,6 +178,7 @@ let base_type_map : base_type TypeNameMap.t = ("text-info" , TextInfoType); ("input-position", InputPosType); ("hyphenation" , HyphenationType); + ("unicode-char-database", UnidataType); ] @@ -710,6 +712,8 @@ type base_constant = | BCInputPos of input_position | BCHyphenation of LoadHyph.t [@printer (fun fmt _ -> Format.fprintf fmt "")] + | BCUnidata of (ScriptDataMap.t * LineBreakDataMap.t) + [@printer (fun fmt _ -> Format.fprintf fmt "")] [@@deriving show { with_path = false; }] type 'a letrec_binding_scheme = diff --git a/tools/gencode/type.ml b/tools/gencode/type.ml index f6fa1be62..c9d7bb07c 100644 --- a/tools/gencode/type.ml +++ b/tools/gencode/type.ml @@ -140,6 +140,7 @@ let tIGR = tycon0 "tIGR" "inline-graphics" let tIGRO = tycon0 "tIGRO" "inline-graphics-outer" let tDOCINFODIC = tycon0 "tDOCINFODIC" "document-information-dictionary" let tHYPH = tycon0 "tHYPH" "hyphenation" +let tUCD = tycon0 "tUCD" "unicode-char-database" let tL = tycon1 "tL" "list" let tR = tycon1 "tR" "ref" let tOPT = tycon1 "tOPT" "option" diff --git a/tools/gencode/type.mli b/tools/gencode/type.mli index 1b4e3e83b..2e0bb0045 100644 --- a/tools/gencode/type.mli +++ b/tools/gencode/type.mli @@ -64,6 +64,7 @@ val tIGRO : t val tDASH : t val tDOCINFODIC : t val tHYPH : t +val tUCD : t val tPROD : t list -> t diff --git a/tools/gencode/vminst.ml b/tools/gencode/vminst.ml index 8ff3120b9..519b01009 100644 --- a/tools/gencode/vminst.ml +++ b/tools/gencode/vminst.ml @@ -151,6 +151,42 @@ Context({ ctx with hyphen_dictionary = hyph; }, ctxsub) let abspath_hyph = MyUtil.make_abs_path abspathstr_hyph in let hyph = LoadHyph.main abspath_hyph in BaseConstant(BCHyphenation(hyph)) +|} + ; inst "PrimitiveSetUnicodeCharDatabase" + ~name:"set-unicode-char-database" + ~type_:Type.(tUCD @-> tCTX @-> tCTX) + ~fields:[ + ] + ~params:[ + param "(script_map, line_break_map)" ~type_:"unicode_char_database"; + param "(ctx, ctxsub)" ~type_:"context"; + ] + ~is_pdf_mode_primitive:true + ~code:{| +Context({ ctx with script_map; line_break_map; }, ctxsub) +|} + ; inst "PrimitiveLoadUnicodeCharDatabase" + ~name:"load-unicode-char-database" + ~type_:Type.(tS @-> tS @-> tS @-> tUCD) + ~fields:[ + ] + ~params:[ + param "abspathstr_script" ~type_:"string"; + param "abspathstr_east_asian_width" ~type_:"string"; + param "abspathstr_line_break" ~type_:"string"; + ] + ~is_pdf_mode_primitive:true + ~code:{| +let script_map = + ScriptDataMap.make_from_file + ~script:(MyUtil.make_abs_path abspathstr_script) + ~east_asian_width:(MyUtil.make_abs_path abspathstr_east_asian_width) +in +let line_break_map = + LineBreakDataMap.make_from_file + (MyUtil.make_abs_path abspathstr_line_break) +in +BaseConstant(BCUnidata((script_map, line_break_map))) |} ; inst "PrimitiveGetLeftMathClass" ~name:"get-left-math-class" From 26677d4237804862529a56a0803a9ed5484e99f2 Mon Sep 17 00:00:00 2001 From: Takashi Suwa Date: Tue, 26 Mar 2024 23:18:22 +0900 Subject: [PATCH 177/381] introduce package `unidata` --- .../packages/unidata/unidata.0.0.1/saphe.yaml | 11 + .../unidata/unidata.0.0.1/src/unidata.satyh | 9 + .../unidata/unidata.0.0.1}/unidata/.gitignore | 0 .../unidata.0.0.1}/unidata/EastAsianWidth.txt | 0 .../unidata.0.0.1}/unidata/LineBreak.txt | 0 .../unidata.0.0.1}/unidata/Scripts.txt | 0 lib-satysfi/unidata/PropList.txt | 1618 - lib-satysfi/unidata/PropertyAliases.txt | 197 - lib-satysfi/unidata/PropertyValueAliases.txt | 1496 - lib-satysfi/unidata/ScriptExtensions.txt | 501 - lib-satysfi/unidata/UnicodeData.txt | 31618 ---------------- 11 files changed, 20 insertions(+), 35430 deletions(-) create mode 100644 lib-satysfi/packages/unidata/unidata.0.0.1/saphe.yaml create mode 100644 lib-satysfi/packages/unidata/unidata.0.0.1/src/unidata.satyh rename lib-satysfi/{ => packages/unidata/unidata.0.0.1}/unidata/.gitignore (100%) rename lib-satysfi/{ => packages/unidata/unidata.0.0.1}/unidata/EastAsianWidth.txt (100%) rename lib-satysfi/{ => packages/unidata/unidata.0.0.1}/unidata/LineBreak.txt (100%) rename lib-satysfi/{ => packages/unidata/unidata.0.0.1}/unidata/Scripts.txt (100%) delete mode 100644 lib-satysfi/unidata/PropList.txt delete mode 100644 lib-satysfi/unidata/PropertyAliases.txt delete mode 100644 lib-satysfi/unidata/PropertyValueAliases.txt delete mode 100644 lib-satysfi/unidata/ScriptExtensions.txt delete mode 100644 lib-satysfi/unidata/UnicodeData.txt diff --git a/lib-satysfi/packages/unidata/unidata.0.0.1/saphe.yaml b/lib-satysfi/packages/unidata/unidata.0.0.1/saphe.yaml new file mode 100644 index 000000000..b4791bf96 --- /dev/null +++ b/lib-satysfi/packages/unidata/unidata.0.0.1/saphe.yaml @@ -0,0 +1,11 @@ +saphe: "^0.0.1" +satysfi: "^0.1.0" +name: "unidata" +authors: + - "Takashi Suwa <@gfngfn>" +contents: + library: + main_module: "Unidata" + source_directories: + - "./src" +dependencies: [] diff --git a/lib-satysfi/packages/unidata/unidata.0.0.1/src/unidata.satyh b/lib-satysfi/packages/unidata/unidata.0.0.1/src/unidata.satyh new file mode 100644 index 000000000..f2acf9af8 --- /dev/null +++ b/lib-satysfi/packages/unidata/unidata.0.0.1/src/unidata.satyh @@ -0,0 +1,9 @@ +module Unidata :> sig + val unidata : unicode-char-database +end = struct + val unidata = + load-unicode-char-database + (here ^ `/../unidata/Scripts.txt`) + (here ^ `/../unidata/EastAsianWidth.txt`) + (here ^ `/../unidata/LineBreak.txt`) +end diff --git a/lib-satysfi/unidata/.gitignore b/lib-satysfi/packages/unidata/unidata.0.0.1/unidata/.gitignore similarity index 100% rename from lib-satysfi/unidata/.gitignore rename to lib-satysfi/packages/unidata/unidata.0.0.1/unidata/.gitignore diff --git a/lib-satysfi/unidata/EastAsianWidth.txt b/lib-satysfi/packages/unidata/unidata.0.0.1/unidata/EastAsianWidth.txt similarity index 100% rename from lib-satysfi/unidata/EastAsianWidth.txt rename to lib-satysfi/packages/unidata/unidata.0.0.1/unidata/EastAsianWidth.txt diff --git a/lib-satysfi/unidata/LineBreak.txt b/lib-satysfi/packages/unidata/unidata.0.0.1/unidata/LineBreak.txt similarity index 100% rename from lib-satysfi/unidata/LineBreak.txt rename to lib-satysfi/packages/unidata/unidata.0.0.1/unidata/LineBreak.txt diff --git a/lib-satysfi/unidata/Scripts.txt b/lib-satysfi/packages/unidata/unidata.0.0.1/unidata/Scripts.txt similarity index 100% rename from lib-satysfi/unidata/Scripts.txt rename to lib-satysfi/packages/unidata/unidata.0.0.1/unidata/Scripts.txt diff --git a/lib-satysfi/unidata/PropList.txt b/lib-satysfi/unidata/PropList.txt deleted file mode 100644 index 9a2d0e4b1..000000000 --- a/lib-satysfi/unidata/PropList.txt +++ /dev/null @@ -1,1618 +0,0 @@ -# PropList-10.0.0.txt -# Date: 2017-03-10, 08:25:30 GMT -# © 2017 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ - -# ================================================ - -0009..000D ; White_Space # Cc [5] .. -0020 ; White_Space # Zs SPACE -0085 ; White_Space # Cc -00A0 ; White_Space # Zs NO-BREAK SPACE -1680 ; White_Space # Zs OGHAM SPACE MARK -2000..200A ; White_Space # Zs [11] EN QUAD..HAIR SPACE -2028 ; White_Space # Zl LINE SEPARATOR -2029 ; White_Space # Zp PARAGRAPH SEPARATOR -202F ; White_Space # Zs NARROW NO-BREAK SPACE -205F ; White_Space # Zs MEDIUM MATHEMATICAL SPACE -3000 ; White_Space # Zs IDEOGRAPHIC SPACE - -# Total code points: 25 - -# ================================================ - -061C ; Bidi_Control # Cf ARABIC LETTER MARK -200E..200F ; Bidi_Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK -202A..202E ; Bidi_Control # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE -2066..2069 ; Bidi_Control # Cf [4] LEFT-TO-RIGHT ISOLATE..POP DIRECTIONAL ISOLATE - -# Total code points: 12 - -# ================================================ - -200C..200D ; Join_Control # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER - -# Total code points: 2 - -# ================================================ - -002D ; Dash # Pd HYPHEN-MINUS -058A ; Dash # Pd ARMENIAN HYPHEN -05BE ; Dash # Pd HEBREW PUNCTUATION MAQAF -1400 ; Dash # Pd CANADIAN SYLLABICS HYPHEN -1806 ; Dash # Pd MONGOLIAN TODO SOFT HYPHEN -2010..2015 ; Dash # Pd [6] HYPHEN..HORIZONTAL BAR -2053 ; Dash # Po SWUNG DASH -207B ; Dash # Sm SUPERSCRIPT MINUS -208B ; Dash # Sm SUBSCRIPT MINUS -2212 ; Dash # Sm MINUS SIGN -2E17 ; Dash # Pd DOUBLE OBLIQUE HYPHEN -2E1A ; Dash # Pd HYPHEN WITH DIAERESIS -2E3A..2E3B ; Dash # Pd [2] TWO-EM DASH..THREE-EM DASH -2E40 ; Dash # Pd DOUBLE HYPHEN -301C ; Dash # Pd WAVE DASH -3030 ; Dash # Pd WAVY DASH -30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN -FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH -FE58 ; Dash # Pd SMALL EM DASH -FE63 ; Dash # Pd SMALL HYPHEN-MINUS -FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS - -# Total code points: 28 - -# ================================================ - -002D ; Hyphen # Pd HYPHEN-MINUS -00AD ; Hyphen # Cf SOFT HYPHEN -058A ; Hyphen # Pd ARMENIAN HYPHEN -1806 ; Hyphen # Pd MONGOLIAN TODO SOFT HYPHEN -2010..2011 ; Hyphen # Pd [2] HYPHEN..NON-BREAKING HYPHEN -2E17 ; Hyphen # Pd DOUBLE OBLIQUE HYPHEN -30FB ; Hyphen # Po KATAKANA MIDDLE DOT -FE63 ; Hyphen # Pd SMALL HYPHEN-MINUS -FF0D ; Hyphen # Pd FULLWIDTH HYPHEN-MINUS -FF65 ; Hyphen # Po HALFWIDTH KATAKANA MIDDLE DOT - -# Total code points: 11 - -# ================================================ - -0022 ; Quotation_Mark # Po QUOTATION MARK -0027 ; Quotation_Mark # Po APOSTROPHE -00AB ; Quotation_Mark # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00BB ; Quotation_Mark # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -2018 ; Quotation_Mark # Pi LEFT SINGLE QUOTATION MARK -2019 ; Quotation_Mark # Pf RIGHT SINGLE QUOTATION MARK -201A ; Quotation_Mark # Ps SINGLE LOW-9 QUOTATION MARK -201B..201C ; Quotation_Mark # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK -201D ; Quotation_Mark # Pf RIGHT DOUBLE QUOTATION MARK -201E ; Quotation_Mark # Ps DOUBLE LOW-9 QUOTATION MARK -201F ; Quotation_Mark # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2039 ; Quotation_Mark # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A ; Quotation_Mark # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -2E42 ; Quotation_Mark # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK -300C ; Quotation_Mark # Ps LEFT CORNER BRACKET -300D ; Quotation_Mark # Pe RIGHT CORNER BRACKET -300E ; Quotation_Mark # Ps LEFT WHITE CORNER BRACKET -300F ; Quotation_Mark # Pe RIGHT WHITE CORNER BRACKET -301D ; Quotation_Mark # Ps REVERSED DOUBLE PRIME QUOTATION MARK -301E..301F ; Quotation_Mark # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK -FE41 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET -FE42 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET -FE43 ; Quotation_Mark # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET -FE44 ; Quotation_Mark # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -FF02 ; Quotation_Mark # Po FULLWIDTH QUOTATION MARK -FF07 ; Quotation_Mark # Po FULLWIDTH APOSTROPHE -FF62 ; Quotation_Mark # Ps HALFWIDTH LEFT CORNER BRACKET -FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET - -# Total code points: 30 - -# ================================================ - -0021 ; Terminal_Punctuation # Po EXCLAMATION MARK -002C ; Terminal_Punctuation # Po COMMA -002E ; Terminal_Punctuation # Po FULL STOP -003A..003B ; Terminal_Punctuation # Po [2] COLON..SEMICOLON -003F ; Terminal_Punctuation # Po QUESTION MARK -037E ; Terminal_Punctuation # Po GREEK QUESTION MARK -0387 ; Terminal_Punctuation # Po GREEK ANO TELEIA -0589 ; Terminal_Punctuation # Po ARMENIAN FULL STOP -05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ -060C ; Terminal_Punctuation # Po ARABIC COMMA -061B ; Terminal_Punctuation # Po ARABIC SEMICOLON -061F ; Terminal_Punctuation # Po ARABIC QUESTION MARK -06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP -0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION -070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS -07F8..07F9 ; Terminal_Punctuation # Po [2] NKO COMMA..NKO EXCLAMATION MARK -0830..083E ; Terminal_Punctuation # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU -085E ; Terminal_Punctuation # Po MANDAIC PUNCTUATION -0964..0965 ; Terminal_Punctuation # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -0E5A..0E5B ; Terminal_Punctuation # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT -0F08 ; Terminal_Punctuation # Po TIBETAN MARK SBRUL SHAD -0F0D..0F12 ; Terminal_Punctuation # Po [6] TIBETAN MARK SHAD..TIBETAN MARK RGYA GRAM SHAD -104A..104B ; Terminal_Punctuation # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION -1361..1368 ; Terminal_Punctuation # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR -166D..166E ; Terminal_Punctuation # Po [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP -16EB..16ED ; Terminal_Punctuation # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION -1735..1736 ; Terminal_Punctuation # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION -17D4..17D6 ; Terminal_Punctuation # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH -17DA ; Terminal_Punctuation # Po KHMER SIGN KOOMUUT -1802..1805 ; Terminal_Punctuation # Po [4] MONGOLIAN COMMA..MONGOLIAN FOUR DOTS -1808..1809 ; Terminal_Punctuation # Po [2] MONGOLIAN MANCHU COMMA..MONGOLIAN MANCHU FULL STOP -1944..1945 ; Terminal_Punctuation # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -1AA8..1AAB ; Terminal_Punctuation # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU -1B5A..1B5B ; Terminal_Punctuation # Po [2] BALINESE PANTI..BALINESE PAMADA -1B5D..1B5F ; Terminal_Punctuation # Po [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN -1C3B..1C3F ; Terminal_Punctuation # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK -1C7E..1C7F ; Terminal_Punctuation # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD -203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG -2047..2049 ; Terminal_Punctuation # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK -2E2E ; Terminal_Punctuation # Po REVERSED QUESTION MARK -2E3C ; Terminal_Punctuation # Po STENOGRAPHIC FULL STOP -2E41 ; Terminal_Punctuation # Po REVERSED COMMA -3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP -A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP -A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK -A6F3..A6F7 ; Terminal_Punctuation # Po [5] BAMUM FULL STOP..BAMUM QUESTION MARK -A876..A877 ; Terminal_Punctuation # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD -A8CE..A8CF ; Terminal_Punctuation # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA -A92F ; Terminal_Punctuation # Po KAYAH LI SIGN SHYA -A9C7..A9C9 ; Terminal_Punctuation # Po [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI -AA5D..AA5F ; Terminal_Punctuation # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA -AADF ; Terminal_Punctuation # Po TAI VIET SYMBOL KOI KOI -AAF0..AAF1 ; Terminal_Punctuation # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM -ABEB ; Terminal_Punctuation # Po MEETEI MAYEK CHEIKHEI -FE50..FE52 ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP -FE54..FE57 ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK -FF01 ; Terminal_Punctuation # Po FULLWIDTH EXCLAMATION MARK -FF0C ; Terminal_Punctuation # Po FULLWIDTH COMMA -FF0E ; Terminal_Punctuation # Po FULLWIDTH FULL STOP -FF1A..FF1B ; Terminal_Punctuation # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON -FF1F ; Terminal_Punctuation # Po FULLWIDTH QUESTION MARK -FF61 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC FULL STOP -FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA -1039F ; Terminal_Punctuation # Po UGARITIC WORD DIVIDER -103D0 ; Terminal_Punctuation # Po OLD PERSIAN WORD DIVIDER -10857 ; Terminal_Punctuation # Po IMPERIAL ARAMAIC SECTION SIGN -1091F ; Terminal_Punctuation # Po PHOENICIAN WORD SEPARATOR -10A56..10A57 ; Terminal_Punctuation # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA -10AF0..10AF5 ; Terminal_Punctuation # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS -10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION -10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT -11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS -110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA -11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK -111C5..111C6 ; Terminal_Punctuation # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA -111CD ; Terminal_Punctuation # Po SHARADA SUTRA MARK -111DE..111DF ; Terminal_Punctuation # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2 -11238..1123C ; Terminal_Punctuation # Po [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK -112A9 ; Terminal_Punctuation # Po MULTANI SECTION MARK -1144B..1144D ; Terminal_Punctuation # Po [3] NEWA DANDA..NEWA COMMA -1145B ; Terminal_Punctuation # Po NEWA PLACEHOLDER MARK -115C2..115C5 ; Terminal_Punctuation # Po [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR -115C9..115D7 ; Terminal_Punctuation # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES -11641..11642 ; Terminal_Punctuation # Po [2] MODI DANDA..MODI DOUBLE DANDA -1173C..1173E ; Terminal_Punctuation # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI -11A42..11A43 ; Terminal_Punctuation # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD -11A9B..11A9C ; Terminal_Punctuation # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD -11AA1..11AA2 ; Terminal_Punctuation # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2 -11C41..11C43 ; Terminal_Punctuation # Po [3] BHAIKSUKI DANDA..BHAIKSUKI WORD SEPARATOR -11C71 ; Terminal_Punctuation # Po MARCHEN MARK SHAD -12470..12474 ; Terminal_Punctuation # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON -16A6E..16A6F ; Terminal_Punctuation # Po [2] MRO DANDA..MRO DOUBLE DANDA -16AF5 ; Terminal_Punctuation # Po BASSA VAH FULL STOP -16B37..16B39 ; Terminal_Punctuation # Po [3] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN CIM CHEEM -16B44 ; Terminal_Punctuation # Po PAHAWH HMONG SIGN XAUS -1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP -1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON - -# Total code points: 252 - -# ================================================ - -005E ; Other_Math # Sk CIRCUMFLEX ACCENT -03D0..03D2 ; Other_Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL -03D5 ; Other_Math # L& GREEK PHI SYMBOL -03F0..03F1 ; Other_Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL -03F4..03F5 ; Other_Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL -2016 ; Other_Math # Po DOUBLE VERTICAL LINE -2032..2034 ; Other_Math # Po [3] PRIME..TRIPLE PRIME -2040 ; Other_Math # Pc CHARACTER TIE -2061..2064 ; Other_Math # Cf [4] FUNCTION APPLICATION..INVISIBLE PLUS -207D ; Other_Math # Ps SUPERSCRIPT LEFT PARENTHESIS -207E ; Other_Math # Pe SUPERSCRIPT RIGHT PARENTHESIS -208D ; Other_Math # Ps SUBSCRIPT LEFT PARENTHESIS -208E ; Other_Math # Pe SUBSCRIPT RIGHT PARENTHESIS -20D0..20DC ; Other_Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE -20E1 ; Other_Math # Mn COMBINING LEFT RIGHT ARROW ABOVE -20E5..20E6 ; Other_Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY -20EB..20EF ; Other_Math # Mn [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW -2102 ; Other_Math # L& DOUBLE-STRUCK CAPITAL C -2107 ; Other_Math # L& EULER CONSTANT -210A..2113 ; Other_Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L -2115 ; Other_Math # L& DOUBLE-STRUCK CAPITAL N -2119..211D ; Other_Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R -2124 ; Other_Math # L& DOUBLE-STRUCK CAPITAL Z -2128 ; Other_Math # L& BLACK-LETTER CAPITAL Z -2129 ; Other_Math # So TURNED GREEK SMALL LETTER IOTA -212C..212D ; Other_Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C -212F..2131 ; Other_Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F -2133..2134 ; Other_Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O -2135..2138 ; Other_Math # Lo [4] ALEF SYMBOL..DALET SYMBOL -213C..213F ; Other_Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI -2145..2149 ; Other_Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J -2195..2199 ; Other_Math # So [5] UP DOWN ARROW..SOUTH WEST ARROW -219C..219F ; Other_Math # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW -21A1..21A2 ; Other_Math # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL -21A4..21A5 ; Other_Math # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR -21A7 ; Other_Math # So DOWNWARDS ARROW FROM BAR -21A9..21AD ; Other_Math # So [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW -21B0..21B1 ; Other_Math # So [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS -21B6..21B7 ; Other_Math # So [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW -21BC..21CD ; Other_Math # So [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE -21D0..21D1 ; Other_Math # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW -21D3 ; Other_Math # So DOWNWARDS DOUBLE ARROW -21D5..21DB ; Other_Math # So [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW -21DD ; Other_Math # So RIGHTWARDS SQUIGGLE ARROW -21E4..21E5 ; Other_Math # So [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR -2308 ; Other_Math # Ps LEFT CEILING -2309 ; Other_Math # Pe RIGHT CEILING -230A ; Other_Math # Ps LEFT FLOOR -230B ; Other_Math # Pe RIGHT FLOOR -23B4..23B5 ; Other_Math # So [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET -23B7 ; Other_Math # So RADICAL SYMBOL BOTTOM -23D0 ; Other_Math # So VERTICAL LINE EXTENSION -23E2 ; Other_Math # So WHITE TRAPEZIUM -25A0..25A1 ; Other_Math # So [2] BLACK SQUARE..WHITE SQUARE -25AE..25B6 ; Other_Math # So [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE -25BC..25C0 ; Other_Math # So [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE -25C6..25C7 ; Other_Math # So [2] BLACK DIAMOND..WHITE DIAMOND -25CA..25CB ; Other_Math # So [2] LOZENGE..WHITE CIRCLE -25CF..25D3 ; Other_Math # So [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK -25E2 ; Other_Math # So BLACK LOWER RIGHT TRIANGLE -25E4 ; Other_Math # So BLACK UPPER LEFT TRIANGLE -25E7..25EC ; Other_Math # So [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT -2605..2606 ; Other_Math # So [2] BLACK STAR..WHITE STAR -2640 ; Other_Math # So FEMALE SIGN -2642 ; Other_Math # So MALE SIGN -2660..2663 ; Other_Math # So [4] BLACK SPADE SUIT..BLACK CLUB SUIT -266D..266E ; Other_Math # So [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN -27C5 ; Other_Math # Ps LEFT S-SHAPED BAG DELIMITER -27C6 ; Other_Math # Pe RIGHT S-SHAPED BAG DELIMITER -27E6 ; Other_Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7 ; Other_Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8 ; Other_Math # Ps MATHEMATICAL LEFT ANGLE BRACKET -27E9 ; Other_Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET -27EA ; Other_Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB ; Other_Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -27EC ; Other_Math # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET -27ED ; Other_Math # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET -27EE ; Other_Math # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS -27EF ; Other_Math # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS -2983 ; Other_Math # Ps LEFT WHITE CURLY BRACKET -2984 ; Other_Math # Pe RIGHT WHITE CURLY BRACKET -2985 ; Other_Math # Ps LEFT WHITE PARENTHESIS -2986 ; Other_Math # Pe RIGHT WHITE PARENTHESIS -2987 ; Other_Math # Ps Z NOTATION LEFT IMAGE BRACKET -2988 ; Other_Math # Pe Z NOTATION RIGHT IMAGE BRACKET -2989 ; Other_Math # Ps Z NOTATION LEFT BINDING BRACKET -298A ; Other_Math # Pe Z NOTATION RIGHT BINDING BRACKET -298B ; Other_Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR -298C ; Other_Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR -298D ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F ; Other_Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990 ; Other_Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991 ; Other_Math # Ps LEFT ANGLE BRACKET WITH DOT -2992 ; Other_Math # Pe RIGHT ANGLE BRACKET WITH DOT -2993 ; Other_Math # Ps LEFT ARC LESS-THAN BRACKET -2994 ; Other_Math # Pe RIGHT ARC GREATER-THAN BRACKET -2995 ; Other_Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET -2996 ; Other_Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET -2997 ; Other_Math # Ps LEFT BLACK TORTOISE SHELL BRACKET -2998 ; Other_Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET -29D8 ; Other_Math # Ps LEFT WIGGLY FENCE -29D9 ; Other_Math # Pe RIGHT WIGGLY FENCE -29DA ; Other_Math # Ps LEFT DOUBLE WIGGLY FENCE -29DB ; Other_Math # Pe RIGHT DOUBLE WIGGLY FENCE -29FC ; Other_Math # Ps LEFT-POINTING CURVED ANGLE BRACKET -29FD ; Other_Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET -FE61 ; Other_Math # Po SMALL ASTERISK -FE63 ; Other_Math # Pd SMALL HYPHEN-MINUS -FE68 ; Other_Math # Po SMALL REVERSE SOLIDUS -FF3C ; Other_Math # Po FULLWIDTH REVERSE SOLIDUS -FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT -1D400..1D454 ; Other_Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G -1D456..1D49C ; Other_Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A -1D49E..1D49F ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D -1D4A2 ; Other_Math # L& MATHEMATICAL SCRIPT CAPITAL G -1D4A5..1D4A6 ; Other_Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K -1D4A9..1D4AC ; Other_Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q -1D4AE..1D4B9 ; Other_Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D -1D4BB ; Other_Math # L& MATHEMATICAL SCRIPT SMALL F -1D4BD..1D4C3 ; Other_Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N -1D4C5..1D505 ; Other_Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B -1D507..1D50A ; Other_Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G -1D50D..1D514 ; Other_Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q -1D516..1D51C ; Other_Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y -1D51E..1D539 ; Other_Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B -1D53B..1D53E ; Other_Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G -1D540..1D544 ; Other_Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M -1D546 ; Other_Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O -1D54A..1D550 ; Other_Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D552..1D6A5 ; Other_Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J -1D6A8..1D6C0 ; Other_Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA -1D6C2..1D6DA ; Other_Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA -1D6DC..1D6FA ; Other_Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA -1D6FC..1D714 ; Other_Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA -1D716..1D734 ; Other_Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA -1D736..1D74E ; Other_Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA -1D750..1D76E ; Other_Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA -1D770..1D788 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA -1D78A..1D7A8 ; Other_Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA -1D7AA..1D7C2 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA -1D7C4..1D7CB ; Other_Math # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA -1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE -1EE00..1EE03 ; Other_Math # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL -1EE05..1EE1F ; Other_Math # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF -1EE21..1EE22 ; Other_Math # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM -1EE24 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HEH -1EE27 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HAH -1EE29..1EE32 ; Other_Math # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF -1EE34..1EE37 ; Other_Math # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH -1EE39 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL DAD -1EE3B ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL GHAIN -1EE42 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED JEEM -1EE47 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED HAH -1EE49 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED YEH -1EE4B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED LAM -1EE4D..1EE4F ; Other_Math # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN -1EE51..1EE52 ; Other_Math # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF -1EE54 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED SHEEN -1EE57 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED KHAH -1EE59 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DAD -1EE5B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED GHAIN -1EE5D ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON -1EE5F ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF -1EE61..1EE62 ; Other_Math # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM -1EE64 ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED HEH -1EE67..1EE6A ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF -1EE6C..1EE72 ; Other_Math # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF -1EE74..1EE77 ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH -1EE79..1EE7C ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH -1EE7E ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH -1EE80..1EE89 ; Other_Math # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH -1EE8B..1EE9B ; Other_Math # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN -1EEA1..1EEA3 ; Other_Math # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL -1EEA5..1EEA9 ; Other_Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH -1EEAB..1EEBB ; Other_Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN - -# Total code points: 1362 - -# ================================================ - -0030..0039 ; Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE -0041..0046 ; Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F -0061..0066 ; Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F -FF10..FF19 ; Hex_Digit # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE -FF21..FF26 ; Hex_Digit # L& [6] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER F -FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER F - -# Total code points: 44 - -# ================================================ - -0030..0039 ; ASCII_Hex_Digit # Nd [10] DIGIT ZERO..DIGIT NINE -0041..0046 ; ASCII_Hex_Digit # L& [6] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER F -0061..0066 ; ASCII_Hex_Digit # L& [6] LATIN SMALL LETTER A..LATIN SMALL LETTER F - -# Total code points: 22 - -# ================================================ - -0345 ; Other_Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI -05B0..05BD ; Other_Alphabetic # Mn [14] HEBREW POINT SHEVA..HEBREW POINT METEG -05BF ; Other_Alphabetic # Mn HEBREW POINT RAFE -05C1..05C2 ; Other_Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4..05C5 ; Other_Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT -05C7 ; Other_Alphabetic # Mn HEBREW POINT QAMATS QATAN -0610..061A ; Other_Alphabetic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA -064B..0657 ; Other_Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA -0659..065F ; Other_Alphabetic # Mn [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW -0670 ; Other_Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF -06D6..06DC ; Other_Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN -06E1..06E4 ; Other_Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA -06E7..06E8 ; Other_Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON -06ED ; Other_Alphabetic # Mn ARABIC SMALL LOW MEEM -0711 ; Other_Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH -0730..073F ; Other_Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA -07A6..07B0 ; Other_Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN -0816..0817 ; Other_Alphabetic # Mn [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF -081B..0823 ; Other_Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A -0825..0827 ; Other_Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U -0829..082C ; Other_Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN -08D4..08DF ; Other_Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA -08E3..08E9 ; Other_Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN -08F0..0902 ; Other_Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA -0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA -093A ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN OE -093B ; Other_Alphabetic # Mc DEVANAGARI VOWEL SIGN OOE -093E..0940 ; Other_Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II -0941..0948 ; Other_Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI -0949..094C ; Other_Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU -094E..094F ; Other_Alphabetic # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW -0955..0957 ; Other_Alphabetic # Mn [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE -0962..0963 ; Other_Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL -0981 ; Other_Alphabetic # Mn BENGALI SIGN CANDRABINDU -0982..0983 ; Other_Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA -09BE..09C0 ; Other_Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II -09C1..09C4 ; Other_Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR -09C7..09C8 ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI -09CB..09CC ; Other_Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU -09D7 ; Other_Alphabetic # Mc BENGALI AU LENGTH MARK -09E2..09E3 ; Other_Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL -0A01..0A02 ; Other_Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI -0A03 ; Other_Alphabetic # Mc GURMUKHI SIGN VISARGA -0A3E..0A40 ; Other_Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II -0A41..0A42 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU -0A47..0A48 ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI -0A4B..0A4C ; Other_Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU -0A51 ; Other_Alphabetic # Mn GURMUKHI SIGN UDAAT -0A70..0A71 ; Other_Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK -0A75 ; Other_Alphabetic # Mn GURMUKHI SIGN YAKASH -0A81..0A82 ; Other_Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA -0A83 ; Other_Alphabetic # Mc GUJARATI SIGN VISARGA -0ABE..0AC0 ; Other_Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II -0AC1..0AC5 ; Other_Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E -0AC7..0AC8 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI -0AC9 ; Other_Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O -0ACB..0ACC ; Other_Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU -0AE2..0AE3 ; Other_Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL -0AFA..0AFC ; Other_Alphabetic # Mn [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH -0B01 ; Other_Alphabetic # Mn ORIYA SIGN CANDRABINDU -0B02..0B03 ; Other_Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA -0B3E ; Other_Alphabetic # Mc ORIYA VOWEL SIGN AA -0B3F ; Other_Alphabetic # Mn ORIYA VOWEL SIGN I -0B40 ; Other_Alphabetic # Mc ORIYA VOWEL SIGN II -0B41..0B44 ; Other_Alphabetic # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR -0B47..0B48 ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI -0B4B..0B4C ; Other_Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU -0B56 ; Other_Alphabetic # Mn ORIYA AI LENGTH MARK -0B57 ; Other_Alphabetic # Mc ORIYA AU LENGTH MARK -0B62..0B63 ; Other_Alphabetic # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL -0B82 ; Other_Alphabetic # Mn TAMIL SIGN ANUSVARA -0BBE..0BBF ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I -0BC0 ; Other_Alphabetic # Mn TAMIL VOWEL SIGN II -0BC1..0BC2 ; Other_Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU -0BC6..0BC8 ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI -0BCA..0BCC ; Other_Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU -0BD7 ; Other_Alphabetic # Mc TAMIL AU LENGTH MARK -0C00 ; Other_Alphabetic # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE -0C01..0C03 ; Other_Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA -0C3E..0C40 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II -0C41..0C44 ; Other_Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR -0C46..0C48 ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI -0C4A..0C4C ; Other_Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU -0C55..0C56 ; Other_Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK -0C62..0C63 ; Other_Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL -0C81 ; Other_Alphabetic # Mn KANNADA SIGN CANDRABINDU -0C82..0C83 ; Other_Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA -0CBE ; Other_Alphabetic # Mc KANNADA VOWEL SIGN AA -0CBF ; Other_Alphabetic # Mn KANNADA VOWEL SIGN I -0CC0..0CC4 ; Other_Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR -0CC6 ; Other_Alphabetic # Mn KANNADA VOWEL SIGN E -0CC7..0CC8 ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI -0CCA..0CCB ; Other_Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO -0CCC ; Other_Alphabetic # Mn KANNADA VOWEL SIGN AU -0CD5..0CD6 ; Other_Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CE2..0CE3 ; Other_Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL -0D00..0D01 ; Other_Alphabetic # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU -0D02..0D03 ; Other_Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA -0D3E..0D40 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II -0D41..0D44 ; Other_Alphabetic # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR -0D46..0D48 ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI -0D4A..0D4C ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU -0D57 ; Other_Alphabetic # Mc MALAYALAM AU LENGTH MARK -0D62..0D63 ; Other_Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL -0D82..0D83 ; Other_Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA -0DCF..0DD1 ; Other_Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD2..0DD4 ; Other_Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6 ; Other_Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA -0DD8..0DDF ; Other_Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA -0DF2..0DF3 ; Other_Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA -0E31 ; Other_Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT -0E34..0E3A ; Other_Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU -0E4D ; Other_Alphabetic # Mn THAI CHARACTER NIKHAHIT -0EB1 ; Other_Alphabetic # Mn LAO VOWEL SIGN MAI KAN -0EB4..0EB9 ; Other_Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU -0EBB..0EBC ; Other_Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO -0ECD ; Other_Alphabetic # Mn LAO NIGGAHITA -0F71..0F7E ; Other_Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO -0F7F ; Other_Alphabetic # Mc TIBETAN SIGN RNAM BCAD -0F80..0F81 ; Other_Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II -0F8D..0F97 ; Other_Alphabetic # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA -0F99..0FBC ; Other_Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA -102B..102C ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA -102D..1030 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU -1031 ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN E -1032..1036 ; Other_Alphabetic # Mn [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA -1038 ; Other_Alphabetic # Mc MYANMAR SIGN VISARGA -103B..103C ; Other_Alphabetic # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA -103D..103E ; Other_Alphabetic # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA -1056..1057 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR -1058..1059 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL -105E..1060 ; Other_Alphabetic # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA -1062 ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN SGAW KAREN EU -1067..1068 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR VOWEL SIGN WESTERN PWO KAREN UE -1071..1074 ; Other_Alphabetic # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE -1082 ; Other_Alphabetic # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA -1083..1084 ; Other_Alphabetic # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E -1085..1086 ; Other_Alphabetic # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y -109C ; Other_Alphabetic # Mc MYANMAR VOWEL SIGN AITON A -109D ; Other_Alphabetic # Mn MYANMAR VOWEL SIGN AITON AI -135F ; Other_Alphabetic # Mn ETHIOPIC COMBINING GEMINATION MARK -1712..1713 ; Other_Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U -1732..1733 ; Other_Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U -1752..1753 ; Other_Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U -1772..1773 ; Other_Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U -17B6 ; Other_Alphabetic # Mc KHMER VOWEL SIGN AA -17B7..17BD ; Other_Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA -17BE..17C5 ; Other_Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU -17C6 ; Other_Alphabetic # Mn KHMER SIGN NIKAHIT -17C7..17C8 ; Other_Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU -1885..1886 ; Other_Alphabetic # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA -18A9 ; Other_Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA -1920..1922 ; Other_Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U -1923..1926 ; Other_Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU -1927..1928 ; Other_Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O -1929..192B ; Other_Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA -1930..1931 ; Other_Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA -1932 ; Other_Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA -1933..1938 ; Other_Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA -1A17..1A18 ; Other_Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U -1A19..1A1A ; Other_Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O -1A1B ; Other_Alphabetic # Mn BUGINESE VOWEL SIGN AE -1A55 ; Other_Alphabetic # Mc TAI THAM CONSONANT SIGN MEDIAL RA -1A56 ; Other_Alphabetic # Mn TAI THAM CONSONANT SIGN MEDIAL LA -1A57 ; Other_Alphabetic # Mc TAI THAM CONSONANT SIGN LA TANG LAI -1A58..1A5E ; Other_Alphabetic # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA -1A61 ; Other_Alphabetic # Mc TAI THAM VOWEL SIGN A -1A62 ; Other_Alphabetic # Mn TAI THAM VOWEL SIGN MAI SAT -1A63..1A64 ; Other_Alphabetic # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA -1A65..1A6C ; Other_Alphabetic # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW -1A6D..1A72 ; Other_Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI -1A73..1A74 ; Other_Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG -1B00..1B03 ; Other_Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG -1B04 ; Other_Alphabetic # Mc BALINESE SIGN BISAH -1B35 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG -1B36..1B3A ; Other_Alphabetic # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA -1B3B ; Other_Alphabetic # Mc BALINESE VOWEL SIGN RA REPA TEDUNG -1B3C ; Other_Alphabetic # Mn BALINESE VOWEL SIGN LA LENGA -1B3D..1B41 ; Other_Alphabetic # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG -1B42 ; Other_Alphabetic # Mn BALINESE VOWEL SIGN PEPET -1B43 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN PEPET TEDUNG -1B80..1B81 ; Other_Alphabetic # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR -1B82 ; Other_Alphabetic # Mc SUNDANESE SIGN PANGWISAD -1BA1 ; Other_Alphabetic # Mc SUNDANESE CONSONANT SIGN PAMINGKAL -1BA2..1BA5 ; Other_Alphabetic # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU -1BA6..1BA7 ; Other_Alphabetic # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG -1BA8..1BA9 ; Other_Alphabetic # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG -1BAC..1BAD ; Other_Alphabetic # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA -1BE7 ; Other_Alphabetic # Mc BATAK VOWEL SIGN E -1BE8..1BE9 ; Other_Alphabetic # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE -1BEA..1BEC ; Other_Alphabetic # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O -1BED ; Other_Alphabetic # Mn BATAK VOWEL SIGN KARO O -1BEE ; Other_Alphabetic # Mc BATAK VOWEL SIGN U -1BEF..1BF1 ; Other_Alphabetic # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H -1C24..1C2B ; Other_Alphabetic # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU -1C2C..1C33 ; Other_Alphabetic # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T -1C34..1C35 ; Other_Alphabetic # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG -1CF2..1CF3 ; Other_Alphabetic # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA -1DE7..1DF4 ; Other_Alphabetic # Mn [14] COMBINING LATIN SMALL LETTER ALPHA..COMBINING LATIN SMALL LETTER U WITH DIAERESIS -24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z -2DE0..2DFF ; Other_Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS -A674..A67B ; Other_Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA -A69E..A69F ; Other_Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E -A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I -A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E -A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO -A880..A881 ; Other_Alphabetic # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA -A8B4..A8C3 ; Other_Alphabetic # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU -A8C5 ; Other_Alphabetic # Mn SAURASHTRA SIGN CANDRABINDU -A926..A92A ; Other_Alphabetic # Mn [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O -A947..A951 ; Other_Alphabetic # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R -A952 ; Other_Alphabetic # Mc REJANG CONSONANT SIGN H -A980..A982 ; Other_Alphabetic # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR -A983 ; Other_Alphabetic # Mc JAVANESE SIGN WIGNYAN -A9B4..A9B5 ; Other_Alphabetic # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG -A9B6..A9B9 ; Other_Alphabetic # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT -A9BA..A9BB ; Other_Alphabetic # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE -A9BC ; Other_Alphabetic # Mn JAVANESE VOWEL SIGN PEPET -A9BD..A9BF ; Other_Alphabetic # Mc [3] JAVANESE CONSONANT SIGN KERET..JAVANESE CONSONANT SIGN CAKRA -AA29..AA2E ; Other_Alphabetic # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE -AA2F..AA30 ; Other_Alphabetic # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI -AA31..AA32 ; Other_Alphabetic # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE -AA33..AA34 ; Other_Alphabetic # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA -AA35..AA36 ; Other_Alphabetic # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA -AA43 ; Other_Alphabetic # Mn CHAM CONSONANT SIGN FINAL NG -AA4C ; Other_Alphabetic # Mn CHAM CONSONANT SIGN FINAL M -AA4D ; Other_Alphabetic # Mc CHAM CONSONANT SIGN FINAL H -AAB0 ; Other_Alphabetic # Mn TAI VIET MAI KANG -AAB2..AAB4 ; Other_Alphabetic # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U -AAB7..AAB8 ; Other_Alphabetic # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA -AABE ; Other_Alphabetic # Mn TAI VIET VOWEL AM -AAEB ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN II -AAEC..AAED ; Other_Alphabetic # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI -AAEE..AAEF ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU -AAF5 ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN VISARGA -ABE3..ABE4 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP -ABE5 ; Other_Alphabetic # Mn MEETEI MAYEK VOWEL SIGN ANAP -ABE6..ABE7 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP -ABE8 ; Other_Alphabetic # Mn MEETEI MAYEK VOWEL SIGN UNAP -ABE9..ABEA ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG -FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA -10376..1037A ; Other_Alphabetic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII -10A01..10A03 ; Other_Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R -10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O -10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA -11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU -11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA -11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA -11038..11045 ; Other_Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU -11082 ; Other_Alphabetic # Mc KAITHI SIGN VISARGA -110B0..110B2 ; Other_Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II -110B3..110B6 ; Other_Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI -110B7..110B8 ; Other_Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU -11100..11102 ; Other_Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA -11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU -1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E -1112D..11132 ; Other_Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK -11180..11181 ; Other_Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA -11182 ; Other_Alphabetic # Mc SHARADA SIGN VISARGA -111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II -111B6..111BE ; Other_Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O -111BF ; Other_Alphabetic # Mc SHARADA VOWEL SIGN AU -1122C..1122E ; Other_Alphabetic # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II -1122F..11231 ; Other_Alphabetic # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI -11232..11233 ; Other_Alphabetic # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU -11234 ; Other_Alphabetic # Mn KHOJKI SIGN ANUSVARA -11237 ; Other_Alphabetic # Mn KHOJKI SIGN SHADDA -1123E ; Other_Alphabetic # Mn KHOJKI SIGN SUKUN -112DF ; Other_Alphabetic # Mn KHUDAWADI SIGN ANUSVARA -112E0..112E2 ; Other_Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II -112E3..112E8 ; Other_Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU -11300..11301 ; Other_Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU -11302..11303 ; Other_Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA -1133E..1133F ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I -11340 ; Other_Alphabetic # Mn GRANTHA VOWEL SIGN II -11341..11344 ; Other_Alphabetic # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR -11347..11348 ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI -1134B..1134C ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU -11357 ; Other_Alphabetic # Mc GRANTHA AU LENGTH MARK -11362..11363 ; Other_Alphabetic # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL -11435..11437 ; Other_Alphabetic # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II -11438..1143F ; Other_Alphabetic # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI -11440..11441 ; Other_Alphabetic # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU -11443..11444 ; Other_Alphabetic # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA -11445 ; Other_Alphabetic # Mc NEWA SIGN VISARGA -114B0..114B2 ; Other_Alphabetic # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II -114B3..114B8 ; Other_Alphabetic # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL -114B9 ; Other_Alphabetic # Mc TIRHUTA VOWEL SIGN E -114BA ; Other_Alphabetic # Mn TIRHUTA VOWEL SIGN SHORT E -114BB..114BE ; Other_Alphabetic # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU -114BF..114C0 ; Other_Alphabetic # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA -114C1 ; Other_Alphabetic # Mc TIRHUTA SIGN VISARGA -115AF..115B1 ; Other_Alphabetic # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II -115B2..115B5 ; Other_Alphabetic # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR -115B8..115BB ; Other_Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU -115BC..115BD ; Other_Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA -115BE ; Other_Alphabetic # Mc SIDDHAM SIGN VISARGA -115DC..115DD ; Other_Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU -11630..11632 ; Other_Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II -11633..1163A ; Other_Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI -1163B..1163C ; Other_Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU -1163D ; Other_Alphabetic # Mn MODI SIGN ANUSVARA -1163E ; Other_Alphabetic # Mc MODI SIGN VISARGA -11640 ; Other_Alphabetic # Mn MODI SIGN ARDHACANDRA -116AB ; Other_Alphabetic # Mn TAKRI SIGN ANUSVARA -116AC ; Other_Alphabetic # Mc TAKRI SIGN VISARGA -116AD ; Other_Alphabetic # Mn TAKRI VOWEL SIGN AA -116AE..116AF ; Other_Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II -116B0..116B5 ; Other_Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU -1171D..1171F ; Other_Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA -11720..11721 ; Other_Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA -11722..11725 ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU -11726 ; Other_Alphabetic # Mc AHOM VOWEL SIGN E -11727..1172A ; Other_Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM -11A01..11A06 ; Other_Alphabetic # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O -11A07..11A08 ; Other_Alphabetic # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU -11A09..11A0A ; Other_Alphabetic # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK -11A35..11A38 ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA -11A39 ; Other_Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA -11A3B..11A3E ; Other_Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA -11A51..11A56 ; Other_Alphabetic # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE -11A57..11A58 ; Other_Alphabetic # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU -11A59..11A5B ; Other_Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK -11A8A..11A96 ; Other_Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA -11A97 ; Other_Alphabetic # Mc SOYOMBO SIGN VISARGA -11C2F ; Other_Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA -11C30..11C36 ; Other_Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L -11C38..11C3D ; Other_Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA -11C3E ; Other_Alphabetic # Mc BHAIKSUKI SIGN VISARGA -11C92..11CA7 ; Other_Alphabetic # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA -11CA9 ; Other_Alphabetic # Mc MARCHEN SUBJOINED LETTER YA -11CAA..11CB0 ; Other_Alphabetic # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA -11CB1 ; Other_Alphabetic # Mc MARCHEN VOWEL SIGN I -11CB2..11CB3 ; Other_Alphabetic # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E -11CB4 ; Other_Alphabetic # Mc MARCHEN VOWEL SIGN O -11CB5..11CB6 ; Other_Alphabetic # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU -11D31..11D36 ; Other_Alphabetic # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R -11D3A ; Other_Alphabetic # Mn MASARAM GONDI VOWEL SIGN E -11D3C..11D3D ; Other_Alphabetic # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O -11D3F..11D41 ; Other_Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA -11D43 ; Other_Alphabetic # Mn MASARAM GONDI SIGN CANDRA -11D47 ; Other_Alphabetic # Mn MASARAM GONDI RA-KARA -16B30..16B36 ; Other_Alphabetic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM -16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG -1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK -1E000..1E006 ; Other_Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE -1E008..1E018 ; Other_Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU -1E01B..1E021 ; Other_Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI -1E023..1E024 ; Other_Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS -1E026..1E02A ; Other_Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA -1E947 ; Other_Alphabetic # Mn ADLAM HAMZA -1F130..1F149 ; Other_Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z -1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z -1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z - -# Total code points: 1300 - -# ================================================ - -3006 ; Ideographic # Lo IDEOGRAPHIC CLOSING MARK -3007 ; Ideographic # Nl IDEOGRAPHIC NUMBER ZERO -3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE -3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY -3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FEA ; Ideographic # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA -F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D -FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 -17000..187EC ; Ideographic # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC -18800..18AF2 ; Ideographic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755 -1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB -20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 -2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 -2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D - -# Total code points: 96174 - -# ================================================ - -005E ; Diacritic # Sk CIRCUMFLEX ACCENT -0060 ; Diacritic # Sk GRAVE ACCENT -00A8 ; Diacritic # Sk DIAERESIS -00AF ; Diacritic # Sk MACRON -00B4 ; Diacritic # Sk ACUTE ACCENT -00B7 ; Diacritic # Po MIDDLE DOT -00B8 ; Diacritic # Sk CEDILLA -02B0..02C1 ; Diacritic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP -02C2..02C5 ; Diacritic # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD -02C6..02D1 ; Diacritic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON -02D2..02DF ; Diacritic # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT -02E0..02E4 ; Diacritic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -02E5..02EB ; Diacritic # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK -02EC ; Diacritic # Lm MODIFIER LETTER VOICING -02ED ; Diacritic # Sk MODIFIER LETTER UNASPIRATED -02EE ; Diacritic # Lm MODIFIER LETTER DOUBLE APOSTROPHE -02EF..02FF ; Diacritic # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW -0300..034E ; Diacritic # Mn [79] COMBINING GRAVE ACCENT..COMBINING UPWARDS ARROW BELOW -0350..0357 ; Diacritic # Mn [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE -035D..0362 ; Diacritic # Mn [6] COMBINING DOUBLE BREVE..COMBINING DOUBLE RIGHTWARDS ARROW BELOW -0374 ; Diacritic # Lm GREEK NUMERAL SIGN -0375 ; Diacritic # Sk GREEK LOWER NUMERAL SIGN -037A ; Diacritic # Lm GREEK YPOGEGRAMMENI -0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS -0483..0487 ; Diacritic # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE -0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05BD ; Diacritic # Mn [27] HEBREW ACCENT MUNAH..HEBREW POINT METEG -05BF ; Diacritic # Mn HEBREW POINT RAFE -05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT -064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN -0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA -06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO -06E5..06E6 ; Diacritic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH -06EA..06EC ; Diacritic # Mn [3] ARABIC EMPTY CENTRE LOW STOP..ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE -0730..074A ; Diacritic # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH -07A6..07B0 ; Diacritic # Mn [11] THAANA ABAFILI..THAANA SUKUN -07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE -07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE -0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH -08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT -093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA -094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA -0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT -0971 ; Diacritic # Lm DEVANAGARI SIGN HIGH SPACING DOT -09BC ; Diacritic # Mn BENGALI SIGN NUKTA -09CD ; Diacritic # Mn BENGALI SIGN VIRAMA -0A3C ; Diacritic # Mn GURMUKHI SIGN NUKTA -0A4D ; Diacritic # Mn GURMUKHI SIGN VIRAMA -0ABC ; Diacritic # Mn GUJARATI SIGN NUKTA -0ACD ; Diacritic # Mn GUJARATI SIGN VIRAMA -0AFD..0AFF ; Diacritic # Mn [3] GUJARATI SIGN THREE-DOT NUKTA ABOVE..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE -0B3C ; Diacritic # Mn ORIYA SIGN NUKTA -0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA -0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA -0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA -0CBC ; Diacritic # Mn KANNADA SIGN NUKTA -0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA -0D3B..0D3C ; Diacritic # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA -0D4D ; Diacritic # Mn MALAYALAM SIGN VIRAMA -0DCA ; Diacritic # Mn SINHALA SIGN AL-LAKUNA -0E47..0E4C ; Diacritic # Mn [6] THAI CHARACTER MAITAIKHU..THAI CHARACTER THANTHAKHAT -0E4E ; Diacritic # Mn THAI CHARACTER YAMAKKAN -0EC8..0ECC ; Diacritic # Mn [5] LAO TONE MAI EK..LAO CANCELLATION MARK -0F18..0F19 ; Diacritic # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F35 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG NYI ZLA -0F37 ; Diacritic # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F39 ; Diacritic # Mn TIBETAN MARK TSA -PHRU -0F3E..0F3F ; Diacritic # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES -0F82..0F84 ; Diacritic # Mn [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA -0F86..0F87 ; Diacritic # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS -0FC6 ; Diacritic # Mn TIBETAN SYMBOL PADMA GDAN -1037 ; Diacritic # Mn MYANMAR SIGN DOT BELOW -1039..103A ; Diacritic # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT -1087..108C ; Diacritic # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 -108D ; Diacritic # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE -108F ; Diacritic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 -109A..109B ; Diacritic # Mc [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3 -17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT -17DD ; Diacritic # Mn KHMER SIGN ATTHACAN -1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I -1A75..1A7C ; Diacritic # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN -1A7F ; Diacritic # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT -1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1B34 ; Diacritic # Mn BALINESE SIGN REREKAN -1B44 ; Diacritic # Mc BALINESE ADEG ADEG -1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG -1BAA ; Diacritic # Mc SUNDANESE SIGN PAMAAEH -1BAB ; Diacritic # Mn SUNDANESE SIGN VIRAMA -1C36..1C37 ; Diacritic # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA -1C78..1C7D ; Diacritic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD -1CD0..1CD2 ; Diacritic # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA -1CD3 ; Diacritic # Po VEDIC SIGN NIHSHVASA -1CD4..1CE0 ; Diacritic # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA -1CE1 ; Diacritic # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA -1CE2..1CE8 ; Diacritic # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL -1CED ; Diacritic # Mn VEDIC SIGN TIRYAK -1CF4 ; Diacritic # Mn VEDIC TONE CANDRA ABOVE -1CF7 ; Diacritic # Mc VEDIC SIGN ATIKRAMA -1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI -1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW -1DF5..1DF9 ; Diacritic # Mn [5] COMBINING UP TACK ABOVE..COMBINING WIDE INVERTED BRIDGE BELOW -1DFD..1DFF ; Diacritic # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW -1FBD ; Diacritic # Sk GREEK KORONIS -1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI -1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI -1FDD..1FDF ; Diacritic # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI -1FED..1FEF ; Diacritic # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA -1FFD..1FFE ; Diacritic # Sk [2] GREEK OXIA..GREEK DASIA -2CEF..2CF1 ; Diacritic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS -2E2F ; Diacritic # Lm VERTICAL TILDE -302A..302D ; Diacritic # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK -302E..302F ; Diacritic # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK -3099..309A ; Diacritic # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -309B..309C ; Diacritic # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -30FC ; Diacritic # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK -A66F ; Diacritic # Mn COMBINING CYRILLIC VZMET -A67C..A67D ; Diacritic # Mn [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK -A67F ; Diacritic # Lm CYRILLIC PAYEROK -A69C..A69D ; Diacritic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN -A6F0..A6F1 ; Diacritic # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS -A717..A71F ; Diacritic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK -A720..A721 ; Diacritic # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE -A788 ; Diacritic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT -A7F8..A7F9 ; Diacritic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE -A8C4 ; Diacritic # Mn SAURASHTRA SIGN VIRAMA -A8E0..A8F1 ; Diacritic # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA -A92B..A92D ; Diacritic # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU -A92E ; Diacritic # Po KAYAH LI SIGN CWI -A953 ; Diacritic # Mc REJANG VIRAMA -A9B3 ; Diacritic # Mn JAVANESE SIGN CECAK TELU -A9C0 ; Diacritic # Mc JAVANESE PANGKON -A9E5 ; Diacritic # Mn MYANMAR SIGN SHAN SAW -AA7B ; Diacritic # Mc MYANMAR SIGN PAO KAREN TONE -AA7C ; Diacritic # Mn MYANMAR SIGN TAI LAING TONE-2 -AA7D ; Diacritic # Mc MYANMAR SIGN TAI LAING TONE-5 -AABF ; Diacritic # Mn TAI VIET TONE MAI EK -AAC0 ; Diacritic # Lo TAI VIET TONE MAI NUENG -AAC1 ; Diacritic # Mn TAI VIET TONE MAI THO -AAC2 ; Diacritic # Lo TAI VIET TONE MAI SONG -AAF6 ; Diacritic # Mn MEETEI MAYEK VIRAMA -AB5B ; Diacritic # Sk MODIFIER BREVE WITH INVERTED BREVE -AB5C..AB5F ; Diacritic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK -ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK -ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK -FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FE20..FE2F ; Diacritic # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF -FF3E ; Diacritic # Sk FULLWIDTH CIRCUMFLEX ACCENT -FF40 ; Diacritic # Sk FULLWIDTH GRAVE ACCENT -FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -FFE3 ; Diacritic # Sk FULLWIDTH MACRON -102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK -10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW -110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA -11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA -11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA -111C0 ; Diacritic # Mc SHARADA SIGN VIRAMA -111CA..111CC ; Diacritic # Mn [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK -11235 ; Diacritic # Mc KHOJKI SIGN VIRAMA -11236 ; Diacritic # Mn KHOJKI SIGN NUKTA -112E9..112EA ; Diacritic # Mn [2] KHUDAWADI SIGN NUKTA..KHUDAWADI SIGN VIRAMA -1133C ; Diacritic # Mn GRANTHA SIGN NUKTA -1134D ; Diacritic # Mc GRANTHA SIGN VIRAMA -11366..1136C ; Diacritic # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX -11370..11374 ; Diacritic # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA -11442 ; Diacritic # Mn NEWA SIGN VIRAMA -11446 ; Diacritic # Mn NEWA SIGN NUKTA -114C2..114C3 ; Diacritic # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA -115BF..115C0 ; Diacritic # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA -1163F ; Diacritic # Mn MODI SIGN VIRAMA -116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA -116B7 ; Diacritic # Mn TAKRI SIGN NUKTA -1172B ; Diacritic # Mn AHOM SIGN KILLER -11A34 ; Diacritic # Mn ZANABAZAR SQUARE SIGN VIRAMA -11A47 ; Diacritic # Mn ZANABAZAR SQUARE SUBJOINER -11A99 ; Diacritic # Mn SOYOMBO SUBJOINER -11C3F ; Diacritic # Mn BHAIKSUKI SIGN VIRAMA -11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA -11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA -16AF0..16AF4 ; Diacritic # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE -16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW -16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 -1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE -1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS -1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK -1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA - -# Total code points: 798 - -# ================================================ - -00B7 ; Extender # Po MIDDLE DOT -02D0..02D1 ; Extender # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON -0640 ; Extender # Lm ARABIC TATWEEL -07FA ; Extender # Lm NKO LAJANYALAN -0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK -0EC6 ; Extender # Lm LAO KO LA -180A ; Extender # Po MONGOLIAN NIRUGU -1843 ; Extender # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN -1AA7 ; Extender # Lm TAI THAM SIGN MAI YAMOK -1C36 ; Extender # Mn LEPCHA SIGN RAN -1C7B ; Extender # Lm OL CHIKI RELAA -3005 ; Extender # Lm IDEOGRAPHIC ITERATION MARK -3031..3035 ; Extender # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF -309D..309E ; Extender # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK -30FC..30FE ; Extender # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK -A015 ; Extender # Lm YI SYLLABLE WU -A60C ; Extender # Lm VAI SYLLABLE LENGTHENER -A9CF ; Extender # Lm JAVANESE PANGRANGKEP -A9E6 ; Extender # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION -AA70 ; Extender # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION -AADD ; Extender # Lm TAI VIET SYMBOL SAM -AAF3..AAF4 ; Extender # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK -FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -1135D ; Extender # Lo GRANTHA SIGN PLUTA -115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3 -11A98 ; Extender # Mn SOYOMBO GEMINATION MARK -16B42..16B43 ; Extender # Lm [2] PAHAWH HMONG SIGN VOS NRUA..PAHAWH HMONG SIGN IB YAM -16FE0..16FE1 ; Extender # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK -1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK - -# Total code points: 44 - -# ================================================ - -00AA ; Other_Lowercase # Lo FEMININE ORDINAL INDICATOR -00BA ; Other_Lowercase # Lo MASCULINE ORDINAL INDICATOR -02B0..02B8 ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y -02C0..02C1 ; Other_Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP -02E0..02E4 ; Other_Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI -037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI -1D2C..1D6A ; Other_Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI -1D78 ; Other_Lowercase # Lm MODIFIER LETTER CYRILLIC EN -1D9B..1DBF ; Other_Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -2071 ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER I -207F ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER N -2090..209C ; Other_Lowercase # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T -2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND -24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C7C..2C7D ; Other_Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V -A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN -A770 ; Other_Lowercase # Lm MODIFIER LETTER US -A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE -AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK - -# Total code points: 189 - -# ================================================ - -2160..216F ; Other_Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND -24B6..24CF ; Other_Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z -1F130..1F149 ; Other_Uppercase # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z -1F150..1F169 ; Other_Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z -1F170..1F189 ; Other_Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z - -# Total code points: 120 - -# ================================================ - -FDD0..FDEF ; Noncharacter_Code_Point # Cn [32] .. -FFFE..FFFF ; Noncharacter_Code_Point # Cn [2] .. -1FFFE..1FFFF ; Noncharacter_Code_Point # Cn [2] .. -2FFFE..2FFFF ; Noncharacter_Code_Point # Cn [2] .. -3FFFE..3FFFF ; Noncharacter_Code_Point # Cn [2] .. -4FFFE..4FFFF ; Noncharacter_Code_Point # Cn [2] .. -5FFFE..5FFFF ; Noncharacter_Code_Point # Cn [2] .. -6FFFE..6FFFF ; Noncharacter_Code_Point # Cn [2] .. -7FFFE..7FFFF ; Noncharacter_Code_Point # Cn [2] .. -8FFFE..8FFFF ; Noncharacter_Code_Point # Cn [2] .. -9FFFE..9FFFF ; Noncharacter_Code_Point # Cn [2] .. -AFFFE..AFFFF ; Noncharacter_Code_Point # Cn [2] .. -BFFFE..BFFFF ; Noncharacter_Code_Point # Cn [2] .. -CFFFE..CFFFF ; Noncharacter_Code_Point # Cn [2] .. -DFFFE..DFFFF ; Noncharacter_Code_Point # Cn [2] .. -EFFFE..EFFFF ; Noncharacter_Code_Point # Cn [2] .. -FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] .. -10FFFE..10FFFF; Noncharacter_Code_Point # Cn [2] .. - -# Total code points: 66 - -# ================================================ - -09BE ; Other_Grapheme_Extend # Mc BENGALI VOWEL SIGN AA -09D7 ; Other_Grapheme_Extend # Mc BENGALI AU LENGTH MARK -0B3E ; Other_Grapheme_Extend # Mc ORIYA VOWEL SIGN AA -0B57 ; Other_Grapheme_Extend # Mc ORIYA AU LENGTH MARK -0BBE ; Other_Grapheme_Extend # Mc TAMIL VOWEL SIGN AA -0BD7 ; Other_Grapheme_Extend # Mc TAMIL AU LENGTH MARK -0CC2 ; Other_Grapheme_Extend # Mc KANNADA VOWEL SIGN UU -0CD5..0CD6 ; Other_Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0D3E ; Other_Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA -0D57 ; Other_Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK -0DCF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA -0DDF ; Other_Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA -200C ; Other_Grapheme_Extend # Cf ZERO WIDTH NON-JOINER -302E..302F ; Other_Grapheme_Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK -FF9E..FF9F ; Other_Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -1133E ; Other_Grapheme_Extend # Mc GRANTHA VOWEL SIGN AA -11357 ; Other_Grapheme_Extend # Mc GRANTHA AU LENGTH MARK -114B0 ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN AA -114BD ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN SHORT O -115AF ; Other_Grapheme_Extend # Mc SIDDHAM VOWEL SIGN AA -1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM -1D16E..1D172 ; Other_Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 -E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG - -# Total code points: 125 - -# ================================================ - -2FF0..2FF1 ; IDS_Binary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW -2FF4..2FFB ; IDS_Binary_Operator # So [8] IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID - -# Total code points: 10 - -# ================================================ - -2FF2..2FF3 ; IDS_Trinary_Operator # So [2] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW - -# Total code points: 2 - -# ================================================ - -2E80..2E99 ; Radical # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP -2E9B..2EF3 ; Radical # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE -2F00..2FD5 ; Radical # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE - -# Total code points: 329 - -# ================================================ - -3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5 -4E00..9FEA ; Unified_Ideograph # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA -FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F -FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11 -FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14 -FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F -FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21 -FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 -FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 -20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6 -2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 - -# Total code points: 87882 - -# ================================================ - -034F ; Other_Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER -115F..1160 ; Other_Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER -17B4..17B5 ; Other_Default_Ignorable_Code_Point # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA -2065 ; Other_Default_Ignorable_Code_Point # Cn -3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER -FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER -FFF0..FFF8 ; Other_Default_Ignorable_Code_Point # Cn [9] .. -E0000 ; Other_Default_Ignorable_Code_Point # Cn -E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] .. -E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] .. -E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] .. - -# Total code points: 3776 - -# ================================================ - -0149 ; Deprecated # L& LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -0673 ; Deprecated # Lo ARABIC LETTER ALEF WITH WAVY HAMZA BELOW -0F77 ; Deprecated # Mn TIBETAN VOWEL SIGN VOCALIC RR -0F79 ; Deprecated # Mn TIBETAN VOWEL SIGN VOCALIC LL -17A3..17A4 ; Deprecated # Lo [2] KHMER INDEPENDENT VOWEL QAQ..KHMER INDEPENDENT VOWEL QAA -206A..206F ; Deprecated # Cf [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES -2329 ; Deprecated # Ps LEFT-POINTING ANGLE BRACKET -232A ; Deprecated # Pe RIGHT-POINTING ANGLE BRACKET -E0001 ; Deprecated # Cf LANGUAGE TAG - -# Total code points: 15 - -# ================================================ - -0069..006A ; Soft_Dotted # L& [2] LATIN SMALL LETTER I..LATIN SMALL LETTER J -012F ; Soft_Dotted # L& LATIN SMALL LETTER I WITH OGONEK -0249 ; Soft_Dotted # L& LATIN SMALL LETTER J WITH STROKE -0268 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE -029D ; Soft_Dotted # L& LATIN SMALL LETTER J WITH CROSSED-TAIL -02B2 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J -03F3 ; Soft_Dotted # L& GREEK LETTER YOT -0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE -1D62 ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER I -1D96 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH RETROFLEX HOOK -1DA4 ; Soft_Dotted # Lm MODIFIER LETTER SMALL I WITH STROKE -1DA8 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL -1E2D ; Soft_Dotted # L& LATIN SMALL LETTER I WITH TILDE BELOW -1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW -2071 ; Soft_Dotted # Lm SUPERSCRIPT LATIN SMALL LETTER I -2148..2149 ; Soft_Dotted # L& [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J -2C7C ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER J -1D422..1D423 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J -1D456..1D457 ; Soft_Dotted # L& [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J -1D48A..1D48B ; Soft_Dotted # L& [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J -1D4BE..1D4BF ; Soft_Dotted # L& [2] MATHEMATICAL SCRIPT SMALL I..MATHEMATICAL SCRIPT SMALL J -1D4F2..1D4F3 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SCRIPT SMALL I..MATHEMATICAL BOLD SCRIPT SMALL J -1D526..1D527 ; Soft_Dotted # L& [2] MATHEMATICAL FRAKTUR SMALL I..MATHEMATICAL FRAKTUR SMALL J -1D55A..1D55B ; Soft_Dotted # L& [2] MATHEMATICAL DOUBLE-STRUCK SMALL I..MATHEMATICAL DOUBLE-STRUCK SMALL J -1D58E..1D58F ; Soft_Dotted # L& [2] MATHEMATICAL BOLD FRAKTUR SMALL I..MATHEMATICAL BOLD FRAKTUR SMALL J -1D5C2..1D5C3 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF SMALL I..MATHEMATICAL SANS-SERIF SMALL J -1D5F6..1D5F7 ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD SMALL I..MATHEMATICAL SANS-SERIF BOLD SMALL J -1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J -1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J -1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J - -# Total code points: 46 - -# ================================================ - -0E40..0E44 ; Logical_Order_Exception # Lo [5] THAI CHARACTER SARA E..THAI CHARACTER SARA AI MAIMALAI -0EC0..0EC4 ; Logical_Order_Exception # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI -19B5..19B7 ; Logical_Order_Exception # Lo [3] NEW TAI LUE VOWEL SIGN E..NEW TAI LUE VOWEL SIGN O -19BA ; Logical_Order_Exception # Lo NEW TAI LUE VOWEL SIGN AY -AAB5..AAB6 ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O -AAB9 ; Logical_Order_Exception # Lo TAI VIET VOWEL UEA -AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL AY - -# Total code points: 19 - -# ================================================ - -1885..1886 ; Other_ID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA -2118 ; Other_ID_Start # Sm SCRIPT CAPITAL P -212E ; Other_ID_Start # So ESTIMATED SYMBOL -309B..309C ; Other_ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - -# Total code points: 6 - -# ================================================ - -00B7 ; Other_ID_Continue # Po MIDDLE DOT -0387 ; Other_ID_Continue # Po GREEK ANO TELEIA -1369..1371 ; Other_ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE -19DA ; Other_ID_Continue # No NEW TAI LUE THAM DIGIT ONE - -# Total code points: 12 - -# ================================================ - -0021 ; Sentence_Terminal # Po EXCLAMATION MARK -002E ; Sentence_Terminal # Po FULL STOP -003F ; Sentence_Terminal # Po QUESTION MARK -0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP -061F ; Sentence_Terminal # Po ARABIC QUESTION MARK -06D4 ; Sentence_Terminal # Po ARABIC FULL STOP -0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP -07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK -0964..0965 ; Sentence_Terminal # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA -104A..104B ; Sentence_Terminal # Po [2] MYANMAR SIGN LITTLE SECTION..MYANMAR SIGN SECTION -1362 ; Sentence_Terminal # Po ETHIOPIC FULL STOP -1367..1368 ; Sentence_Terminal # Po [2] ETHIOPIC QUESTION MARK..ETHIOPIC PARAGRAPH SEPARATOR -166E ; Sentence_Terminal # Po CANADIAN SYLLABICS FULL STOP -1735..1736 ; Sentence_Terminal # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION -1803 ; Sentence_Terminal # Po MONGOLIAN FULL STOP -1809 ; Sentence_Terminal # Po MONGOLIAN MANCHU FULL STOP -1944..1945 ; Sentence_Terminal # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK -1AA8..1AAB ; Sentence_Terminal # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU -1B5A..1B5B ; Sentence_Terminal # Po [2] BALINESE PANTI..BALINESE PAMADA -1B5E..1B5F ; Sentence_Terminal # Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN -1C3B..1C3C ; Sentence_Terminal # Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL -1C7E..1C7F ; Sentence_Terminal # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD -203C..203D ; Sentence_Terminal # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG -2047..2049 ; Sentence_Terminal # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK -2E2E ; Sentence_Terminal # Po REVERSED QUESTION MARK -2E3C ; Sentence_Terminal # Po STENOGRAPHIC FULL STOP -3002 ; Sentence_Terminal # Po IDEOGRAPHIC FULL STOP -A4FF ; Sentence_Terminal # Po LISU PUNCTUATION FULL STOP -A60E..A60F ; Sentence_Terminal # Po [2] VAI FULL STOP..VAI QUESTION MARK -A6F3 ; Sentence_Terminal # Po BAMUM FULL STOP -A6F7 ; Sentence_Terminal # Po BAMUM QUESTION MARK -A876..A877 ; Sentence_Terminal # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD -A8CE..A8CF ; Sentence_Terminal # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA -A92F ; Sentence_Terminal # Po KAYAH LI SIGN SHYA -A9C8..A9C9 ; Sentence_Terminal # Po [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI -AA5D..AA5F ; Sentence_Terminal # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA -AAF0..AAF1 ; Sentence_Terminal # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM -ABEB ; Sentence_Terminal # Po MEETEI MAYEK CHEIKHEI -FE52 ; Sentence_Terminal # Po SMALL FULL STOP -FE56..FE57 ; Sentence_Terminal # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK -FF01 ; Sentence_Terminal # Po FULLWIDTH EXCLAMATION MARK -FF0E ; Sentence_Terminal # Po FULLWIDTH FULL STOP -FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK -FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP -10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA -11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA -110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA -11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK -111C5..111C6 ; Sentence_Terminal # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA -111CD ; Sentence_Terminal # Po SHARADA SUTRA MARK -111DE..111DF ; Sentence_Terminal # Po [2] SHARADA SECTION MARK-1..SHARADA SECTION MARK-2 -11238..11239 ; Sentence_Terminal # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA -1123B..1123C ; Sentence_Terminal # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK -112A9 ; Sentence_Terminal # Po MULTANI SECTION MARK -1144B..1144C ; Sentence_Terminal # Po [2] NEWA DANDA..NEWA DOUBLE DANDA -115C2..115C3 ; Sentence_Terminal # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA -115C9..115D7 ; Sentence_Terminal # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES -11641..11642 ; Sentence_Terminal # Po [2] MODI DANDA..MODI DOUBLE DANDA -1173C..1173E ; Sentence_Terminal # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI -11A42..11A43 ; Sentence_Terminal # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD -11A9B..11A9C ; Sentence_Terminal # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD -11C41..11C42 ; Sentence_Terminal # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA -16A6E..16A6F ; Sentence_Terminal # Po [2] MRO DANDA..MRO DOUBLE DANDA -16AF5 ; Sentence_Terminal # Po BASSA VAH FULL STOP -16B37..16B38 ; Sentence_Terminal # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB -16B44 ; Sentence_Terminal # Po PAHAWH HMONG SIGN XAUS -1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP -1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP - -# Total code points: 128 - -# ================================================ - -180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE -FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 -E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 - -# Total code points: 259 - -# ================================================ - -0009..000D ; Pattern_White_Space # Cc [5] .. -0020 ; Pattern_White_Space # Zs SPACE -0085 ; Pattern_White_Space # Cc -200E..200F ; Pattern_White_Space # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK -2028 ; Pattern_White_Space # Zl LINE SEPARATOR -2029 ; Pattern_White_Space # Zp PARAGRAPH SEPARATOR - -# Total code points: 11 - -# ================================================ - -0021..0023 ; Pattern_Syntax # Po [3] EXCLAMATION MARK..NUMBER SIGN -0024 ; Pattern_Syntax # Sc DOLLAR SIGN -0025..0027 ; Pattern_Syntax # Po [3] PERCENT SIGN..APOSTROPHE -0028 ; Pattern_Syntax # Ps LEFT PARENTHESIS -0029 ; Pattern_Syntax # Pe RIGHT PARENTHESIS -002A ; Pattern_Syntax # Po ASTERISK -002B ; Pattern_Syntax # Sm PLUS SIGN -002C ; Pattern_Syntax # Po COMMA -002D ; Pattern_Syntax # Pd HYPHEN-MINUS -002E..002F ; Pattern_Syntax # Po [2] FULL STOP..SOLIDUS -003A..003B ; Pattern_Syntax # Po [2] COLON..SEMICOLON -003C..003E ; Pattern_Syntax # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN -003F..0040 ; Pattern_Syntax # Po [2] QUESTION MARK..COMMERCIAL AT -005B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET -005C ; Pattern_Syntax # Po REVERSE SOLIDUS -005D ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET -005E ; Pattern_Syntax # Sk CIRCUMFLEX ACCENT -0060 ; Pattern_Syntax # Sk GRAVE ACCENT -007B ; Pattern_Syntax # Ps LEFT CURLY BRACKET -007C ; Pattern_Syntax # Sm VERTICAL LINE -007D ; Pattern_Syntax # Pe RIGHT CURLY BRACKET -007E ; Pattern_Syntax # Sm TILDE -00A1 ; Pattern_Syntax # Po INVERTED EXCLAMATION MARK -00A2..00A5 ; Pattern_Syntax # Sc [4] CENT SIGN..YEN SIGN -00A6 ; Pattern_Syntax # So BROKEN BAR -00A7 ; Pattern_Syntax # Po SECTION SIGN -00A9 ; Pattern_Syntax # So COPYRIGHT SIGN -00AB ; Pattern_Syntax # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00AC ; Pattern_Syntax # Sm NOT SIGN -00AE ; Pattern_Syntax # So REGISTERED SIGN -00B0 ; Pattern_Syntax # So DEGREE SIGN -00B1 ; Pattern_Syntax # Sm PLUS-MINUS SIGN -00B6 ; Pattern_Syntax # Po PILCROW SIGN -00BB ; Pattern_Syntax # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -00BF ; Pattern_Syntax # Po INVERTED QUESTION MARK -00D7 ; Pattern_Syntax # Sm MULTIPLICATION SIGN -00F7 ; Pattern_Syntax # Sm DIVISION SIGN -2010..2015 ; Pattern_Syntax # Pd [6] HYPHEN..HORIZONTAL BAR -2016..2017 ; Pattern_Syntax # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE -2018 ; Pattern_Syntax # Pi LEFT SINGLE QUOTATION MARK -2019 ; Pattern_Syntax # Pf RIGHT SINGLE QUOTATION MARK -201A ; Pattern_Syntax # Ps SINGLE LOW-9 QUOTATION MARK -201B..201C ; Pattern_Syntax # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK -201D ; Pattern_Syntax # Pf RIGHT DOUBLE QUOTATION MARK -201E ; Pattern_Syntax # Ps DOUBLE LOW-9 QUOTATION MARK -201F ; Pattern_Syntax # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2020..2027 ; Pattern_Syntax # Po [8] DAGGER..HYPHENATION POINT -2030..2038 ; Pattern_Syntax # Po [9] PER MILLE SIGN..CARET -2039 ; Pattern_Syntax # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A ; Pattern_Syntax # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -203B..203E ; Pattern_Syntax # Po [4] REFERENCE MARK..OVERLINE -2041..2043 ; Pattern_Syntax # Po [3] CARET INSERTION POINT..HYPHEN BULLET -2044 ; Pattern_Syntax # Sm FRACTION SLASH -2045 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH QUILL -2046 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH QUILL -2047..2051 ; Pattern_Syntax # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY -2052 ; Pattern_Syntax # Sm COMMERCIAL MINUS SIGN -2053 ; Pattern_Syntax # Po SWUNG DASH -2055..205E ; Pattern_Syntax # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS -2190..2194 ; Pattern_Syntax # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW -2195..2199 ; Pattern_Syntax # So [5] UP DOWN ARROW..SOUTH WEST ARROW -219A..219B ; Pattern_Syntax # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE -219C..219F ; Pattern_Syntax # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW -21A0 ; Pattern_Syntax # Sm RIGHTWARDS TWO HEADED ARROW -21A1..21A2 ; Pattern_Syntax # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL -21A3 ; Pattern_Syntax # Sm RIGHTWARDS ARROW WITH TAIL -21A4..21A5 ; Pattern_Syntax # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR -21A6 ; Pattern_Syntax # Sm RIGHTWARDS ARROW FROM BAR -21A7..21AD ; Pattern_Syntax # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW -21AE ; Pattern_Syntax # Sm LEFT RIGHT ARROW WITH STROKE -21AF..21CD ; Pattern_Syntax # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE -21CE..21CF ; Pattern_Syntax # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE -21D0..21D1 ; Pattern_Syntax # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW -21D2 ; Pattern_Syntax # Sm RIGHTWARDS DOUBLE ARROW -21D3 ; Pattern_Syntax # So DOWNWARDS DOUBLE ARROW -21D4 ; Pattern_Syntax # Sm LEFT RIGHT DOUBLE ARROW -21D5..21F3 ; Pattern_Syntax # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW -21F4..22FF ; Pattern_Syntax # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP -2300..2307 ; Pattern_Syntax # So [8] DIAMETER SIGN..WAVY LINE -2308 ; Pattern_Syntax # Ps LEFT CEILING -2309 ; Pattern_Syntax # Pe RIGHT CEILING -230A ; Pattern_Syntax # Ps LEFT FLOOR -230B ; Pattern_Syntax # Pe RIGHT FLOOR -230C..231F ; Pattern_Syntax # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER -2320..2321 ; Pattern_Syntax # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL -2322..2328 ; Pattern_Syntax # So [7] FROWN..KEYBOARD -2329 ; Pattern_Syntax # Ps LEFT-POINTING ANGLE BRACKET -232A ; Pattern_Syntax # Pe RIGHT-POINTING ANGLE BRACKET -232B..237B ; Pattern_Syntax # So [81] ERASE TO THE LEFT..NOT CHECK MARK -237C ; Pattern_Syntax # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW -237D..239A ; Pattern_Syntax # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL -239B..23B3 ; Pattern_Syntax # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM -23B4..23DB ; Pattern_Syntax # So [40] TOP SQUARE BRACKET..FUSE -23DC..23E1 ; Pattern_Syntax # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET -23E2..2426 ; Pattern_Syntax # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO -2427..243F ; Pattern_Syntax # Cn [25] .. -2440..244A ; Pattern_Syntax # So [11] OCR HOOK..OCR DOUBLE BACKSLASH -244B..245F ; Pattern_Syntax # Cn [21] .. -2500..25B6 ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE -25B7 ; Pattern_Syntax # Sm WHITE RIGHT-POINTING TRIANGLE -25B8..25C0 ; Pattern_Syntax # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE -25C1 ; Pattern_Syntax # Sm WHITE LEFT-POINTING TRIANGLE -25C2..25F7 ; Pattern_Syntax # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT -25F8..25FF ; Pattern_Syntax # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE -2600..266E ; Pattern_Syntax # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN -266F ; Pattern_Syntax # Sm MUSIC SHARP SIGN -2670..2767 ; Pattern_Syntax # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET -2768 ; Pattern_Syntax # Ps MEDIUM LEFT PARENTHESIS ORNAMENT -2769 ; Pattern_Syntax # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT -276A ; Pattern_Syntax # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT -276B ; Pattern_Syntax # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT -276C ; Pattern_Syntax # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT -276D ; Pattern_Syntax # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT -276E ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT -276F ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT -2770 ; Pattern_Syntax # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT -2771 ; Pattern_Syntax # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT -2772 ; Pattern_Syntax # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT -2773 ; Pattern_Syntax # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT -2774 ; Pattern_Syntax # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT -2775 ; Pattern_Syntax # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT -2794..27BF ; Pattern_Syntax # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP -27C0..27C4 ; Pattern_Syntax # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET -27C5 ; Pattern_Syntax # Ps LEFT S-SHAPED BAG DELIMITER -27C6 ; Pattern_Syntax # Pe RIGHT S-SHAPED BAG DELIMITER -27C7..27E5 ; Pattern_Syntax # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK -27E6 ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8 ; Pattern_Syntax # Ps MATHEMATICAL LEFT ANGLE BRACKET -27E9 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT ANGLE BRACKET -27EA ; Pattern_Syntax # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB ; Pattern_Syntax # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -27EC ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET -27ED ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET -27EE ; Pattern_Syntax # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS -27EF ; Pattern_Syntax # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS -27F0..27FF ; Pattern_Syntax # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW -2800..28FF ; Pattern_Syntax # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 -2900..2982 ; Pattern_Syntax # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON -2983 ; Pattern_Syntax # Ps LEFT WHITE CURLY BRACKET -2984 ; Pattern_Syntax # Pe RIGHT WHITE CURLY BRACKET -2985 ; Pattern_Syntax # Ps LEFT WHITE PARENTHESIS -2986 ; Pattern_Syntax # Pe RIGHT WHITE PARENTHESIS -2987 ; Pattern_Syntax # Ps Z NOTATION LEFT IMAGE BRACKET -2988 ; Pattern_Syntax # Pe Z NOTATION RIGHT IMAGE BRACKET -2989 ; Pattern_Syntax # Ps Z NOTATION LEFT BINDING BRACKET -298A ; Pattern_Syntax # Pe Z NOTATION RIGHT BINDING BRACKET -298B ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH UNDERBAR -298C ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH UNDERBAR -298D ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET WITH DOT -2992 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET WITH DOT -2993 ; Pattern_Syntax # Ps LEFT ARC LESS-THAN BRACKET -2994 ; Pattern_Syntax # Pe RIGHT ARC GREATER-THAN BRACKET -2995 ; Pattern_Syntax # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET -2996 ; Pattern_Syntax # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET -2997 ; Pattern_Syntax # Ps LEFT BLACK TORTOISE SHELL BRACKET -2998 ; Pattern_Syntax # Pe RIGHT BLACK TORTOISE SHELL BRACKET -2999..29D7 ; Pattern_Syntax # Sm [63] DOTTED FENCE..BLACK HOURGLASS -29D8 ; Pattern_Syntax # Ps LEFT WIGGLY FENCE -29D9 ; Pattern_Syntax # Pe RIGHT WIGGLY FENCE -29DA ; Pattern_Syntax # Ps LEFT DOUBLE WIGGLY FENCE -29DB ; Pattern_Syntax # Pe RIGHT DOUBLE WIGGLY FENCE -29DC..29FB ; Pattern_Syntax # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS -29FC ; Pattern_Syntax # Ps LEFT-POINTING CURVED ANGLE BRACKET -29FD ; Pattern_Syntax # Pe RIGHT-POINTING CURVED ANGLE BRACKET -29FE..2AFF ; Pattern_Syntax # Sm [258] TINY..N-ARY WHITE VERTICAL BAR -2B00..2B2F ; Pattern_Syntax # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE -2B30..2B44 ; Pattern_Syntax # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET -2B45..2B46 ; Pattern_Syntax # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW -2B47..2B4C ; Pattern_Syntax # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR -2B4D..2B73 ; Pattern_Syntax # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B74..2B75 ; Pattern_Syntax # Cn [2] .. -2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B96..2B97 ; Pattern_Syntax # Cn [2] .. -2B98..2BB9 ; Pattern_Syntax # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX -2BBA..2BBC ; Pattern_Syntax # Cn [3] .. -2BBD..2BC8 ; Pattern_Syntax # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED -2BC9 ; Pattern_Syntax # Cn -2BCA..2BD2 ; Pattern_Syntax # So [9] TOP HALF BLACK CIRCLE..GROUP MARK -2BD3..2BEB ; Pattern_Syntax # Cn [25] .. -2BEC..2BEF ; Pattern_Syntax # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS -2BF0..2BFF ; Pattern_Syntax # Cn [16] .. -2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER -2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET -2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET -2E04 ; Pattern_Syntax # Pi LEFT DOTTED SUBSTITUTION BRACKET -2E05 ; Pattern_Syntax # Pf RIGHT DOTTED SUBSTITUTION BRACKET -2E06..2E08 ; Pattern_Syntax # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER -2E09 ; Pattern_Syntax # Pi LEFT TRANSPOSITION BRACKET -2E0A ; Pattern_Syntax # Pf RIGHT TRANSPOSITION BRACKET -2E0B ; Pattern_Syntax # Po RAISED SQUARE -2E0C ; Pattern_Syntax # Pi LEFT RAISED OMISSION BRACKET -2E0D ; Pattern_Syntax # Pf RIGHT RAISED OMISSION BRACKET -2E0E..2E16 ; Pattern_Syntax # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE -2E17 ; Pattern_Syntax # Pd DOUBLE OBLIQUE HYPHEN -2E18..2E19 ; Pattern_Syntax # Po [2] INVERTED INTERROBANG..PALM BRANCH -2E1A ; Pattern_Syntax # Pd HYPHEN WITH DIAERESIS -2E1B ; Pattern_Syntax # Po TILDE WITH RING ABOVE -2E1C ; Pattern_Syntax # Pi LEFT LOW PARAPHRASE BRACKET -2E1D ; Pattern_Syntax # Pf RIGHT LOW PARAPHRASE BRACKET -2E1E..2E1F ; Pattern_Syntax # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW -2E20 ; Pattern_Syntax # Pi LEFT VERTICAL BAR WITH QUILL -2E21 ; Pattern_Syntax # Pf RIGHT VERTICAL BAR WITH QUILL -2E22 ; Pattern_Syntax # Ps TOP LEFT HALF BRACKET -2E23 ; Pattern_Syntax # Pe TOP RIGHT HALF BRACKET -2E24 ; Pattern_Syntax # Ps BOTTOM LEFT HALF BRACKET -2E25 ; Pattern_Syntax # Pe BOTTOM RIGHT HALF BRACKET -2E26 ; Pattern_Syntax # Ps LEFT SIDEWAYS U BRACKET -2E27 ; Pattern_Syntax # Pe RIGHT SIDEWAYS U BRACKET -2E28 ; Pattern_Syntax # Ps LEFT DOUBLE PARENTHESIS -2E29 ; Pattern_Syntax # Pe RIGHT DOUBLE PARENTHESIS -2E2A..2E2E ; Pattern_Syntax # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK -2E2F ; Pattern_Syntax # Lm VERTICAL TILDE -2E30..2E39 ; Pattern_Syntax # Po [10] RING POINT..TOP HALF SECTION SIGN -2E3A..2E3B ; Pattern_Syntax # Pd [2] TWO-EM DASH..THREE-EM DASH -2E3C..2E3F ; Pattern_Syntax # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM -2E40 ; Pattern_Syntax # Pd DOUBLE HYPHEN -2E41 ; Pattern_Syntax # Po REVERSED COMMA -2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK -2E43..2E49 ; Pattern_Syntax # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA -2E4A..2E7F ; Pattern_Syntax # Cn [54] .. -3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK -3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET -3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET -300A ; Pattern_Syntax # Ps LEFT DOUBLE ANGLE BRACKET -300B ; Pattern_Syntax # Pe RIGHT DOUBLE ANGLE BRACKET -300C ; Pattern_Syntax # Ps LEFT CORNER BRACKET -300D ; Pattern_Syntax # Pe RIGHT CORNER BRACKET -300E ; Pattern_Syntax # Ps LEFT WHITE CORNER BRACKET -300F ; Pattern_Syntax # Pe RIGHT WHITE CORNER BRACKET -3010 ; Pattern_Syntax # Ps LEFT BLACK LENTICULAR BRACKET -3011 ; Pattern_Syntax # Pe RIGHT BLACK LENTICULAR BRACKET -3012..3013 ; Pattern_Syntax # So [2] POSTAL MARK..GETA MARK -3014 ; Pattern_Syntax # Ps LEFT TORTOISE SHELL BRACKET -3015 ; Pattern_Syntax # Pe RIGHT TORTOISE SHELL BRACKET -3016 ; Pattern_Syntax # Ps LEFT WHITE LENTICULAR BRACKET -3017 ; Pattern_Syntax # Pe RIGHT WHITE LENTICULAR BRACKET -3018 ; Pattern_Syntax # Ps LEFT WHITE TORTOISE SHELL BRACKET -3019 ; Pattern_Syntax # Pe RIGHT WHITE TORTOISE SHELL BRACKET -301A ; Pattern_Syntax # Ps LEFT WHITE SQUARE BRACKET -301B ; Pattern_Syntax # Pe RIGHT WHITE SQUARE BRACKET -301C ; Pattern_Syntax # Pd WAVE DASH -301D ; Pattern_Syntax # Ps REVERSED DOUBLE PRIME QUOTATION MARK -301E..301F ; Pattern_Syntax # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK -3020 ; Pattern_Syntax # So POSTAL MARK FACE -3030 ; Pattern_Syntax # Pd WAVY DASH -FD3E ; Pattern_Syntax # Pe ORNATE LEFT PARENTHESIS -FD3F ; Pattern_Syntax # Ps ORNATE RIGHT PARENTHESIS -FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT - -# Total code points: 2760 - -# ================================================ - -0600..0605 ; Prepended_Concatenation_Mark # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE -06DD ; Prepended_Concatenation_Mark # Cf ARABIC END OF AYAH -070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK -08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH -110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN - -# Total code points: 10 - -# ================================================ - -1F1E6..1F1FF ; Regional_Indicator # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z - -# Total code points: 26 - -# EOF diff --git a/lib-satysfi/unidata/PropertyAliases.txt b/lib-satysfi/unidata/PropertyAliases.txt deleted file mode 100644 index f2e26ba05..000000000 --- a/lib-satysfi/unidata/PropertyAliases.txt +++ /dev/null @@ -1,197 +0,0 @@ -# PropertyAliases-10.0.0.txt -# Date: 2017-02-14, 04:26:16 GMT -# © 2017 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ -# -# This file contains aliases for properties used in the UCD. -# These names can be used for XML formats of UCD data, for regular-expression -# property tests, and other programmatic textual descriptions of Unicode data. -# -# The names may be translated in appropriate environments, and additional -# aliases may be useful. -# -# FORMAT -# -# Each line has two or more fields, separated by semicolons. -# -# First Field: The first field is an abbreviated name for the property. -# -# Second Field: The second field is a long name -# -# The above are the preferred aliases. Other aliases may be listed in additional fields. -# -# Loose matching should be applied to all property names and property values, with -# the exception of String Property values. With loose matching of property names and -# values, the case distinctions, whitespace, and '_' are ignored. For Numeric Property -# values, numeric equivalencies are applied: thus "01.00" is equivalent to "1". -# -# NOTE: Property value names are NOT unique across properties. For example: -# -# AL means Arabic Letter for the Bidi_Class property, and -# AL means Above_Left for the Combining_Class property, and -# AL means Alphabetic for the Line_Break property. -# -# In addition, some property names may be the same as some property value names. -# For example: -# -# sc means the Script property, and -# Sc means the General_Category property value Currency_Symbol (Sc) -# -# The combination of property value and property name is, however, unique. -# -# For more information, see UTS #18: Unicode Regular Expressions -# ================================================ - - -# ================================================ -# Numeric Properties -# ================================================ -cjkAccountingNumeric ; kAccountingNumeric -cjkOtherNumeric ; kOtherNumeric -cjkPrimaryNumeric ; kPrimaryNumeric -nv ; Numeric_Value - -# ================================================ -# String Properties -# ================================================ -cf ; Case_Folding -cjkCompatibilityVariant ; kCompatibilityVariant -dm ; Decomposition_Mapping -FC_NFKC ; FC_NFKC_Closure -lc ; Lowercase_Mapping -NFKC_CF ; NFKC_Casefold -scf ; Simple_Case_Folding ; sfc -slc ; Simple_Lowercase_Mapping -stc ; Simple_Titlecase_Mapping -suc ; Simple_Uppercase_Mapping -tc ; Titlecase_Mapping -uc ; Uppercase_Mapping - -# ================================================ -# Miscellaneous Properties -# ================================================ -bmg ; Bidi_Mirroring_Glyph -bpb ; Bidi_Paired_Bracket -cjkIICore ; kIICore -cjkIRG_GSource ; kIRG_GSource -cjkIRG_HSource ; kIRG_HSource -cjkIRG_JSource ; kIRG_JSource -cjkIRG_KPSource ; kIRG_KPSource -cjkIRG_KSource ; kIRG_KSource -cjkIRG_MSource ; kIRG_MSource -cjkIRG_TSource ; kIRG_TSource -cjkIRG_USource ; kIRG_USource -cjkIRG_VSource ; kIRG_VSource -cjkRSUnicode ; kRSUnicode ; Unicode_Radical_Stroke; URS -isc ; ISO_Comment -JSN ; Jamo_Short_Name -na ; Name -na1 ; Unicode_1_Name -Name_Alias ; Name_Alias -scx ; Script_Extensions - -# ================================================ -# Catalog Properties -# ================================================ -age ; Age -blk ; Block -sc ; Script - -# ================================================ -# Enumerated Properties -# ================================================ -bc ; Bidi_Class -bpt ; Bidi_Paired_Bracket_Type -ccc ; Canonical_Combining_Class -dt ; Decomposition_Type -ea ; East_Asian_Width -gc ; General_Category -GCB ; Grapheme_Cluster_Break -hst ; Hangul_Syllable_Type -InPC ; Indic_Positional_Category -InSC ; Indic_Syllabic_Category -jg ; Joining_Group -jt ; Joining_Type -lb ; Line_Break -NFC_QC ; NFC_Quick_Check -NFD_QC ; NFD_Quick_Check -NFKC_QC ; NFKC_Quick_Check -NFKD_QC ; NFKD_Quick_Check -nt ; Numeric_Type -SB ; Sentence_Break -vo ; Vertical_Orientation -WB ; Word_Break - -# ================================================ -# Binary Properties -# ================================================ -AHex ; ASCII_Hex_Digit -Alpha ; Alphabetic -Bidi_C ; Bidi_Control -Bidi_M ; Bidi_Mirrored -Cased ; Cased -CE ; Composition_Exclusion -CI ; Case_Ignorable -Comp_Ex ; Full_Composition_Exclusion -CWCF ; Changes_When_Casefolded -CWCM ; Changes_When_Casemapped -CWKCF ; Changes_When_NFKC_Casefolded -CWL ; Changes_When_Lowercased -CWT ; Changes_When_Titlecased -CWU ; Changes_When_Uppercased -Dash ; Dash -Dep ; Deprecated -DI ; Default_Ignorable_Code_Point -Dia ; Diacritic -Ext ; Extender -Gr_Base ; Grapheme_Base -Gr_Ext ; Grapheme_Extend -Gr_Link ; Grapheme_Link -Hex ; Hex_Digit -Hyphen ; Hyphen -IDC ; ID_Continue -Ideo ; Ideographic -IDS ; ID_Start -IDSB ; IDS_Binary_Operator -IDST ; IDS_Trinary_Operator -Join_C ; Join_Control -LOE ; Logical_Order_Exception -Lower ; Lowercase -Math ; Math -NChar ; Noncharacter_Code_Point -OAlpha ; Other_Alphabetic -ODI ; Other_Default_Ignorable_Code_Point -OGr_Ext ; Other_Grapheme_Extend -OIDC ; Other_ID_Continue -OIDS ; Other_ID_Start -OLower ; Other_Lowercase -OMath ; Other_Math -OUpper ; Other_Uppercase -Pat_Syn ; Pattern_Syntax -Pat_WS ; Pattern_White_Space -PCM ; Prepended_Concatenation_Mark -QMark ; Quotation_Mark -Radical ; Radical -RI ; Regional_Indicator -SD ; Soft_Dotted -STerm ; Sentence_Terminal -Term ; Terminal_Punctuation -UIdeo ; Unified_Ideograph -Upper ; Uppercase -VS ; Variation_Selector -WSpace ; White_Space ; space -XIDC ; XID_Continue -XIDS ; XID_Start -XO_NFC ; Expands_On_NFC -XO_NFD ; Expands_On_NFD -XO_NFKC ; Expands_On_NFKC -XO_NFKD ; Expands_On_NFKD - -# ================================================ -# Total: 120 - -# EOF diff --git a/lib-satysfi/unidata/PropertyValueAliases.txt b/lib-satysfi/unidata/PropertyValueAliases.txt deleted file mode 100644 index e9b3548ca..000000000 --- a/lib-satysfi/unidata/PropertyValueAliases.txt +++ /dev/null @@ -1,1496 +0,0 @@ -# PropertyValueAliases-10.0.0.txt -# Date: 2017-05-17, 08:45:34 GMT -# © 2017 Unicode®, Inc. -# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# -# Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ -# -# This file contains aliases for property values used in the UCD. -# These names can be used for XML formats of UCD data, for regular-expression -# property tests, and other programmatic textual descriptions of Unicode data. -# -# The names may be translated in appropriate environments, and additional -# aliases may be useful. -# -# FORMAT -# -# Each line describes a property value name. -# This consists of three or more fields, separated by semicolons. -# -# First Field: The first field describes the property for which that -# property value name is used. -# -# Second Field: The second field is an abbreviated name. -# -# Third Field: The third field is a long name. -# -# In the case of ccc, there are 4 fields. The second field is numeric, third -# is abbreviated, and fourth is long. -# -# The above are the preferred aliases. Other aliases may be listed in additional fields. -# -# Loose matching should be applied to all property names and property values, with -# the exception of String Property values. With loose matching of property names and -# values, the case distinctions, whitespace, hyphens, and '_' are ignored. -# For Numeric Property values, numeric equivalence is applied: thus "01.00" -# is equivalent to "1". -# -# NOTE: Property value names are NOT unique across properties. For example: -# -# AL means Arabic Letter for the Bidi_Class property, and -# AL means Above_Left for the Canonical_Combining_Class property, and -# AL means Alphabetic for the Line_Break property. -# -# In addition, some property names may be the same as some property value names. -# For example: -# -# sc means the Script property, and -# Sc means the General_Category property value Currency_Symbol (Sc) -# -# The combination of property value and property name is, however, unique. -# -# For more information, see UTS #18: Unicode Regular Expressions -# ================================================ - - -# ASCII_Hex_Digit (AHex) - -AHex; N ; No ; F ; False -AHex; Y ; Yes ; T ; True - -# Age (age) - -age; 1.1 ; V1_1 -age; 2.0 ; V2_0 -age; 2.1 ; V2_1 -age; 3.0 ; V3_0 -age; 3.1 ; V3_1 -age; 3.2 ; V3_2 -age; 4.0 ; V4_0 -age; 4.1 ; V4_1 -age; 5.0 ; V5_0 -age; 5.1 ; V5_1 -age; 5.2 ; V5_2 -age; 6.0 ; V6_0 -age; 6.1 ; V6_1 -age; 6.2 ; V6_2 -age; 6.3 ; V6_3 -age; 7.0 ; V7_0 -age; 8.0 ; V8_0 -age; 9.0 ; V9_0 -age; 10.0 ; V10_0 -age; NA ; Unassigned - -# Alphabetic (Alpha) - -Alpha; N ; No ; F ; False -Alpha; Y ; Yes ; T ; True - -# Bidi_Class (bc) - -bc ; AL ; Arabic_Letter -bc ; AN ; Arabic_Number -bc ; B ; Paragraph_Separator -bc ; BN ; Boundary_Neutral -bc ; CS ; Common_Separator -bc ; EN ; European_Number -bc ; ES ; European_Separator -bc ; ET ; European_Terminator -bc ; FSI ; First_Strong_Isolate -bc ; L ; Left_To_Right -bc ; LRE ; Left_To_Right_Embedding -bc ; LRI ; Left_To_Right_Isolate -bc ; LRO ; Left_To_Right_Override -bc ; NSM ; Nonspacing_Mark -bc ; ON ; Other_Neutral -bc ; PDF ; Pop_Directional_Format -bc ; PDI ; Pop_Directional_Isolate -bc ; R ; Right_To_Left -bc ; RLE ; Right_To_Left_Embedding -bc ; RLI ; Right_To_Left_Isolate -bc ; RLO ; Right_To_Left_Override -bc ; S ; Segment_Separator -bc ; WS ; White_Space - -# Bidi_Control (Bidi_C) - -Bidi_C; N ; No ; F ; False -Bidi_C; Y ; Yes ; T ; True - -# Bidi_Mirrored (Bidi_M) - -Bidi_M; N ; No ; F ; False -Bidi_M; Y ; Yes ; T ; True - -# Bidi_Mirroring_Glyph (bmg) - -# @missing: 0000..10FFFF; Bidi_Mirroring_Glyph; - -# Bidi_Paired_Bracket (bpb) - -# @missing: 0000..10FFFF; Bidi_Paired_Bracket; - -# Bidi_Paired_Bracket_Type (bpt) - -bpt; c ; Close -bpt; n ; None -bpt; o ; Open -# @missing: 0000..10FFFF; Bidi_Paired_Bracket_Type; n - -# Block (blk) - -blk; Adlam ; Adlam -blk; Aegean_Numbers ; Aegean_Numbers -blk; Ahom ; Ahom -blk; Alchemical ; Alchemical_Symbols -blk; Alphabetic_PF ; Alphabetic_Presentation_Forms -blk; Anatolian_Hieroglyphs ; Anatolian_Hieroglyphs -blk; Ancient_Greek_Music ; Ancient_Greek_Musical_Notation -blk; Ancient_Greek_Numbers ; Ancient_Greek_Numbers -blk; Ancient_Symbols ; Ancient_Symbols -blk; Arabic ; Arabic -blk; Arabic_Ext_A ; Arabic_Extended_A -blk; Arabic_Math ; Arabic_Mathematical_Alphabetic_Symbols -blk; Arabic_PF_A ; Arabic_Presentation_Forms_A ; Arabic_Presentation_Forms-A -blk; Arabic_PF_B ; Arabic_Presentation_Forms_B -blk; Arabic_Sup ; Arabic_Supplement -blk; Armenian ; Armenian -blk; Arrows ; Arrows -blk; ASCII ; Basic_Latin -blk; Avestan ; Avestan -blk; Balinese ; Balinese -blk; Bamum ; Bamum -blk; Bamum_Sup ; Bamum_Supplement -blk; Bassa_Vah ; Bassa_Vah -blk; Batak ; Batak -blk; Bengali ; Bengali -blk; Bhaiksuki ; Bhaiksuki -blk; Block_Elements ; Block_Elements -blk; Bopomofo ; Bopomofo -blk; Bopomofo_Ext ; Bopomofo_Extended -blk; Box_Drawing ; Box_Drawing -blk; Brahmi ; Brahmi -blk; Braille ; Braille_Patterns -blk; Buginese ; Buginese -blk; Buhid ; Buhid -blk; Byzantine_Music ; Byzantine_Musical_Symbols -blk; Carian ; Carian -blk; Caucasian_Albanian ; Caucasian_Albanian -blk; Chakma ; Chakma -blk; Cham ; Cham -blk; Cherokee ; Cherokee -blk; Cherokee_Sup ; Cherokee_Supplement -blk; CJK ; CJK_Unified_Ideographs -blk; CJK_Compat ; CJK_Compatibility -blk; CJK_Compat_Forms ; CJK_Compatibility_Forms -blk; CJK_Compat_Ideographs ; CJK_Compatibility_Ideographs -blk; CJK_Compat_Ideographs_Sup ; CJK_Compatibility_Ideographs_Supplement -blk; CJK_Ext_A ; CJK_Unified_Ideographs_Extension_A -blk; CJK_Ext_B ; CJK_Unified_Ideographs_Extension_B -blk; CJK_Ext_C ; CJK_Unified_Ideographs_Extension_C -blk; CJK_Ext_D ; CJK_Unified_Ideographs_Extension_D -blk; CJK_Ext_E ; CJK_Unified_Ideographs_Extension_E -blk; CJK_Ext_F ; CJK_Unified_Ideographs_Extension_F -blk; CJK_Radicals_Sup ; CJK_Radicals_Supplement -blk; CJK_Strokes ; CJK_Strokes -blk; CJK_Symbols ; CJK_Symbols_And_Punctuation -blk; Compat_Jamo ; Hangul_Compatibility_Jamo -blk; Control_Pictures ; Control_Pictures -blk; Coptic ; Coptic -blk; Coptic_Epact_Numbers ; Coptic_Epact_Numbers -blk; Counting_Rod ; Counting_Rod_Numerals -blk; Cuneiform ; Cuneiform -blk; Cuneiform_Numbers ; Cuneiform_Numbers_And_Punctuation -blk; Currency_Symbols ; Currency_Symbols -blk; Cypriot_Syllabary ; Cypriot_Syllabary -blk; Cyrillic ; Cyrillic -blk; Cyrillic_Ext_A ; Cyrillic_Extended_A -blk; Cyrillic_Ext_B ; Cyrillic_Extended_B -blk; Cyrillic_Ext_C ; Cyrillic_Extended_C -blk; Cyrillic_Sup ; Cyrillic_Supplement ; Cyrillic_Supplementary -blk; Deseret ; Deseret -blk; Devanagari ; Devanagari -blk; Devanagari_Ext ; Devanagari_Extended -blk; Diacriticals ; Combining_Diacritical_Marks -blk; Diacriticals_Ext ; Combining_Diacritical_Marks_Extended -blk; Diacriticals_For_Symbols ; Combining_Diacritical_Marks_For_Symbols; Combining_Marks_For_Symbols -blk; Diacriticals_Sup ; Combining_Diacritical_Marks_Supplement -blk; Dingbats ; Dingbats -blk; Domino ; Domino_Tiles -blk; Duployan ; Duployan -blk; Early_Dynastic_Cuneiform ; Early_Dynastic_Cuneiform -blk; Egyptian_Hieroglyphs ; Egyptian_Hieroglyphs -blk; Elbasan ; Elbasan -blk; Emoticons ; Emoticons -blk; Enclosed_Alphanum ; Enclosed_Alphanumerics -blk; Enclosed_Alphanum_Sup ; Enclosed_Alphanumeric_Supplement -blk; Enclosed_CJK ; Enclosed_CJK_Letters_And_Months -blk; Enclosed_Ideographic_Sup ; Enclosed_Ideographic_Supplement -blk; Ethiopic ; Ethiopic -blk; Ethiopic_Ext ; Ethiopic_Extended -blk; Ethiopic_Ext_A ; Ethiopic_Extended_A -blk; Ethiopic_Sup ; Ethiopic_Supplement -blk; Geometric_Shapes ; Geometric_Shapes -blk; Geometric_Shapes_Ext ; Geometric_Shapes_Extended -blk; Georgian ; Georgian -blk; Georgian_Sup ; Georgian_Supplement -blk; Glagolitic ; Glagolitic -blk; Glagolitic_Sup ; Glagolitic_Supplement -blk; Gothic ; Gothic -blk; Grantha ; Grantha -blk; Greek ; Greek_And_Coptic -blk; Greek_Ext ; Greek_Extended -blk; Gujarati ; Gujarati -blk; Gurmukhi ; Gurmukhi -blk; Half_And_Full_Forms ; Halfwidth_And_Fullwidth_Forms -blk; Half_Marks ; Combining_Half_Marks -blk; Hangul ; Hangul_Syllables -blk; Hanunoo ; Hanunoo -blk; Hatran ; Hatran -blk; Hebrew ; Hebrew -blk; High_PU_Surrogates ; High_Private_Use_Surrogates -blk; High_Surrogates ; High_Surrogates -blk; Hiragana ; Hiragana -blk; IDC ; Ideographic_Description_Characters -blk; Ideographic_Symbols ; Ideographic_Symbols_And_Punctuation -blk; Imperial_Aramaic ; Imperial_Aramaic -blk; Indic_Number_Forms ; Common_Indic_Number_Forms -blk; Inscriptional_Pahlavi ; Inscriptional_Pahlavi -blk; Inscriptional_Parthian ; Inscriptional_Parthian -blk; IPA_Ext ; IPA_Extensions -blk; Jamo ; Hangul_Jamo -blk; Jamo_Ext_A ; Hangul_Jamo_Extended_A -blk; Jamo_Ext_B ; Hangul_Jamo_Extended_B -blk; Javanese ; Javanese -blk; Kaithi ; Kaithi -blk; Kana_Ext_A ; Kana_Extended_A -blk; Kana_Sup ; Kana_Supplement -blk; Kanbun ; Kanbun -blk; Kangxi ; Kangxi_Radicals -blk; Kannada ; Kannada -blk; Katakana ; Katakana -blk; Katakana_Ext ; Katakana_Phonetic_Extensions -blk; Kayah_Li ; Kayah_Li -blk; Kharoshthi ; Kharoshthi -blk; Khmer ; Khmer -blk; Khmer_Symbols ; Khmer_Symbols -blk; Khojki ; Khojki -blk; Khudawadi ; Khudawadi -blk; Lao ; Lao -blk; Latin_1_Sup ; Latin_1_Supplement ; Latin_1 -blk; Latin_Ext_A ; Latin_Extended_A -blk; Latin_Ext_Additional ; Latin_Extended_Additional -blk; Latin_Ext_B ; Latin_Extended_B -blk; Latin_Ext_C ; Latin_Extended_C -blk; Latin_Ext_D ; Latin_Extended_D -blk; Latin_Ext_E ; Latin_Extended_E -blk; Lepcha ; Lepcha -blk; Letterlike_Symbols ; Letterlike_Symbols -blk; Limbu ; Limbu -blk; Linear_A ; Linear_A -blk; Linear_B_Ideograms ; Linear_B_Ideograms -blk; Linear_B_Syllabary ; Linear_B_Syllabary -blk; Lisu ; Lisu -blk; Low_Surrogates ; Low_Surrogates -blk; Lycian ; Lycian -blk; Lydian ; Lydian -blk; Mahajani ; Mahajani -blk; Mahjong ; Mahjong_Tiles -blk; Malayalam ; Malayalam -blk; Mandaic ; Mandaic -blk; Manichaean ; Manichaean -blk; Marchen ; Marchen -blk; Masaram_Gondi ; Masaram_Gondi -blk; Math_Alphanum ; Mathematical_Alphanumeric_Symbols -blk; Math_Operators ; Mathematical_Operators -blk; Meetei_Mayek ; Meetei_Mayek -blk; Meetei_Mayek_Ext ; Meetei_Mayek_Extensions -blk; Mende_Kikakui ; Mende_Kikakui -blk; Meroitic_Cursive ; Meroitic_Cursive -blk; Meroitic_Hieroglyphs ; Meroitic_Hieroglyphs -blk; Miao ; Miao -blk; Misc_Arrows ; Miscellaneous_Symbols_And_Arrows -blk; Misc_Math_Symbols_A ; Miscellaneous_Mathematical_Symbols_A -blk; Misc_Math_Symbols_B ; Miscellaneous_Mathematical_Symbols_B -blk; Misc_Pictographs ; Miscellaneous_Symbols_And_Pictographs -blk; Misc_Symbols ; Miscellaneous_Symbols -blk; Misc_Technical ; Miscellaneous_Technical -blk; Modi ; Modi -blk; Modifier_Letters ; Spacing_Modifier_Letters -blk; Modifier_Tone_Letters ; Modifier_Tone_Letters -blk; Mongolian ; Mongolian -blk; Mongolian_Sup ; Mongolian_Supplement -blk; Mro ; Mro -blk; Multani ; Multani -blk; Music ; Musical_Symbols -blk; Myanmar ; Myanmar -blk; Myanmar_Ext_A ; Myanmar_Extended_A -blk; Myanmar_Ext_B ; Myanmar_Extended_B -blk; Nabataean ; Nabataean -blk; NB ; No_Block -blk; New_Tai_Lue ; New_Tai_Lue -blk; Newa ; Newa -blk; NKo ; NKo -blk; Number_Forms ; Number_Forms -blk; Nushu ; Nushu -blk; OCR ; Optical_Character_Recognition -blk; Ogham ; Ogham -blk; Ol_Chiki ; Ol_Chiki -blk; Old_Hungarian ; Old_Hungarian -blk; Old_Italic ; Old_Italic -blk; Old_North_Arabian ; Old_North_Arabian -blk; Old_Permic ; Old_Permic -blk; Old_Persian ; Old_Persian -blk; Old_South_Arabian ; Old_South_Arabian -blk; Old_Turkic ; Old_Turkic -blk; Oriya ; Oriya -blk; Ornamental_Dingbats ; Ornamental_Dingbats -blk; Osage ; Osage -blk; Osmanya ; Osmanya -blk; Pahawh_Hmong ; Pahawh_Hmong -blk; Palmyrene ; Palmyrene -blk; Pau_Cin_Hau ; Pau_Cin_Hau -blk; Phags_Pa ; Phags_Pa -blk; Phaistos ; Phaistos_Disc -blk; Phoenician ; Phoenician -blk; Phonetic_Ext ; Phonetic_Extensions -blk; Phonetic_Ext_Sup ; Phonetic_Extensions_Supplement -blk; Playing_Cards ; Playing_Cards -blk; Psalter_Pahlavi ; Psalter_Pahlavi -blk; PUA ; Private_Use_Area ; Private_Use -blk; Punctuation ; General_Punctuation -blk; Rejang ; Rejang -blk; Rumi ; Rumi_Numeral_Symbols -blk; Runic ; Runic -blk; Samaritan ; Samaritan -blk; Saurashtra ; Saurashtra -blk; Sharada ; Sharada -blk; Shavian ; Shavian -blk; Shorthand_Format_Controls ; Shorthand_Format_Controls -blk; Siddham ; Siddham -blk; Sinhala ; Sinhala -blk; Sinhala_Archaic_Numbers ; Sinhala_Archaic_Numbers -blk; Small_Forms ; Small_Form_Variants -blk; Sora_Sompeng ; Sora_Sompeng -blk; Soyombo ; Soyombo -blk; Specials ; Specials -blk; Sundanese ; Sundanese -blk; Sundanese_Sup ; Sundanese_Supplement -blk; Sup_Arrows_A ; Supplemental_Arrows_A -blk; Sup_Arrows_B ; Supplemental_Arrows_B -blk; Sup_Arrows_C ; Supplemental_Arrows_C -blk; Sup_Math_Operators ; Supplemental_Mathematical_Operators -blk; Sup_PUA_A ; Supplementary_Private_Use_Area_A -blk; Sup_PUA_B ; Supplementary_Private_Use_Area_B -blk; Sup_Punctuation ; Supplemental_Punctuation -blk; Sup_Symbols_And_Pictographs ; Supplemental_Symbols_And_Pictographs -blk; Super_And_Sub ; Superscripts_And_Subscripts -blk; Sutton_SignWriting ; Sutton_SignWriting -blk; Syloti_Nagri ; Syloti_Nagri -blk; Syriac ; Syriac -blk; Syriac_Sup ; Syriac_Supplement -blk; Tagalog ; Tagalog -blk; Tagbanwa ; Tagbanwa -blk; Tags ; Tags -blk; Tai_Le ; Tai_Le -blk; Tai_Tham ; Tai_Tham -blk; Tai_Viet ; Tai_Viet -blk; Tai_Xuan_Jing ; Tai_Xuan_Jing_Symbols -blk; Takri ; Takri -blk; Tamil ; Tamil -blk; Tangut ; Tangut -blk; Tangut_Components ; Tangut_Components -blk; Telugu ; Telugu -blk; Thaana ; Thaana -blk; Thai ; Thai -blk; Tibetan ; Tibetan -blk; Tifinagh ; Tifinagh -blk; Tirhuta ; Tirhuta -blk; Transport_And_Map ; Transport_And_Map_Symbols -blk; UCAS ; Unified_Canadian_Aboriginal_Syllabics; Canadian_Syllabics -blk; UCAS_Ext ; Unified_Canadian_Aboriginal_Syllabics_Extended -blk; Ugaritic ; Ugaritic -blk; Vai ; Vai -blk; Vedic_Ext ; Vedic_Extensions -blk; Vertical_Forms ; Vertical_Forms -blk; VS ; Variation_Selectors -blk; VS_Sup ; Variation_Selectors_Supplement -blk; Warang_Citi ; Warang_Citi -blk; Yi_Radicals ; Yi_Radicals -blk; Yi_Syllables ; Yi_Syllables -blk; Yijing ; Yijing_Hexagram_Symbols -blk; Zanabazar_Square ; Zanabazar_Square - -# Canonical_Combining_Class (ccc) - -ccc; 0; NR ; Not_Reordered -ccc; 1; OV ; Overlay -ccc; 7; NK ; Nukta -ccc; 8; KV ; Kana_Voicing -ccc; 9; VR ; Virama -ccc; 10; CCC10 ; CCC10 -ccc; 11; CCC11 ; CCC11 -ccc; 12; CCC12 ; CCC12 -ccc; 13; CCC13 ; CCC13 -ccc; 14; CCC14 ; CCC14 -ccc; 15; CCC15 ; CCC15 -ccc; 16; CCC16 ; CCC16 -ccc; 17; CCC17 ; CCC17 -ccc; 18; CCC18 ; CCC18 -ccc; 19; CCC19 ; CCC19 -ccc; 20; CCC20 ; CCC20 -ccc; 21; CCC21 ; CCC21 -ccc; 22; CCC22 ; CCC22 -ccc; 23; CCC23 ; CCC23 -ccc; 24; CCC24 ; CCC24 -ccc; 25; CCC25 ; CCC25 -ccc; 26; CCC26 ; CCC26 -ccc; 27; CCC27 ; CCC27 -ccc; 28; CCC28 ; CCC28 -ccc; 29; CCC29 ; CCC29 -ccc; 30; CCC30 ; CCC30 -ccc; 31; CCC31 ; CCC31 -ccc; 32; CCC32 ; CCC32 -ccc; 33; CCC33 ; CCC33 -ccc; 34; CCC34 ; CCC34 -ccc; 35; CCC35 ; CCC35 -ccc; 36; CCC36 ; CCC36 -ccc; 84; CCC84 ; CCC84 -ccc; 91; CCC91 ; CCC91 -ccc; 103; CCC103 ; CCC103 -ccc; 107; CCC107 ; CCC107 -ccc; 118; CCC118 ; CCC118 -ccc; 122; CCC122 ; CCC122 -ccc; 129; CCC129 ; CCC129 -ccc; 130; CCC130 ; CCC130 -ccc; 132; CCC132 ; CCC132 -ccc; 133; CCC133 ; CCC133 # RESERVED -ccc; 200; ATBL ; Attached_Below_Left -ccc; 202; ATB ; Attached_Below -ccc; 214; ATA ; Attached_Above -ccc; 216; ATAR ; Attached_Above_Right -ccc; 218; BL ; Below_Left -ccc; 220; B ; Below -ccc; 222; BR ; Below_Right -ccc; 224; L ; Left -ccc; 226; R ; Right -ccc; 228; AL ; Above_Left -ccc; 230; A ; Above -ccc; 232; AR ; Above_Right -ccc; 233; DB ; Double_Below -ccc; 234; DA ; Double_Above -ccc; 240; IS ; Iota_Subscript - -# Case_Folding (cf) - -# @missing: 0000..10FFFF; Case_Folding; - -# Case_Ignorable (CI) - -CI ; N ; No ; F ; False -CI ; Y ; Yes ; T ; True - -# Cased (Cased) - -Cased; N ; No ; F ; False -Cased; Y ; Yes ; T ; True - -# Changes_When_Casefolded (CWCF) - -CWCF; N ; No ; F ; False -CWCF; Y ; Yes ; T ; True - -# Changes_When_Casemapped (CWCM) - -CWCM; N ; No ; F ; False -CWCM; Y ; Yes ; T ; True - -# Changes_When_Lowercased (CWL) - -CWL; N ; No ; F ; False -CWL; Y ; Yes ; T ; True - -# Changes_When_NFKC_Casefolded (CWKCF) - -CWKCF; N ; No ; F ; False -CWKCF; Y ; Yes ; T ; True - -# Changes_When_Titlecased (CWT) - -CWT; N ; No ; F ; False -CWT; Y ; Yes ; T ; True - -# Changes_When_Uppercased (CWU) - -CWU; N ; No ; F ; False -CWU; Y ; Yes ; T ; True - -# Composition_Exclusion (CE) - -CE ; N ; No ; F ; False -CE ; Y ; Yes ; T ; True - -# Dash (Dash) - -Dash; N ; No ; F ; False -Dash; Y ; Yes ; T ; True - -# Decomposition_Mapping (dm) - -# @missing: 0000..10FFFF; Decomposition_Mapping; - -# Decomposition_Type (dt) - -dt ; Can ; Canonical ; can -dt ; Com ; Compat ; com -dt ; Enc ; Circle ; enc -dt ; Fin ; Final ; fin -dt ; Font ; Font ; font -dt ; Fra ; Fraction ; fra -dt ; Init ; Initial ; init -dt ; Iso ; Isolated ; iso -dt ; Med ; Medial ; med -dt ; Nar ; Narrow ; nar -dt ; Nb ; Nobreak ; nb -dt ; None ; None ; none -dt ; Sml ; Small ; sml -dt ; Sqr ; Square ; sqr -dt ; Sub ; Sub ; sub -dt ; Sup ; Super ; sup -dt ; Vert ; Vertical ; vert -dt ; Wide ; Wide ; wide - -# Default_Ignorable_Code_Point (DI) - -DI ; N ; No ; F ; False -DI ; Y ; Yes ; T ; True - -# Deprecated (Dep) - -Dep; N ; No ; F ; False -Dep; Y ; Yes ; T ; True - -# Diacritic (Dia) - -Dia; N ; No ; F ; False -Dia; Y ; Yes ; T ; True - -# East_Asian_Width (ea) - -ea ; A ; Ambiguous -ea ; F ; Fullwidth -ea ; H ; Halfwidth -ea ; N ; Neutral -ea ; Na ; Narrow -ea ; W ; Wide - -# Expands_On_NFC (XO_NFC) - -XO_NFC; N ; No ; F ; False -XO_NFC; Y ; Yes ; T ; True - -# Expands_On_NFD (XO_NFD) - -XO_NFD; N ; No ; F ; False -XO_NFD; Y ; Yes ; T ; True - -# Expands_On_NFKC (XO_NFKC) - -XO_NFKC; N ; No ; F ; False -XO_NFKC; Y ; Yes ; T ; True - -# Expands_On_NFKD (XO_NFKD) - -XO_NFKD; N ; No ; F ; False -XO_NFKD; Y ; Yes ; T ; True - -# Extender (Ext) - -Ext; N ; No ; F ; False -Ext; Y ; Yes ; T ; True - -# FC_NFKC_Closure (FC_NFKC) - -# @missing: 0000..10FFFF; FC_NFKC_Closure; - -# Full_Composition_Exclusion (Comp_Ex) - -Comp_Ex; N ; No ; F ; False -Comp_Ex; Y ; Yes ; T ; True - -# General_Category (gc) - -gc ; C ; Other # Cc | Cf | Cn | Co | Cs -gc ; Cc ; Control ; cntrl -gc ; Cf ; Format -gc ; Cn ; Unassigned -gc ; Co ; Private_Use -gc ; Cs ; Surrogate -gc ; L ; Letter # Ll | Lm | Lo | Lt | Lu -gc ; LC ; Cased_Letter # Ll | Lt | Lu -gc ; Ll ; Lowercase_Letter -gc ; Lm ; Modifier_Letter -gc ; Lo ; Other_Letter -gc ; Lt ; Titlecase_Letter -gc ; Lu ; Uppercase_Letter -gc ; M ; Mark ; Combining_Mark # Mc | Me | Mn -gc ; Mc ; Spacing_Mark -gc ; Me ; Enclosing_Mark -gc ; Mn ; Nonspacing_Mark -gc ; N ; Number # Nd | Nl | No -gc ; Nd ; Decimal_Number ; digit -gc ; Nl ; Letter_Number -gc ; No ; Other_Number -gc ; P ; Punctuation ; punct # Pc | Pd | Pe | Pf | Pi | Po | Ps -gc ; Pc ; Connector_Punctuation -gc ; Pd ; Dash_Punctuation -gc ; Pe ; Close_Punctuation -gc ; Pf ; Final_Punctuation -gc ; Pi ; Initial_Punctuation -gc ; Po ; Other_Punctuation -gc ; Ps ; Open_Punctuation -gc ; S ; Symbol # Sc | Sk | Sm | So -gc ; Sc ; Currency_Symbol -gc ; Sk ; Modifier_Symbol -gc ; Sm ; Math_Symbol -gc ; So ; Other_Symbol -gc ; Z ; Separator # Zl | Zp | Zs -gc ; Zl ; Line_Separator -gc ; Zp ; Paragraph_Separator -gc ; Zs ; Space_Separator -# @missing: 0000..10FFFF; General_Category; Unassigned - -# Grapheme_Base (Gr_Base) - -Gr_Base; N ; No ; F ; False -Gr_Base; Y ; Yes ; T ; True - -# Grapheme_Cluster_Break (GCB) - -GCB; CN ; Control -GCB; CR ; CR -GCB; EB ; E_Base -GCB; EBG ; E_Base_GAZ -GCB; EM ; E_Modifier -GCB; EX ; Extend -GCB; GAZ ; Glue_After_Zwj -GCB; L ; L -GCB; LF ; LF -GCB; LV ; LV -GCB; LVT ; LVT -GCB; PP ; Prepend -GCB; RI ; Regional_Indicator -GCB; SM ; SpacingMark -GCB; T ; T -GCB; V ; V -GCB; XX ; Other -GCB; ZWJ ; ZWJ - -# Grapheme_Extend (Gr_Ext) - -Gr_Ext; N ; No ; F ; False -Gr_Ext; Y ; Yes ; T ; True - -# Grapheme_Link (Gr_Link) - -Gr_Link; N ; No ; F ; False -Gr_Link; Y ; Yes ; T ; True - -# Hangul_Syllable_Type (hst) - -hst; L ; Leading_Jamo -hst; LV ; LV_Syllable -hst; LVT ; LVT_Syllable -hst; NA ; Not_Applicable -hst; T ; Trailing_Jamo -hst; V ; Vowel_Jamo - -# Hex_Digit (Hex) - -Hex; N ; No ; F ; False -Hex; Y ; Yes ; T ; True - -# Hyphen (Hyphen) - -Hyphen; N ; No ; F ; False -Hyphen; Y ; Yes ; T ; True - -# IDS_Binary_Operator (IDSB) - -IDSB; N ; No ; F ; False -IDSB; Y ; Yes ; T ; True - -# IDS_Trinary_Operator (IDST) - -IDST; N ; No ; F ; False -IDST; Y ; Yes ; T ; True - -# ID_Continue (IDC) - -IDC; N ; No ; F ; False -IDC; Y ; Yes ; T ; True - -# ID_Start (IDS) - -IDS; N ; No ; F ; False -IDS; Y ; Yes ; T ; True - -# ISO_Comment (isc) - -# @missing: 0000..10FFFF; ISO_Comment; - -# Ideographic (Ideo) - -Ideo; N ; No ; F ; False -Ideo; Y ; Yes ; T ; True - -# Indic_Positional_Category (InPC) - -InPC; Bottom ; Bottom -InPC; Bottom_And_Left ; Bottom_And_Left -InPC; Bottom_And_Right ; Bottom_And_Right -InPC; Left ; Left -InPC; Left_And_Right ; Left_And_Right -InPC; NA ; NA -InPC; Overstruck ; Overstruck -InPC; Right ; Right -InPC; Top ; Top -InPC; Top_And_Bottom ; Top_And_Bottom -InPC; Top_And_Bottom_And_Right ; Top_And_Bottom_And_Right -InPC; Top_And_Left ; Top_And_Left -InPC; Top_And_Left_And_Right ; Top_And_Left_And_Right -InPC; Top_And_Right ; Top_And_Right -InPC; Visual_Order_Left ; Visual_Order_Left - -# Indic_Syllabic_Category (InSC) - -InSC; Avagraha ; Avagraha -InSC; Bindu ; Bindu -InSC; Brahmi_Joining_Number ; Brahmi_Joining_Number -InSC; Cantillation_Mark ; Cantillation_Mark -InSC; Consonant ; Consonant -InSC; Consonant_Dead ; Consonant_Dead -InSC; Consonant_Final ; Consonant_Final -InSC; Consonant_Head_Letter ; Consonant_Head_Letter -InSC; Consonant_Killer ; Consonant_Killer -InSC; Consonant_Medial ; Consonant_Medial -InSC; Consonant_Placeholder ; Consonant_Placeholder -InSC; Consonant_Preceding_Repha ; Consonant_Preceding_Repha -InSC; Consonant_Prefixed ; Consonant_Prefixed -InSC; Consonant_Subjoined ; Consonant_Subjoined -InSC; Consonant_Succeeding_Repha ; Consonant_Succeeding_Repha -InSC; Consonant_With_Stacker ; Consonant_With_Stacker -InSC; Gemination_Mark ; Gemination_Mark -InSC; Invisible_Stacker ; Invisible_Stacker -InSC; Joiner ; Joiner -InSC; Modifying_Letter ; Modifying_Letter -InSC; Non_Joiner ; Non_Joiner -InSC; Nukta ; Nukta -InSC; Number ; Number -InSC; Number_Joiner ; Number_Joiner -InSC; Other ; Other -InSC; Pure_Killer ; Pure_Killer -InSC; Register_Shifter ; Register_Shifter -InSC; Syllable_Modifier ; Syllable_Modifier -InSC; Tone_Letter ; Tone_Letter -InSC; Tone_Mark ; Tone_Mark -InSC; Virama ; Virama -InSC; Visarga ; Visarga -InSC; Vowel ; Vowel -InSC; Vowel_Dependent ; Vowel_Dependent -InSC; Vowel_Independent ; Vowel_Independent - -# Jamo_Short_Name (JSN) - -JSN; A ; A -JSN; AE ; AE -JSN; B ; B -JSN; BB ; BB -JSN; BS ; BS -JSN; C ; C -JSN; D ; D -JSN; DD ; DD -JSN; E ; E -JSN; EO ; EO -JSN; EU ; EU -JSN; G ; G -JSN; GG ; GG -JSN; GS ; GS -JSN; H ; H -JSN; I ; I -JSN; J ; J -JSN; JJ ; JJ -JSN; K ; K -JSN; L ; L -JSN; LB ; LB -JSN; LG ; LG -JSN; LH ; LH -JSN; LM ; LM -JSN; LP ; LP -JSN; LS ; LS -JSN; LT ; LT -JSN; M ; M -JSN; N ; N -JSN; NG ; NG -JSN; NH ; NH -JSN; NJ ; NJ -JSN; O ; O -JSN; OE ; OE -JSN; P ; P -JSN; R ; R -JSN; S ; S -JSN; SS ; SS -JSN; T ; T -JSN; U ; U -JSN; WA ; WA -JSN; WAE ; WAE -JSN; WE ; WE -JSN; WEO ; WEO -JSN; WI ; WI -JSN; YA ; YA -JSN; YAE ; YAE -JSN; YE ; YE -JSN; YEO ; YEO -JSN; YI ; YI -JSN; YO ; YO -JSN; YU ; YU -# @missing: 0000..10FFFF; Jamo_Short_Name; - -# Join_Control (Join_C) - -Join_C; N ; No ; F ; False -Join_C; Y ; Yes ; T ; True - -# Joining_Group (jg) - -jg ; African_Feh ; African_Feh -jg ; African_Noon ; African_Noon -jg ; African_Qaf ; African_Qaf -jg ; Ain ; Ain -jg ; Alaph ; Alaph -jg ; Alef ; Alef -jg ; Beh ; Beh -jg ; Beth ; Beth -jg ; Burushaski_Yeh_Barree ; Burushaski_Yeh_Barree -jg ; Dal ; Dal -jg ; Dalath_Rish ; Dalath_Rish -jg ; E ; E -jg ; Farsi_Yeh ; Farsi_Yeh -jg ; Fe ; Fe -jg ; Feh ; Feh -jg ; Final_Semkath ; Final_Semkath -jg ; Gaf ; Gaf -jg ; Gamal ; Gamal -jg ; Hah ; Hah -jg ; He ; He -jg ; Heh ; Heh -jg ; Heh_Goal ; Heh_Goal -jg ; Heth ; Heth -jg ; Kaf ; Kaf -jg ; Kaph ; Kaph -jg ; Khaph ; Khaph -jg ; Knotted_Heh ; Knotted_Heh -jg ; Lam ; Lam -jg ; Lamadh ; Lamadh -jg ; Malayalam_Bha ; Malayalam_Bha -jg ; Malayalam_Ja ; Malayalam_Ja -jg ; Malayalam_Lla ; Malayalam_Lla -jg ; Malayalam_Llla ; Malayalam_Llla -jg ; Malayalam_Nga ; Malayalam_Nga -jg ; Malayalam_Nna ; Malayalam_Nna -jg ; Malayalam_Nnna ; Malayalam_Nnna -jg ; Malayalam_Nya ; Malayalam_Nya -jg ; Malayalam_Ra ; Malayalam_Ra -jg ; Malayalam_Ssa ; Malayalam_Ssa -jg ; Malayalam_Tta ; Malayalam_Tta -jg ; Manichaean_Aleph ; Manichaean_Aleph -jg ; Manichaean_Ayin ; Manichaean_Ayin -jg ; Manichaean_Beth ; Manichaean_Beth -jg ; Manichaean_Daleth ; Manichaean_Daleth -jg ; Manichaean_Dhamedh ; Manichaean_Dhamedh -jg ; Manichaean_Five ; Manichaean_Five -jg ; Manichaean_Gimel ; Manichaean_Gimel -jg ; Manichaean_Heth ; Manichaean_Heth -jg ; Manichaean_Hundred ; Manichaean_Hundred -jg ; Manichaean_Kaph ; Manichaean_Kaph -jg ; Manichaean_Lamedh ; Manichaean_Lamedh -jg ; Manichaean_Mem ; Manichaean_Mem -jg ; Manichaean_Nun ; Manichaean_Nun -jg ; Manichaean_One ; Manichaean_One -jg ; Manichaean_Pe ; Manichaean_Pe -jg ; Manichaean_Qoph ; Manichaean_Qoph -jg ; Manichaean_Resh ; Manichaean_Resh -jg ; Manichaean_Sadhe ; Manichaean_Sadhe -jg ; Manichaean_Samekh ; Manichaean_Samekh -jg ; Manichaean_Taw ; Manichaean_Taw -jg ; Manichaean_Ten ; Manichaean_Ten -jg ; Manichaean_Teth ; Manichaean_Teth -jg ; Manichaean_Thamedh ; Manichaean_Thamedh -jg ; Manichaean_Twenty ; Manichaean_Twenty -jg ; Manichaean_Waw ; Manichaean_Waw -jg ; Manichaean_Yodh ; Manichaean_Yodh -jg ; Manichaean_Zayin ; Manichaean_Zayin -jg ; Meem ; Meem -jg ; Mim ; Mim -jg ; No_Joining_Group ; No_Joining_Group -jg ; Noon ; Noon -jg ; Nun ; Nun -jg ; Nya ; Nya -jg ; Pe ; Pe -jg ; Qaf ; Qaf -jg ; Qaph ; Qaph -jg ; Reh ; Reh -jg ; Reversed_Pe ; Reversed_Pe -jg ; Rohingya_Yeh ; Rohingya_Yeh -jg ; Sad ; Sad -jg ; Sadhe ; Sadhe -jg ; Seen ; Seen -jg ; Semkath ; Semkath -jg ; Shin ; Shin -jg ; Straight_Waw ; Straight_Waw -jg ; Swash_Kaf ; Swash_Kaf -jg ; Syriac_Waw ; Syriac_Waw -jg ; Tah ; Tah -jg ; Taw ; Taw -jg ; Teh_Marbuta ; Teh_Marbuta -jg ; Teh_Marbuta_Goal ; Hamza_On_Heh_Goal -jg ; Teth ; Teth -jg ; Waw ; Waw -jg ; Yeh ; Yeh -jg ; Yeh_Barree ; Yeh_Barree -jg ; Yeh_With_Tail ; Yeh_With_Tail -jg ; Yudh ; Yudh -jg ; Yudh_He ; Yudh_He -jg ; Zain ; Zain -jg ; Zhain ; Zhain - -# Joining_Type (jt) - -jt ; C ; Join_Causing -jt ; D ; Dual_Joining -jt ; L ; Left_Joining -jt ; R ; Right_Joining -jt ; T ; Transparent -jt ; U ; Non_Joining - -# Line_Break (lb) - -lb ; AI ; Ambiguous -lb ; AL ; Alphabetic -lb ; B2 ; Break_Both -lb ; BA ; Break_After -lb ; BB ; Break_Before -lb ; BK ; Mandatory_Break -lb ; CB ; Contingent_Break -lb ; CJ ; Conditional_Japanese_Starter -lb ; CL ; Close_Punctuation -lb ; CM ; Combining_Mark -lb ; CP ; Close_Parenthesis -lb ; CR ; Carriage_Return -lb ; EB ; E_Base -lb ; EM ; E_Modifier -lb ; EX ; Exclamation -lb ; GL ; Glue -lb ; H2 ; H2 -lb ; H3 ; H3 -lb ; HL ; Hebrew_Letter -lb ; HY ; Hyphen -lb ; ID ; Ideographic -lb ; IN ; Inseparable ; Inseperable -lb ; IS ; Infix_Numeric -lb ; JL ; JL -lb ; JT ; JT -lb ; JV ; JV -lb ; LF ; Line_Feed -lb ; NL ; Next_Line -lb ; NS ; Nonstarter -lb ; NU ; Numeric -lb ; OP ; Open_Punctuation -lb ; PO ; Postfix_Numeric -lb ; PR ; Prefix_Numeric -lb ; QU ; Quotation -lb ; RI ; Regional_Indicator -lb ; SA ; Complex_Context -lb ; SG ; Surrogate -lb ; SP ; Space -lb ; SY ; Break_Symbols -lb ; WJ ; Word_Joiner -lb ; XX ; Unknown -lb ; ZW ; ZWSpace -lb ; ZWJ ; ZWJ - -# Logical_Order_Exception (LOE) - -LOE; N ; No ; F ; False -LOE; Y ; Yes ; T ; True - -# Lowercase (Lower) - -Lower; N ; No ; F ; False -Lower; Y ; Yes ; T ; True - -# Lowercase_Mapping (lc) - -# @missing: 0000..10FFFF; Lowercase_Mapping; - -# Math (Math) - -Math; N ; No ; F ; False -Math; Y ; Yes ; T ; True - -# NFC_Quick_Check (NFC_QC) - -NFC_QC; M ; Maybe -NFC_QC; N ; No -NFC_QC; Y ; Yes - -# NFD_Quick_Check (NFD_QC) - -NFD_QC; N ; No -NFD_QC; Y ; Yes - -# NFKC_Casefold (NFKC_CF) - -# @missing: 0000..10FFFF; NFKC_Casefold; - -# NFKC_Quick_Check (NFKC_QC) - -NFKC_QC; M ; Maybe -NFKC_QC; N ; No -NFKC_QC; Y ; Yes - -# NFKD_Quick_Check (NFKD_QC) - -NFKD_QC; N ; No -NFKD_QC; Y ; Yes - -# Name (na) - -# @missing: 0000..10FFFF; Name; - -# Name_Alias (Name_Alias) - -# @missing: 0000..10FFFF; Name_Alias; - -# Noncharacter_Code_Point (NChar) - -NChar; N ; No ; F ; False -NChar; Y ; Yes ; T ; True - -# Numeric_Type (nt) - -nt ; De ; Decimal -nt ; Di ; Digit -nt ; None ; None -nt ; Nu ; Numeric - -# Numeric_Value (nv) - -# @missing: 0000..10FFFF; Numeric_Value; NaN - -# Other_Alphabetic (OAlpha) - -OAlpha; N ; No ; F ; False -OAlpha; Y ; Yes ; T ; True - -# Other_Default_Ignorable_Code_Point (ODI) - -ODI; N ; No ; F ; False -ODI; Y ; Yes ; T ; True - -# Other_Grapheme_Extend (OGr_Ext) - -OGr_Ext; N ; No ; F ; False -OGr_Ext; Y ; Yes ; T ; True - -# Other_ID_Continue (OIDC) - -OIDC; N ; No ; F ; False -OIDC; Y ; Yes ; T ; True - -# Other_ID_Start (OIDS) - -OIDS; N ; No ; F ; False -OIDS; Y ; Yes ; T ; True - -# Other_Lowercase (OLower) - -OLower; N ; No ; F ; False -OLower; Y ; Yes ; T ; True - -# Other_Math (OMath) - -OMath; N ; No ; F ; False -OMath; Y ; Yes ; T ; True - -# Other_Uppercase (OUpper) - -OUpper; N ; No ; F ; False -OUpper; Y ; Yes ; T ; True - -# Pattern_Syntax (Pat_Syn) - -Pat_Syn; N ; No ; F ; False -Pat_Syn; Y ; Yes ; T ; True - -# Pattern_White_Space (Pat_WS) - -Pat_WS; N ; No ; F ; False -Pat_WS; Y ; Yes ; T ; True - -# Prepended_Concatenation_Mark (PCM) - -PCM; N ; No ; F ; False -PCM; Y ; Yes ; T ; True - -# Quotation_Mark (QMark) - -QMark; N ; No ; F ; False -QMark; Y ; Yes ; T ; True - -# Radical (Radical) - -Radical; N ; No ; F ; False -Radical; Y ; Yes ; T ; True - -# Regional_Indicator (RI) - -RI ; N ; No ; F ; False -RI ; Y ; Yes ; T ; True - -# Script (sc) - -sc ; Adlm ; Adlam -sc ; Aghb ; Caucasian_Albanian -sc ; Ahom ; Ahom -sc ; Arab ; Arabic -sc ; Armi ; Imperial_Aramaic -sc ; Armn ; Armenian -sc ; Avst ; Avestan -sc ; Bali ; Balinese -sc ; Bamu ; Bamum -sc ; Bass ; Bassa_Vah -sc ; Batk ; Batak -sc ; Beng ; Bengali -sc ; Bhks ; Bhaiksuki -sc ; Bopo ; Bopomofo -sc ; Brah ; Brahmi -sc ; Brai ; Braille -sc ; Bugi ; Buginese -sc ; Buhd ; Buhid -sc ; Cakm ; Chakma -sc ; Cans ; Canadian_Aboriginal -sc ; Cari ; Carian -sc ; Cham ; Cham -sc ; Cher ; Cherokee -sc ; Copt ; Coptic ; Qaac -sc ; Cprt ; Cypriot -sc ; Cyrl ; Cyrillic -sc ; Deva ; Devanagari -sc ; Dsrt ; Deseret -sc ; Dupl ; Duployan -sc ; Egyp ; Egyptian_Hieroglyphs -sc ; Elba ; Elbasan -sc ; Ethi ; Ethiopic -sc ; Geor ; Georgian -sc ; Glag ; Glagolitic -sc ; Gonm ; Masaram_Gondi -sc ; Goth ; Gothic -sc ; Gran ; Grantha -sc ; Grek ; Greek -sc ; Gujr ; Gujarati -sc ; Guru ; Gurmukhi -sc ; Hang ; Hangul -sc ; Hani ; Han -sc ; Hano ; Hanunoo -sc ; Hatr ; Hatran -sc ; Hebr ; Hebrew -sc ; Hira ; Hiragana -sc ; Hluw ; Anatolian_Hieroglyphs -sc ; Hmng ; Pahawh_Hmong -sc ; Hrkt ; Katakana_Or_Hiragana -sc ; Hung ; Old_Hungarian -sc ; Ital ; Old_Italic -sc ; Java ; Javanese -sc ; Kali ; Kayah_Li -sc ; Kana ; Katakana -sc ; Khar ; Kharoshthi -sc ; Khmr ; Khmer -sc ; Khoj ; Khojki -sc ; Knda ; Kannada -sc ; Kthi ; Kaithi -sc ; Lana ; Tai_Tham -sc ; Laoo ; Lao -sc ; Latn ; Latin -sc ; Lepc ; Lepcha -sc ; Limb ; Limbu -sc ; Lina ; Linear_A -sc ; Linb ; Linear_B -sc ; Lisu ; Lisu -sc ; Lyci ; Lycian -sc ; Lydi ; Lydian -sc ; Mahj ; Mahajani -sc ; Mand ; Mandaic -sc ; Mani ; Manichaean -sc ; Marc ; Marchen -sc ; Mend ; Mende_Kikakui -sc ; Merc ; Meroitic_Cursive -sc ; Mero ; Meroitic_Hieroglyphs -sc ; Mlym ; Malayalam -sc ; Modi ; Modi -sc ; Mong ; Mongolian -sc ; Mroo ; Mro -sc ; Mtei ; Meetei_Mayek -sc ; Mult ; Multani -sc ; Mymr ; Myanmar -sc ; Narb ; Old_North_Arabian -sc ; Nbat ; Nabataean -sc ; Newa ; Newa -sc ; Nkoo ; Nko -sc ; Nshu ; Nushu -sc ; Ogam ; Ogham -sc ; Olck ; Ol_Chiki -sc ; Orkh ; Old_Turkic -sc ; Orya ; Oriya -sc ; Osge ; Osage -sc ; Osma ; Osmanya -sc ; Palm ; Palmyrene -sc ; Pauc ; Pau_Cin_Hau -sc ; Perm ; Old_Permic -sc ; Phag ; Phags_Pa -sc ; Phli ; Inscriptional_Pahlavi -sc ; Phlp ; Psalter_Pahlavi -sc ; Phnx ; Phoenician -sc ; Plrd ; Miao -sc ; Prti ; Inscriptional_Parthian -sc ; Rjng ; Rejang -sc ; Runr ; Runic -sc ; Samr ; Samaritan -sc ; Sarb ; Old_South_Arabian -sc ; Saur ; Saurashtra -sc ; Sgnw ; SignWriting -sc ; Shaw ; Shavian -sc ; Shrd ; Sharada -sc ; Sidd ; Siddham -sc ; Sind ; Khudawadi -sc ; Sinh ; Sinhala -sc ; Sora ; Sora_Sompeng -sc ; Soyo ; Soyombo -sc ; Sund ; Sundanese -sc ; Sylo ; Syloti_Nagri -sc ; Syrc ; Syriac -sc ; Tagb ; Tagbanwa -sc ; Takr ; Takri -sc ; Tale ; Tai_Le -sc ; Talu ; New_Tai_Lue -sc ; Taml ; Tamil -sc ; Tang ; Tangut -sc ; Tavt ; Tai_Viet -sc ; Telu ; Telugu -sc ; Tfng ; Tifinagh -sc ; Tglg ; Tagalog -sc ; Thaa ; Thaana -sc ; Thai ; Thai -sc ; Tibt ; Tibetan -sc ; Tirh ; Tirhuta -sc ; Ugar ; Ugaritic -sc ; Vaii ; Vai -sc ; Wara ; Warang_Citi -sc ; Xpeo ; Old_Persian -sc ; Xsux ; Cuneiform -sc ; Yiii ; Yi -sc ; Zanb ; Zanabazar_Square -sc ; Zinh ; Inherited ; Qaai -sc ; Zyyy ; Common -sc ; Zzzz ; Unknown - -# Script_Extensions (scx) - -# @missing: 0000..10FFFF; Script_Extensions;