#include #include #include "lightningcss.h" int print_error(CssError *error); int main() { char *source = ".foo {" " color: lch(50.998% 135.363 338);" "}" ".bar {" " color: yellow;" " composes: foo from './bar.css';" "}" ".baz:hover {" " color: var(--foo from './baz.css');" "}"; ParseOptions parse_opts = { .filename = "test.css", .css_modules = true, .css_modules_pattern = "yo_[name]_[local]", .css_modules_dashed_idents = true}; CssError *error = NULL; StyleSheet *stylesheet = lightningcss_stylesheet_parse(source, strlen(source), parse_opts, &error); if (!stylesheet) goto cleanup; char *unused_symbols[1] = {"bar"}; TransformOptions transform_opts = { .unused_symbols = unused_symbols, .unused_symbols_len = 0}; if (!lightningcss_browserslist_to_targets("last 2 versions, not IE <= 11", &transform_opts.targets, &error)) goto cleanup; if (!lightningcss_stylesheet_transform(stylesheet, transform_opts, &error)) goto cleanup; ToCssOptions to_css_opts = { .minify = true, .source_map = true, .pseudo_classes = { .hover = "is-hovered"}}; ToCssResult result = lightningcss_stylesheet_to_css(stylesheet, to_css_opts, &error); if (error) goto cleanup; size_t warning_count = lightningcss_stylesheet_get_warning_count(stylesheet); for (size_t i = 0; i < warning_count; i++) { printf("warning: %s\n", lightningcss_stylesheet_get_warning(stylesheet, i)); } fwrite(result.code.text, sizeof(char), result.code.len, stdout); printf("\n"); fwrite(result.map.text, sizeof(char), result.map.len, stdout); printf("\n"); for (int i = 0; i < result.exports_len; i++) { printf("%.*s -> %.*s\n", (int)result.exports[i].exported.len, result.exports[i].exported.text, (int)result.exports[i].local.len, result.exports[i].local.text); for (int j = 0; j < result.exports[i].composes_len; j++) { const CssModuleReference *ref = &result.exports[i].composes[j]; switch (ref->tag) { case CssModuleReference_Local: printf(" composes local: %.*s\n", (int)ref->local.name.len, ref->local.name.text); break; case CssModuleReference_Global: printf(" composes global: %.*s\n", (int)ref->global.name.len, ref->global.name.text); break; case CssModuleReference_Dependency: printf(" composes dependency: %.*s from %.*s\n", (int)ref->dependency.name.len, ref->dependency.name.text, (int)ref->dependency.specifier.len, ref->dependency.specifier.text); break; } } } for (int i = 0; i < result.references_len; i++) { printf("placeholder: %.*s\n", (int)result.references[i].placeholder.len, result.references[i].placeholder.text); } cleanup: lightningcss_stylesheet_free(stylesheet); lightningcss_to_css_result_free(result); if (error) { printf("error: %s\n", lightningcss_error_message(error)); lightningcss_error_free(error); return 1; } }