diff --git a/AstConv/HtmlStruct.fs b/AstConv/HtmlStruct.fs
index 3def14e..79c46be 100644
--- a/AstConv/HtmlStruct.fs
+++ b/AstConv/HtmlStruct.fs
@@ -31,8 +31,7 @@ open System
class
let mutable assemble_page_url: string = ""
- member this.elementID(): string =
- item.address()
+ member this.elementID(): string = item.address()
member this.setAssembleURL(url: string) =
assemble_page_url <- url
member this.assembleURL():string =
@@ -100,7 +99,7 @@ open System
interface IContainer with
member this.children(): IDomUnit list = refer_list
member this.append(childs: IDomUnit list): IContainer =
- raise (System.NotImplementedException())
+ PointPage(page_hrefs, point, refer_list @ childs)
end
@@ -162,12 +161,12 @@ open System
/// 具有回退功能的元素
- type AssembleRefer<'T when 'T :> Present.Forwards and 'T :> Present.IDomUnit and 'T:> Present.IContainer>(item: 'T, page: Present.PageAccess) =
+ type AssembleRefer<'T when 'T :> Present.Forwards and 'T :> Present.IDomUnit and 'T:> Present.IContainer>(from: string,item: 'T, page: Present.PageAccess) =
class
inherit Present.Backwards(item, page)
interface Present.IDomUnit with
- member this.name(): string = item.name()
+ member this.name() = from
member this.object() = item.object()
member this.getHtmlWith(pnode: XmlElement): XmlElement =
raise (System.NotImplementedException())
@@ -328,26 +327,26 @@ open System
name_seqs |> Array.reduce(fun a b-> a+b)
/// 构建所有卷宗页面
- let rec volume_page_build (nodes: Present.IDomUnit list): Present.VolumePage list =
+ let rec volume_page_assemble (nodes: Present.IDomUnit list): Present.VolumePage list =
match nodes with
| [] -> []
| _ ->
match nodes.Head with
| :? Content.VolumeDefine as vole ->
let con: Present.IContainer = vole
- Present.VolumePage(page_address_make(vole), vole, con.children())::volume_page_build(nodes.Tail)
- | _ -> volume_page_build(nodes.Tail)
+ Present.VolumePage(page_address_make(vole), vole, con.children())::volume_page_assemble(nodes.Tail)
+ | _ -> volume_page_assemble(nodes.Tail)
/// 构建所有故事线页面
- let rec story_page_build (nodes: Present.IDomUnit list): Present.StoryPage list =
+ let rec story_page_assemble (nodes: Present.IDomUnit list): Present.StoryPage list =
match nodes with
| [] -> []
| _ ->
match nodes.Head with
| :? Content.StoryDefine as storye ->
let con: Present.IContainer = storye
- Present.StoryPage(page_address_make(storye), storye, con.children())::story_page_build(nodes.Tail)
- | _ -> story_page_build(nodes.Tail)
+ Present.StoryPage(page_address_make(storye), storye, con.children())::story_page_assemble(nodes.Tail)
+ | _ -> story_page_assemble(nodes.Tail)
/// 提取point-define和point-refer
let rec private point_peers_extract(nodes: Present.IDomUnit list):(Present.IDomUnit option*Present.IDomUnit option*Present.IDomUnit option)list =
@@ -425,17 +424,40 @@ open System
/// 构建节点汇总页面
/// param nodes volume-pages@story-pages
- let rec point_assemble_page_build(nodes: Present.IDomUnit list) =
+ let rec point_page_assemble(nodes: Present.IDomUnit list) =
let refers_about = point_peers_extract(nodes)
let pages = refers_about |> List.map (
- fun (page_defs, _, dc) ->
- match dc.Value with
+ fun (page_defs, slice_defs, point_defs) ->
+ match point_defs.Value with
| :? Content.PointDefine as defs ->
- let page_x = page_defs.Value :?> Present.StoryPage
- let copy_pt = Content.AssembleRefer(defs, page_x)
- Some(Present.PointPage(page_address_make(defs), copy_pt))
+ let name_seqs = $"{page_defs.Value.name()}&{slice_defs.Value.name()}&{point_defs.Value.name()}"
+ let refer_point = Content.AssembleRefer(name_seqs, defs, page_defs.Value :?> Present.StoryPage)
+ let page_assemble = Present.PointPage(page_address_make(defs), refer_point)
+ defs.setAssembleURL(page_assemble.accessLink())
+ Some(page_assemble)
| _ -> None
)
|> List.filter (fun d -> d <> None)
- for p in pages do
- Console.WriteLine((p.Value :> Present.IDomUnit).object().address())
+
+ let refer_nodes = refers_about |> List.filter(
+ fun (_, _, n) ->
+ match n.Value with
+ | :? Content.PointRefer -> true
+ | _ -> false
+ )
+ |> List.map(
+ fun (page_defs, _, point_refs) ->
+ let refer_object = point_refs.Value.object() :?> AstImport.PointRef
+ let refer_name = $"{refer_object.storyRef()}&{refer_object.sliceRef()}&{refer_object.pointRef()}"
+ let refs = point_refs.Value :?> Content.PointRefer
+ Content.AssembleRefer(refer_name, refs, page_defs.Value :?> Present.PageAccess)
+ )
+
+
+ pages |> List.map(
+ fun page_one ->
+ let page_old = page_one.Value :> Present.IContainer
+ let page_dom = page_one.Value :> Present.IDomUnit
+ let nodes = refer_nodes |> List.filter(fun d -> (d:>Present.IDomUnit).name() = page_dom.name())
+ page_old.append(nodes |> List.map, Present.IDomUnit> (fun x->x))
+ )
\ No newline at end of file
diff --git a/AstConv/Program.fs b/AstConv/Program.fs
index 63cf9ac..bc159f4 100644
--- a/AstConv/Program.fs
+++ b/AstConv/Program.fs
@@ -15,7 +15,9 @@ let entry = AstVisitEntry(prog)
let visitor = UnitGenerate(prog)
entry.visitWith(visitor) |> ignore
-let volume_pages = volume_page_build(visitor.contents()) |> List.map (fun x->x)
-let story_pages = story_page_build(visitor.contents()) |> List.map (fun x->x)
+let volume_pages = volume_page_assemble(visitor.contents()) |> List.map (fun x->x)
+let story_pages = story_page_assemble(visitor.contents()) |> List.map (fun x->x)
+let refers = point_page_assemble(volume_pages @ story_pages)
-let refers = point_assemble_page_build(volume_pages @ story_pages)
+for refs in refers do
+ System.Console.WriteLine(refs.ToString())
\ No newline at end of file