windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
// std/strings — String manipulation and parsing (idiomatic Windjammer API).
//
// Implementation: windjammer_runtime::strings (Rust backend, hidden from users).
// Import: use std::strings
//
// Function-style API maps directly to runtime; no Rust method leakage in user code.

// === CASE CONVERSION ===

fn to_upper(s: string) -> string {
    s
}

fn to_lower(s: string) -> string {
    s
}

// === WHITESPACE ===

fn trim(s: string) -> string {
    s
}

fn trim_start(s: string) -> string {
    s
}

fn trim_end(s: string) -> string {
    s
}

// === SPLIT / JOIN ===

fn split(s: string, delimiter: string) -> Vec<string> {
    vec![s]
}

fn split_lines(text: string) -> Vec<string> {
    vec![text]
}

fn split_whitespace(line: string) -> Vec<string> {
    vec![line]
}

fn join(parts: Vec<string>, delimiter: string) -> string {
    ""
}

/// Unicode characters in a string.
fn chars(s: string) -> Vec<char> {
    vec![]
}

/// Build a string from character codepoints.
fn from_chars(parts: Vec<char>) -> string {
    ""
}

/// Substring by character indices `[start, end)`.
fn substring_chars(s: string, start: usize, end: usize) -> string {
    ""
}

// === PARSING (line-oriented text formats: .wjscene, CSV, config) ===

fn parse_i32(s: string) -> i32 {
    0
}

fn parse_f32(s: string) -> f32 {
    0.0
}

fn parse_bool(s: string) -> bool {
    false
}

/// ASCII byte at character index (for line-oriented parsers).
fn byte_at(s: string, index: usize) -> u8 {
    0u8
}

// === CHECKING ===

fn is_empty(s: string) -> bool {
    true
}

fn starts_with(s: string, prefix: string) -> bool {
    false
}

fn ends_with(s: string, suffix: string) -> bool {
    false
}

fn contains(s: string, substring: string) -> bool {
    false
}

// === REPLACEMENT ===

fn replace(s: string, from: string, to: string) -> string {
    s
}

fn replacen(s: string, from: string, to: string, count: usize) -> string {
    s
}

// === LENGTH ===

fn len(s: string) -> usize {
    0
}

fn char_count(s: string) -> usize {
    0
}

fn substring(s: string, start: usize, end: usize) -> string {
    ""
}

// === REPEAT ===

fn repeat(s: string, n: usize) -> string {
    s
}