def attributive(adjective, gender=MALE, role=SUBJECT, article=None):
w, g, c, a =adjective.lower(), gender[:<NUM_LIT:1>].lower(), role[:<NUM_LIT:3>].lower(), article and article.lower() or None<EOL>if w in adjective_attributive:<EOL><INDENT>return adjective_attributive[w]<EOL><DEDENT>if a is Noneor a in ("<STR_LIT>", "<STR_LIT>", "<STR_LIT>")or a in ("<STR_LIT>", "<STR_LIT>", "<STR_LIT>")or a.startswith(("<STR_LIT:all>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>")):<EOL><INDENT>return w + adjectives_strong.get((g, c), "<STR_LIT>")<EOL><DEDENT>if a.startswith(("<STR_LIT>", "<STR_LIT>"))or a.startswith(("<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>")):<EOL><INDENT>return w + adjectives_mixed.get((g, c), "<STR_LIT>")<EOL><DEDENT>if a in ("<STR_LIT>", "<STR_LIT>", "<STR_LIT:all>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>")or a.startswith((<EOL>"<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", "<STR_LIT>", <EOL>"<STR_LIT>", "<STR_LIT>", "<STR_LIT>")):<EOL><INDENT>return w + adjectives_weak.get((g, c), "<STR_LIT>")<EOL><DEDENT>return w + adjectives_strong.get((g, c), "<STR_LIT>")<EOL>
For a predicative adjective, returns the attributive form (lowercase).
        In German, the attributive is formed with -e, -em, -en, -er or -es,
        depending on gender (masculine, feminine, neuter or plural) and role
        (nominative, accusative, dative, genitive).