# configuration/strings/diagram.strings.ts

> 27 lines of code and 9 definitions.

Tree: GovLab Docs
Language: typescript
Layer: product
Canonical: https://banes-lab.com/anatomy/docs#file-docs-configuration-strings-diagram-strings-ts
Source text: https://banes-lab.com/source/docs/configuration/strings/diagram.strings.ts.txt

Listed in [configuration/strings](https://banes-lab.com/api/source/docs/configuration/strings.md), after [configuration/strings/coverage.strings.ts](https://banes-lab.com/source/docs/configuration/strings/coverage.strings.ts.md) and before [configuration/strings/document.strings.ts](https://banes-lab.com/source/docs/configuration/strings/document.strings.ts.md).

## Definitions

- `nonAsciiDetail` (lexical_declaration, line 9, exported)
- `parenDetail` (lexical_declaration, line 13, exported)
- `reservedDetail` (lexical_declaration, line 17, exported)
- `hardeningAbort` (lexical_declaration, line 21, exported)
- `parserUnavailable` (lexical_declaration, line 33, exported)
- `HEX_RADIX` (lexical_declaration, line 1)
- `HARDENING_DETAILS` (lexical_declaration, line 3, exported)
- `hardeningLine` (lexical_declaration, line 25, exported)
- `hardeningMessage` (lexical_declaration, line 29, exported)

## Contained in

- [configuration/strings](https://banes-lab.com/anatomy/docs/folder-docs-configuration-strings.md)

## Used by

- [core/analyzers/diagram.analyzer.ts](https://banes-lab.com/source/docs/core/analyzers/diagram.analyzer.ts.md)
- [core/persistence/document.persistence.ts](https://banes-lab.com/source/docs/core/persistence/document.persistence.ts.md)
- [core/validators/diagram.validator.ts](https://banes-lab.com/source/docs/core/validators/diagram.validator.ts.md)

## Linked from

- [core/analyzers](https://banes-lab.com/anatomy/docs/folder-docs-core-analyzers.md)
- [core/persistence](https://banes-lab.com/anatomy/docs/folder-docs-core-persistence.md)
- [core/validators](https://banes-lab.com/anatomy/docs/folder-docs-core-validators.md)

## Source

```typescript
const HEX_RADIX = 16;

export const HARDENING_DETAILS = {
    direction: "`direction` statement — omit it (subgraph direction is unsupported in older renderers)",
    htmlBreak: "<br> in a label — keep the label on one line (no HTML line breaks)",
    semicolon: "';' is a statement separator (breaks unquoted sequence messages) — use a comma or period",
} as const;

export const nonAsciiDetail = function nonAsciiDetail(code: number): string {
    return `non-ASCII character U+${code.toString(HEX_RADIX).toUpperCase()} — use plain ASCII (no em-dash, middot, arrows, math symbols, or checkmarks)`;
};

export const parenDetail = function parenDetail(char: string): string {
    return `'${char}' — no parentheses (no rounded/stadium/cylinder shapes, no parenthetical label text)`;
};

export const reservedDetail = function reservedDetail(char: string): string {
    return `'${char}' inside a label — remove brackets, angle brackets, and entities from label text`;
};

export const hardeningAbort = function hardeningAbort(path: string, details: string): string {
    return `${path} failed hardening — generation aborted (not written):\n${details}`;
};

export const hardeningLine = function hardeningLine(line: number, code: string, detail: string): string {
    return `  line ${line}: [${code}] ${detail}`;
};

export const hardeningMessage = function hardeningMessage(code: string, detail: string): string {
    return `[${code}] ${detail}`;
};

export const parserUnavailable = function parserUnavailable(reason: string): string {
    return `govlab.docs: mermaid grammar validation unavailable (${reason}) — hardening rule still enforced`;
};
```
