mirrorSign function
Returns the horizontal mirror of an FSW sign.
fsw must be ASCII Formal SignWriting. For SWU input, convert with
swu2fsw first.
Implementation
String mirrorSign(String fsw) {
if (!_isAscii(fsw)) {
throw ArgumentError(
'mirrorSign expects ASCII FSW; convert SWU input via swu2fsw first');
}
final sign = fswToSign(fsw);
if (sign.symbols.isEmpty) return fsw;
final boxMarker = _boxMirror[sign.box.symbol] ?? sign.box.symbol;
final boxY = sign.box.position.item2;
final origMinX =
sign.symbols.map((s) => s.position.item1).reduce((a, b) => a < b ? a : b);
final mirroredSymbols = <SignSymbol>[];
for (final entry in sign.symbols) {
final original = entry.symbol;
final mirrored = mirrorSymbol(original);
final origWidth = getSymbolSize(original).item1;
final newWidth = getSymbolSize(mirrored).item1;
mirroredSymbols.add(SignSymbol(
symbol: mirrored,
position: Tuple2(_mirrorX(entry.position.item1, origWidth, newWidth),
entry.position.item2),
));
}
final mirroredSign = Sign(
box:
SignSymbol(symbol: boxMarker, position: Tuple2(_axis - origMinX, boxY)),
symbols: mirroredSymbols,
);
return signToFsw(mirroredSign);
}