Source code for yggdrasil.languages

import os
from yggdrasil.components import import_component


_lang_dir = os.path.dirname(__file__)
_top_dir = os.path.normpath(os.path.join(_lang_dir, '../'))


[docs]def get_language_dir(lang): r"""Return the directory containing the interface for the requested language. Args: lang (str): The name of the language to return a directory for. Returns: str: The full path to the interface directory for the language. """ mod_list = [lang, lang.lower(), lang.upper(), lang.title()] if lang.lower() in ['cmake', 'lpy']: mod_list.insert(0, lang[:2].upper() + lang[2:].lower()) elif lang.lower() == 'cpp': mod_list = ['c++', 'C++'] + mod_list + ['cxx', 'CXX'] elif lang.lower() == 'c++': mod_list += ['cpp', 'CPP', 'cxx', 'CXX'] elif lang.lower() == 'cxx': mod_list += ['c++', 'C++', 'cpp', 'CPP'] for ilang in mod_list: idir = os.path.join(_lang_dir, ilang) if os.path.isdir(idir): return idir raise ValueError("Could not determine directory for the language: '%s'" % lang)
[docs]def get_language_ext(lang, default=None): r"""Return the file extension associated with the requirested language. Args: lang (str): Programming language that extension should be returned for. default (str, optional): Extension that should be returned if no extensions are registered for the language. Defaults to None and an error will be raised if there are not any extensions associated with the language. Returns: str: The most common extension associated with the specified language. Raises: ValueError: If there are not any executables associated with a language. """ driver = import_component('model', lang) all_ext = driver.get_language_ext() if not all_ext: if default is not None: return default raise ValueError("No extension associated with language: %s" % lang) return all_ext[0]