This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 152042
Collapse All | Expand All

(-)a/javascript2.editor/src/org/netbeans/modules/javascript2/editor/embedding/JsEmbeddingProvider.java (-10 / +44 lines)
Lines 549-557 Link Here
549
                    // Emit the block verbatim
549
                    // Emit the block verbatim
550
                    int sourceStart = ts.offset();
550
                    int sourceStart = ts.offset();
551
                    String text = htmlToken.text().toString();
551
                    String text = htmlToken.text().toString();
552
                    List<EmbeddingPosition> jsEmbeddings = extractJsEmbeddings(text, sourceStart);
552
                    List<EmbeddingInformation> jsEmbeddings = extractJsEmbeddings(text, sourceStart, snapshot.getMimeType().equals(XHTML_MIME_TYPE));
553
                    for (EmbeddingPosition embedding : jsEmbeddings) {
553
                    for (EmbeddingInformation embedding : jsEmbeddings) {
554
                        embeddings.add(snapshot.create(embedding.getOffset(), embedding.getLength(), JsTokenId.JAVASCRIPT_MIME_TYPE));
554
                        if (embedding.getContent() != null) {
555
                            embeddings.add(snapshot.create(embedding.getContent(), JsTokenId.JAVASCRIPT_MIME_TYPE));
556
                        } else {
557
                            embeddings.add(snapshot.create(embedding.getOffset(), embedding.getLength(), JsTokenId.JAVASCRIPT_MIME_TYPE));
558
                        }
555
                    }
559
                    }
556
// XXX: need better support in parsing api for this
560
// XXX: need better support in parsing api for this
557
//                embeddings.add(snapshot.create("/*", JsTokenId.JAVASCRIPT_MIME_TYPE));
561
//                embeddings.add(snapshot.create("/*", JsTokenId.JAVASCRIPT_MIME_TYPE));
Lines 723-735 Link Here
723
        }
727
        }
724
    }
728
    }
725
729
726
    protected static List<EmbeddingPosition> extractJsEmbeddings(String text, int sourceStart) {
730
    protected static List<EmbeddingInformation> extractJsEmbeddings(String text, int sourceStart, boolean decode) {
727
        List<EmbeddingPosition> embeddings = new LinkedList<EmbeddingPosition>();
731
        List<EmbeddingInformation> embeddings = new LinkedList<EmbeddingInformation>();
728
        Scanner scanner = new Scanner(text).useDelimiter("(<!--).*(-->)"); //NOI18N
732
        Scanner scanner = new Scanner(text).useDelimiter("(<!--).*(-->)"); //NOI18N
729
        while (scanner.hasNext()) {
733
        while (scanner.hasNext()) {
730
            scanner.next();
734
            scanner.next();
731
            MatchResult match = scanner.match();
735
            MatchResult match = scanner.match();
732
            embeddings.add(new EmbeddingPosition(sourceStart + match.start(), match.group().length()));
736
            String toEmbed = match.group();
737
            if (decode && (toEmbed.contains("&lt;") || toEmbed.contains("&gt;"))) {
738
                Scanner decodeScanner = new Scanner(text).useDelimiter("(&lt;|&gt;)"); //NOI18N
739
                while (decodeScanner.hasNext()) {
740
                    decodeScanner.next();
741
                    MatchResult decodeMatch = decodeScanner.match();
742
                    int originalOffset = sourceStart + match.start() + decodeMatch.start();
743
                    int originalLength = decodeMatch.group().length();
744
                    int decodeOffset = originalLength + match.start() + decodeMatch.start();
745
                    embeddings.add(new EmbeddingInformation(originalOffset, originalLength));
746
                    if (decodeScanner.hasNext()) {
747
                        embeddings.add(new EmbeddingInformation(toEmbed.substring(decodeOffset, decodeOffset + 4)));
748
                    }
749
                }
750
            } else {
751
                embeddings.add(new EmbeddingInformation(sourceStart + match.start(), toEmbed.length()));
752
            }
733
        }
753
        }
734
        return embeddings;
754
        return embeddings;
735
    }
755
    }
