diff --git a/tests/data/no/aberrasjon.wiki b/tests/data/no/aberrasjon.wiki
new file mode 100644
index 00000000..2bd98589
--- /dev/null
+++ b/tests/data/no/aberrasjon.wiki
@@ -0,0 +1,49 @@
+==Norsk==
+{{wikipediaartikkel}}
+===Substantiv===
+{{no-sub|m}}
+
+#avvik, avvikelse
+#{{astronomi|no}} avvik i en stjernes avbildede posisjon relativ til dens sanne posisjon.
+#{{optikk|no}} avbildningsfeil i [[linse]]r og [[speil]].
+#{{biologi|no}} endring i et kromosom mens celledeling pågår.
+
+====Etymologi====
+* Fra {{etyl|la|no}} {{term|aberratio|aberrātiō|lindring, avvikelse|lang=la}} [[http://dictionary.reference.com/browse/aberration Aberration hos Dictionary.com]], fra {{term|aberro|aberrō|gå unna/bort, gå vill|lang=la}}, fra {{term|ab||bort|lang=la}} + {{term|erro|errō|vandre/gå|lang=la}}[{{reference-book | last = Dobbie | first = Elliott K. | coauthors = Dunmore, C. William, et al. | editor = Barnhart, Robert K.| title = Chambers Dictionary of Etymology | origyear = 1998 | year = 2004 | publisher = Chambers Harrap Publishers Ltd | location = Edinburgh, Scotland | isbn =0550142304 | pages = 2}}].
+* Se [[aberrate]].
+
+====Uttale====
+{{lyd|LL-Q9043 (nor)-Teodor605-aberrasjon.wav|språk=no|Lyd (Oslouttale)}}
+{{uttale mangler|språk=no}}
+
+====Grammatikk====
+{{no-sub-m1|aberrasjon}}
+{{ordbank|OK}}
+
+====Oversettelser====
+{{overs-topp|avvik}}
+* {{overs|da|aberration|c}}
+* {{overs|en|aberration|c}}
+* {{overs-mangler|fi}}
+* {{overs|fr|aberration|f}}
+* {{overs|it|aberrazione|f}}
+{{overs-midt}}
+* {{overs-mangler|ru}}
+* {{overs-mangler|es}}
+* {{overs|sv|aberration|c}}
+* {{overs|de|Aberration|f}}
+{{overs-bunn}}
+{{overs-topp|astronomi}}
+* {{overs|fr|aberration|f}}
+{{overs-midt}}
+{{overs-bunn}}
+{{overs-topp|optikk}}
+* {{overs|fr|aberration|f}}
+{{overs-midt}}
+* {{overs|sv|aberration|c}}
+{{overs-bunn}}
+
+===Referanser===
+
+* {{R:Bokmålsordboka-Nynorskordboka}}
+* {{R:NAOB}}
diff --git a/tests/test_no.py b/tests/test_no.py
index 8949fc0e..73434bba 100644
--- a/tests/test_no.py
+++ b/tests/test_no.py
@@ -10,6 +10,22 @@
@pytest.mark.parametrize(
"word, pronunciations, genders, etymology, definitions, variants",
[
+ (
+ "aberrasjon",
+ [],
+ ["m"],
+ [
+ "Fra latin aberrātiō («lindring, avvikelse») , fra aberrō («gå unna/bort, gå vill»), fra ab («bort») + errō («vandre/gå»).",
+ "Se aberrate.",
+ ],
+ [
+ "avvik, avvikelse",
+ "(astronomi) avvik i en stjernes avbildede posisjon relativ til dens sanne posisjon.",
+ "(optikk) avbildningsfeil i linser og speil.",
+ "(biologi) endring i et kromosom mens celledeling pågår.",
+ ],
+ [],
+ ),
(
"bare",
[],
@@ -108,7 +124,7 @@ def test_parse_word(
),
(
"{{tidligere skrivemåte|no|naturlig tall}}",
- "tidligere skrivemåte av naturlig tall",
+ "tidligere skriveform av naturlig tall",
),
("{{urspråk|germansk|daigjōn}}", "urgermansk *daigjōn"),
("{{vokabular|overført}}", "(overført)"),
diff --git a/wikidict/lang/no/__init__.py b/wikidict/lang/no/__init__.py
index e21cf916..a4c2c031 100644
--- a/wikidict/lang/no/__init__.py
+++ b/wikidict/lang/no/__init__.py
@@ -55,6 +55,9 @@
"mangler definisjon",
"mangler etymologi",
"norm",
+ "o-begge/båe",
+ "o-nå/nu/no",
+ "o-hvem/kven",
"suffiks/oversikt",
"trenger referanse",
)
@@ -62,9 +65,12 @@
# Templates that will be completed/replaced using italic style.
templates_italic = {
**labels,
+ "ikkekomp": "ingen komparativ eller superlativ",
"internett": "Internett",
"Internett": "Internett",
+ "klær": "klesplagg",
"målenhet": "måleenhet",
+ "militær": "militært",
}
@@ -78,6 +84,10 @@
"feilstaving av": 'f"Feilstaving av {parts[1]}."',
# {{l|lt|duktė}}
"l": "parts[-1]",
+ # {{m}}
+ "m": "italic(parts[0])",
+ # {{n}}
+ "n": "italic(parts[0])",
# {{opphav|norrønt|språk=no}
"opphav": "parts[1]",
# {{prefiks|a|biotisk|språk=no}}
@@ -91,7 +101,7 @@
# {{tidligere skriveform|no|kunstnarleg}}
"tidligere skriveform": "f\"{italic('tidligere skriveform av')} {strong(parts[-1])}\"",
# {{tidligere skrivemåte|no|naturlig tall}}
- "tidligere skrivemåte": "f\"{italic('tidligere skrivemåte av')} {strong(parts[-1])}\"",
+ "tidligere skrivemåte": "f\"{italic('tidligere skriveform av')} {strong(parts[-1])}\"",
# {{vokabular|overført}}
"vokabular": "term(parts[1])",
#
@@ -108,7 +118,15 @@
}
# Templates that will be completed/replaced using custom text.
-templates_other = {"l.": "latin"}
+templates_other = {
+ "it": "italiensk",
+ "l.": "latin",
+ "L.": "latin",
+ "la": "latin",
+ "lty.": "nedertysk/lavtysk",
+ "nn": "nynorsk",
+ "tr": "tyrkisk",
+}
# Release content on GitHub
# https://github.com/BoboTiG/ebook-reader-dict/releases/tag/no
@@ -191,6 +209,8 @@ def last_template_handler(template: tuple[str, ...], locale: str, word: str = ""
>>> last_template_handler(["kontekst", "fobi", "utellelig", "kat=no:Fobier", "kat2=no:Masseord"], "no")
'(fobi, utellelig)'
+ >>> last_template_handler(["kontekst", "jus", "utellelig", "kat=no:Jus", "kat2=no:Masseord", "nesten alltid i ubestemt form", "foreldet, nå kun i uttrykket «tort og svie»", "språk=no"], "no")
+ '(jus, utellelig, nesten alltid i ubestemt form)'
>>> last_template_handler(["tema", "matematikk", "fysikk", "språk=no"], "no")
'(matematikk, fysikk)'
@@ -216,7 +236,7 @@ def last_template_handler(template: tuple[str, ...], locale: str, word: str = ""
case "etyl":
return langs.get(parts[0], parts[0])
case "kontekst" | "tema":
- return term(concat(parts, sep=", "))
+ return term(concat(parts[:3], sep=", "))
if italic_tpl := lookup_italic(tpl, locale, empty_default=True):
return term(italic_tpl)
diff --git a/wikidict/lang/no/template_handlers.py b/wikidict/lang/no/template_handlers.py
index 71c01aa7..4582256f 100644
--- a/wikidict/lang/no/template_handlers.py
+++ b/wikidict/lang/no/template_handlers.py
@@ -18,11 +18,20 @@ def render_avledet(tpl: str, parts: list[str], data: defaultdict[str, str], word
'latin approbatio («godkjennelse»)'
>>> render_avledet("avledet", ["la", "no", "Februarius", "Februārius"], defaultdict(str))
'latin Februārius'
+ >>> render_avledet("avledet", ["grc", "no", "σχηματικός", "", "som hører til månefaser"], defaultdict(str, {"tr":"skhematikos"}))
+ 'gammelgresk σχηματικός (skhematikos, «som hører til månefaser»)'
"""
- trad = parts[3] if len(parts) > 3 and parts[3] else parts[2]
- phrase = f"{langs.get(parts[0], parts[0])} {italic(trad)}"
+ in_parenthesis = []
+ if tr := data["tr"]:
+ in_parenthesis.append(italic(tr))
if len(parts) > 4:
- phrase += f" («{parts[4]}»)"
+ in_parenthesis.append(f"«{parts[4]}»")
+
+ phrase = f"{langs.get(parts[0], parts[0])} "
+ trad = parts[3] if len(parts) > 3 and parts[3] else parts[2]
+ phrase += trad if tr else italic(trad)
+ if in_parenthesis:
+ phrase += f" ({', '.join(in_parenthesis)})"
return phrase
diff --git a/wikidict/render.py b/wikidict/render.py
index 812a0d4a..06fa5ede 100644
--- a/wikidict/render.py
+++ b/wikidict/render.py
@@ -159,7 +159,7 @@ def get_items(patterns: tuple[str, ...], *, skip: tuple[str, ...] | None = None)
items = [parsed_section.contents]
match locale:
- case "da" | "no":
+ case "da":
items = get_items(("#", ":"))
case "de":
items = get_items((":",))
@@ -191,6 +191,8 @@ def get_items(patterns: tuple[str, ...], *, skip: tuple[str, ...] | None = None)
return definitions
case "it":
items = get_items(("",), skip=("=== {{etim",))
+ case "no":
+ items = get_items(("#", ":", r"\*"))
case "pt":
items = get_items((r"[:]", r"\*"))
case "ro":