Compare commits
No commits in common. "d66e481b6ce15ec56c3d34c1fe263bacc7377345" and "a9f8ec9a6bae66fa85a03a5cf383f01234cad034" have entirely different histories.
d66e481b6c
...
a9f8ec9a6b
|
@ -24,15 +24,9 @@ open System.IO
|
||||||
end
|
end
|
||||||
|
|
||||||
/// 可访问页面
|
/// 可访问页面
|
||||||
type PageAccess(name: string) =
|
type PageAccess(hrefs: string) =
|
||||||
class
|
class
|
||||||
let mutable root: string = ""
|
member this.pageURL(): string = hrefs
|
||||||
member this.pageURL(): string = $"{root}{name}.html"
|
|
||||||
member this.setPageRoot(path: string) =
|
|
||||||
if path.EndsWith "/" then
|
|
||||||
root <- path
|
|
||||||
else
|
|
||||||
root <- path+"/"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
/// 内容定义元素 =================================================================================
|
/// 内容定义元素 =================================================================================
|
||||||
|
@ -73,10 +67,10 @@ open System.IO
|
||||||
|
|
||||||
|
|
||||||
/// 访问页面:概括页面、卷宗页面、故事线页面、节点汇总 =================================================
|
/// 访问页面:概括页面、卷宗页面、故事线页面、节点汇总 =================================================
|
||||||
type VolumePage(page_name: string, volume: IDomUnit, childs: IDomUnit list) =
|
type VolumePage(page_hrefs: string, volume: IDomUnit, childs: IDomUnit list) =
|
||||||
class
|
class
|
||||||
inherit PageAccess(page_name)
|
inherit PageAccess(page_hrefs)
|
||||||
new(page_name, volume) = VolumePage(page_name, volume, [])
|
new(page_hrefs, volume) = VolumePage(page_hrefs, volume, [])
|
||||||
|
|
||||||
interface IDomUnit with
|
interface IDomUnit with
|
||||||
member this.name():string = volume.name()
|
member this.name():string = volume.name()
|
||||||
|
@ -86,13 +80,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_name, volume, childs@new_list)
|
VolumePage(page_hrefs, volume, childs@new_list)
|
||||||
end
|
end
|
||||||
|
|
||||||
type StoryPage(page_name: string, story: IDomUnit, childs: IDomUnit list) =
|
type StoryPage(page_hrefs: string, story: IDomUnit, childs: IDomUnit list) =
|
||||||
class
|
class
|
||||||
inherit PageAccess(page_name)
|
inherit PageAccess(page_hrefs)
|
||||||
new(page_name, story) = StoryPage(page_name, story, [])
|
new(page_hrefs, story) = StoryPage(page_hrefs, story, [])
|
||||||
|
|
||||||
interface IDomUnit with
|
interface IDomUnit with
|
||||||
member this.name():string = story.name()
|
member this.name():string = story.name()
|
||||||
|
@ -102,13 +96,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_name, story, childs@list)
|
StoryPage(page_hrefs, story, childs@list)
|
||||||
end
|
end
|
||||||
|
|
||||||
type PointPage(page_name: string, point: IDomUnit, refer_list: IDomUnit list) =
|
type PointPage(page_hrefs: string, point: IDomUnit, refer_list: IDomUnit list) =
|
||||||
class
|
class
|
||||||
inherit PageAccess(page_name)
|
inherit PageAccess(page_hrefs)
|
||||||
new(page_name, point) = PointPage(page_name, point, [])
|
new(page_hrefs, point) = PointPage(page_hrefs, point, [])
|
||||||
|
|
||||||
member this.defines() =
|
member this.defines() =
|
||||||
point
|
point
|
||||||
|
@ -120,7 +114,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_name, point, refer_list @ childs)
|
PointPage(page_hrefs, point, refer_list @ childs)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,7 +324,7 @@ open System.IO
|
||||||
/// 内容组装 =========================================================================================
|
/// 内容组装 =========================================================================================
|
||||||
module Assemble =
|
module Assemble =
|
||||||
/// 构建页面名称
|
/// 构建页面名称
|
||||||
let page_name_encode(node: Present.IDomUnit): string =
|
let page_address_make(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)
|
||||||
|
|
||||||
|
@ -342,7 +336,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_name_encode(vole), vole, con.children())::volume_page_assemble(nodes.Tail)
|
Present.VolumePage(page_address_make(vole), vole, con.children())::volume_page_assemble(nodes.Tail)
|
||||||
| _ -> volume_page_assemble(nodes.Tail)
|
| _ -> volume_page_assemble(nodes.Tail)
|
||||||
|
|
||||||
/// 构建所有故事线页面
|
/// 构建所有故事线页面
|
||||||
|
@ -353,7 +347,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_name_encode(storye), storye, con.children())::story_page_assemble(nodes.Tail)
|
Present.StoryPage(page_address_make(storye), storye, con.children())::story_page_assemble(nodes.Tail)
|
||||||
| _ -> story_page_assemble(nodes.Tail)
|
| _ -> story_page_assemble(nodes.Tail)
|
||||||
|
|
||||||
/// 提取point-define和point-refer
|
/// 提取point-define和point-refer
|
||||||
|
@ -479,7 +473,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_name_encode(defs), refer_point)
|
let page_assemble = Present.PointPage(page_address_make(defs), refer_point)
|
||||||
defs.setAssemble(page_assemble)
|
defs.setAssemble(page_assemble)
|
||||||
name_seqs,page_assemble
|
name_seqs,page_assemble
|
||||||
)
|
)
|
||||||
|
@ -496,7 +490,6 @@ open System.IO
|
||||||
|
|
||||||
type PageText =
|
type PageText =
|
||||||
interface
|
interface
|
||||||
abstract member bindPage:unit ->obj
|
|
||||||
abstract member getHtmlText:unit -> string
|
abstract member getHtmlText:unit -> string
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -747,9 +740,6 @@ open System.IO
|
||||||
| _ -> ()
|
| _ -> ()
|
||||||
|
|
||||||
interface PageText with
|
interface PageText with
|
||||||
member this.bindPage():obj =
|
|
||||||
page
|
|
||||||
|
|
||||||
member this.getHtmlText(): string =
|
member this.getHtmlText(): string =
|
||||||
let doc = this.getHtmlDocument()
|
let doc = this.getHtmlDocument()
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ open System.Xml
|
||||||
open HtmlStruct.Assemble
|
open HtmlStruct.Assemble
|
||||||
open HtmlStruct.Content
|
open HtmlStruct.Content
|
||||||
open HtmlStruct.Present
|
open HtmlStruct.Present
|
||||||
open System.IO
|
|
||||||
|
|
||||||
|
|
||||||
let doc = XmlDocument()
|
let doc = XmlDocument()
|
||||||
|
@ -20,8 +19,7 @@ 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 makers = volume_pages @ story_pages @ point_pages
|
|
||||||
|> List.map(fun page_unit ->
|
|> List.map(fun page_unit ->
|
||||||
match page_unit with
|
match page_unit with
|
||||||
| :? PointPage as point ->
|
| :? PointPage as point ->
|
||||||
|
@ -32,7 +30,9 @@ let makers = volume_pages @ story_pages @ point_pages
|
||||||
PageMaker<StoryPage>(story)
|
PageMaker<StoryPage>(story)
|
||||||
| _ -> failwith ""
|
| _ -> failwith ""
|
||||||
)
|
)
|
||||||
|
let docx0 = maker.Item(5).getHtmlText()
|
||||||
|
let docx1 = maker.Item(18).getHtmlText()
|
||||||
|
let docx2 = maker.Item(22).getHtmlText()
|
||||||
|
|
||||||
for refs in makers do
|
for refs in point_pages do
|
||||||
let file_path = (refs.bindPage() :?> PageAccess).pageURL()
|
System.Console.WriteLine(refs.ToString())
|
||||||
File.WriteAllLines(file_path, [refs.getHtmlText()])
|
|
Loading…
Reference in New Issue