def hand_diagram(hand): void = '--' hold = [x if len(x) > 0 else void for x in hand.split(',')] suit = ['!S', '!H', '!D', '!C'] suits = [pf.Str(s + h) for s, h in zip(suit, hold)] res = sum(([x, pf.LineBreak()] for x in suits), [])[:-1] return pf.Plain(res)
def translate_filter(key, value, _format, _): if key not in ['Space', 'Str']: debug(key, value) try: cls = getattr(pandocfilters, key) except AttributeError: return if key == 'Para' and value: marker = value[0].get('c') if isinstance(marker, str) and marker.startswith('!!!') and len(value) > 2: # Admonition case if marker != '!!!': # Lost space after !!! case value.insert(1, pandocfilters.Str(marker[3:])) value.insert(1, pandocfilters.Space()) value[0]['c'] = '!!!' admonition_value = [] remaining_para_value = [] in_admonition = True for item in value: if in_admonition: if item.get('t') == 'SoftBreak': in_admonition = False else: admonition_value.append(item) else: remaining_para_value.append(item) break_value = [ pandocfilters.LineBreak(), pandocfilters.Str(' ' * 4) ] if admonition_value[-1].get('t') == 'Quoted': text = process_sentence(admonition_value[-1]['c'][-1]) text[0]['c'] = '"' + text[0]['c'] text[-1]['c'] = text[-1]['c'] + '"' admonition_value.pop(-1) admonition_value += text else: text = admonition_value[-1].get('c') if text: text = translate(text[0].upper() + text[1:]) admonition_value.append(pandocfilters.Space()) admonition_value.append(pandocfilters.Str(f'"{text}"')) return cls(admonition_value + break_value + process_sentence(remaining_para_value)) else: return cls(process_sentence(value)) elif key == 'Plain' or key == 'Strong' or key == 'Emph': return cls(process_sentence(value)) elif key == 'Link': try: # Plain links case if value[2][0] == value[1][0].get('c'): return pandocfilters.Str(value[2][0]) except IndexError: pass value[1] = process_sentence(value[1]) return cls(*value) elif key == 'Header': # TODO: title case header in en if '_' not in value[1][0]: # Preserve some manually specified anchors value[1][0] = slugify.slugify(value[1][0], separator='-', word_boundary=True, save_order=True) value[2] = process_sentence(value[2]) return cls(*value) elif key == 'SoftBreak': return pandocfilters.LineBreak() return
def translate_filter(key, value, _format, _): if key not in ['Space', 'Str']: debug(key, value) try: cls = getattr(pandocfilters, key) except AttributeError: return if key == 'Para' and value: marker = value[0].get('c') if isinstance(marker, str) and marker.startswith('!!!') and len(value) > 2: # Admonition case if marker != '!!!': # Lost space after !!! case value.insert(1, pandocfilters.Str(marker[3:])) value.insert(1, pandocfilters.Space()) value[0]['c'] = '!!!' admonition_value = [] remaining_para_value = [] in_admonition = True break_value = [pandocfilters.LineBreak(), pandocfilters.Str(' ' * 4)] for item in value: if in_admonition: if item.get('t') == 'SoftBreak': in_admonition = False else: admonition_value.append(item) else: if item.get('t') == 'SoftBreak': remaining_para_value += break_value else: remaining_para_value.append(item) if admonition_value[-1].get('t') == 'Quoted': text = process_sentence(admonition_value[-1]['c'][-1]) text[0]['c'] = '"' + text[0]['c'] text[-1]['c'] = text[-1]['c'] + '"' admonition_value.pop(-1) admonition_value += text else: text = admonition_value[-1].get('c') if text: text = translate.translate(text[0].upper() + text[1:]) admonition_value.append(pandocfilters.Space()) admonition_value.append(pandocfilters.Str(f'"{text}"')) return cls(admonition_value + break_value + process_sentence(remaining_para_value)) else: return cls(process_sentence(value)) elif key == 'Plain' or key == 'Strong' or key == 'Emph': return cls(process_sentence(value)) elif key == 'Link': try: # Plain links case if value[2][0] == value[1][0].get('c'): return pandocfilters.Str(value[2][0]) except IndexError: pass value[1] = process_sentence(value[1]) href = value[2][0] if not (href.startswith('http') or href.startswith('#')): anchor = None attempts = 10 if '#' in href: href, anchor = href.split('#', 1) if href.endswith('.md') and not href.startswith('/'): parts = [part for part in os.environ['INPUT'].split('/') if len(part) == 2] lang = parts[-1] script_path = os.path.dirname(__file__) base_path = os.path.abspath(f'{script_path}/../../{lang}') href = os.path.join( os.path.relpath(base_path, os.path.dirname(os.environ['INPUT'])), os.path.relpath(href, base_path) ) if anchor: href = f'{href}#{anchor}' value[2][0] = href return cls(*value) elif key == 'Header': if value[1][0].islower() and '_' not in value[1][0]: # Preserve some manually specified anchors value[1][0] = slugify.slugify(value[1][0], separator='-', word_boundary=True, save_order=True) # TODO: title case header in en value[2] = process_sentence(value[2], is_header=True) return cls(*value) elif key == 'SoftBreak': return pandocfilters.LineBreak() return