This commit is contained in:
codeboss 2025-02-22 07:52:48 +08:00
parent a9f8ec9a6b
commit 8a6379037e
2 changed files with 26 additions and 18 deletions

View File

@ -24,9 +24,15 @@ open System.IO
end end
/// 访 /// 访
type PageAccess(hrefs: string) = type PageAccess(name: string) =
class 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 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 class
inherit PageAccess(page_hrefs) inherit PageAccess(page_name)
new(page_hrefs, volume) = VolumePage(page_hrefs, volume, []) new(page_name, volume) = VolumePage(page_name, volume, [])
interface IDomUnit with interface IDomUnit with
member this.name():string = volume.name() member this.name():string = volume.name()
@ -80,13 +86,13 @@ open System.IO
interface IContainer with interface IContainer with
member this.children(): IDomUnit list = childs member this.children(): IDomUnit list = childs
member this.append(new_list: IDomUnit list): IContainer = member this.append(new_list: IDomUnit list): IContainer =
VolumePage(page_hrefs, volume, childs@new_list) VolumePage(page_name, volume, childs@new_list)
end end
type StoryPage(page_hrefs: string, story: IDomUnit, childs: IDomUnit list) = type StoryPage(page_name: string, story: IDomUnit, childs: IDomUnit list) =
class class
inherit PageAccess(page_hrefs) inherit PageAccess(page_name)
new(page_hrefs, story) = StoryPage(page_hrefs, story, []) new(page_name, story) = StoryPage(page_name, story, [])
interface IDomUnit with interface IDomUnit with
member this.name():string = story.name() member this.name():string = story.name()
@ -96,13 +102,13 @@ open System.IO
interface IContainer with interface IContainer with
member this.children(): IDomUnit list = childs member this.children(): IDomUnit list = childs
member this.append(list: IDomUnit list): IContainer = member this.append(list: IDomUnit list): IContainer =
StoryPage(page_hrefs, story, childs@list) StoryPage(page_name, story, childs@list)
end end
type PointPage(page_hrefs: string, point: IDomUnit, refer_list: IDomUnit list) = type PointPage(page_name: string, point: IDomUnit, refer_list: IDomUnit list) =
class class
inherit PageAccess(page_hrefs) inherit PageAccess(page_name)
new(page_hrefs, point) = PointPage(page_hrefs, point, []) new(page_name, point) = PointPage(page_name, point, [])
member this.defines() = member this.defines() =
point point
@ -114,7 +120,7 @@ open System.IO
interface IContainer with interface IContainer with
member this.children(): IDomUnit list = refer_list member this.children(): IDomUnit list = refer_list
member this.append(childs: IDomUnit list): IContainer = member this.append(childs: IDomUnit list): IContainer =
PointPage(page_hrefs, point, refer_list @ childs) PointPage(page_name, point, refer_list @ childs)
end end
@ -324,7 +330,7 @@ open System.IO
/// 内容组装 ========================================================================================= /// 内容组装 =========================================================================================
module Assemble = 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))) 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) name_seqs |> Array.reduce(fun a b-> a+b)
@ -336,7 +342,7 @@ open System.IO
match nodes.Head with match nodes.Head with
| :? Content.VolumeDefine as vole -> | :? Content.VolumeDefine as vole ->
let con: Present.IContainer = 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) | _ -> volume_page_assemble(nodes.Tail)
/// 线 /// 线
@ -347,7 +353,7 @@ open System.IO
match nodes.Head with match nodes.Head with
| :? Content.StoryDefine as storye -> | :? Content.StoryDefine as storye ->
let con: Present.IContainer = 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) | _ -> story_page_assemble(nodes.Tail)
/// point-definepoint-refer /// point-definepoint-refer
@ -473,7 +479,7 @@ open System.IO
let defs = point_defs.Value :?> Content.PointDefine let defs = point_defs.Value :?> Content.PointDefine
let name_seqs = $"{page_defs.Value.name()}&{slice_defs.Value.name()}&{point_defs.Value.name()}" let name_seqs = $"{page_defs.Value.name()}&{slice_defs.Value.name()}&{point_defs.Value.name()}"
let refer_point = Content.AssembleRefer<Content.PointDefine>(defs, name_seqs) let refer_point = Content.AssembleRefer<Content.PointDefine>(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) defs.setAssemble(page_assemble)
name_seqs,page_assemble name_seqs,page_assemble
) )

View File

@ -19,6 +19,8 @@ let volume_pages = volume_page_assemble(visitor.contents()) |> List.map<VolumePa
let story_pages = story_page_assemble(visitor.contents()) |> List.map<StoryPage, IDomUnit> (fun x->x) let story_pages = story_page_assemble(visitor.contents()) |> List.map<StoryPage, IDomUnit> (fun x->x)
let point_pages = point_page_assemble(volume_pages @ story_pages) 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 let maker = volume_pages @ story_pages @ point_pages
|> List.map(fun page_unit -> |> List.map(fun page_unit ->
match page_unit with match page_unit with