def _export( self, fileformat, sections=None, entries=None, entry_sep='', item_sep='', template='', exclude=None, entry_start='', entry_close='', **keywords): """ Export a wordlist to various file formats. """ if not sections: if fileformat == 'txt': sections = dict( h1=('concept', '\n# Concept: {0}\n'), h2=('cogid', '## Cognate-ID: {0}\n')) elif fileformat == 'tex': sections = dict( h1=('concept', r'\section{{Concept: ``{0}"}}' + '\n'), h2=('cogid', r'\subsection{{Cognate Set: ``{0}"}}' + '\n')) elif fileformat == 'html': sections = dict( h1=('concept', '<h1>Concept: {0}</h1>'), h2=('cogid', '<h2>Cognate Set: {0}</h2>')) if not entries: if fileformat == 'txt': entries = [('language', '{0} '), ('ipa', '{0}\n')] elif fileformat == 'tex': entries = [('language', '{0} '), ('ipa', '[{0}]' + '\n')] elif fileformat == 'html': entries = [('language', '{0} '), ('ipa', '[{0}]\n')] util.setdefaults(keywords, filename=rcParams['filename']) # get the temporary dictionary out = wl2dict(self, sections, entries, exclude) # assign the output string out_string = '' # iterate over the dictionary and start to fill the string for key in sorted(out, key=lambda x: str(x).lower()): # write key to file out_string += key[1] # reassign tmp tmp = out[key] # set the pointer and the index pointer = {0: [tmp, sorted(tmp.keys())]} while True: idx = max(pointer.keys()) # check for type of current point if isinstance(tmp, dict): if pointer[idx][1]: next_key = pointer[idx][1].pop() out_string += next_key[1] tmp = pointer[idx][0][next_key] if isinstance(tmp, dict): pointer[idx + 1] = [tmp, sorted(tmp.keys())] else: pointer[idx + 1] = [tmp, tmp] else: del pointer[idx] if idx == 0: break else: tmp_strings = [] for line in sorted(tmp): tmp_strings += [item_sep.join(line)] out_string += entry_start + entry_sep.join(tmp_strings) + entry_close tmp = pointer[idx - 1][0] del pointer[idx] if fileformat == 'tex': out_string = out_string.replace('_', r'\_') tmpl = util.read_text_file(template) if template else '{0}' _write_file(keywords['filename'], tmpl.format(out_string), fileformat)
def test_wl2dict(self): from lingpy.basic.ops import wl2dict _ = wl2dict(self.wordlist, dict(s1=['concept', '{0}'], s2=['cogid', '{0}']), [('ipa', '{0}')])
def test_wl2dict(self): from lingpy.basic.ops import wl2dict res = wl2dict(self.wordlist, dict(s1='taxon', s2='cogid'), [(('1',), '{0}')])
def test_wl2dict(wordlist): _ = wl2dict(wordlist, dict(s1=['concept', '{0}'], s2=['cogid', '{0}']), [('ipa', '{0}')])