mirror of
https://github.com/daylinmorgan/hwylterm.git
synced 2024-11-16 06:28:32 -06:00
remove side effects
This commit is contained in:
parent
d66e2ed5e2
commit
9462d99d95
1 changed files with 39 additions and 29 deletions
|
@ -4,8 +4,7 @@
|
||||||
use BB style markup to add color to strings using VT100 escape codes
|
use BB style markup to add color to strings using VT100 escape codes
|
||||||
]##
|
]##
|
||||||
|
|
||||||
# TODO:
|
{.push raises:[].}
|
||||||
#{.push raises:[].}
|
|
||||||
|
|
||||||
import std/[
|
import std/[
|
||||||
macros, os, sequtils, strformat, strutils, terminal
|
macros, os, sequtils, strformat, strutils, terminal
|
||||||
|
@ -72,7 +71,41 @@ const ColorXTermNames = enumNames(ColorXterm).mapIt(firstCapital(it))
|
||||||
const BbStyleNames = enumNames(BbStyle).mapIt(firstCapital(it))
|
const BbStyleNames = enumNames(BbStyle).mapIt(firstCapital(it))
|
||||||
const ColorDigitStrings = (1..255).toSeq().mapIt($it)
|
const ColorDigitStrings = (1..255).toSeq().mapIt($it)
|
||||||
|
|
||||||
# TODO: write non-fallible parseStyle(s) procedure
|
|
||||||
|
template parseUnsafe(body: untyped): untyped =
|
||||||
|
try: body
|
||||||
|
except: discard
|
||||||
|
|
||||||
|
proc parseStyle(codes: var seq[string], style: string) =
|
||||||
|
var style = normalizeStyle(style)
|
||||||
|
|
||||||
|
if style in ["B", "I", "U"]:
|
||||||
|
parseUnsafe: codes.add parseEnum[BbStyleAbbr](style).toCode()
|
||||||
|
elif style in BbStyleNames:
|
||||||
|
parseUnsafe: codes.add parseEnum[BbStyle](style).toCode()
|
||||||
|
|
||||||
|
if not (bbMode == On): return
|
||||||
|
|
||||||
|
if style in ColorXtermNames:
|
||||||
|
parseUnsafe: codes.add parseEnum[ColorXterm](style).toCode()
|
||||||
|
elif style.isHex():
|
||||||
|
codes.add style.hexToRgb.toCode()
|
||||||
|
elif style in ColorDigitStrings:
|
||||||
|
parseUnsafe: codes.add parseInt(style).toCode()
|
||||||
|
else:
|
||||||
|
when defined(debugBB): echo "unknown style: " & normalizedStyle
|
||||||
|
|
||||||
|
func parseBgStyle(codes: var seq[string], style: string) =
|
||||||
|
var style = normalizeStyle(style)
|
||||||
|
if style in ColorXtermNames:
|
||||||
|
parseUnsafe: codes.add parseEnum[ColorXTerm](style).toBgCode()
|
||||||
|
elif style.isHex():
|
||||||
|
codes.add style.hexToRgb().toBgCode()
|
||||||
|
elif style in ColorDigitStrings:
|
||||||
|
parseUnsafe: codes.add parseInt(style).toBgCode()
|
||||||
|
else:
|
||||||
|
when defined(debugBB): echo "unknown bg style: " & style
|
||||||
|
|
||||||
proc toAnsiCode*(s: string): string =
|
proc toAnsiCode*(s: string): string =
|
||||||
if bbMode == Off: return
|
if bbMode == Off: return
|
||||||
var
|
var
|
||||||
|
@ -86,33 +119,10 @@ proc toAnsiCode*(s: string): string =
|
||||||
else:
|
else:
|
||||||
styles = s.splitWhitespace()
|
styles = s.splitWhitespace()
|
||||||
for style in styles:
|
for style in styles:
|
||||||
let normalizedStyle = normalizeStyle(style)
|
parseStyle codes, style
|
||||||
if normalizedStyle in ["B", "I", "U"]:
|
|
||||||
codes.add parseEnum[BbStyleAbbr](normalizedStyle).toCode()
|
|
||||||
elif normalizedStyle in BbStyleNames:
|
|
||||||
codes.add parseEnum[BbStyle](normalizedStyle).toCode()
|
|
||||||
|
|
||||||
if not (bbMode == On): continue
|
|
||||||
|
|
||||||
if normalizedStyle in ColorXtermNames:
|
|
||||||
codes.add parseEnum[ColorXterm](normalizedStyle).toCode()
|
|
||||||
elif normalizedStyle.isHex():
|
|
||||||
codes.add normalizedStyle.hexToRgb.toCode()
|
|
||||||
elif normalizedStyle in ColorDigitStrings:
|
|
||||||
codes.add parseInt(normalizedStyle).toCode()
|
|
||||||
else:
|
|
||||||
when defined(debugBB): echo "unknown style: " & normalizedStyle
|
|
||||||
|
|
||||||
if bbMode == On and bgStyle != "":
|
if bbMode == On and bgStyle != "":
|
||||||
let normalizedBgStyle = normalizeStyle(bgStyle)
|
parseBgStyle codes, bgStyle
|
||||||
if normalizedBgStyle in ColorXtermNames:
|
|
||||||
codes.add parseEnum[ColorXTerm](normalizedBgStyle).toBgCode()
|
|
||||||
elif normalizedBgStyle.isHex():
|
|
||||||
codes.add normalizedBgStyle.hexToRgb().toBgCode()
|
|
||||||
elif normalizedBgStyle in ColorDigitStrings:
|
|
||||||
codes.add parseInt(normalizedBgStyle).toBgCode()
|
|
||||||
else:
|
|
||||||
when defined(debugBB): echo "unknown bg style: " & normalizedBgStyle
|
|
||||||
|
|
||||||
if codes.len > 0:
|
if codes.len > 0:
|
||||||
result.add "\e["
|
result.add "\e["
|
||||||
|
@ -325,7 +335,7 @@ proc `&`*(x: BbString, y: BbString): Bbstring =
|
||||||
proc bbEscape*(s: string): string {.inline.} =
|
proc bbEscape*(s: string): string {.inline.} =
|
||||||
s.replace("[", "[[").replace("\\", "\\\\")
|
s.replace("[", "[[").replace("\\", "\\\\")
|
||||||
|
|
||||||
proc bbEcho*(args: varargs[string, `$`]) {.sideEffect.} =
|
proc bbEcho*(args: varargs[string, `$`]) {.raises: [IOError]} =
|
||||||
for x in args:
|
for x in args:
|
||||||
stdout.write(x.bb)
|
stdout.write(x.bb)
|
||||||
stdout.write('\n')
|
stdout.write('\n')
|
||||||
|
|
Loading…
Reference in a new issue