
Description:
A Unicode Bold & Italic Generator primarily used for quickly formatting facebook promotional material.
The original concept has expanded into an ever-growing collection of useful Unicode Characters,
however retains the legacy name which reflect it’s origins.
Usage:
facebooktext [OPTIONS] [TEXT]
Commands:
-b Bold
-i Italic
-l Print Unicode line
-a Print right pointing triangle
-u Display full list of Unicode options
-h Help
Examples:
facebooktext -i
facebooktext -bi
facebooktext -b Vote Now!
Extended Unicode Options:
-ar Right Arrows
-al Left Arrows
-ch Check Marks
-cr Cross Marks
-bu Bullet Point
-em Empty Character
Examples:
facebooktext -ch
facebooktext -ch4
facebooktext -ar2
#!/bin/bash
#
#
set -euo pipefail
####################
# GLOBAL VARIABLES
####################
STYLE="DEFAULT"
VERSION="2.1.2"
####################
# COLOUR VARIABLES
####################
# Terminal Formatting
RESET="\033[0m"
F_BOLD="\033[1m"
# UI Colours
CLR_RED="\033[38;5;196m" # Bright Red
CLR_GREEN="\033[38;5;46m" # Bright Lime Green
CLR_GOLD="\033[38;5;226m" # Gold
CLR_PURPLE="\033[38;5;141m" # Light Purple / Lavender
CLR_BLUE="\033[38;5;81m" # Bright Sky Blue
CLR_DGREEN="\033[38;5;2m" # Dark Forest Green
CLR_ORANGE="\033[38;5;208m" # Faded Orange
CLR_PROMPT="${F_BOLD}\033[38;5;51m" # Aqua + Bold
CLR_TEXT="\033[38;5;250m" # Light Grey
CLR_FRAME="\033[38;5;245m" # Darker Grey
####################
# CHARACTER SETS
####################
NORMAL="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
BOLD=(
𝗔 𝗕 𝗖 𝗗 𝗘 𝗙 𝗚 𝗛 𝗜 𝗝 𝗞 𝗟 𝗠 𝗡 𝗢 𝗣 𝗤 𝗥 𝗦 𝗧 𝗨 𝗩 𝗪 𝗫 𝗬 𝗭
𝗮 𝗯 𝗰 𝗱 𝗲 𝗳 𝗴 𝗵 𝗶 𝗷 𝗸 𝗹 𝗺 𝗻 𝗼 𝗽 𝗾 𝗿 𝘀 𝘁 𝘂 𝘃 𝘄 𝘅 𝘆 𝘇
𝟬 𝟭 𝟮 𝟯 𝟰 𝟱 𝟲 𝟳 𝟴 𝟵
)
ITALIC=(
𝘈 𝘉 𝘊 𝘋 𝘌 𝘍 𝘎 𝘏 𝘐 𝘑 𝘒 𝘓 𝘔 𝘕 𝘖 𝘗 𝘘 𝘙 𝘚 𝘛 𝘜 𝘝 𝘞 𝘟 𝘠 𝘡
𝘢 𝘣 𝘤 𝘥 𝘦 𝘧 𝘨 𝘩 𝘪 𝘫 𝘬 𝘭 𝘮 𝘯 𝘰 𝘱 𝘲 𝘳 𝘴 𝘵 𝘶 𝘷 𝘸 𝘹 𝘺 𝘻
𝟬 𝟭 𝟮 𝟯 𝟰 𝟱 𝟲 𝟳 𝟴 𝟵
)
BOLDITALIC=(
𝘼 𝘽 𝘾 𝘿 𝙀 𝙁 𝙂 𝙃 𝙄 𝙅 𝙆 𝙇 𝙈 𝙉 𝙊 𝙋 𝙌 𝙍 𝙎 𝙏 𝙐 𝙑 𝙒 𝙓 𝙔 𝙕
𝙖 𝙗 𝙘 𝙙 𝙚 𝙛 𝙜 𝙝 𝙞 𝙟 𝙠 𝙡 𝙢 𝙣 𝙤 𝙥 𝙦 𝙧 𝙨 𝙩 𝙪 𝙫 𝙬 𝙭 𝙮 𝙯
𝟬 𝟭 𝟮 𝟯 𝟰 𝟱 𝟲 𝟳 𝟴 𝟵
)
RIGHT_ARROWS=(
"▶"
"►"
"🢒"
"⮞"
"➤"
"⮕"
"🠲"
"🡒"
"⤅"
"⤐"
"⇀"
"⇁"
"↱"
"↳"
"➠"
"⯮"
"🢂"
)
LEFT_ARROWS=(
"◀" # ▶
"◄" # ►
"🢐" # 🢒
"⮜" # ⮞
"" # ➤
"⬅" # ⮕
"🠰" # 🠲
"🡐" # 🡒
"⬶" # ⤅
"⬷" # ⤐
"↼" # ⇀
"↽" # ⇁
"↰" # ↱
"↲" # ↳
"" # ➠
"⯬" # ⯮
"🢀" # 🢂
)
CHECK_MARK=(
"✓"
"🗸"
"✔"
"✅"
"🗹"
)
CROSS_MARK=(
"🗙"
"✗"
"✘"
"❎"
"☒"
"🗴"
)
BULLET_POINT=(
"•"
)
EMPTY_CHAR=(
"ㅤ"
)
####################
# FUNCTIONS
####################
usage() {
echo -e "${F_BOLD}${CLR_PURPLE}FacebookText Unicode Bold & Italic Generator v${VERSION}${RESET}"
echo
echo -e "${F_BOLD}Description:${RESET}"
echo -e "${CLR_TEXT} A Unicode Bold & Italic Generator primarily used for"
echo -e " quickly formatting facebook promotional material"
echo -e " The original concept has expanded into an ever-growing collection of useful Unicode"
echo -e " characters, however retains the legacy name which reflect it’s origins.${RESET}"
echo
echo -e "${F_BOLD}Usage:${RESET}${CLR_TEXT}"
echo -e " facebooktext [OPTIONS] [TEXT]${RESET}"
echo
echo -e "${F_BOLD}Options:${RESET}${CLR_TEXT}"
echo -e " -b Bold"
echo -e " -i Italic"
echo
echo -e " -l Print Unicode line"
echo -e " -a Print right pointing triangle"
echo
echo -e " -u Display full list of Unicode options"
echo
echo -e " -h Help${RESET}"
echo
echo -e "${F_BOLD}Examples:${RESET}${CLR_TEXT}"
echo -e " facebooktext"
echo -e " facebooktext -i"
echo -e " facebooktext -bi"
echo -e " facebooktext -aa"
echo -e " facebooktext -b "Vote Now!"${RESET}"
echo
}
usage_unicode() {
echo
echo -e "${F_BOLD}Extended Unicode Options:${RESET}${CLR_TEXT}"
echo -e " -ar Right Arrows"
echo -e " -al Left Arrows"
echo -e " -ch Check Marks"
echo -e " -cr Cross Marks"
echo -e " -bu Bullet Point"
echo -e " -em Empty Character"
echo
echo -e "${F_BOLD}Examples:${RESET}${CLR_TEXT}"
echo -e " facebooktext -ch"
echo -e " facebooktext -ch4"
echo -e " facebooktext -ar2${RESET}"
echo
}
separator() {
printf '──────────────────────────────\n'
}
copy_clipboard() {
if command -v xclip >/dev/null; then
xclip -selection clipboard
elif command -v wl-copy >/dev/null; then
wl-copy
else
cat
fi
}
convert() {
local input="$1"
local output=""
local c pos
local -n table="$2"
local i
for ((i = 0; i < ${#input}; i++)); do
c="${input:i:1}"
pos=$(expr index "$NORMAL" "$c") || pos=0
if ((pos)); then
output+="${table[pos - 1]}"
else
output+="$c"
fi
done
printf '%s' "$output"
}
#####################
# SHOW/COPY SYMBOLS
#####################
copy_symbol() {
local symbol="$1"
printf '%s' "$symbol" | copy_clipboard >/dev/null
echo
echo -e " $symbol ${CLR_GREEN}Copied to clipboard${RESET}"
echo
}
show_symbols() {
local title="$1"
local -n symbols="$2"
echo
echo "─────────────── "$title" ───────────────"
for ((i = 0; i < ${#symbols[@]}; i++)); do
printf '%2d %s\n' "$((i + 1))" "${symbols[i]}"
done
echo
}
copy_symbol_from_array() {
local -n symbols="$1"
local index="$2"
if ((index < 0 || index >= ${#symbols[@]})); then
echo "Invalid symbol number: $((index + 1))" >&2
exit 1
fi
copy_symbol "${symbols[index]}"
}
####################
# SYMBOL OPTIONS
####################
case "${1:-}" in
# copy common arrow
-a)
copy_symbol_from_array RIGHT_ARROWS 0
exit
;;
# Right arrow catalogue
-ar)
show_symbols "Right Arrows" RIGHT_ARROWS
exit
;;
# Left arrows caralogue
-al)
show_symbols "Left Arrows" LEFT_ARROWS
copy_symbol_from_array LEFT_ARROWS 0
exit
;;
# Checks
-ch)
show_symbols "Check Marks" CHECK_MARK
exit
;;
# Crosses
-cr)
show_symbols "Cross Marks" CROSS_MARK
exit
;;
# Bullet Point
-bu)
copy_symbol_from_array BULLET_POINT 0
exit
;;
# Bullet Point
-em)
copy_symbol_from_array EMPTY_CHAR 0
exit
;;
# Numbered symbols
-ar[0-9]* | -al[0-9]* | -ch[0-9]* | -cr[0-9]*)
number="${1:3}"
if [[ ! "$number" =~ ^[0-9]+$ ]]; then
echo "Invalid symbol number: $number" >&2
exit 1
fi
case "${1:1:2}" in
ar) symbols=RIGHT_ARROWS ;;
al) symbols=LEFT_ARROWS ;;
ch) symbols=CHECK_MARK ;;
cr) symbols=CROSS_MARK ;;
*)
echo "Unknown symbol type: ${1:1:2}" >&2
exit 1
;;
esac
copy_symbol_from_array "$symbols" "$((number - 1))"
exit
;;
esac
####################
# OPTIONS
####################
while getopts ":bilauh" opt; do
case "$opt" in
b)
case "$STYLE" in
DEFAULT) STYLE="BOLD" ;;
ITALIC) STYLE="BOLDITALIC" ;;
esac
;;
i)
case "$STYLE" in
DEFAULT) STYLE="ITALIC" ;;
BOLD) STYLE="BOLDITALIC" ;;
esac
;;
l)
echo
echo -e " ${CLR_GREEN}Copied to clipboard${RESET}"
echo
separator
separator | copy_clipboard >/dev/null
echo
echo
exit
;;
h)
usage
exit
;;
u)
usage_unicode
exit
;;
esac
done
shift $((OPTIND - 1))
case "$STYLE" in
DEFAULT | BOLD)
TABLE=BOLD
;;
ITALIC)
TABLE=ITALIC
;;
BOLDITALIC)
TABLE=BOLDITALIC
;;
esac
####################
# INPUT
####################
if (($#)); then
OUTPUT=$(convert "$*" "$TABLE")
printf '%s' "$OUTPUT" | copy_clipboard >/dev/null
echo
echo -e " ${OUTPUT}"
echo
separator
echo -e "${CLR_GREEN} Copied to clipboard.${RESET}"
separator
echo
else
echo
echo -e "${F_BOLD}${CLR_BLUE}Enter desired text - then press ${CLR_GOLD}Ctrl+D${CLR_BLUE} when finished${RESET}"
echo
INPUT=$(cat)
OUTPUT=""
while IFS= read -r line || [[ -n $line ]]; do
OUTPUT+="$(convert "$line" "$TABLE")"$'\n'
done <<<"$INPUT"
echo
echo
echo -e "───────────── ${CLR_ORANGE}Converted Text${RESET} ─────────────────"
echo
printf '%s' "$OUTPUT"
printf '%s' "$OUTPUT" | copy_clipboard >/dev/null
echo
separator
echo -e "${CLR_GREEN}Copied to clipboard.${RESET}"
separator
echo
fi
