Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Renders a syntactically valid 30-digit SIDC with `milsymbol` and returns SVG plu

## Coverage

Rendering coverage follows the installed `milsymbol` package. The curated semantic set includes a few common land-unit examples such as friendly infantry platoon, hostile infantry platoon, armor platoon, artillery platoon, reconnaissance platoon, and infantry company.
Rendering coverage follows the installed `milsymbol` package. The curated semantic set includes common, verified examples across land units, air, sea surface, sea subsurface, land equipment, land installations, and control measures. Examples include infantry platoons and companies, fighter and rotary-wing aircraft, UAVs, destroyers, frigates, merchant ships, submarines, unmanned underwater vehicles, tanks, armored personnel carriers, bases, airports, checkpoints, and waypoints.

Image-based reverse lookup is intentionally deferred.

Expand Down
61 changes: 61 additions & 0 deletions src/data/catalog/air.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import type { CuratedSymbol } from "./types.js";

export const airSymbols = [
{
sidc: "130301000011010400000000000000",
name: "Friendly Air Fighter Aircraft",
aliases: [
"friendly fighter",
"friendly fighter aircraft",
"friend fighter jet",
"blue fighter aircraft"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "air",
affiliation: "friend",
status: "present",
domain: "air",
entity: "aircraft",
entityType: "fighter"
}
},
{
sidc: "130301000011020000000000000000",
name: "Friendly Air Rotary-Wing Aircraft",
aliases: [
"friendly rotary wing aircraft",
"friendly helicopter",
"friend helicopter",
"blue rotary wing aircraft"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "air",
affiliation: "friend",
status: "present",
domain: "air",
entity: "aircraft",
entityType: "rotary wing"
}
},
{
sidc: "130601000011030000000000000000",
name: "Hostile Air Unmanned Aerial Vehicle",
aliases: [
"hostile uav",
"enemy uav",
"enemy drone",
"red unmanned aerial vehicle"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "air",
affiliation: "hostile",
status: "present",
domain: "air",
entity: "aircraft",
entityType: "unmanned aerial vehicle"
}
}
] as const satisfies readonly CuratedSymbol[];
42 changes: 42 additions & 0 deletions src/data/catalog/control-measures.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { CuratedSymbol } from "./types.js";

export const controlMeasureSymbols = [
{
sidc: "130325000013030000000000000000",
name: "Friendly Control Measure Checkpoint",
aliases: [
"friendly checkpoint",
"friend checkpoint",
"blue checkpoint",
"control measure checkpoint"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "control measure",
affiliation: "friend",
status: "present",
domain: "control measure",
entity: "command and control point",
entityType: "checkpoint"
}
},
{
sidc: "130325000013180000000000000000",
name: "Friendly Control Measure Waypoint",
aliases: [
"friendly waypoint",
"friend waypoint",
"blue waypoint",
"control measure waypoint"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "control measure",
affiliation: "friend",
status: "present",
domain: "control measure",
entity: "command and control point",
entityType: "waypoint"
}
}
] as const satisfies readonly CuratedSymbol[];
20 changes: 20 additions & 0 deletions src/data/catalog/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { airSymbols } from "./air.js";
import { controlMeasureSymbols } from "./control-measures.js";
import { landEquipmentSymbols } from "./land-equipment.js";
import { landInstallationSymbols } from "./land-installations.js";
import { landUnitSymbols } from "./land-units.js";
import { seaSubsurfaceSymbols } from "./sea-subsurface.js";
import { seaSurfaceSymbols } from "./sea-surface.js";
import type { CuratedSymbol } from "./types.js";

export type { CuratedSymbol, SymbolParts } from "./types.js";

export const curatedSymbols = [
...landUnitSymbols,
...airSymbols,
...seaSurfaceSymbols,
...seaSubsurfaceSymbols,
...landEquipmentSymbols,
...landInstallationSymbols,
...controlMeasureSymbols
] as const satisfies readonly CuratedSymbol[];
40 changes: 40 additions & 0 deletions src/data/catalog/land-equipment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import type { CuratedSymbol } from "./types.js";

export const landEquipmentSymbols = [
{
sidc: "130315000012020000000000000000",
name: "Friendly Land Equipment Tank",
aliases: [
"friendly tank",
"friend tank",
"blue tank",
"land equipment tank"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land equipment",
affiliation: "friend",
status: "present",
domain: "land equipment",
entity: "tank"
}
},
{
sidc: "130315000012010300000000000000",
name: "Friendly Land Equipment Armored Personnel Carrier",
aliases: [
"friendly armored personnel carrier",
"friendly armoured personnel carrier",
"friend apc",
"blue apc"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land equipment",
affiliation: "friend",
status: "present",
domain: "land equipment",
entity: "armored personnel carrier"
}
}
] as const satisfies readonly CuratedSymbol[];
42 changes: 42 additions & 0 deletions src/data/catalog/land-installations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import type { CuratedSymbol } from "./types.js";

export const landInstallationSymbols = [
{
sidc: "130320000012080200000000000000",
name: "Friendly Land Installation Base",
aliases: [
"friendly base",
"friendly military base",
"friend base",
"blue military base"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land installation",
affiliation: "friend",
status: "present",
domain: "land installation",
entity: "military infrastructure",
entityType: "base"
}
},
{
sidc: "130320000012080300000000000000",
name: "Friendly Land Installation Airport",
aliases: [
"friendly airport",
"friendly airfield",
"friend airport",
"land installation airport"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land installation",
affiliation: "friend",
status: "present",
domain: "land installation",
entity: "military infrastructure",
entityType: "airport"
}
}
] as const satisfies readonly CuratedSymbol[];
119 changes: 119 additions & 0 deletions src/data/catalog/land-units.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import type { CuratedSymbol } from "./types.js";

export const landUnitSymbols = [
{
sidc: "130310001412110000000000000000",
name: "Friendly Land Unit Infantry Platoon",
aliases: [
"friendly infantry platoon",
"friend infantry platoon",
"blue infantry platoon",
"land infantry platoon"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "friend",
status: "present",
domain: "land",
entity: "infantry",
echelon: "platoon"
}
},
{
sidc: "130310001512110000000000000000",
name: "Friendly Land Unit Infantry Company",
aliases: [
"friendly infantry company",
"friend infantry company",
"blue infantry company",
"land infantry company"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "friend",
status: "present",
domain: "land",
entity: "infantry",
echelon: "company"
}
},
{
sidc: "130610001412110000000000000000",
name: "Hostile Land Unit Infantry Platoon",
aliases: [
"hostile infantry platoon",
"enemy infantry platoon",
"red infantry platoon",
"land infantry platoon hostile"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "hostile",
status: "present",
domain: "land",
entity: "infantry",
echelon: "platoon"
}
},
{
sidc: "130310001412050000000000000000",
name: "Friendly Land Unit Armor Platoon",
aliases: [
"friendly armor platoon",
"friendly armoured platoon",
"friend tank platoon",
"blue armor platoon"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "friend",
status: "present",
domain: "land",
entity: "armor",
entityType: "tank",
echelon: "platoon"
}
},
{
sidc: "130310001413030000000000000000",
name: "Friendly Land Unit Artillery Platoon",
aliases: [
"friendly artillery platoon",
"friend field artillery platoon",
"blue artillery platoon",
"land artillery platoon"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "friend",
status: "present",
domain: "land",
entity: "artillery",
echelon: "platoon"
}
},
{
sidc: "130310001412130000000000000000",
name: "Friendly Land Unit Reconnaissance Platoon",
aliases: [
"friendly reconnaissance platoon",
"friend recon platoon",
"blue reconnaissance platoon",
"land recon platoon"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "land unit",
affiliation: "friend",
status: "present",
domain: "land",
entity: "reconnaissance",
echelon: "platoon"
}
}
] as const satisfies readonly CuratedSymbol[];
40 changes: 40 additions & 0 deletions src/data/catalog/sea-subsurface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import type { CuratedSymbol } from "./types.js";

export const seaSubsurfaceSymbols = [
{
sidc: "130635000011010000000000000000",
name: "Hostile Sea Subsurface Submarine",
aliases: [
"hostile submarine",
"enemy submarine",
"red submarine",
"sea subsurface submarine"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "sea subsurface",
affiliation: "hostile",
status: "present",
domain: "sea subsurface",
entity: "submarine"
}
},
{
sidc: "130335000011040000000000000000",
name: "Friendly Sea Subsurface Unmanned Underwater Vehicle",
aliases: [
"friendly unmanned underwater vehicle",
"friendly uuv",
"friend uuv",
"blue underwater drone"
],
parts: {
standard: "MIL-STD-2525D/APP-6D",
symbolSet: "sea subsurface",
affiliation: "friend",
status: "present",
domain: "sea subsurface",
entity: "unmanned underwater vehicle"
}
}
] as const satisfies readonly CuratedSymbol[];
Loading
Loading