Skip to content

Commit 8cb0901

Browse files
committed
Bug fixed
1 parent 50776e0 commit 8cb0901

File tree

6 files changed

+82
-25
lines changed

6 files changed

+82
-25
lines changed

Examples/Diagram/第一章.ykm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- scene "第一章"
2+
@__diagram_link_to "第二章 开始"
3+
4+

Examples/Diagram/第三章.ykm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
- scene "第三章"
2+
@__diagram_link_to "第三章 结尾"
3+
4+
- scene "第三章 结尾"
5+
6+

Examples/Diagram/第二章.ykm

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
- scene "第二章 开始"
2+
@__diagram_link_to "第二章 选择支A"
3+
@__diagram_link_to "第二章 选择支B"
4+
5+
- scene "第二章 选择支A"
6+
@__diagram_link_to "第二章 结尾"
7+
8+
- scene "第二章 选择支B"
9+
@__diagram_link_to "第二章 结尾"
10+
11+
- scene "第二章 结尾"
12+
@__diagram_link_to "第三章"
13+

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,23 @@ Usage:
3232
Compile YukimiScript to Lua:
3333
ykmc <INPUT_FILE> [--target-<TARGET> <OUTPUT_FILE>] [OPTIONS...]
3434
Create diagram:
35-
ykmc dgml <INPUT_DIR> <OUTPUT_DGML_FILE> [OPTIONS...]
35+
ykmc diagram <DIAGRAM_TYPE> <INPUT_DIR> <OUTPUT_FILE> [OPTIONS...]
3636
Create charset file:
3737
ykmc charset <INPUT_DIR> <OUTPUT_CHARSET_FILE> [OPTIONS...]
3838
3939
Options:
4040
--lib <LIB_DIR> Include external libraries.
4141
42+
Diagram Types:
43+
dgml Visual Studio Directed Graph Markup Language.
44+
mermaid Flowchart in Mermaid.
45+
4246
Targets:
4347
lua Lua 5.1 for Lua Runtime 5.1 or LuaJIT (UTF-8)
4448
4549
Example:
4650
ykmc ./Example/main.ykm --target-lua ./main.lua --lib ./Example/lib/
47-
ykmc dgml ./Example/scenario ./Example.dgml --lib ./Example/lib
51+
ykmc diagram dgml ./Example/scenario ./Example.dgml --lib ./Example/lib
4852
ykmc charset ./Example/ ./ExampleCharset.txt --lib ./Example/lib
4953
```
5054

YukimiScript.CommandLineTool/Program.fs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,23 @@ let help () =
1212
" Compile YukimiScript to Lua:"
1313
" ykmc <INPUT_FILE> [--target-<TARGET> <OUTPUT_FILE>] [OPTIONS...]"
1414
" Create diagram:"
15-
" ykmc dgml <INPUT_DIR> <OUTPUT_DGML_FILE> [OPTIONS...]"
15+
" ykmc diagram <DIAGRAM_TYPE> <INPUT_DIR> <OUTPUT_FILE> [OPTIONS...]"
1616
" Create charset file:"
1717
" ykmc charset <INPUT_DIR> <OUTPUT_CHARSET_FILE> [OPTIONS...]"
1818
""
1919
"Options:"
2020
" --lib <LIB_DIR> Include external libraries."
2121
""
22+
"Diagram Types:"
23+
" dgml Visual Studio Directed Graph Markup Language."
24+
" mermaid Flowchart in Mermaid."
25+
""
2226
"Targets:"
2327
" lua Lua 5.1 for Lua Runtime 5.1 or LuaJIT (UTF-8)"
2428
""
2529
"Example:"
2630
" ykmc ./Example/main.ykm --target-lua ./main.lua --lib ./Example/lib/"
27-
" ykmc dgml ./Example/scenario ./Example.dgml --lib ./Example/lib"
31+
" ykmc diagram dgml ./Example/scenario ./Example.dgml --lib ./Example/lib"
2832
" ykmc charset ./Example/ ./ExampleCharset.txt --lib ./Example/lib"
2933
"" ]
3034
|> List.iter Console.WriteLine
@@ -42,8 +46,13 @@ type TargetOption =
4246
| Lua of outputFile: string
4347

4448

49+
type DiagramType =
50+
| Dgml
51+
| Mermaid
52+
53+
4554
type CmdArg =
46-
| Dgml of inputDir: string * outputDgml: string * Options
55+
| Diagram of DiagramType * inputDir: string * output: string * Options
4756
| Charset of inputDir: string * outputCharsetFile: string * Options
4857
| Compile of inputFile: string * TargetOption list * Options
4958

@@ -67,12 +76,21 @@ let rec parseTargetsAndOptions =
6776
|> Result.map (fun options -> [], options)
6877

6978

79+
let parseDiagramType =
80+
function
81+
| "dgml" -> Ok Dgml
82+
| "mermaid" -> Ok Mermaid
83+
| _ -> Error ()
84+
85+
7086
let parseArgs =
7187
function
72-
| "dgml" :: inputDir :: outputDgml :: options ->
73-
parseOptions defaultOptions options
74-
|> Result.map (fun options ->
75-
Dgml (inputDir, outputDgml, options))
88+
| "diagram" :: diagramType :: inputDir :: output :: options ->
89+
parseDiagramType diagramType
90+
|> Result.bind (fun diagramType ->
91+
parseOptions defaultOptions options
92+
|> Result.map (fun options ->
93+
Diagram (diagramType, inputDir, output, options)))
7694

7795
| "charset" :: inputDir :: charsetFile :: options ->
7896
parseOptions defaultOptions options
@@ -104,7 +122,12 @@ let doAction errStringing =
104122
let lua = YukimiScript.CodeGen.Lua.generateLua <| Intermediate.ofDom dom
105123
File.WriteAllText(output, lua, Text.Encoding.UTF8))
106124

107-
| Dgml (inputDir, outDgml, options) ->
125+
| Diagram (diagramType, inputDir, out, options) ->
126+
let diagramExporter =
127+
match diagramType with
128+
| Dgml -> Diagram.exportDgml
129+
| _ -> failwith ""
130+
108131
let lib = loadLibs errStringing options.Lib
109132
getYkmFiles inputDir
110133
|> Array.map (fun path ->
@@ -113,8 +136,8 @@ let doAction errStringing =
113136
|> List.ofArray
114137
|> Diagram.analyze
115138
|> unwrapDomException errStringing
116-
|> Diagram.exportDgml
117-
|> fun dgml -> File.WriteAllText(outDgml, dgml, Text.Encoding.UTF8)
139+
|> diagramExporter
140+
|> fun diagram -> File.WriteAllText(out, diagram, Text.Encoding.UTF8)
118141

119142
| Charset (inputDir, outCharset, options) ->
120143
let lib = loadLibs errStringing options.Lib

YukimiScript.Parser/Diagram.fs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,29 +83,36 @@ let exportDgml (diagram: Diagram) : string =
8383
.AppendLine("""<DirectedGraph xmlns="http://schemas.microsoft.com/vs/2009/dgml">""")
8484
.AppendLine(""" <Nodes>""") |> ignore
8585

86+
let fileNodeOnlyContainsOneScene file =
87+
Seq.tryExactlyOne file.Scenes
88+
|> Option.filter (fun x -> x.Name = Path.GetFileNameWithoutExtension file.Name)
89+
|> Option.isSome
90+
8691
for file in diagram.Files do
87-
sb .Append(" <Node Id=\"")
88-
.Append(file.Name)
89-
.Append("\" Group=\"Expanded\" />")
90-
.AppendLine() |> ignore
91-
92+
if not <| fileNodeOnlyContainsOneScene file then
93+
sb .Append(" <Node Id=\"")
94+
.Append(file.Name)
95+
.Append("\" Group=\"Expanded\" />")
96+
.AppendLine() |> ignore
97+
9298
for scene in file.Scenes do
9399
sb .Append(" <Node Id=\"")
94100
.Append(scene.Name)
95101
.Append("\" />")
96102
.AppendLine() |> ignore
97-
103+
98104
sb .AppendLine(" </Nodes>")
99105
.AppendLine(" <Links>") |> ignore
100106

101107
for file in diagram.Files do
102-
for scene in file.Scenes do
103-
sb .Append(" <Link Source=\"")
104-
.Append(file.Name)
105-
.Append("\" Target=\"")
106-
.Append(scene.Name)
107-
.Append("\" Category=\"Contains\" />")
108-
.AppendLine () |> ignore
108+
if not <| fileNodeOnlyContainsOneScene file then
109+
for scene in file.Scenes do
110+
sb .Append(" <Link Source=\"")
111+
.Append(file.Name)
112+
.Append("\" Target=\"")
113+
.Append(scene.Name)
114+
.Append("\" Category=\"Contains\" />")
115+
.AppendLine () |> ignore
109116

110117
for arrows in diagram.Arrows do
111118
sb .Append(" <Link Source=\"")

0 commit comments

Comments
 (0)