# tools/core/predicates/token.predicate.ts

> 27 lines of code and 7 definitions.

Tree: Coordination tree
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/coordination#file-coordination-tools-core-predicates-token-predicate-ts
Source text: https://banes-lab.com/assets/sources/source.6e6c5092f98bd4a417f00896ede0702388eca1564e72f9176b6c3c3bd4a4e177.generated.txt

## Definitions

- `isWordCharacter` (lexical_declaration, line 1, exported)
- `accumulate` (lexical_declaration, line 13, exported)
- `isUpper` (lexical_declaration, line 6, exported)
- `isLower` (lexical_declaration, line 7, exported)
- `isDigit` (lexical_declaration, line 8, exported)
- `out` (lexical_declaration, line 14, exported)
- `held` (lexical_declaration, line 15, exported)

## Used by

- [tools/core/analyzers/marker.analyzer.ts](https://banes-lab.com/source/coordination/tools/core/analyzers/marker.analyzer.ts.md)
- [tools/core/formatters/text.formatter.ts](https://banes-lab.com/source/coordination/tools/core/formatters/text.formatter.ts.md)
- [tools/core/inspectors/projection.inspector.ts](https://banes-lab.com/source/coordination/tools/core/inspectors/projection.inspector.ts.md)
- [tools/core/predicates/secret.predicate.ts](https://banes-lab.com/source/coordination/tools/core/predicates/secret.predicate.ts.md)
- [tools/core/predicates/source.predicate.ts](https://banes-lab.com/source/coordination/tools/core/predicates/source.predicate.ts.md)
- [tools/core/readers/record.reader.ts](https://banes-lab.com/source/coordination/tools/core/readers/record.reader.ts.md)
- [tools/core/validators/entrypoint.validator.ts](https://banes-lab.com/source/coordination/tools/core/validators/entrypoint.validator.ts.md)
- [tools/core/validators/verdict.validator.ts](https://banes-lab.com/source/coordination/tools/core/validators/verdict.validator.ts.md)
- [tools/rules/literal.rule.ts](https://banes-lab.com/source/coordination/tools/rules/literal.rule.ts.md)

## Source

```typescript
export const isWordCharacter = function isWordCharacter(character: string): boolean {
    if (character.length === 0) {
        return false;
    }

    const isUpper = character >= "A" && character <= "Z";
    const isLower = character >= "a" && character <= "z";
    const isDigit = character >= "0" && character <= "9";

    return isUpper || isLower || isDigit || character === "_";
};

export const accumulate = function accumulate(text: string, isPart: (char: string) => boolean): string[] {
    const out: string[] = [];
    let held = "";

    for (const char of text) {
        if (isPart(char)) {
            held += char;
            continue;
        }
        if (held.length > 0) {
            out.push(held);
        }
        held = "";
    }

    if (held.length > 0) {
        out.push(held);
    }
    return out;
};
```
