diff --git a/stsg/build.py b/stsg/build.py index 8a0d00d..c85c7d4 100644 --- a/stsg/build.py +++ b/stsg/build.py @@ -30,6 +30,37 @@ def get_first_header_content(content, fallback: str = ""): return fallback +def stem_to_language_code(stem: str) -> str: + language_code = stem.lower().replace("-", "_") + + if language_code in config.languages: + return language_code + + language_code = language_code.split("_")[0] + if language_code in config.languages: + return language_code + + logger.error("Didn't recognize %s as a valid language code, add it to the config, or fix your structure.", stem) + exit(1) + + +class LanguageDict(dict): + def __missing__(self, key: str): + if key not in config.languages: + raise KeyError(key) + + lang_dict = config.languages[key] + lang_dict["priority"] = lang_dict.get("priority", 0) + + elements = key.split("_") + if len(elements) > 1: + elements[-1] = elements[-1].upper() + lang_dict["code"] = "-".join(elements) + + return lang_dict + +LANGUAGES = LanguageDict() + class Template: def __init__(self, folder: Path): self.folder = folder @@ -40,23 +71,20 @@ class Template: self.article_card: str = (self.folder / "article_card.html").read_text() -class TemplateContext: - def __init__(self, name: str): - self.name = name - self.context: Dict[str, Any] = {} - - def __setitem__(self, key, value): - self.context[key] = value - - class ArticleTranslation: def __init__(self, file: Path, article: Article): self.file = file self.article = article - self.context = {} + self.context: Dict[str, Any] = {} - self.language_code = self.file.stem + # setting the location of the article translation + self.language_code = stem_to_language_code(self.file.stem) + self.location_in_tree = [self.language_code, *self.article.location_in_tree] + self.url = "/" + "/".join(self.location_in_tree) + self.dist_path = Path(config.setup.dist_directory, *self.location_in_tree) + + self.priority = LANGUAGES[self.language_code]["priority"] self.article_content = self.file.read_text() self.article_preview = self.article_content[:config.formatting.article_preview_length] + "..." @@ -68,21 +96,10 @@ class ArticleTranslation: self.url = "/" + "/".join(self.location_in_tree) self.dist_path = Path(config.setup.dist_directory, *self.location_in_tree) - _language_info = config.languages[config.formatting.fallback_language] - parsed_language_code = self.language_code.lower().replace("-", "_") - if parsed_language_code in config.languages: - _language_info = config.languages[parsed_language_code] - elif parsed_language_code.split("_")[0] in config.languages: - _language_info = config.languages[parsed_language_code.split("_")[0]] - - self.language_name: str = _language_info["native_name"] - self.language_flag: str = _language_info["flag"] - self.priority: int = _language_info.get("priority", 0) - - self.title = get_first_header_content(self.article_content, fallback=self.language_name) + self.title = get_first_header_content(self.article_content, fallback="") def __init_context__(self): - pass + self.context["language"] = LANGUAGES[self.language_code] def build(self): self.dist_path.mkdir(parents=True, exist_ok=True) @@ -100,9 +117,6 @@ class ArticleTranslation: "article_title": self.title, "article_datetime": self.article.article_written.strftime(config.formatting.datetime_format), "article_datetime_iso": self.article.article_written.isoformat(), - "article_language_name": self.language_name, - "article_language_code": self.language_code, - "article_language_flag": self.language_flag, } if return_foreign_articles: