def write_member_functions(Modes): # -- get the implementation of mode class functions # (on_entry, on_exit, on_indent, on_dedent, has_base, has_entry, has_exit, ...) txt = [ Lng.DEFINE_SELF("me"), "#define LexemeNull (&QUEX_NAME(LexemeNull))\n" "#define RETURN return\n" ] txt.extend( get_implementation_of_mode_functions(mode, Modes) for mode in Modes) txt.extend([ "#undef self\n", "#undef LexemeNull\n", "#undef RETURN\n", ]) return "".join(txt)
def do(Mode, ModeNameList): assert required_support_indentation_count() # 'on_dedent' and 'on_n_dedent cannot be defined at the same time. assert not ( E_IncidenceIDs.INDENTATION_DEDENT in Mode.incidence_db \ and E_IncidenceIDs.INDENTATION_N_DEDENT in Mode.incidence_db) code_fragment = Mode.incidence_db.get(E_IncidenceIDs.INDENTATION_INDENT) if code_fragment is not None: on_indent_str = Lng.SOURCE_REFERENCED(code_fragment) else: on_indent_str = Lng.TOKEN_SEND("QUEX_SETTING_TOKEN_ID_INDENT") code_fragment = Mode.incidence_db.get(E_IncidenceIDs.INDENTATION_NODENT) if code_fragment is not None: on_nodent_str = Lng.SOURCE_REFERENCED(code_fragment) else: on_nodent_str = Lng.TOKEN_SEND("QUEX_SETTING_TOKEN_ID_NODENT") code_fragment = Mode.incidence_db.get(E_IncidenceIDs.INDENTATION_DEDENT) if code_fragment is not None: on_dedent_str = Lng.SOURCE_REFERENCED(code_fragment) else: on_dedent_str = Lng.TOKEN_SEND("QUEX_SETTING_TOKEN_ID_DEDENT") code_fragment = Mode.incidence_db.get(E_IncidenceIDs.INDENTATION_N_DEDENT) if code_fragment is not None: on_n_dedent_str = Lng.SOURCE_REFERENCED(code_fragment) else: on_n_dedent_str = Lng.TOKEN_SEND_N("ClosedN", "QUEX_SETTING_TOKEN_ID_DEDENT") code_fragment = Mode.incidence_db.get(E_IncidenceIDs.INDENTATION_ERROR) on_indentation_error = "" if code_fragment is not None: on_indentation_error = Lng.SOURCE_REFERENCED(code_fragment) # Note: 'on_indentation_bad' is applied in code generation for # indentation counter in 'indentation_counter.py'. return blue_print(on_indentation_str, [ ["$$DEFINE_SELF$$", Lng.DEFINE_SELF("me")], ["$$MODE_DEFINITION$$", Lng.MODE_DEFINITION(ModeNameList)], ["$$MODE_UNDEFINITION$$", Lng.MODE_UNDEFINITION(ModeNameList)], ["$$INDENT-PROCEDURE$$", on_indent_str], ["$$NODENT-PROCEDURE$$", on_nodent_str], ["$$DEDENT-PROCEDURE$$", on_dedent_str], ["$$N-DEDENT-PROCEDURE$$", on_n_dedent_str], ["$$INDENTATION-ERROR-PROCEDURE$$", on_indentation_error] ])