• 大小: 10KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: sublime  XML  

资源简介

一个sublime XML的插件,可以让大家很方便对XML内容进行格式化操作。

资源截图

代码片段和文件信息

import sublime
import sublime_plugin
import re
import json
from xml.dom.minidom import parseString
from xml.parsers.expat import ExpatError errors
from os.path import basename splitext


class baseIndentCommand(sublime_plugin.TextCommand):
    def __init__(self view):
        self.view = view
        self.language = self.get_language()

    def get_language(self):
        syntax = self.view.settings().get(‘syntax‘)
        language = splitext(basename(syntax))[0].lower() if syntax is not None else “plain text“
        return language

    def check_enabled(self lang):
        return True

    def is_enabled(self):
        “““
        Enables or disables the ‘indent‘ command. Command will be disabled if
        there are currently no text selections and current file is not ‘xml‘ or
        ‘Plain Text‘. This helps clarify to the user about when the command can
        be executed especially useful for UI controls.
        “““
        if self.view is None:
            return False

        return self.check_enabled(self.get_language())

    def run(self edit):
        “““
        Main plugin logic for the ‘indent‘ command.
        “““
        view = self.view
        regions = view.sel()
        # if there are more than 1 region or region one and it‘s not empty
        if len(regions) > 1 or not regions[0].empty():
            for region in view.sel():
                if not region.empty():
                    s = view.substr(region).strip()
                    s = self.indent(s)
                    view.replace(edit region s)
        else:  # format all text
            alltextreg = sublime.Region(0 view.size())
            s = view.substr(alltextreg).strip()
            s = self.indent(s)
            if s:
                view.replace(edit alltextreg s)

    def indent(self s):
        return s


class AutoIndentCommand(baseIndentCommand):
    def get_text_type(self s):
        language = self.language
        if language == ‘xml‘:
            return ‘xml‘
        if language == ‘json‘:
            return ‘json‘
        if language == ‘plain text‘ and s:
            if s[0] == ‘<‘:
                return ‘xml‘
            if s[0] == ‘{‘ or s[0] == ‘[‘:
                return ‘json‘

        return ‘notsupported‘

    def indent(self s):
        text_type = self.get_text_type(s)
        if text_type == ‘xml‘:
            command = IndentxmlCommand(self.view)
        if text_type == ‘json‘:
            command = IndentJsonCommand(self.view)
        if text_type == ‘notsupported‘:
            return s

        return command.indent(s)

    def check_enabled(self lang):
        return True


class IndentxmlCommand(baseIndentCommand):
    def indent(self s):
        # figure out encoding
        utfEncoded = s.encode(“utf-8“)
        encoding = “utf-8“
        encoding_match = re.compile(b“<\?.*encoding=\“(.*?)\“.*\?>“).match(utfEncoded)
        if encoding_match:
            encoding = encoding_match.group(1).decode(“utf-8“).lower()


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-12 13:41  sublimetext_indentxml-master\
     文件           7  2018-04-12 13:41  sublimetext_indentxml-master\.gitignore
     文件          64  2018-04-12 13:41  sublimetext_indentxml-master\Default (Linux).sublime-keymap
     文件          66  2018-04-12 13:41  sublimetext_indentxml-master\Default (OSX).sublime-keymap
     文件          64  2018-04-12 13:41  sublimetext_indentxml-master\Default (Windows).sublime-keymap
     文件         257  2018-04-12 13:41  sublimetext_indentxml-master\Default.sublime-commands
     文件        1101  2018-04-12 13:41  sublimetext_indentxml-master\License.txt
     文件         704  2018-04-12 13:41  sublimetext_indentxml-master\Main.sublime-menu
     文件        1995  2018-04-12 13:41  sublimetext_indentxml-master\README.md
     文件          36  2018-04-12 13:41  sublimetext_indentxml-master\indent_xml.Sublime-settings
     文件        4199  2018-04-12 13:41  sublimetext_indentxml-master\indentxml.py
     文件         129  2018-04-12 13:41  sublimetext_indentxml-master\run_tests.sh
     文件        1317  2018-04-12 13:41  sublimetext_indentxml-master\setup.py
     目录           0  2018-04-12 13:41  sublimetext_indentxml-master\tests\
     文件         769  2018-04-12 13:41  sublimetext_indentxml-master\tests\base.py
     目录           0  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\
     文件          95  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\attributesOrdering_input.xml
     文件          92  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\attributesOrdering_output.xml
     文件          53  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\cdata_input.xml
     文件          61  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\cdata_output.xml
     文件           8  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\singleTag_input.xml
     文件           7  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\singleTag_output.xml
     文件          64  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\xmlHeader_input.xml
     文件          68  2018-04-12 13:41  sublimetext_indentxml-master\tests\fixtures\xmlHeader_output.xml
     文件        1494  2018-04-12 13:41  sublimetext_indentxml-master\tests\test_indentxml.py
     文件         144  2018-04-12 13:41  sublimetext_indentxml-master\watch_tests.sh

评论

共有 条评论