Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions gleam.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ redraw_dom = ">= 19.2.2 and < 20.0.0"
lustre = ">= 5.7.1 and < 6.0.0"
mendraw = ">= 2.0.0 and < 3.0.0"
simplifile = ">= 2.6.0 and < 3.0.0"
xmlm = ">= 1.0.1 and < 2.0.0"

[dev_dependencies]
gleeunit = ">= 1.11.0 and < 2.0.0"
2 changes: 2 additions & 0 deletions manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ packages = [
{ name = "redraw", version = "19.2.2", build_tools = ["gleam"], requirements = ["gleam_javascript", "gleam_stdlib"], otp_app = "redraw", source = "hex", outer_checksum = "B8CEEB74E8846CE10B8360B924DAD22441B61D947F9449854164F0686C4B8661" },
{ name = "redraw_dom", version = "19.2.2", build_tools = ["gleam"], requirements = ["gleam_fetch", "gleam_stdlib", "redraw"], otp_app = "redraw_dom", source = "hex", outer_checksum = "80278296AD6E3D4457D6FF6A14FEA3E90696284BEA297BDE10E430FC4CE726B8" },
{ name = "simplifile", version = "2.7.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "A2727627B063E87351934C7F7F008F2D1FDB16F6DE0B8C79F9E46459CFC9C164" },
{ name = "xmlm", version = "1.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "xmlm", source = "hex", outer_checksum = "F23155B6F0B22CB8E09DAD41BB6B1CD036725FD0A80EE25B1D1B14138683A81D" },
]

[requirements]
Expand All @@ -37,3 +38,4 @@ mendraw = { version = ">= 2.0.0 and < 3.0.0" }
redraw = { version = ">= 19.2.2 and < 20.0.0" }
redraw_dom = { version = ">= 19.2.2 and < 20.0.0" }
simplifile = { version = ">= 2.6.0 and < 3.0.0" }
xmlm = { version = ">= 1.0.1 and < 2.0.0" }
124 changes: 61 additions & 63 deletions src/glendix/define.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import gleam/list
import gleam/option
import gleam/result
import gleam/string
import glendix/define/document
import glendix/define/file_boundary
import glendix/define/model
import glendix/define/ui
Expand All @@ -29,64 +30,72 @@ pub fn main() -> Nil {
io.println("\n " <> style.red(file_error_message(error)))
Nil
}
Ok(xml_content) -> {
let #(meta, groups) = parse_widget_xml(xml_content)
let state =
DefineState(
xml_path: xml_path,
widget_meta: meta,
groups: groups,
cursor: 0,
collapsed: [],
view_mode: TreeView,
dirty: False,
status_msg: option.None,
scroll_offset: 0,
add_target_group: 0,
selected_type_idx: 0,
edit_group_idx: 0,
edit_item_idx: 0,
)
case is_tty() {
True -> {
case enter_tui() {
Error(error) -> {
io.println(
"\n "
<> style.red(
"Unable to enable terminal raw mode: "
<> string.inspect(error),
),
)
Nil
}
Ok(Nil) -> {
{
use _final <- promise.await(tui_loop(state))
case exit_tui() {
Ok(Nil) -> Nil
Error(error) ->
io.println(
"\n "
<> style.red(
"Unable to restore terminal mode: "
<> string.inspect(error),
),
)
Ok(xml_content) ->
case document.parse(xml_content) {
Error(error) -> {
io.println("\n " <> style.red(document.error_message(error)))
Nil
}
Ok(#(meta, groups)) -> {
let state =
DefineState(
xml_path: xml_path,
widget_meta: meta,
groups: groups,
cursor: 0,
collapsed: [],
view_mode: TreeView,
dirty: False,
status_msg: option.None,
scroll_offset: 0,
add_target_group: 0,
selected_type_idx: 0,
edit_group_idx: 0,
edit_item_idx: 0,
)
case is_tty() {
True -> {
case enter_tui() {
Error(error) -> {
io.println(
"\n "
<> style.red(
"Unable to enable terminal raw mode: "
<> string.inspect(error),
),
)
Nil
}
Ok(Nil) -> {
{
use _final <- promise.await(tui_loop(state))
case exit_tui() {
Ok(Nil) -> Nil
Error(error) ->
io.println(
"\n "
<> style.red(
"Unable to restore terminal mode: "
<> string.inspect(error),
),
)
}
exit_process()
promise.resolve(Nil)
}
Nil
}
exit_process()
promise.resolve(Nil)
}
}
False -> {
io.println(
"\n " <> style.yellow("TTY가 아닙니다. 대화형 모드가 필요합니다."),
)
Nil
}
}
}
False -> {
io.println("\n " <> style.yellow("TTY가 아닙니다. 대화형 모드가 필요합니다."))
Nil
}
}
}
}
}
}
Expand Down Expand Up @@ -2035,7 +2044,7 @@ fn return_from_multi_select(
}

fn save_xml(state: DefineState) -> DefineState {
let xml = serialize_widget_xml(state.widget_meta, state.groups)
let xml = document.serialize(state.widget_meta, state.groups)
case file_boundary.write(state.xml_path, xml) {
Ok(Nil) ->
DefineState(
Expand Down Expand Up @@ -2074,17 +2083,6 @@ fn exit_process() -> Nil
@external(javascript, "./define_ffi.mjs", "terminal_size")
fn terminal_size() -> #(Int, Int)

@external(javascript, "./define_ffi.mjs", "parse_widget_xml")
fn parse_widget_xml(
xml: String,
) -> #(model.WidgetMeta, List(model.PropertyGroup))

@external(javascript, "./define_ffi.mjs", "serialize_widget_xml")
fn serialize_widget_xml(
meta: model.WidgetMeta,
groups: List(model.PropertyGroup),
) -> String

@external(javascript, "./define_ffi.mjs", "poll_key_raw")
fn poll_key_raw(timeout_ms: Int) -> promise.Promise(#(Int, String))

Expand Down
Loading
Loading