@@ -84,6 +84,7 @@ type kind =
8484 | Kind_Exception
8585 | Kind_Extension
8686 | Kind_Field
87+ | Kind_asset
8788
8889module ElementsByName : sig
8990 type t
@@ -163,7 +164,6 @@ type t = {
163164 resolver : resolver option ;
164165 recorder : recorder option ;
165166 fragmentroot : (int * Component.Signature .t ) option ;
166- parent_page : Identifier.Page .t option ; (* * parent page *)
167167}
168168
169169let is_linking env = env.linking
@@ -200,7 +200,6 @@ let empty =
200200 recorder = None ;
201201 ambiguous_labels = Identifier.Maps.Label. empty;
202202 fragmentroot = None ;
203- parent_page = None ;
204203 }
205204
206205let add_fragment_root sg env =
@@ -358,6 +357,10 @@ let add_extension_constructor identifier
358357 add_to_elts Kind_Extension identifier (`Extension (identifier, ec, te)) env
359358 |> add_cdocs identifier ec.doc
360359
360+ let add_asset identifier env =
361+ if env.linking then add_to_elts Kind_asset identifier (`Asset identifier) env
362+ else env
363+
361364let module_of_unit : Lang.Compilation_unit.t -> Component.Module.t =
362365 fun unit ->
363366 let id = (unit .id :> Paths.Identifier.Module.t ) in
@@ -597,6 +600,9 @@ let s_fragment_type_parent : Component.Element.fragment_type_parent scope =
597600 | #Component.Element. fragment_type_parent as r -> Some r
598601 | _ -> None )
599602
603+ let s_asset : Component.Element.asset scope =
604+ make_scope (function #Component.Element. asset as r -> Some r | _ -> None )
605+
600606let len = ref 0
601607
602608let n = ref 0
@@ -806,6 +812,29 @@ let open_units resolver env =
806812 | _ -> env)
807813 env resolver.open_units
808814
815+ let rec collect_assets env (page : Lang.Page.t ) =
816+ let env =
817+ match page.name with
818+ | { iv = `Page (Some parent, _); _ }
819+ | { iv = `LeafPage (Some parent , _ ); _ } -> (
820+ let parent_name = match parent.iv with `Page (_ , name ) -> name in
821+ match lookup_page (PageName. to_string parent_name) env with
822+ | None -> env
823+ | Some parent_page -> collect_assets env parent_page)
824+ | _ -> env
825+ in
826+ let env =
827+ List. fold_left
828+ (fun env new_asset ->
829+ let id = Identifier.Mk. asset_file (page.name, new_asset) in
830+ add_asset id env)
831+ env
832+ (List. filter_map
833+ (function Lang.Page. Asset_child c -> Some c | _ -> None )
834+ page.children)
835+ in
836+ env
837+
809838let env_of_unit t ~linking resolver =
810839 let open Lang.Compilation_unit in
811840 let initial_env =
@@ -814,20 +843,25 @@ let env_of_unit t ~linking resolver =
814843 let env = { empty with linking } in
815844 env |> add_module (t.id :> Identifier.Path.Module.t ) dm m.doc
816845 in
817- let parent_page :> Identifier.Page.t option =
846+ let initial_env = set_resolver initial_env resolver |> open_units resolver in
847+ let initial_env =
818848 match t.id.iv with
819- | `Root (None, _ ) -> None
820- | `Root (Some parent , _ ) -> Some parent
849+ | `Root (None, _ ) -> initial_env
850+ | `Root (Some parent , _ ) -> (
851+ let parent_name = match parent.iv with `Page (_ , name ) -> name in
852+ match lookup_page (PageName. to_string parent_name) initial_env with
853+ | None -> initial_env
854+ | Some parent_page -> collect_assets initial_env parent_page)
821855 in
822- let initial_env = { initial_env with parent_page } in
823- set_resolver initial_env resolver |> open_units resolver
856+ initial_env
824857
825858let open_page page env = add_docs page.Lang.Page. content env
826859
827860let env_of_page page resolver =
828861 let initial_env = open_page page empty in
829- let initial_env = { initial_env with parent_page = Some page.name } in
830- set_resolver initial_env resolver |> open_units resolver
862+ let initial_env = set_resolver initial_env resolver |> open_units resolver in
863+ let initial_env = collect_assets initial_env page in
864+ initial_env
831865
832866let env_for_reference resolver =
833867 set_resolver empty resolver |> open_units resolver
@@ -889,5 +923,3 @@ let verify_lookups env lookups =
889923 | true , Some r -> r.lookups < - LookupTypeSet. union r.lookups lookups
890924 | _ -> () );
891925 result
892-
893- let parent_page env = env.parent_page
0 commit comments