Lines 744-759 Link Here
744
        Embedding lastInlinedJavscriptEmbedding = null;
764
        Embedding lastInlinedJavscriptEmbedding = null;
745
    }
765
    }
746
766
747
    protected static final class EmbeddingPosition {
767
    protected static final class EmbeddingInformation {
748
768
749
        private final int offset;
769
        private int offset;
750
        private final int length;
770
        private int length;
771
        private CharSequence content;
751
772
752
        public EmbeddingPosition(int offset, int length) {
773
        public EmbeddingInformation(int offset, int length) {
753
            this.offset = offset;
774
            this.offset = offset;
754
            this.length = length;
775
            this.length = length;
755
        }
776
        }
756
777
778
        public EmbeddingInformation(CharSequence content) {
779
            this.content = getDecodedContent(content);
780
        }
781
757
        public int getLength() {
782
        public int getLength() {
758
            return length;
783
            return length;
759
        }
784
        }
Lines 762-766 Link Here
762
            return offset;
787
            return offset;
763
        }
788
        }
764
789
790
        public CharSequence getContent() {
791
            return content;
792
        }
793
794
        private CharSequence getDecodedContent(CharSequence content) {
795
            String contentHolder = CharSequenceUtilities.toString(content);
796
            return contentHolder.replace("&lt;", "<").replace("&gt;", ">");
797
        }
798
765
    }
799
    }
