# (c) cavaliba.com - data - yamlutil.py

"""
Shared YAML dumper for every export/editor path (code editor, exporter, api,
cavaliba CLI, permissions export).

MyYamlDumper:
    - blank line between top-level blocks
    - literal "|" blocks for multi-line strings instead of escaped \\n
"""

import yaml


def represent_str(dumper, data):
    """Dump multi-line strings as literal "|" blocks, single-line ones as usual."""
    if "\n" in data:
        return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
    return dumper.represent_scalar("tag:yaml.org,2002:str", data)


class MyYamlDumper(yaml.SafeDumper):
    def write_line_break(self, data=None):
        """Emit an extra blank line after top-level YAML blocks for readability."""
        super().write_line_break(data)
        if len(self.indents) < 2:
            super().write_line_break()


# PyYAML silently falls back to a quoted style when a literal block would not
# round-trip (trailing spaces, \r, leading tabs), so content stays exact.
MyYamlDumper.add_representer(str, represent_str)
