def hex_to_ascii(self, sel): """Convert hex to ASCII.""" view = self.view start = sel.begin() end = sel.end() # Get range of hex data line = view.line(start) range_start = line.begin() + common.ADDRESS_OFFSET range_end = range_start + self.hex_char_range hex_range = sublime.Region(range_start, range_end) # Determine if selection is within hex range if start >= hex_range.begin() and end <= hex_range.end(): # Adjust beginning of selection to begining of first selected byte start, end, num_bytes = common.adjust_hex_sel( view, start, end, self.group_size) # Highlight hex values and their ascii chars if num_bytes != 0: self.total_bytes += num_bytes # Zero based byte number start_byte = common.get_byte_count( hex_range.begin(), start + 2, self.group_size) - 1 self.hex_selection(start_byte, num_bytes, start) # Highlight Ascii ascii_start = hex_range.end( ) + common.ASCII_OFFSET + start_byte ascii_end = ascii_start + num_bytes self.selected_bytes.append( sublime.Region(ascii_start, ascii_end))
def hex_to_ascii(self, sel): """Convert hex to ASCII.""" view = self.view start = sel.begin() end = sel.end() # Get range of hex data line = view.line(start) range_start = line.begin() + common.ADDRESS_OFFSET range_end = range_start + self.hex_char_range hex_range = sublime.Region(range_start, range_end) # Determine if selection is within hex range if start >= hex_range.begin() and end <= hex_range.end(): # Adjust beginning of selection to begining of first selected byte start, end, num_bytes = common.adjust_hex_sel(view, start, end, self.group_size) # Highlight hex values and their ascii chars if num_bytes != 0: self.total_bytes += num_bytes # Zero based byte number start_byte = common.get_byte_count(hex_range.begin(), start + 2, self.group_size) - 1 self.hex_selection(start_byte, num_bytes, start) # Highlight Ascii ascii_start = hex_range.end() + common.ASCII_OFFSET + start_byte ascii_end = ascii_start + num_bytes self.selected_bytes.append(sublime.Region(ascii_start, ascii_end))
def run(self): """Run command.""" self.view = self.window.active_view() # Identify view if self.handshake != -1 and self.handshake == self.view.id(): self.reset() self.handshake = self.view.id() # Single selection? if len(self.view.sel()) == 1: # Init if not self.init(): self.reset() return sel = self.view.sel()[0] start = sel.begin() end = sel.end() num_bytes = 0 # Get range of hex data line = self.view.line(start) range_start = line.begin() + common.ADDRESS_OFFSET range_end = range_start + common.get_hex_char_range(self.group_size, self.bytes_wide) hex_range = sublime.Region(range_start, range_end) if self.view.score_selector(start, "comment"): start, end, num_bytes = self.ascii_to_hex(start, end) # Determine if selection is within hex range if start >= hex_range.begin() and end <= hex_range.end(): # Adjust beginning of selection to begining of first selected byte if num_bytes == 0: start, end, num_bytes = common.adjust_hex_sel(self.view, start, end, self.group_size) # Get general line info for diffing and editing if num_bytes != 0: self.ascii_pos = hex_range.end() + common.ASCII_OFFSET self.total_bytes = num_bytes self.start_pos = start self.end_pos = end + 1 selection = self.view.substr(sublime.Region(start, end + 1)) self.line = { "range": line, "address": self.view.substr(sublime.Region(line.begin(), line.begin() + common.ADDRESS_OFFSET)), "selection": selection.replace(" ", ""), "data1": self.view.substr(sublime.Region(hex_range.begin(), start)).replace(" ", ""), "data2": self.view.substr(sublime.Region(end + 1, hex_range.end() + 1)).replace(" ", "") } # Send selected bytes to be edited self.edit_panel(selection.strip())