Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
design_codegen.hpp
Go to the documentation of this file.
1#pragma once
2
7
9#include <pulp/view/design_shortcuts.hpp> // DetectedShortcut (CodeGenOptions::shortcuts)
10#include <pulp/view/design_fidelity.hpp> // FidelityIssue + run_fidelity_checks (sink)
11#include <optional>
12#include <string>
13#include <vector>
14
15namespace pulp::view {
16
17// ── Code generator ──────────────────────────────────────────────────────
18
20enum class CodeGenMode {
21 web_compat, // document.createElement + el.style (web-compat layer)
22 bridge_native_js, // JS that calls createCol/createRow/createKnob + setFlex
23 // through the native widget bridge; not direct C++.
25 [[deprecated("Use CodeGenMode::bridge_native_js; CodeGenMode::native emits bridge JS, not direct C++.")]]
27};
28
31 CodeGenMode mode = CodeGenMode::bridge_native_js; // Native-bridge JS by default (better Yoga compat)
32 bool include_tokens = true; // Generate token assignments
33 bool include_comments = true; // Generate inline comments
34 bool preview_mode = false; // Use minimal widget style (design preview)
35 std::string root_variable = "root";
37
42 bool use_silver_knobs = true;
43
51 bool skin_faders = true;
52 bool skin_meters = true;
53
61 std::vector<DetectedShortcut> shortcuts;
62
68 std::vector<FidelityIssue>* fidelity_report = nullptr;
69};
70
74std::string generate_pulp_js(const DesignIR& ir, const CodeGenOptions& opts = {});
75
77 std::string function_name = "build_imported_ui";
78 std::string namespace_name;
79 std::string header_filename = "imported_ui.hpp";
80 std::string binding_function_name = "bind_imported_ui";
81 bool include_comments = true;
82 bool emit_named_tokens = true;
87
97 std::vector<FidelityIssue>* fidelity_report = nullptr;
98};
99
101 std::string header;
102 std::string source;
103 std::string binding_manifest;
104};
105
111 const IRAssetManifest& manifest,
112 const CppExportOptions& opts = {});
113
114// ── Baked SwiftUI code generation ───────────────────────────────────────
115//
116// `--emit swiftui` lowers the same baked DesignIR to native SwiftUI — a
117// fourth lowering alongside DOM/native-JS/baked-C++. Baked-only: SwiftUI is a
118// compiled declarative target with no Pulp JS-runtime story. The current
119// emitter covers stacks / Text / fixed frame-padding-background /
120// knob+slider+toggle + a code-first PulpTheme partition + a minimal
121// name-keyed binding.
122
126 std::string root_view_name = "ImportedPulpView";
128 std::string theme_type_name = "PulpTheme";
129 bool include_comments = true;
130 bool emit_theme = true;
135 std::vector<FidelityIssue>* fidelity_report = nullptr;
136};
137
139 std::string view_source;
140 std::string theme_source;
141 std::string binding_manifest;
142};
143
151 const IRAssetManifest& manifest,
152 const SwiftExportOptions& opts = {});
153
154// ── Shortcut helpers (V2 — used by both the generator and any test/
155// runtime caller that needs to map DetectedShortcut → registerShortcut
156// args). String forms come from `extract_keyboard_shortcuts`; integer
157// forms feed `registerShortcut(key, modifiers, callback)` and the
158// runtime KeyCode enum.
159
164int key_string_to_keycode(const std::string& key);
165
172int modifier_strings_to_mask(const std::vector<std::string>& mods);
173
174} // namespace pulp::view
Normalized intermediate representation (IR) for imported designs: the IR value model (style,...
Keyboard-shortcut import for designs: static-scan extracted shortcuts, platform-convention default sh...
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
std::string generate_pulp_js(const DesignIR &ir, const CodeGenOptions &opts={})
Generate Pulp JS code from a DesignIR.
int modifier_strings_to_mask(const std::vector< std::string > &mods)
Combine modifier strings ("shift", "ctrl", "alt", "meta") into the bitmask registerShortcut consumes.
CppExportResult generate_pulp_cpp(const DesignIR &ir, const IRAssetManifest &manifest, const CppExportOptions &opts={})
Generate an ownable baked-C++ view artifact from a DesignIR.
SwiftExportResult generate_pulp_swift(const DesignIR &ir, const IRAssetManifest &manifest, const SwiftExportOptions &opts={})
Generate a baked SwiftUI artifact from a DesignIR.
CodeGenMode
Code generation output mode.
Definition design_codegen.hpp:20
@ web_compat
Definition design_codegen.hpp:21
@ native
Definition design_codegen.hpp:24
@ bridge_native_js
Definition design_codegen.hpp:22
int key_string_to_keycode(const std::string &key)
Map a W3C KeyboardEvent.key (or KeyboardEvent.code) string to a Pulp KeyCode integer.
Options for code generation.
Definition design_codegen.hpp:30
bool include_comments
Definition design_codegen.hpp:33
std::vector< FidelityIssue > * fidelity_report
Optional fidelity-report sink.
Definition design_codegen.hpp:68
std::vector< DetectedShortcut > shortcuts
Shortcuts pulled from the source by extract_keyboard_shortcuts(...).
Definition design_codegen.hpp:61
bool skin_faders
When true (default), recognized faders/meters are emitted with a value-driven skin derived from the c...
Definition design_codegen.hpp:51
bool preview_mode
Definition design_codegen.hpp:34
bool skin_meters
Definition design_codegen.hpp:52
int indent_spaces
Definition design_codegen.hpp:36
bool use_silver_knobs
When true, audio knobs render as native vector silver/chrome widgets (WidgetRenderStyle::silver),...
Definition design_codegen.hpp:42
std::string root_variable
Definition design_codegen.hpp:35
CodeGenMode mode
Definition design_codegen.hpp:31
bool include_tokens
Definition design_codegen.hpp:32
Definition design_codegen.hpp:76
int indent_spaces
Definition design_codegen.hpp:86
bool extract_named_components
Definition design_codegen.hpp:84
bool emit_named_tokens
Definition design_codegen.hpp:82
std::vector< FidelityIssue > * fidelity_report
Optional fidelity-report sink, matching CodeGenOptions and SwiftExportOptions.
Definition design_codegen.hpp:97
std::string binding_function_name
Definition design_codegen.hpp:80
std::string function_name
Definition design_codegen.hpp:77
std::string header_filename
Definition design_codegen.hpp:79
std::string namespace_name
Definition design_codegen.hpp:78
bool include_comments
Definition design_codegen.hpp:81
bool emit_asset_constants
Definition design_codegen.hpp:83
bool emit_binding_context_helpers
Definition design_codegen.hpp:85
Definition design_codegen.hpp:100
std::string source
Definition design_codegen.hpp:102
std::string binding_manifest
Definition design_codegen.hpp:103
std::string header
Definition design_codegen.hpp:101
Complete design IR document.
Definition design_ir.hpp:791
Definition design_ir.hpp:739
Definition design_codegen.hpp:123
std::string theme_type_name
Generated theme enum/type name (code-first PulpTheme).
Definition design_codegen.hpp:128
std::vector< FidelityIssue > * fidelity_report
Optional fidelity sink (parity with CodeGenOptions).
Definition design_codegen.hpp:135
std::string root_view_name
Generated root View struct name.
Definition design_codegen.hpp:126
bool include_comments
Definition design_codegen.hpp:129
bool emit_theme
emit the PulpTheme.swift partition
Definition design_codegen.hpp:130
int indent_spaces
Definition design_codegen.hpp:132
bool emit_binding_manifest
emit the minimal SwiftUI binding manifest
Definition design_codegen.hpp:131
Definition design_codegen.hpp:138
std::string binding_manifest
minimal SwiftUI binding manifest JSON
Definition design_codegen.hpp:141
std::string theme_source
code-first PulpTheme (empty if !emit_theme)
Definition design_codegen.hpp:140
std::string view_source
the generated SwiftUI View
Definition design_codegen.hpp:139