def __prepare(ColumnNPerChunk): """BEFORE RELOAD: input_p | [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] | reference_p column_n += (input_p - reference_p) * C where C = ColumnNPerChunk AFTER RELOAD: input_p | [ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] | reference_p """ if ColumnNPerChunk is None: return [], [], [], [] # When there is more than one chunk possibly involved, then it is # possible that reload happens in between one character. I such cases # the 'input_p' cannot be used as reference for delta-add. Here, # we must rely on the 'character begin_p'. if Setup.buffer_codec.variable_character_sizes_f(): pointer = E_R.CharacterBeginP else: pointer = E_R.InputP on_begin = [Op.ColumnCountReferencePSet(pointer)] on_after_reload = [Op.ColumnCountReferencePSet(pointer)] on_end = [ Op.ColumnCountReferencePDeltaAdd(pointer, ColumnNPerChunk, False) ] on_before_reload = [ Op.ColumnCountReferencePDeltaAdd(pointer, ColumnNPerChunk, False) ] return on_begin, on_end, on_before_reload, on_after_reload
def _command(self, CC_Type, Parameter): if self.column_count_per_chunk is None: if CC_Type == E_CharacterCountType.BAD: return [Op.GotoDoorId(self.door_id_on_bad_indentation)] elif CC_Type == E_CharacterCountType.COLUMN: return [ Op.ColumnCountAdd(Parameter), ] elif CC_Type == E_CharacterCountType.GRID: return [ Op.ColumnCountGridAdd(Parameter), ] elif CC_Type == E_CharacterCountType.LINE: return [ Op.LineCountAdd(Parameter), Op.AssignConstant(E_R.Column, 1), ] else: if CC_Type == E_CharacterCountType.BAD: return [ Op.ColumnCountReferencePDeltaAdd( E_R.InputP, self.column_count_per_chunk, False), Op.ColumnCountReferencePSet(E_R.InputP), Op.GotoDoorId(self.door_id_on_bad_indentation) ] elif CC_Type == E_CharacterCountType.COLUMN: return [] elif CC_Type == E_CharacterCountType.GRID: return [ Op.ColumnCountReferencePDeltaAdd( E_R.InputP, self.column_count_per_chunk, True), Op.ColumnCountGridAdd(Parameter), Op.ColumnCountReferencePSet(E_R.InputP) ] elif CC_Type == E_CharacterCountType.LINE: return [ Op.LineCountAdd(Parameter), Op.AssignConstant(E_R.Column, 1), Op.ColumnCountReferencePSet(E_R.InputP) ]
], E_CharacterCountType.LOOP_EXIT: lambda Parameter, Dummy=None, Dummy2=None: [ ], E_CharacterCountType.COLUMN_BEFORE_APPENDIX_SM: lambda Parameter, ColumnNPerCodeUnit, ColumnAdd: [ Op.ColumnCountAdd(ColumnAdd) ], E_CharacterCountType.BEFORE_RELOAD: lambda Parameter, Dummy=None, Dummy2=None: [ ], E_CharacterCountType.AFTER_RELOAD: lambda Parameter, Dummy=None, Dummy2=None: [ ], } count_operation_db_with_reference = { E_CharacterCountType.BAD: lambda Parameter, ColumnNPerCodeUnit, Dummy=None: [ Op.ColumnCountReferencePDeltaAdd(E_R.InputP, ColumnNPerCodeUnit, False), Op.ColumnCountReferencePSet(E_R.InputP), Op.GotoDoorId(Parameter) ], E_CharacterCountType.COLUMN: lambda Parameter, ColumnNPerCodeUnit, Dummy=None: [ ], E_CharacterCountType.GRID: lambda Parameter, ColumnNPerCodeUnit, Dummy=None: [ Op.ColumnCountReferencePDeltaAdd(E_R.InputP, ColumnNPerCodeUnit, True), Op.ColumnCountGridAdd(Parameter), Op.ColumnCountReferencePSet(E_R.InputP) ], E_CharacterCountType.LINE: lambda Parameter, ColumnNPerCodeUnit, Dummy=None: [ Op.LineCountAdd(Parameter), Op.AssignConstant(E_R.Column, 1), Op.ColumnCountReferencePSet(E_R.InputP) ], E_CharacterCountType.LOOP_ENTRY: lambda Parameter, ColumnNPerCodeUnit, Dummy=None: [