141 lines
3.6 KiB
GDScript
141 lines
3.6 KiB
GDScript
extends ExampleBase
|
|
|
|
const YAML_FILE = "res://addons/yaml/examples/data/supported_syntax.yaml"
|
|
const OUTPUT_FILE = "user://supported_syntax_copy.yaml"
|
|
|
|
var yaml_text := """
|
|
string: string_value
|
|
number: 1234
|
|
list:
|
|
- apples
|
|
- oranges
|
|
"""
|
|
|
|
var data
|
|
|
|
func _init() -> void:
|
|
icon = "📝"
|
|
|
|
func run_examples() -> void:
|
|
run_example("Validate YAML String Syntax", validate_yaml_string_syntax)
|
|
run_example("Parse YAML Text", parse_yaml_text)
|
|
run_example("Stringify Data", stringify_data)
|
|
run_example("Validate File Syntax", validate_file_syntax)
|
|
run_example("Load File", load_file)
|
|
run_example("Save File", save_file)
|
|
run_example("Load Saved File", load_saved_file)
|
|
|
|
func validate_yaml_string_syntax() -> void:
|
|
log_code_block(yaml_text)
|
|
|
|
log_info("Validating YAML string...")
|
|
var result := YAML.validate_syntax(yaml_text)
|
|
|
|
if result.has_error():
|
|
log_error("Validation failed: " + result.get_error())
|
|
return
|
|
|
|
log_success("YAML is valid!")
|
|
|
|
func parse_yaml_text() -> void:
|
|
log_info("Parsing YAML text...")
|
|
var result := YAML.parse(yaml_text)
|
|
|
|
if result.has_error():
|
|
log_error("Parse failed: " + result.get_error())
|
|
return
|
|
|
|
data = result.get_data()
|
|
log_success("YAML parsed successfully")
|
|
|
|
if LOG_VERBOSE:
|
|
log_result(str(data))
|
|
|
|
log_info("Accessing data values:")
|
|
log_info("• string value: " + data.string)
|
|
log_info("• number value: " + str(data.number))
|
|
log_info("• list items: " + str(data.list))
|
|
|
|
func stringify_data() -> void:
|
|
# First ensure we have data to stringify
|
|
if data == null:
|
|
data = YAML.parse(yaml_text).get_data()
|
|
|
|
log_info("Converting data structure to YAML string...")
|
|
var result := YAML.stringify(data)
|
|
|
|
if result.has_error():
|
|
log_error("Stringify failed: " + result.get_error())
|
|
return
|
|
|
|
log_success("Data converted to YAML successfully")
|
|
|
|
if LOG_VERBOSE:
|
|
log_result(result.get_data())
|
|
|
|
# Verify the round trip
|
|
var yaml_output = result.get_data().strip_edges()
|
|
var original = yaml_text.strip_edges()
|
|
if yaml_output == original:
|
|
log_success("Round-trip verification: Output matches original")
|
|
else:
|
|
log_warning("Round-trip produced different output (semantically equivalent)")
|
|
log_info("Original:\n" + original)
|
|
log_info("Output:\n" + yaml_output)
|
|
|
|
func validate_file_syntax() -> void:
|
|
log_info("Validating YAML file: " + YAML_FILE)
|
|
var result := YAML.validate_file_syntax(YAML_FILE)
|
|
|
|
if result.has_error():
|
|
log_error("File validation failed: " + result.get_error())
|
|
return
|
|
|
|
log_success("YAML file is valid")
|
|
|
|
func load_file() -> void:
|
|
log_info("Loading YAML file: " + YAML_FILE)
|
|
var result := YAML.load_file(YAML_FILE)
|
|
|
|
if result.has_error():
|
|
log_error("File loading failed: " + result.get_error())
|
|
return
|
|
|
|
data = result.get_data()
|
|
log_success("YAML file loaded successfully")
|
|
|
|
if LOG_VERBOSE:
|
|
log_info("File contains " + str(data.size()) + " keys")
|
|
log_result(str(data).substr(0, 500) + "...\n(output truncated)")
|
|
|
|
func save_file() -> void:
|
|
# Make sure we have data
|
|
if data == null:
|
|
data = {"example": "data", "created": "now", "values": [1, 2, 3]}
|
|
|
|
log_info("Saving data to YAML file: " + OUTPUT_FILE)
|
|
var result := YAML.save_file(data, OUTPUT_FILE)
|
|
|
|
if result.has_error():
|
|
log_error("File saving failed: " + result.get_error())
|
|
return
|
|
|
|
log_success("Data saved to YAML file successfully")
|
|
|
|
if LOG_VERBOSE:
|
|
log_result(result.get_data())
|
|
|
|
func load_saved_file() -> void:
|
|
log_info("Loading previously saved file: " + OUTPUT_FILE)
|
|
var result := YAML.load_file(OUTPUT_FILE)
|
|
|
|
if result.has_error():
|
|
log_error("File loading failed: " + result.get_error())
|
|
return
|
|
|
|
var loaded_data = result.get_data()
|
|
log_success("Saved file loaded successfully")
|
|
|
|
if LOG_VERBOSE:
|
|
log_result(str(loaded_data))
|