{
  "slug": "text-normalizer",
  "name": "gizza-ai/text-normalizer",
  "version": "0.1.0",
  "title": "Text Normalizer — Unicode NFC/NFKC, accents, case, whitespace — gizza.ai",
  "description": "Normalize text in one pass: Unicode form (NFC/NFD/NFKC/NFKD), case fold, strip accents, collapse whitespace, straighten punctuation. Free, private, in your browser.",
  "tags": [
    "text normalizer",
    "unicode normalization",
    "nfc",
    "nfkc",
    "strip accents",
    "remove diacritics",
    "case fold",
    "collapse whitespace"
  ],
  "category": "text",
  "urls": {
    "page": "https://gizza.ai/tools/text-normalizer/",
    "markdown": "https://gizza.ai/tools/text-normalizer/index.md",
    "descriptor": "https://gizza.ai/tools/text-normalizer/tool.json",
    "deep_link_example": "https://gizza.ai/tools/text-normalizer/?text=Paste%20text%20to%20normalize%E2%80%A6&form=nfc&case=none&strip_accents=true&whitespace=collapse&punctuation=true"
  },
  "cli": "gizza tool text-normalizer \"Paste text to normalize…\"",
  "tool": {
    "description": "Clean and normalize text in one pass. Apply a Unicode normalization form (form = none/nfc/nfd/nfkc/nfkd; default nfc — nfkc also folds ligatures like ﬁ->fi, full-width, and circled/styled letters), transform case (case = none/lower/upper/fold; 'fold' is caseless matching, mapping ß->ss), strip accents/diacritics (strip_accents = true turns café into cafe), normalize whitespace (whitespace = keep/trim/collapse/collapse-lines; default collapse squeezes every run of whitespace to one space and trims), and fold fancy punctuation to ASCII (punctuation = true turns curly quotes, em dashes, and ellipsis glyphs into \", -, and ...). Steps run in the order punctuation -> form -> strip accents -> case -> whitespace.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "case": {
          "default": "none",
          "description": "Letter-case transform applied after normalization. 'none' (default) keeps case; 'lower' lowercases; 'upper' UPPERCASES; 'fold' case-folds for caseless matching (like lowercase but also maps ß -> ss).",
          "enum": [
            "none",
            "lower",
            "upper",
            "fold"
          ],
          "type": "string"
        },
        "form": {
          "default": "nfc",
          "description": "Unicode normalization form. 'nfc' (default) canonical composition, the web-recommended form; 'nfd' canonical decomposition; 'nfkc' compatibility composition, which also folds ligatures (ﬁ -> fi), full-width and circled/styled letters, and fractions to their plain equivalents; 'nfkd' compatibility decomposition; 'none' leaves code points untouched.",
          "enum": [
            "none",
            "nfc",
            "nfd",
            "nfkc",
            "nfkd"
          ],
          "type": "string"
        },
        "punctuation": {
          "default": false,
          "description": "When true, normalize fancy Unicode punctuation to plain ASCII: curly quotes and guillemets -> straight quotes, en/em dashes -> -, the ellipsis glyph -> ..., prime marks -> ' and \". Default false.",
          "type": "boolean"
        },
        "strip_accents": {
          "default": false,
          "description": "When true, strip accents/diacritics by decomposing letters and removing combining marks (café -> cafe, naïve -> naive). Default false.",
          "type": "boolean"
        },
        "text": {
          "description": "The text to clean and normalize.",
          "type": "string"
        },
        "whitespace": {
          "default": "collapse",
          "description": "Whitespace handling. 'collapse' (default) collapses every run of whitespace — spaces, tabs, newlines, and Unicode spaces — to a single space and trims the ends; 'trim' only trims leading/trailing whitespace; 'collapse-lines' collapses spaces within each line and drops blank lines but keeps line breaks; 'keep' leaves whitespace untouched.",
          "enum": [
            "keep",
            "trim",
            "collapse",
            "collapse-lines"
          ],
          "type": "string"
        }
      },
      "required": [
        "text"
      ],
      "type": "object"
    }
  }
}