#!/usr/bin/env bash #SHML:START #************************************************# # SHML - Shell Markup Language Framework # v1.0.3 # (MIT) # by Justin Dorfman - @jdorfman # && Joshua Mervine - @mervinej # # https://maxcdn.github.io/shml/ #************************************************# # Foreground (Text) ## fgcolor() { local __end='\033[39m' local __color=$__end # end by default case "$1" in end|off|reset) __color=$__end;; black|000000) __color='\033[30m';; red|F00BAF) __color='\033[31m';; green|00CD00) __color='\033[32m';; yellow|CDCD00) __color='\033[33m';; blue|0286fe) __color='\033[34m';; magenta|e100cc) __color='\033[35m';; cyan|00d3cf) __color='\033[36m';; gray|e4e4e4) __color='\033[90m';; darkgray|4c4c4c) __color='\033[91m';; lightgreen|00fe00) __color='\033[92m';; lightyellow|f8fe00) __color='\033[93m';; lightblue|3a80b5) __color='\033[94m';; lightmagenta|fe00fe) __color='\033[95m';; lightcyan|00fefe) __color='\033[96m';; white|ffffff) __color='\033[97m';; esac if test "$2"; then echo -en "$__color$2$__end" else echo -en "$__color" fi } # Backwards Compatibility color() { fgcolor "$@" } # Aliases fgc() { fgcolor "$@" } c() { fgcolor "$@" } # Background ## bgcolor() { local __end='\033[49m' local __color=$__end # end by default case "$1" in end|off|reset) __color=$__end;; black|000000) __color='\033[40m';; red|F00BAF) __color='\033[41m';; green|00CD00) __color='\033[42m';; yellow|CDCD00) __color='\033[43m';; blue|0286fe) __color='\033[44m';; magenta|e100cc) __color='\033[45m';; cyan|00d3cf) __color='\033[46m';; gray|e4e4e4) __color='\033[47m';; darkgray|4c4c4c) __color='\033[100m';; lightred) __color='\033[101m';; lightgreen|00fe00) __color='\033[102m';; lightyellow|f8fe00) __color='\033[103m';; lightblue|3a80b5) __color='\033[104m';; lightmagenta|fe00fe) __color='\033[105m';; lightcyan|00fefe) __color='\033[106m';; white|fffff) __color='\033[107m';; esac if test "$2"; then echo -en "$__color$2$__end" else echo -en "$__color" fi } #Backwards Compatibility background() { bgcolor "$@" } #Aliases bgc() { bgcolor "$@" } bg() { bgcolor "$@" } ## Color Bar color-bar() { if test "$2"; then for i in "$@"; do echo -en "$(background "$i" " ")" done; echo else for i in {16..21}{21..16}; do echo -en "\033[48;5;${i}m \033[0m" done; echo fi } #Alises cb() { color-bar "$@" } bar() { color-bar "$@" } ## Attributes ## attribute() { local __end='\033[0m' local __attr=$__end # end by default case "$1" in end|off|reset) __attr=$__end;; bold) __attr='\033[1m';; dim) __attr='\033[2m';; underline) __attr='\033[4m';; blink) __attr='\033[5m';; invert) __attr='\033[7m';; hidden) __attr='\033[8m';; esac if test "$2"; then echo -en "$__attr$2$__end" else echo -en "$__attr" fi } a() { attribute "$@" } ## Elements br() { echo -e "\n\r" } tab() { echo -e "\t" } indent() { local __len=4 if test "$1"; then if [[ $1 =~ $re ]] ; then __len=$1 fi fi while [ $__len -gt 0 ]; do echo -n " " __len=$(( $__len - 1 )) done } i() { indent "$@" } hr() { local __len=60 local __char='-' if ! test "$2"; then re='^[0-9]+$' if [[ $1 =~ $re ]] ; then __len=$1 elif test "$1"; then __char=$1 fi else __len=$2 __char=$1 fi while [ $__len -gt 0 ]; do echo -n "$__char" __len=$(( $__len - 1 )) done } # Icons ## icon() { local i=''; case "$1" in check|checkmark) i='\xE2\x9C\x93';; X|x|xmark) i='\xE2\x9C\x98';; '<3'|heart) i='\xE2\x9D\xA4';; sun) i='\xE2\x98\x80';; '*'|star) i='\xE2\x98\x85';; darkstar) i='\xE2\x98\x86';; umbrella) i='\xE2\x98\x82';; flag) i='\xE2\x9A\x91';; snow|snowflake) i='\xE2\x9D\x84';; music) i='\xE2\x99\xAB';; scissors) i='\xE2\x9C\x82';; tm|trademark) i='\xE2\x84\xA2';; copyright) i='\xC2\xA9';; apple) i='\xEF\xA3\xBF';; skull|bones) i='\xE2\x98\xA0';; ':-)'|':)'|smile|face) i='\xE2\x98\xBA';; *) entity $1; return 0;; esac echo -ne "$i"; } emoji() { local i="" case "$1" in 1F603|smiley|'=)'|':-)'|':)') i='😃';; 1F607|innocent|halo) i='😇';; 1F602|joy|lol|laughing) i='😂';; 1F61B|tongue|'=p'|'=P') i='😛';; 1F60A|blush|'^^'|blushing) i='😊';; 1F61F|worried|sadface|sad) i='😟';; 1F622|cry|crying|tear) i='😢';; 1F621|rage|redface) i='😡';; 1F44B|wave|hello|goodbye) i='👋';; 1F44C|ok_hand|perfect|okay|nice) i='👌';; 1F44D|thumbsup|+1|like) i='👍';; 1F44E|thumbsdown|-1|no|dislike) i='👎';; 1F63A|smiley_cat|happycat) i='😺';; 1F431|cat|kitten|:3|kitty) i='🐱';; 1F436|dog|puppy) i='🐶';; 1F41D|bee|honeybee|bumblebee) i='🐝';; 1F437|pig|pighead) i='🐷';; 1F435|monkey_face|monkey) i='🐵';; 1F42E|cow|happycow) i='🐮';; 1F43C|panda_face|panda|shpanda) i='🐼';; 1F363|sushi|raw|sashimi) i='🍣';; 1F3E0|home|house) i='🏠';; 1F453|eyeglasses|bifocals) i='👓';; 1F6AC|smoking|smoke|cigarette) i='🚬';; 1F525|fire|flame|hot|snapstreak) i='🔥';; 1F4A9|hankey|poop|shit) i='💩';; 1F37A|beer|homebrew|brew) i='🍺';; 1F36A|cookie|biscuit|chocolate) i='🍪';; 1F512|lock|padlock|secure) i='🔒';; 1F513|unlock|openpadlock) i='🔓';; 2B50|star|yellowstar) i='⭐';; 1F0CF|black_joker|joker|wild) i='🃏';; 2705|white_check_mark|check) i='✅';; 274C|x|cross|xmark) i='❌';; 1F6BD|toilet|restroom|loo) i='🚽';; 1F514|bell|ringer|ring) i='🔔';; 1F50E|mag_right|search|magnify) i='🔎';; 1F3AF|dart|bullseye|darts) i='🎯';; 1F4B5|dollar|cash|cream) i='💵';; 1F4AD|thought_balloon|thinking) i='💭';; 1F340|four_leaf_clover|luck) i='🍀';; *) #entity $1; return 0;; esac echo -ne "$i" } function e { emoji "$@" } #SHML:END # Usage / Examples ## if [[ "$(basename -- "$0")" = "shml.sh" ]]; then I=2 echo -e " $(a bold 'SHML Usage / Help') $(hr '=') $(a bold 'Section 0: Sourcing') $(hr '-') $(i $I)When installed in path: $(i $I) source \$(which shml.sh) $(i $I)When installed locally: $(i $I) source ./shml.sh $(a bold 'Section 1: Foreground') $(hr '-') $(i $I)\$(color red \"foo bar\") $(i $I)$(color red "foo bar") $(i $I)\$(color blue \"foo bar\") $(i $I)$(color blue "foo bar") $(i $I)\$(fgcolor green) $(i $I) >>foo bar<< $(i $I) >>bah boo<< $(i $I)\$(fgcolor end) $(i $I)$(fgcolor green) $(i $I)>>foo bar<< $(i $I)>>bah boo<< $(i $I)$(fgcolor end) $(i $I)Short Hand: $(a underline 'c') $(i $I)\$(c red 'foo') $(i $I)Argument list: $(i $I)black, red, green, yellow, blue, magenta, cyan, gray, $(i $I)white, darkgray, lightgreen, lightyellow, lightblue, $(i $I)lightmagenta, lightcyan $(i $I)Termination: end, off, reset $(i $I)Default (no arg): end $(a bold 'Section 2: Background') $(hr '-') $(i $I)\$(bgcolor red \"foo bar\") $(i $I)$(background red "foo bar") $(i $I)\$(background blue \"foo bar\") $(i $I)$(background blue "foo bar") $(i $I)\$(background green) $(i $I)$(i $I)>>foo bar<< $(i $I)$(i $I)>>bah boo<< $(i $I)\$(background end) $(background green) $(i $I)>>foo bar<< $(i $I)>>bah boo<< $(background end) $(i $I)Short Hand: $(a underline 'bg') $(i $I)\$(bg red 'foo') $(i $I)Argument list: $(i $I)black, red, green, yellow, blue, magenta, cyan, gray, $(i $I)white, darkgray, lightred, lightgreen, lightyellow, $(i $I)lightblue, lightmagenta, lightcyan $(i $I)Termination: end, off, reset $(i $I)Default (no arg): end $(a bold 'Section 3: Attributes') $(hr '-') $(i $I)$(a bold "Attributes only work on vt100 compatible terminals.") $(i $I)> Note: $(i $I)> $(a underline 'attribute end') turns off everything, $(i $I)> including foreground and background color. $(i $I)\$(attribute bold \"foo bar\") $(i $I)$(attribute bold "foo bar") $(i $I)\$(attribute underline \"foo bar\") $(i $I)$(attribute underline "foo bar") $(i $I)\$(attribute blink \"foo bar\") $(i $I)$(attribute blink "foo bar") $(i $I)\$(attribute invert \"foo bar\") $(i $I)$(attribute invert "foo bar") $(i $I)\$(attribute dim) $(i $I)$(i $I)>>foo bar<< $(i $I)$(i $I)>>bah boo<< $(i $I)\$(attribute end) $(i $I)$(attribute dim) $(i $I)$(i $I)>>foo bar<< $(i $I)$(i $I)>>bah boo<< $(i $I)$(attribute end) $(i $I)Short Hand: $(a underline 'a') $(i $I)\$(a bold 'foo') $(i $I)Argument list: $(i $I)bold, dim, underline, blink, invert, hidden $(i $I)Termination: end, off, reset $(i $I)Default (no arg): end $(a bold 'Section 4: Elements') $(hr '-') $(i $I)foo\$(br)\$(tab)bar $(i $I)foo$(br)$(tab)bar $(i $I) $(i $I)foo\$(br)\$(indent)bar\$(br)\$(indent 6)boo $(i $I)foo$(br)$(indent)bar$(br)$(indent 6)boo $(i $I) $(i $I)> Note: short hand for $(a underline 'indent') is $(a underline 'i') $(i $I) $(i $I)\$(hr) $(i $I)$(hr) $(i $I) $(i $I)\$(hr 50) $(i $I)$(hr 50) $(i $I) $(i $I)\$(hr '~' 40) $(i $I)$(hr '~' 40) $(i $I) $(i $I)\$(hr '#' 30) $(i $I)$(hr '#' 30) $(a bold 'Section 5: Icons') $(hr '-') $(i $I)Icons $(i $I)$(hr '-' 10) $(i $I)\$(icon check) \$(icon '<3') \$(icon '*') \$(icon ':)') $(i $I)$(icon check) $(icon '<3') $(icon '*') $(icon 'smile') $(i $I)Argument list: $(i $I)check|checkmark, X|x|xmark, <3|heart, sun, *|star, $(i $I)darkstar, umbrella, flag, snow|snowflake, music, $(i $I)scissors, tm|trademark, copyright, apple, $(i $I):-)|:)|smile|face $(a bold 'Section 6: Emojis') $(hr '-') $(i $I)Couldn't peep it with a pair of \$(emoji bifocals) $(i $I)Couldn't peep it with a pair of $(emoji bifocals) $(i $I) $(i $I)I'm no \$(emoji joker) play me as a \$(emoji joker) $(i $I)I'm no $(emoji joker) play me as a $(emoji joker) $(i $I) $(i $I)\$(emoji bee) on you like a \$(emoji house) on \$(emoji fire), \$(emoji smoke) ya $(i $I)$(emoji bee) on you like a $(emoji house) on $(emoji fire), $(emoji smoke) ya $(i $I) $(i $I)$(a bold 'Each Emoji has 1 or more alias') $(i $I) $(i $I)\$(emoji smiley) \$(emoji 1F603) \$(emoji '=)') \$(emoji ':-)') \$(emoji ':)') $(i $I)$(emoji smiley) $(emoji 1F603) $(emoji '=)') $(emoji ':-)') $(emoji ':)') $(a bold 'Section 7: Color Bar') $(hr '-') $(i $I)\$(color-bar) $(i $I)$(color-bar) $(i $I) $(i $I)\$(color-bar red green yellow blue magenta \\ $(i $I)$(i 15)cyan lightgray darkgray lightred \\ $(i $I)$(i 15)lightgreen lightyellow lightblue \\ $(i $I)$(i 15)lightmagenta lightcyan) $(i $I)$(color-bar red green yellow blue magenta \ cyan lightgray darkgray lightred \ lightgreen lightyellow lightblue \ lightmagenta lightcyan) $(i $I)Short Hand: $(a underline 'bar') $(i $I) $(i $I)\$(bar black yellow black yellow black yellow) $(i $I)$(bar black yellow black yellow black yellow) " | less -r fi # vim: ft=sh: