summaryrefslogtreecommitdiff
path: root/support/arara/source/src/main/kotlin/org/islandoftex/arara/configuration/LocalConfiguration.kt
blob: 959f2a9ab8432534421e4ab1c5dd2cf9596e6da7 (plain)
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
// SPDX-License-Identifier: BSD-3-Clause
package org.islandoftex.arara.configuration

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import org.islandoftex.arara.Arara
import org.islandoftex.arara.model.FileType
import org.islandoftex.arara.utils.CommonUtils
import org.mvel2.templates.TemplateRuntime

/**
 * A local configuration which resembles configuration files in the working
 * directory.
 *
 * @author Island of TeX
 * @version 5.0
 * @since 4.0
 */
@Serializable
class LocalConfiguration {
    // rule paths
    var paths: List<String> = listOf()
        get() {
            val user = mapOf(
                    "home" to (CommonUtils.getSystemPropertyOrNull("user.home")
                            ?: ""),
                    "name" to (CommonUtils.getSystemPropertyOrNull("user.name")
                            ?: ""))
            val application = mapOf(
                    "workingDirectory" to Arara.config[AraraSpec.Execution.workingDirectory].toAbsolutePath().toString()
            )

            return field.map { input ->
                var path = CommonUtils.removeKeywordNotNull(input)
                try {
                    path = TemplateRuntime.eval(path, mapOf(
                            "user" to user, "application" to application
                    )) as String
                } catch (_: RuntimeException) {
                    // do nothing, gracefully fallback to
                    // the default, unparsed path
                }
                path
            }
        }

    // file types
    var filetypes: List<FileType> = listOf()

    // the application language
    // default to English
    var language: String = Arara.config[AraraSpec.Application.defaultLanguageCode]
        get() = CommonUtils.removeKeywordNotNull(field)

    // maximum number of loops
    var loops: Int = Arara.config[AraraSpec.Execution.maxLoops]

    // verbose flag
    @SerialName("verbose")
    var isVerbose: Boolean = Arara.config[AraraSpec.Execution.verbose]

    // logging flag
    @SerialName("logging")
    var isLogging: Boolean = Arara.config[AraraSpec.Execution.logging]

    // header flag
    @SerialName("header")
    var isHeader: Boolean = Arara.config[AraraSpec.Execution.onlyHeader]

    // database name
    var dbname: String = Arara.config[AraraSpec.Execution.databaseName]
        get() = CommonUtils.removeKeywordNotNull(field)

    // log name
    var logname: String = Arara.config[AraraSpec.Execution.logName]
        get() = CommonUtils.removeKeywordNotNull(field)

    // map of preambles
    var preambles: Map<String, String> = Arara.config[AraraSpec.Execution.preambles]

    // look and feel
    // default to none
    var laf: String = Arara.config[AraraSpec.UserInteraction.lookAndFeel]
        get() = CommonUtils.removeKeywordNotNull(field)
}