{"name":"wordcount.nu","source":"// wordcount.nu — Count lines, words, and characters in a file\n//\n// Demonstrates:\n//   - File I/O (nurl_read_file)\n//   - String iteration with while loop\n//   - Character classification (is_space, from stdlib/core/char.nu)\n//   - Structs and field access\n//\n// Build & run:\n//   ./build/nurlc examples/wordcount.nu > /tmp/wc.ll\n//   clang /tmp/wc.ll stdlib/runtime.o -o /tmp/wc\n//   /tmp/wc examples/wordcount.nu\n\n// nurl_str_get is a pure-NURL @-fn — needs the core/string include.\n$ `stdlib/core/string.nu`\n\n: Stats {\n    i lines\n    i words\n    i chars\n}\n\n@ count_stats s text → Stats {\n    : i len ( nurl_str_len text )\n    : ~ i lines 0\n    : ~ i words 0\n    : ~ i chars len\n    : ~ b in_word F\n\n    : ~ i idx 0\n    ~ < idx len {\n        : i ch ( nurl_str_get text idx )\n\n        // Newline\n        ? == ch 10 {\n            = lines + lines 1\n            = in_word F\n        } {\n            // Space, tab, carriage return\n            ? | == ch 32 | == ch 9 == ch 13 {\n                = in_word F\n            } {\n                // Start of new word\n                ? ! in_word {\n                    = words + words 1\n                    = in_word T\n                } {}\n            }\n        }\n\n        = idx + idx 1\n    }\n\n    // Count last line if no trailing newline\n    ? & > len 0 != ( nurl_str_get text - len 1 ) 10 {\n        = lines + lines 1\n    } {}\n\n    ^ @ Stats { lines words chars }\n}\n\n@ print_stats Stats st s filename → v {\n    ( nurl_print `  ` ) ( nurl_print_int . st lines )\n    ( nurl_print `  ` ) ( nurl_print_int . st words )\n    ( nurl_print `  ` ) ( nurl_print_int . st chars )\n    ( nurl_print `  ` ) ( nurl_print filename )\n    ( nurl_print `\\n` )\n}\n\n@ main → i {\n    : i argc ( nurl_argv_count )\n\n    ? < argc 2 {\n        ( nurl_print `Usage: wc <file>\\n` )\n        ^ 1\n    } {}\n\n    : s filename ( nurl_argv_get 1 )\n    : s content ( nurl_read_file filename )\n\n    : Stats st ( count_stats content )\n    ( print_stats st filename )\n\n    ^ 0\n}\n","bytes":1986}