Softanza
DémarrerEnglish
Softanza
Données et langage de base

Chaînes de caractères

Un sur-ensemble, correct au point de code, des chaînes de Python et de Rust ; la lacune nette est la couche locale d'ICU.

6 Strong · 4 Solid · 1 Partial · 1 Emerging

Mesuré contre : ICU · Rust/Python str · Boost.Locale · Dossiers : base/string(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

un mot en six écritures, compté par le moteur
un mot en six écritures, compté par le moteur. rendu le 2026-10-01 à 04:00 par le script de rendu du site tools/areas.ring, exécuté dans la bibliothèque au commit 0e72e2e2c · la source(s'ouvre dans un nouvel onglet)

Repensé depuis les premiers principes

Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.

La manière SoftanzaUne chaîne est une suite de caractères qu'une personne lit, comptés en points de code Unicode, jamais en octets stockés par la machine.

Gardé des meilleures pratiques

  • Les règles de casse viennent du standard Unicode via utf8proc : une recherche insensible à la casse ramène l'allemand ß à ss, sans astuce limitée à l'ASCII. source(s'ouvre dans un nouvel onglet)
  • Les espaces suivent Unicode, qui en définit plus de vingt-cinq : rogner une chaîne retire aussi les espaces insécables et idéographiques. source(s'ouvre dans un nouvel onglet)
  • L'identité suit Unicode : deux caractères ne sont égaux que si leurs points de code coïncident ; les sosies latins, grecs et cyrilliques restent distincts et repérables. source(s'ouvre dans un nouvel onglet)

Repensé

  • Chaque position et chaque longueur se comptent en points de code, non en octets : l'hébreu, l'arabe ou un emoji ne sont jamais coupés en plein caractère. source(s'ouvre dans un nouvel onglet)
  • Les positions commencent à 1, comme on compte d'habitude, à tous les niveaux, moteur compilé compris, ce qui élimine toute une famille d'erreurs de décalage. source(s'ouvre dans un nouvel onglet)
  • La chaîne vide n'est jamais comptée, trouvée, contenue, remplacée ni retirée, car une correspondance sur « rien » peut effacer en silence un vrai caractère. source(s'ouvre dans un nouvel onglet)
  • La sensibilité à la casse est un paramètre d'une seule fonction, pas une fonction jumelle, ce qui divise par deux le nombre de fonctions à apprendre. source(s'ouvre dans un nouvel onglet)

Softanza's string is one Zig engine (utf8proc + PCRE2 + SheenBidi/HarfBuzz) behind a 2,212-method Haro face that is codepoint-correct end to end and reaches from core slicing through similarity, formatting and text analytics: a genuine superset of Python/Rust str. What it deliberately is not is ICU: no locale collation, no CLDR, no legacy charset transcoding.

Ce qu'un artisan en fait, et ce qui se distingue

  • A genuine superset of Python/Rust str on breadth and Unicode-correctness
  • Between/sections finder vocabulary wider than any str library exposes
  • A similarity and distance lane that ICU does not even enter
  • Formatting and text-analytics lanes general str libraries do not have

Ce qui est dû

  • Locale-aware collation + CLDR foundation (ICU's crown jewel)
  • Finish the narration audit: ~736 of 999 blocks unproven
  • Legacy charset transcoding (Shift-JIS, GBK, ISO-8859-*, Windows-125x)
  • Grapheme-cluster cursor (UAX#29) and line-break (UAX#14) primitives

La manière Softanza, exécutée

Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.

La chaîne vide n'est jamais contenue, pas même en elle-même : une correspondance sur rien ne peut déclencher aucune modification.

Softanza
? Q("").Contains("")
? Q("").Contains("text")
? Q("text").Contains("")
Sortie
0
0
0

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/doc/narrations/stzstring-emptiness-narration.md(s'ouvre dans un nouvel onglet)

La longueur compte des caractères, pas des octets : le mot accentué héllo a cinq caractères alors qu'il occupe six octets.

Softanza
Then("NumberOfChars('héllo') is 5 (not byte count)", Q("héllo").NumberOfChars(), 5)
Sortie
  THEN  NumberOfChars('héllo') is 5 (not byte count)  [PASS]

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/string/00_string_narrated.ring(s'ouvre dans un nouvel onglet)

Trois lettres d'apparence identique se distinguent par leurs points de code et leurs écritures : latine, grecque et cyrillique.

Softanza
? AreEqual(["O", "Ο", "О"])
? Unicodes(["O", "Ο", "О"])
? Scripts(["O", "Ο", "О"])
Sortie
0
79
927
1054

latin
greek
cyrillic

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/doc/narrations/stz-unmasking-unicode-lookalities-narration.md(s'ouvre dans un nouvel onglet)

Les articles de ce domaine (11)

Les couloirs, un par un

Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16.

Unicode-correct core ops
Strong
Length, slice, index, insert, reverse all codepoint-correct via _EngineSlice/_EngineCount/str_mid_cp over utf8proc; guarded at multi-million codepoints_EngineSlice / _EngineCount / str_mid_cp (utf8proc)
Search, find, between, sections
Strong
Full finder family over str_find_* / str_between_*; between/sections vocabulary is a superset of str libraries; returns all matches past 65,536 (guarded)str_find_* / str_between_*
Replace, remove, edit
Strong
Codepoint-safe editing across replace.zig (70 KB): Replace[CS], ReplaceMany, positional, range and between edits; replaces Haro's byte-oriented substrengine/src/string/replace.zig
Segmentation and tokenization
Strong
word_break.zig (UAX#29) drives Words, sentence and line splitting, streaming tokenizers and n-grams; split is one-pass linear (guarded)engine/src/string/word_break.zig
Normalization
Strong
Full NF-form normalization through utf8proc (str_normalize), mark stripping (RemoveDiacritics), space collapsing and Simplifystr_normalize / str_strip_marks (utf8proc)
Similarity and distance
Strong
levenshtein, hamming, jaro, jarowinkler, jaccard, cosine, LCP/LCS, anagram, char-diff over codepoints in fuzzy.zig/compare.zig; a lane ICU does not enterengine/src/string/fuzzy.zig, compare.zig
Case, script, direction, language detection
Solid
Unicode-default case via utf8proc plus detectScript/detectLanguage/detectDirection; Unicode-correct but not locale-correct (Turkish i, Greek sigma)detectScript / detectLanguage / detectDirection
Formatting, padding, alignment, boxing
Solid
format.zig (75 KB): codepoint-width pad/justify/center, wrap, truncate, indent/dedent, mask, numberlines, boxing; box drawing emits ASCII not Unicode glyphsengine/src/string/format.zig
Pattern, regex, fuzzy
Solid
Real PCRE2 under regex.zig (match/count/find-all/replace/split, Unicode) plus a W-conditional DSL (28 *W methods); deep regex story rated on its own pageengine/src/string/regex.zig
Text analytics (NLP)
Solid
VADER sentiment, NER, POS, lemma (en/fr/ar), stem, WordNet, TextRank/TF-IDF, summarize, readability, stopwords; dictionary-grade and English-centred
Encoding, charset, crypto
Partial
encode.zig covers url/html, base64, hex, RLE, CSV; md5/sha256/blake3/hmac; no legacy charset transcoding (Shift-JIS, GBK, ISO-8859-*, Windows-125x)engine/src/string/encode.zig
Locale-tailored ops and collation
Emerging
Locale is Haro-side tables (stzLocale, stzCountry, stzLanguage, stzScript); engine locale.zig is ten C-locale stubs; no collation, no CLDR; L0 not startedlocale.zig; SOFTANZA_LOCALE_PLAN.md