766
}
800
}
(-)a/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/embedding/JsEmbeddingProviderTest.java (-9 / +21 lines)
Lines 43-49 Link Here
43
43
44
import java.util.List;
44
import java.util.List;
45
import org.netbeans.modules.javascript2.editor.JsTestBase;
45
import org.netbeans.modules.javascript2.editor.JsTestBase;
46
import org.netbeans.modules.javascript2.editor.embedding.JsEmbeddingProvider.EmbeddingPosition;
46
import org.netbeans.modules.javascript2.editor.embedding.JsEmbeddingProvider.EmbeddingInformation;
47
47
48
/**
48
/**
49
 *
49
 *
Lines 57-68 Link Here
57
57
58
    public void testExtractJsEmbeddings01() throws Exception {
58
    public void testExtractJsEmbeddings01() throws Exception {
59
        String text = "                          ";
59
        String text = "                          ";
60
        List<EmbeddingPosition> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0);
60
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0, false);
61
        assertEquals(embeddings.size(), 1);
61
        assertEquals(embeddings.size(), 1);
62
        assertEquals(0, embeddings.get(0).getOffset());
62
        assertEquals(0, embeddings.get(0).getOffset());
63
        assertEquals(text.length(), embeddings.get(0).getLength());
63
        assertEquals(text.length(), embeddings.get(0).getLength());
64
64
65
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5);
65
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5, false);
66
        assertEquals(embeddings.size(), 1);
66
        assertEquals(embeddings.size(), 1);
67
        assertEquals(5, embeddings.get(0).getOffset());
67
        assertEquals(5, embeddings.get(0).getOffset());
68
        assertEquals(text.length(), embeddings.get(0).getLength());
68
        assertEquals(text.length(), embeddings.get(0).getLength());
Lines 70-81 Link Here
70
70
71
    public void testExtractJsEmbeddings02() throws Exception {
71
    public void testExtractJsEmbeddings02() throws Exception {
72
        String text = "    <!-- anything \n -->             ";
72
        String text = "    <!-- anything \n -->             ";
73
        List<EmbeddingPosition> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0);
73
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0, false);
74
        assertEquals(embeddings.size(), 1);
74
        assertEquals(embeddings.size(), 1);
75
        assertEquals(0, embeddings.get(0).getOffset());
75
        assertEquals(0, embeddings.get(0).getOffset());
76
        assertEquals(text.length(), embeddings.get(0).getLength());
76
        assertEquals(text.length(), embeddings.get(0).getLength());
77
77
78
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5);
78
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5, false);
79
        assertEquals(embeddings.size(), 1);
79
        assertEquals(embeddings.size(), 1);
80
        assertEquals(5, embeddings.get(0).getOffset());
80
        assertEquals(5, embeddings.get(0).getOffset());
81
        assertEquals(text.length(), embeddings.get(0).getLength());
81
        assertEquals(text.length(), embeddings.get(0).getLength());
Lines 83-94 Link Here
83
83
84
    public void testExtractJsEmbeddings03() throws Exception {
84
    public void testExtractJsEmbeddings03() throws Exception {
85
        String text = "       <!-- Cau Pisliku -->             ";
85
        String text = "       <!-- Cau Pisliku -->             ";
86
        List<EmbeddingPosition> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0);
86
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0, false);
87
        assertEquals(embeddings.size(), 2);
87
        assertEquals(embeddings.size(), 2);
88
        assertEquals(0, embeddings.get(0).getOffset());
88
        assertEquals(0, embeddings.get(0).getOffset());
89
        assertEquals(text.indexOf("<!-- Cau Pisliku -->"), embeddings.get(0).getLength());
89
        assertEquals(text.indexOf("<!-- Cau Pisliku -->"), embeddings.get(0).getLength());
90
90
91
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5);
91
        embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 5, false);
92
        assertEquals(embeddings.size(), 2);
92
        assertEquals(embeddings.size(), 2);
93
        assertEquals(5, embeddings.get(0).getOffset());
93
        assertEquals(5, embeddings.get(0).getOffset());
94
        assertEquals(text.indexOf("<!-- Cau Pisliku -->"), embeddings.get(0).getLength());
94
        assertEquals(text.indexOf("<!-- Cau Pisliku -->"), embeddings.get(0).getLength());
Lines 96-102 Link Here
96
96
97
    public void testExtractJsEmbeddings04() throws Exception {
97
    public void testExtractJsEmbeddings04() throws Exception {
98
        String text = "<!-- comment --> javascript code \n<!-- comment -->";
98
        String text = "<!-- comment --> javascript code \n<!-- comment -->";
99
        List<EmbeddingPosition> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0);
99
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0, false);
100
        assertEquals(1, embeddings.size());
100
        assertEquals(1, embeddings.size());
101
        assertEquals(text.indexOf(" javascript code "), embeddings.get(0).getOffset());
101
        assertEquals(text.indexOf(" javascript code "), embeddings.get(0).getOffset());
102
        assertEquals(18, embeddings.get(0).getLength());
102
        assertEquals(18, embeddings.get(0).getLength());
Lines 124-130 Link Here
124
"                afsdasdf\n"+
124
"                afsdasdf\n"+
125
"\n"+
125
"\n"+
126
"        ";
126
"        ";
127
        List<EmbeddingPosition> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 193);
127
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 193, false);
128
        assertEquals(6, embeddings.size());
128
        assertEquals(6, embeddings.size());
129
        assertEquals(193, embeddings.get(0).getOffset());
129
        assertEquals(193, embeddings.get(0).getOffset());
130
        assertEquals(text.indexOf("<!-- aaaaaaaa0 -->") + 18 + 193, embeddings.get(1).getOffset());
130
        assertEquals(text.indexOf("<!-- aaaaaaaa0 -->") + 18 + 193, embeddings.get(1).getOffset());
Lines 141-144 Link Here
141
        assertEquals(36, embeddings.get(5).getLength());
141
        assertEquals(36, embeddings.get(5).getLength());
142
    }
142
    }
143
143
144
    public void testExtractJsEmbeddings06() throws Exception {
145
        String text = " for (var i = 0; i &lt; 10 ; i++ ) {} ";
146
        List<EmbeddingInformation> embeddings = JsEmbeddingProvider.extractJsEmbeddings(text, 0, true);
147
        assertEquals(3, embeddings.size());
148
        assertEquals(0, embeddings.get(0).getOffset());
149
        assertEquals(19, embeddings.get(0).getLength());
150
        assertEquals("<", embeddings.get(1).getContent());
151
        assertEquals(23, embeddings.get(2).getOffset());
152
        assertEquals(15, embeddings.get(2).getLength());
153
    }
154
155
144
}
156
}

Return to bug 152042