File: replace_missing_fonts.sh

package info (click to toggle)
libreoffice 4%3A26.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,837,456 kB
  • sloc: cpp: 4,397,406; xml: 499,109; java: 254,438; python: 81,844; ansic: 33,825; perl: 30,297; javascript: 19,722; sh: 12,050; makefile: 10,852; cs: 8,865; yacc: 8,549; objc: 2,131; lex: 1,385; asm: 1,231; awk: 996; pascal: 914; csh: 20; sed: 5
file content (80 lines) | stat: -rwxr-xr-x 2,888 bytes parent folder | download | duplicates (8)
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
#!/bin/bash

declare -A replacements
replacements["Agency FB"]="Noto Sans"
replacements["Segoe UI"]="Noto Sans"
replacements["Univers 45 Light"]="Noto Sans"
replacements["Trebuchet MS"]="Noto Sans"
replacements["Perpetua"]="Noto Sans"
replacements["Calibri Light"]="Noto Sans"
replacements["Rockwell"]="Noto Sans"
replacements["DFKai-SB"]="Noto Sans"
replacements["Gill Sans MT"]="Noto Sans"
replacements["BentonSans Medium"]="Noto Sans"
replacements["BentonSans"]="Noto Sans"
replacements["AdvPS88D1"]="Noto Sans"
replacements["NexusSansOT"]="Noto Sans"
replacements["Segoe Script"]="Noto Sans"
replacements["Impact"]="Noto Sans"
replacements["Century Gothic"]="Noto Sans"
replacements["Kings Caslon Text"]="Noto Sans"
replacements["Times"]="Liberation Serif"
replacements["Jokerman"]="Noto Sans"
replacements["FreeSans"]="Noto Sans"
replacements["DINPro-Medium"]="Noto Sans"
replacements["Open Sans Light"]="Noto Sans"
replacements["Lora - regular"]="Noto Sans"
replacements["Tahoma"]="Noto Sans"
replacements["Thorndale"]="Liberation Serif"
replacements["Albany"]="Liberation Sans"
replacements["Lucida Sans Unicode"]="Noto Sans"
replacements["Candara"]="Noto Sans"
replacements["Verdana"]="Noto Sans"
replacements["Gill Sans MT"]="Noto Sans"

extracted_folder=".temp_extracted"

for file in $(find "$1" -type f); do
    file_name=$(basename "$file")
    current_extension="${file_name##*.}"

    if [[ $current_extension == "docx" || $current_extension == "xlsx" || $current_extension == "pptx" || $current_extension == "odt" ]]; then
        base_name="${file_name%.*}"

        # move the file to a new .zip file
        cp "$file" "${base_name}.zip"

        # extract the zip file to a temporary folder
        unzip -qq ./"${base_name}.zip"  -d "$extracted_folder" > /dev/null

        for key in "${!replacements[@]}"
        do
            file_changed=false
            value=${replacements[$key]}
            for subfile in $(find "$extracted_folder" -type f); do
                # Replace only if it's between quotes
                if grep -q "\"$key\"" "$subfile"; then
                    sed -i "s/\"$key\"/\"$value\"/g" "$subfile"
                    file_changed=true
                # or between '"'
                elif grep -q ""$key"" "$subfile"; then
                    sed -i "s/"$key"/\"$value\"/g" "$subfile"
                    file_changed=true
                fi
            done

            if [ "$file_changed" = true ]; then
                # Create a new zip file with the modified files
                cd "$extracted_folder"; zip -r ../"${base_name}.zip" . > /dev/null; cd ..

                mv "${base_name}.zip" "$file"

                echo "Replacing '$key' with '$value' in $file"
            fi
        done

        # Clean up the temporary extracted folder
        rm -rf "$extracted_folder"
    fi
done