美文网首页
How to support formatting non-st

How to support formatting non-st

作者: 仙女星云 | 来源:发表于2016-01-11 14:05 被阅读0次

    You might found that your eclipse html editor does not support formatting some customized tags, such as tabset and tab which are introduced by Angular JS.

    For example:

    <tabset><tab heading="Apples"></tab><tab heading="Oranges"></tab></tabset>

    When you click "format" in menu, or press "Ctrl + Shift + F", you must want the following result:

    <tabset>
            <tab heading="Apples"></tab>
            <tab heading="Oranges"></tab>
    </tabset>

    Unfortunately, it doe's not give a formatted result at all.


    Now I found that we can add some customized tags into HTML pluging jar file, then the formatter will take effect.

    1. find the jar location

    # if your eclipse is installed with P2 pool
    C:\Users\<USERNAME>\.p2\pool\plugins

    # if your eclipse is not with P2 pool
    eclipse\plugins

    2. find the jar file

    org.eclipse.wst.html.core_1.1.802.vYYYYMMDDxxx.jar

    Take my Mars (eclipse version) as Example:

    org.eclipse.wst.html.core_1.1.802.v201501312139.jar

    3. Use Java Decompiler to locate the following class

    org.eclipse.wst.html.core.internal.contentmodel.HTML5ElementCollection

    4. Create a new Java project to do this hack

    It will need another jar file as lib:
    org.eclipse.wst.xml.core_xxxxxxxxxxxxxx.jar

    screen capture of the eclipse project

    5. Edit part 1)

    # Before change
    private static final String[] SECTIONING = { "article", "aside", "nav", "section"};

    # After change
    private static final String[] SECTIONING = { "article", "aside", "nav", "section", "tabset", "tab" };

    6. Edit part 2)

    protected CMNode create(String elementName) {
            CMNode edec = null;
            if (elementName.equalsIgnoreCase("ACRONYM")) {
            //......
            } else if (elementName.equalsIgnoreCase("tabset")) {
                    edec = new HedSectioning("tabset", this);
            } else if (elementName.equalsIgnoreCase("tab")) {
                    edec = new HedSectioning("tab", this);

            }

    6. Edit part 3)

            private static String[] getNames() {
                    if (fNames == null) {
                            fNames = new String[Ids50.getNumOfIds()];
                            fNames[0] = "A";
                            //......
                            fNames[133] = "video";
                            fNames[134] = "tabset";
                            fNames[135] = "tab";

                    }
                    return fNames;
            }

    7. Edit part 4)

    private static class Ids50 extends ElementCollection.Ids {
            //........
            public static final int ID_VIDEO = 133;
            public static final int ID_TABSET = 134;
            public static final int ID_TAB = 135;

    }

    8. Update the jar with new class

    jar uf org.eclipse.wst.html.core_1.1.802.v201501312139.jar  org/eclipse/wst/html/core/internal/contentmodel/HTML5ElementCollection.class
     org/eclipse/wst/html/core/internal/contentmodel/HTML5ElementCollection$Ids50.class

    Finally

    Now you can replace the plugin jar with your new jar, then the format for tabset and tab will be supported.

    相关文章

      网友评论

          本文标题:How to support formatting non-st

          本文链接:https://www.haomeiwen.com/subject/txwqkttx.html