完成卷宗、故事、节点页面框架构建
This commit is contained in:
parent
a9787bff56
commit
1d41c55535
|
@ -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<Content.PointDefine>(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<Content.PointDefine>(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<Content.PointRefer>(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<Content.AssembleRefer<Content.PointRefer>, Present.IDomUnit> (fun x->x))
|
||||
)
|
|
@ -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<VolumePage, IDomUnit> (fun x->x)
|
||||
let story_pages = story_page_build(visitor.contents()) |> List.map<StoryPage, IDomUnit> (fun x->x)
|
||||
let volume_pages = volume_page_assemble(visitor.contents()) |> List.map<VolumePage, IDomUnit> (fun x->x)
|
||||
let story_pages = story_page_assemble(visitor.contents()) |> List.map<StoryPage, IDomUnit> (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())
|
Loading…
Reference in New Issue