/**
 * GW adapter: lower the Games Workshop 40K app's plain-text army-list export to
 * a {@link ParsedRoster}.
 *
 * The format opens with the same `++++…++++` summary fence as the NewRecruit WTC
 * formats (FACTION KEYWORD / DETACHMENT / TOTAL ARMY POINTS / WARLORD /
 * ENHANCEMENT / NUMBER OF UNITS / SECONDARY), then lists units grouped under
 * ALL-CAPS battlefield-role sections (`BATTLELINE`, `CHARACTERS`,
 * `ALLIED UNITS`, …). Each unit is a header line `Name (N pts)` followed by
 * `•`-bulleted entries:
 *
 * ```
 * War Dog Executioner (130 pts)
 * • 1x Armoured feet
 * • 2x War Dog autocannon
 * • Houndpack Lance Character, Warlord
 *
 * Nurglings (40 pts)
 * • 3x Nurgling Swarm
 *     • 3x Diseased claws and teeth
 * ```
 *
 * Bullet classification (the parsing crux):
 * - A top-level `• Nx Thing` *with* further-indented child bullets is a **model
 *   group** — `N` adds to the model count and the children are that group's
 *   wargear (Nurglings, Beasts of Nurgle).
 * - A top-level `• Nx Thing` *without* children is plain **wargear**.
 * - A bullet *without* an `Nx` count is an **annotation**: `… Character` flags a
 *   character, `Warlord` flags the warlord, `Name (+N pts)` is the enhancement.
 *
 * **Disjointness from the WTC matchers**: the GW format always carries `•`
 * bullets and never the WTC `N with` lines. wtc-full always has `N with` (so it
 * never collides), and wtc-compact never has bullets (its matcher now excludes
 * them). This adapter therefore matches on *bullets present* + *no `N with`*.
 *
 * The GW export carries no separate POINTS LIMIT line, so `declared_limit`
 * falls back to TOTAL ARMY POINTS (the round-trippable battle-size signal).
 *
 * @packageDocumentation
 */
import type { FormatAdapter } from "./adapter.js";
import type { ParsedUnit } from "./types.js";
/** Accept the input only when it carries the FACTION KEYWORD summary header,
 * has `•` bullets, and lacks the WTC `N with` body lines. */
declare function isGwText(decoded: unknown): string | null;
interface GwHeader {
    name: string;
    faction_raw_name: string | null;
    detachment_raw_name: string | null;
    total_reported: number | null;
    declared_limit: number | null;
    battle_size_raw: string | null;
}
declare function parseHeader(lines: string[]): {
    header: GwHeader;
    bodyStart: number;
} | null;
declare function parseBody(lines: string[], bodyStart: number): {
    units: ParsedUnit[];
    multi_force: boolean;
};
export declare const gwAdapter: FormatAdapter;
export declare const _internals: {
    isGwText: typeof isGwText;
    parseHeader: typeof parseHeader;
    parseBody: typeof parseBody;
};
export {};
//# sourceMappingURL=gw.d.ts.map