diff --git a/AstConv/HtmlStruct.fs b/AstConv/HtmlStruct.fs index 32045c9..d36e9fc 100644 --- a/AstConv/HtmlStruct.fs +++ b/AstConv/HtmlStruct.fs @@ -24,9 +24,15 @@ open System.IO end /// 可访问页面 - type PageAccess(hrefs: string) = + type PageAccess(name: string) = class - member this.pageURL(): string = hrefs + let mutable root: string = "" + member this.pageURL(): string = $"{root}{name}.html" + member this.setPageRoot(path: string) = + if path.EndsWith "/" then + root <- path + else + root <- path+"/" end /// 内容定义元素 ================================================================================= @@ -67,10 +73,10 @@ open System.IO /// 访问页面:概括页面、卷宗页面、故事线页面、节点汇总 ================================================= - type VolumePage(page_hrefs: string, volume: IDomUnit, childs: IDomUnit list) = + type VolumePage(page_name: string, volume: IDomUnit, childs: IDomUnit list) = class - inherit PageAccess(page_hrefs) - new(page_hrefs, volume) = VolumePage(page_hrefs, volume, []) + inherit PageAccess(page_name) + new(page_name, volume) = VolumePage(page_name, volume, []) interface IDomUnit with member this.name():string = volume.name() @@ -80,13 +86,13 @@ open System.IO interface IContainer with member this.children(): IDomUnit list = childs member this.append(new_list: IDomUnit list): IContainer = - VolumePage(page_hrefs, volume, childs@new_list) + VolumePage(page_name, volume, childs@new_list) end - type StoryPage(page_hrefs: string, story: IDomUnit, childs: IDomUnit list) = + type StoryPage(page_name: string, story: IDomUnit, childs: IDomUnit list) = class - inherit PageAccess(page_hrefs) - new(page_hrefs, story) = StoryPage(page_hrefs, story, []) + inherit PageAccess(page_name) + new(page_name, story) = StoryPage(page_name, story, []) interface IDomUnit with member this.name():string = story.name() @@ -96,13 +102,13 @@ open System.IO interface IContainer with member this.children(): IDomUnit list = childs member this.append(list: IDomUnit list): IContainer = - StoryPage(page_hrefs, story, childs@list) + StoryPage(page_name, story, childs@list) end - type PointPage(page_hrefs: string, point: IDomUnit, refer_list: IDomUnit list) = + type PointPage(page_name: string, point: IDomUnit, refer_list: IDomUnit list) = class - inherit PageAccess(page_hrefs) - new(page_hrefs, point) = PointPage(page_hrefs, point, []) + inherit PageAccess(page_name) + new(page_name, point) = PointPage(page_name, point, []) member this.defines() = point @@ -114,7 +120,7 @@ open System.IO interface IContainer with member this.children(): IDomUnit list = refer_list member this.append(childs: IDomUnit list): IContainer = - PointPage(page_hrefs, point, refer_list @ childs) + PointPage(page_name, point, refer_list @ childs) end @@ -324,7 +330,7 @@ open System.IO /// 内容组装 ========================================================================================= module Assemble = /// 构建页面名称 - let page_address_make(node: Present.IDomUnit): string = + let page_name_encode(node: Present.IDomUnit): string = let name_seqs = $"{node.name()}_{node.object().address()}".ToCharArray() |> Array.map(fun c-> string(uint16(c))) name_seqs |> Array.reduce(fun a b-> a+b) @@ -336,7 +342,7 @@ open System.IO match nodes.Head with | :? Content.VolumeDefine as vole -> let con: Present.IContainer = vole - Present.VolumePage(page_address_make(vole), vole, con.children())::volume_page_assemble(nodes.Tail) + Present.VolumePage(page_name_encode(vole), vole, con.children())::volume_page_assemble(nodes.Tail) | _ -> volume_page_assemble(nodes.Tail) /// 构建所有故事线页面 @@ -347,7 +353,7 @@ open System.IO match nodes.Head with | :? Content.StoryDefine as storye -> let con: Present.IContainer = storye - Present.StoryPage(page_address_make(storye), storye, con.children())::story_page_assemble(nodes.Tail) + Present.StoryPage(page_name_encode(storye), storye, con.children())::story_page_assemble(nodes.Tail) | _ -> story_page_assemble(nodes.Tail) /// 提取point-define和point-refer @@ -473,7 +479,7 @@ open System.IO let defs = point_defs.Value :?> Content.PointDefine let name_seqs = $"{page_defs.Value.name()}&{slice_defs.Value.name()}&{point_defs.Value.name()}" let refer_point = Content.AssembleRefer(defs, name_seqs) - let page_assemble = Present.PointPage(page_address_make(defs), refer_point) + let page_assemble = Present.PointPage(page_name_encode(defs), refer_point) defs.setAssemble(page_assemble) name_seqs,page_assemble ) diff --git a/AstConv/Program.fs b/AstConv/Program.fs index 79abfe7..7c2b97b 100644 --- a/AstConv/Program.fs +++ b/AstConv/Program.fs @@ -19,6 +19,8 @@ let volume_pages = volume_page_assemble(visitor.contents()) |> List.map List.map (fun x->x) let point_pages = point_page_assemble(volume_pages @ story_pages) +volume_pages @ story_pages @ point_pages |> List.iter (fun it -> (it:?>PageAccess).setPageRoot("E:")) + let maker = volume_pages @ story_pages @ point_pages |> List.map(fun page_unit -> match page_unit with