Example #1
0
    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))
Example #2
0
    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))
Example #3
0
    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())
Example #4
0
    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())