1####################################################################
2# Theme.awk                                                        #
3####################################################################
4
5# Prettify a string using corresponding SGR option.
6function prettify(name, string,    i, temp) {
7    temp = string
8    if ("sgr-" name in Option)
9        if (isarray(Option["sgr-" name]))
10            for (i in Option["sgr-" name])
11                temp = ansi(Option["sgr-" name][i], temp)
12        else
13            temp = ansi(Option["sgr-" name], temp)
14    return temp
15}
16
17# Return a string representing a random color.
18function randomColor(    i) {
19    i = int(5 * rand())
20    switch (i) {
21    case 0: return "green"
22    case 1: return "yellow"
23    case 2: return "blue"
24    case 3: return "magenta"
25    case 4: return "cyan"
26    default: return "default"
27    }
28}
29
30# Set theme to: random.
31function setRandomTheme(    i, n, temp) {
32    srand(systime())
33    for (i = 0; i < 3; i++) {
34        do temp = randomColor(); while (belongsTo(temp, n))
35        n[i] = temp
36    }
37
38    Option["sgr-prompt-message"] = Option["sgr-languages"] = n[0]
39    Option["sgr-original-dictionary-detailed-word-class"][1] = n[0]
40    Option["sgr-original-dictionary-detailed-word-class"][2] = "bold"
41    Option["sgr-original-dictionary-synonyms"] = n[0]
42    Option["sgr-original-dictionary-synonyms-word-class"][1] = n[0]
43    Option["sgr-original-dictionary-synonyms-word-class"][2] = "bold"
44    Option["sgr-original-dictionary-examples"] = n[0]
45    Option["sgr-original-dictionary-see-also"] = n[0]
46    Option["sgr-dictionary-word-class"][1] = n[0]
47    Option["sgr-dictionary-word-class"][2] = "bold"
48
49    Option["sgr-original"][1] = Option["sgr-original-phonetics"][1] = n[1]
50    Option["sgr-original"][2] = Option["sgr-original-phonetics"][2] = "bold"
51    Option["sgr-prompt-message-original"][1] = n[1]
52    Option["sgr-prompt-message-original"][2] = "bold"
53    Option["sgr-languages-sl"] = n[1]
54    Option["sgr-original-dictionary-detailed-explanation"][1] = n[1]
55    Option["sgr-original-dictionary-detailed-explanation"][2] = "bold"
56    Option["sgr-original-dictionary-detailed-example"] = n[1]
57    Option["sgr-original-dictionary-detailed-synonyms"] = n[1]
58    Option["sgr-original-dictionary-detailed-synonyms-item"][1] = n[1]
59    Option["sgr-original-dictionary-detailed-synonyms-item"][2] = "bold"
60    Option["sgr-original-dictionary-synonyms-synonyms"] = n[1]
61    Option["sgr-original-dictionary-synonyms-synonyms-item"][1] = n[1]
62    Option["sgr-original-dictionary-synonyms-synonyms-item"][2] = "bold"
63    Option["sgr-original-dictionary-examples-example"] = n[1]
64    Option["sgr-original-dictionary-examples-original"][1] = n[1]
65    Option["sgr-original-dictionary-examples-original"][2] = "bold"
66    Option["sgr-original-dictionary-examples-original"][3] = "underline"
67    Option["sgr-original-dictionary-see-also-phrases"] = n[1]
68    Option["sgr-original-dictionary-see-also-phrases-item"][1] = n[1]
69    Option["sgr-original-dictionary-see-also-phrases-item"][2] = "bold"
70    Option["sgr-dictionary-explanation"] = n[1]
71    Option["sgr-dictionary-explanation-item"][1] = n[1]
72    Option["sgr-dictionary-explanation-item"][2] = "bold"
73    Option["sgr-alternatives-original"][1] = n[1]
74    Option["sgr-alternatives-original"][2] = "bold"
75
76    Option["sgr-translation"][1] = Option["sgr-translation-phonetics"][1] = n[2]
77    Option["sgr-translation"][2] = Option["sgr-translation-phonetics"][2] = "bold"
78    Option["sgr-languages-tl"] = n[2]
79    Option["sgr-dictionary-word"][1] = n[2]
80    Option["sgr-dictionary-word"][2] = "bold"
81    Option["sgr-alternatives-translations"] = n[2]
82    Option["sgr-alternatives-translations-item"][1] = n[2]
83    Option["sgr-alternatives-translations-item"][2] = "bold"
84    Option["sgr-brief-translation"][1] = Option["sgr-brief-translation-phonetics"][1] = n[2]
85    Option["sgr-brief-translation"][2] = Option["sgr-brief-translation-phonetics"][2] = "bold"
86
87    Option["fmt-welcome-message"] = Name
88    Option["sgr-welcome-message"][1] = n[0]
89    Option["sgr-welcome-message"][2] = "bold"
90    Option["fmt-welcome-submessage"] = "(:q to quit)"
91    Option["sgr-welcome-submessage"] = n[0]
92    Option["fmt-prompt"] = "%s> "
93    Option["sgr-prompt"][1] = n[1]
94    Option["sgr-prompt"][2] = "bold"
95}
96
97# Set theme to: default.
98function setDefaultTheme() {
99    Option["sgr-translation"] = Option["sgr-translation-phonetics"] = "bold"
100    Option["sgr-prompt-message-original"] = "underline"
101    Option["sgr-languages-sl"] = "underline"
102    Option["sgr-languages-tl"] = "bold"
103    Option["sgr-original-dictionary-detailed-explanation"] = "bold"
104    Option["sgr-original-dictionary-detailed-synonyms-item"] = "bold"
105    Option["sgr-original-dictionary-synonyms-synonyms-item"] = "bold"
106    Option["sgr-original-dictionary-examples-original"][1] = "bold"
107    Option["sgr-original-dictionary-examples-original"][2] = "underline"
108    Option["sgr-original-dictionary-see-also-phrases-item"] = "bold"
109    Option["sgr-dictionary-word"] = "bold"
110    Option["sgr-alternatives-original"] = "underline"
111    Option["sgr-alternatives-translations-item"] = "bold"
112    Option["fmt-welcome-message"] = Name
113    Option["sgr-welcome-message"] = "bold"
114    Option["fmt-welcome-submessage"] = "(:q to quit)"
115    Option["fmt-prompt"] = "%s> "
116    Option["sgr-prompt"] = "bold"
117}
118
119# Set theme using corresponding option.
120function setTheme(    file, line, script) {
121    if (Option["theme"] && Option["theme"] != "default"                 \
122        && Option["theme"] != "none" && Option["theme"] != "random") {
123        file = Option["theme"]
124        if (!fileExists(file)) {
125            file = ENVIRON["HOME"] "/.translate-shell/" Option["theme"]
126            if (!fileExists(file)) {
127                file = ENVIRON["HOME"] "/.config/translate-shell/" Option["theme"]
128                if (!fileExists(file)) return
129            }
130        }
131    }
132
133    if (file && fileExists(file)) {
134        # Read from theme file
135        script = NULLSTR
136        while (getline line < file)
137            script = script "\n" line
138        loadOptions(script)
139    } else if (Option["theme"] == "none")
140        ;# skip
141    else if (Option["theme"] == "random")
142        setRandomTheme()
143    else
144        setDefaultTheme()
145}
146