Skip to content

Commit d2f949d

Browse files
committed
Allows to have multiple language definitions through conf.py using a language_map dictionary of the type: language_map = { 'en' : { 'exercise_title_text' : 'Exercise', 'solution_title_text' : 'Solution to' }, 'fr' : { 'exercise_title_text' : 'Exercice', 'solution_title_text' : 'Solution de' } }
1 parent 5f1416a commit d2f949d

2 files changed

Lines changed: 20 additions & 11 deletions

File tree

sphinx_exercise/__init__.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,23 @@ def merge_exercises(
100100
**env.sphinx_exercise_registry,
101101
**other.sphinx_exercise_registry,
102102
}
103+
104+
def define_texts(app: Sphinx, config: Config) -> None:
105+
if config.language is not None and config.language_map is not None:
106+
lg = config.language_map[config.language]
107+
if "exercise_title_text" in lg:
108+
config.exercise_title_text = lg["exercise_title_text"]
109+
if "solution_title_text" in lg:
110+
config.solution_title_text = lg["solution_title_text"]
103111

104112

105113
def init_numfig(app: Sphinx, config: Config) -> None:
106114
"""Initialize numfig"""
115+
116+
define_texts(app, config)
107117

108118
config["numfig"] = True
109-
numfig_format = {"exercise": config.exercise_title + " %s"}
119+
numfig_format = {"exercise": config.exercise_title_text + " %s"}
110120
# Merge with current sphinx settings
111121
numfig_format.update(config.numfig_format)
112122
config.numfig_format = numfig_format
@@ -141,9 +151,12 @@ def doctree_read(app: Sphinx, document: Node) -> None:
141151
section_name = node.attributes.get("title")
142152
domain.anonlabels[name] = docname, label
143153
domain.labels[name] = docname, label, section_name
144-
145-
154+
146155
def setup(app: Sphinx) -> Dict[str, Any]:
156+
#Define the extension configuration variables
157+
app.add_config_value("exercise_title_text", "Exercise", "env") # The title of the exercise
158+
app.add_config_value("solution_title_text", "Solution to", "env") # The title of the solution
159+
app.add_config_value("language_map", None, "env") # A map of translated strings
147160
app.add_config_value("hide_solutions", False, "env")
148161

149162
app.connect("config-inited", init_numfig) # event order - 1
@@ -210,10 +223,6 @@ def setup(app: Sphinx) -> Dict[str, Any]:
210223
app.add_post_transform(ResolveLinkTextToSolutions)
211224

212225
app.add_css_file("exercise.css")
213-
214-
#Define the extension configuration variables
215-
app.add_config_value("exercise_title", "Exercise", "env") # The title of the exercise
216-
app.add_config_value("solution_title", "Solution to", "env") # The title of the solution
217226

218227
return {
219228
"version": "builtin",

sphinx_exercise/directive.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ class : str,
8888
}
8989

9090
def run(self) -> List[Node]:
91-
self.defaults = {"title_text": self.env.config.exercise_title}
91+
logger.debug("Running ExerciseDirective: exercise_title_text: " + self.env.config.exercise_title_text)
92+
self.defaults = {"title_text": self.env.config.exercise_title_text}
9293
self.serial_number = self.env.new_serialno()
9394

9495
# Initialise Registry (if needed)
@@ -153,7 +154,6 @@ def run(self) -> List[Node]:
153154
node["type"] = self.name
154155
node["hidden"] = True if "hidden" in self.options else False
155156
node["serial_number"] = self.serial_number
156-
node["node_type"] = "exercise"
157157
node.document = self.state.document
158158

159159
self.add_name(node)
@@ -217,7 +217,8 @@ class : str,
217217
solution_node = solution_node
218218

219219
def run(self) -> List[Node]:
220-
self.defaults = {"title_text": self.env.config.solution_title}
220+
logger.debug("Running SolutionDirective: solution_title_text: " + self.env.config.solution_title_text)
221+
self.defaults = {"title_text": self.env.config.solution_title_text}
221222
target_label = self.arguments[0]
222223
self.serial_number = self.env.new_serialno()
223224

@@ -271,7 +272,6 @@ def run(self) -> List[Node]:
271272
node["type"] = self.name
272273
node["hidden"] = True if "hidden" in self.options else False
273274
node["serial_number"] = self.serial_number
274-
node["node_type"] = "solution"
275275
node.document = self.state.document
276276

277277
self.add_name(node)

0 commit comments

Comments
 (0)