-
Notifications
You must be signed in to change notification settings - Fork 1
/
FONT_RIPPER
157 lines (138 loc) · 10.1 KB
/
FONT_RIPPER
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
######################## #########################
######################## _____ _ _____ _____ _ _____ _ #########################
######################## | | |_| |_ _| __ |___| |_| __|___ ___| |_ #########################
######################## | | | | | | | | | __ -| .'| | | | . |_ -| | #########################
######################## |_____|_|_|_|_|_|_ |_____|__,|_|_|_____|___|___|_|_| #########################
######################## |___| #########################
######################## #########################
#######################################################################################################################
######################## REQUIRED TOOLS: #########################
######################## SED: https://www.gnu.org/software/sed/manual/sed.html #########################
######################## XIDEL: https://github.com/benibela/xidel #########################
######################## CURL: https://github.com/curl/curl #########################
######################## WOFF2 https://github.com/google/woff2 #########################
#######################################################################################################################
#######################################################################################################################
######################## ==What This Script Does:== #########################
#######################################################################################################################
######################## RIPZ ANY FONT FROM FONTS.COM.. #########################
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
### /$$$$$$$ /$$$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$ ###
### ;;;;; | $$__ $$| $$_____/ /$$__ $$| $$__ $$ |__ $$__/| $$ | $$|_ $$_/ /$$__ $$ ;;;;; ###
### ;;;;; | $$ \ $$| $$ | $$ \ $$| $$ \ $$ | $$ | $$ | $$ | $$ | $$ \__/ ;;;;; ###
### ;;;;; | $$$$$$$/| $$$$$ | $$$$$$$$| $$ | $$ | $$ | $$$$$$$$ | $$ | $$$$$$ ;;;;; ###
### ;;;;; | $$$$$$$/| $$$$$ | $$$$$$$$| $$ | $$ | $$ | $$$$$$$$ | $$ | $$$$$$ ;;;;; ###
### ;;;;; | $$__ $$| $$__/ | $$__ $$| $$ | $$ | $$ | $$__ $$ | $$ \____ $$ ;;;;; ###
###..;;;;;.. | $$ \ $$| $$ | $$ | $$| $$ | $$ | $$ | $$ | $$ | $$ /$$ \ $$ ..;;;;;..###
### ':::::' | $$ | $$| $$$$$$$$| $$ | $$| $$$$$$$/ | $$ | $$ | $$ /$$$$$$| $$$$$$/ ':::::' ###
### ':` |__/ |__/|________/|__/ |__/|_______/ |__/ |__/ |__/|______/ \______/ ':` ###
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
#######################################################################################################################
## **YOU MUST PROVIDE A FONT FAMILY URL FROM FONTS.COM, NOT A PACKAGE URL..IT'll LOOK LIKE THIS:** ##
## https://www.fonts.com/font/melvastype/kuunari-rounded ##
## https://www.fonts.com/font/linotype/neue-helvetica ##
## https://www.fonts.com/font/fontfabric/nexa-rust ##
################################ ...ETC ETC ETC ...################################
#######################################################################################################################
#######################################################################################################################
## SETUP TERM TO OUTPUT IN COLOR
export TERM=xterm-256color
## GRAB MAIN FAMILY FONT PAGE URL VIA CLI INPUT
clear
read -e -r -p "$(clear) $(printf "\e[29m\e[1m\nProvide The Fonts.com Font Family URL:\e[0m") $(printf "\e\033[0;91m\nExample: https://www.fonts.com/font/melvastype/kuunari-rounded\e[0m") $(printf "\e[29m\e[1m\n\nENTER THE URL:\e[0m\n\e\033[1;32m> \e[0m")" FAMILY_FONT_URL
clear
## DUMP SOURCECODE FROM FAMILY FONT URL VIA CURL..STORING IT AS A VARIABLE
FAMILY_SOURCECODE=$(curl --silent -L "${FAMILY_FONT_URL}")
## GRAB FONT FAMILY NAME & AUTHOR
FONT_FAMILY_INFO=$(echo "${FAMILY_SOURCECODE}" | xidel -s --output-separator=" By " --xpath "//div[@class='content']//h1" --xpath "/html/body/div/div/div[3]/div[1]/div/div[1]/p/a/text()" -)
## CREATE EXTRA VAIRABLES FROM INPUT FONT FAMILY URL
FAMILY_NAME_DASHES=$(echo $FONT_FAMILY_INFO | sed -e 's# By.*$##g' -e 's#$#-Font-Family#g' -e 's# #-#g')
FONT_FAMILY_PREFIX=$(echo $FONT_FAMILY_INFO | sed -e 's# By.*$##g' -e 's# #-#g')
## MAKE PARENT FONT FAMILY FOLDER
mkdir "${FAMILY_NAME_DASHES}"
## DISPLAY PARSED FONT FAMILY INFO FROM PROVIDED URL
printf "\n\e\033[0;92mFont Family Extracted From URL:\e[0m"
printf "\n\e[29m\e[1m\"${FONT_FAMILY_INFO}\"\e[0m\n\n\n"
sleep 5
clear
printf "\n\e\033[0;96mOkie Dokey, let's run this script...\e[0m"
sleep 3
clear
## GRAB ALL URLS FROM FONT FAMILY INDEX PAGE
printf "\n\e\033[0;92mEXTRACTING EACH FAMILY MEMBER'S URL..\e[0m"
printf "\n\e[29m\e[1mSAVING URLs TO TMP URL LIST FILE..\e[0m"
sleep 4
echo "${FAMILY_SOURCECODE}" | xidel -s --xpath "//li/h2/a/@href" - | sed 's#^#https://www.fonts.com#g' >>"${FAMILY_NAME_DASHES}__URLS.tmp"
clear
## LOOP URL LIST TO GENERATE FORMATTED ARIA2C INPUT FILE
printf "\n\e\033[0;92mLOOP PARSING EACH FAMILY MEMBER'S SOURCECODE..\e[0m"
printf "\n\e[29m\e[1mBUILDING THE ARIA2C FORMATTED INPUT FILE..\e[0m"
sleep 4
while read -r CURRENT_LOOP_URL; do
## GRAB THE WOFF2 URL FROM EACH FONT FAMILY MEMBER'S SUB-PAGE
FAMILY_MEMBER_WOFF2_URL=$(xidel "${CURRENT_LOOP_URL}" -s --xpath "(//div[@data-view='webfont']/div[1])[1]" - | grep --color -i -E -o "(fast.fonts.net.*?\.woff2)" | sed 's#^#https://#g')
## BUILD THE FORMATTED ARIA2C INPUT FILE...LINE BY LINE
echo "$CURRENT_LOOP_URL" | sed -e "s#\(.*/\)\(.*\)#${FAMILY_MEMBER_WOFF2_URL}\n\tdir=\./${FAMILY_NAME_DASHES}\n\tout=${FONT_FAMILY_PREFIX}-\2.woff2#g" >>ARIA2C_INPUT_FILE.txt
done <"./${FAMILY_NAME_DASHES}__URLS.tmp"
clear
## MULTITHREAD DOWNLOAD FONTS VIA ARIA2C
printf "\n\e\033[0;92mBEGIN DOWNLOADING FONTS VIA ARIA2C..\e[0m"
printf "\n\e[29m\e[1mHOW LONG THIS TAKES WILL DEPEND ON HOW MANY FONTS ARE IN THE FAMILY..\e[0m"
sleep 4
aria2c -x12 -s12 -j12 -i ./ARIA2C_INPUT_FILE.txt
clear
printf "\n\e\033[0;92mARIA2C HAS DOWNLOADED ALL OF THE FONTS IN THE FAMILY..\e[0m"
printf "\n\e[29m\e[1mMOVING ON..\e[0m"
sleep 4
clear
## REMOVE TMP FAMILY FONT URL LIST & ARIA2C INPUT FILE
printf "\n\e\033[0;96mLET'S CLEANUP THESE TMP FILES...\e[0m"
sleep 2
rm "./${FAMILY_NAME_DASHES}__URLS.tmp"
rm "./ARIA2C_INPUT_FILE.txt"
## MAKE WOFF2 & TTF OUTPUT FOLDERS
printf "\n\e[29m\e[1mMaking TTF & WOFF2 FOLDERS..\e[0m\n"
sleep 2
mkdir "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-TTF"
mkdir "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-WOFF2"
## DECOMPRESS WOFF2 FONTS IN TO TTF
printf "\n\e[29m\e[1mDECOMPRESS WOFF2 FILES, CREATING TTF FILES...\e[0m\n"
sleep 2
for file in ${FAMILY_NAME_DASHES}/*.woff2; do woff2_decompress $file; done
##MOVE WOFF2 TO "${FAMILY_NAME_DASHES}-WOFF2"
printf "\n\e[29m\e[1mMOVING WOFF2 FILES TO THEIR OWN FOLDER...\e[0m\n"
sleep 2
mv ${FAMILY_NAME_DASHES}/*.woff2 "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-WOFF2"
##MOVE TTF TO "${FAMILY_NAME_DASHES}-TTF"
printf "\n\e[29m\e[1mMOVING TTF FILES TO THEIR OWN FOLDER...\e[0m\n"
sleep 2
mv ${FAMILY_NAME_DASHES}/*.ttf "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-TTF"
## COMPRESS WOFF2 FONT FAMILY FOLDER
printf "\n\n\u001b[1m\u001b[31mCOMPRESSING THE WOFF2 FONT FOLDER...\e[0m\n"
sleep 2
zip -rmq "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-WOFF2.zip" "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-WOFF2"
## COMPRESS TFF FONT FAMILY FOLDER
printf "\n\n\u001b[1m\u001b[31mCOMPRESSING THE TTF FONT FOLDER...\e[0m\n"
sleep 2
zip -rmq "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-TTF.zip" "${FAMILY_NAME_DASHES}/${FAMILY_NAME_DASHES}-TTF"
## COMPRESSING THE FONT FAMILY FOLDER CONTAINING BOTH TTF & WOFF2 ZIP FILES
printf "\n\u001b[1m\u001b[31mCOMPRESSING FONT FAMILY FOLDER CONTAINING BOTH TTF & WOFF2 ZIP FILES...\e[0m\n"
sleep 2
zip -rmq "${FAMILY_NAME_DASHES}.zip" "${FAMILY_NAME_DASHES}"
## THAT'S ALL, FOLKS
clear
printf "\n\e[29m\e[1mALL DONE\e[0m\n"
printf "\n\e[29m\e[1mFor More Scripts\nVisit...\e[0m\n"
printf "\n\u001b[1m\u001b[31m\ngithub.com/OhMyBahGosh\u001b[0m\n\n"
sleep 5
exit 0