test.vue

    <!--
        SPDX-FileCopyrightText: 2024 James Zuccon
        SPDX-License-Identifier: MIT
    -->
    <!--
        This uses HTML syntax as a base with some customizations for handling Vue-Template-specific syntax.
        It uses the following third-party scripts.
        Script:
        - JS (default - no lang attribute)
        - Typescript (lang="ts")
        Style:
        - CSS (default - no lang attribute)
        - SASS (lang="sass")
        - SCSS (lang="scss")
        NOTE: The tests below test attributes before/after the lang="..." attribute as doing this requires pushing a new context.
              In practice, a Vue Template would generally only contain zero or one <template>, <script> or <style> blocks.
    -->

    <!-- Template without attributes -->
    <template>
        <div>
            <!-- Vue event-shorthand should support "@" prefix -->
            <p @click="test">Testing HTML</p>
            <p>{{ someVar }}</p>
            <!-- Important to test this as it is used at root also -->
            <template>
                Nested template tag
            </template>
        </div>
    </template>

    <!-- Template with attributes -->
    <template loneAttribute attribute="value">
        <div>
            <!-- Vue event-shorthand should support "@" prefix -->
            <p @click="test">Testing HTML</p>
            <p>{{ someVar }}</p>
            <!-- Important to test this as it is used at root also -->
            <template>
                Nested template tag
            </template>
        </div>
    </template>

    <!-- Style without attributes -->
    <!-- This references the syntax highlighting file for CSS. -->
    <style>
    	body {
    		font: 100% Helvetica, sans-serif;
    		color: #333;
    	}
    </style>

    <!-- Style with attributes -->
    <!-- This references the syntax highlighting file for CSS. -->
    <style loneAttribute attribute="value">
    	body {
    		font: 100% Helvetica, sans-serif;
    		color: #333;
    	}
    </style>

    <!-- Style lang="sass" without attributes -->
    <!-- This references the syntax highlighting file for SASS. -->
    <style lang="sass">
    	// single-line comment to make sure it's SASS and not CSS
    	$font-stack: Helvetica, sans-serif
    	$primary-color: #333

    	body
    		font: 100% $font-stack
    		color: $primary-color
    </style>

    <!-- Style lang="sass" with attributes -->
    <!-- This references the syntax highlighting file for SASS. -->
    <style beforeLangLoneAttribute beforeLangAttribute="asd" lang="sass" afterLangLoneAttribute afterLangAttribute="asd">
    	// single-line comment to make sure it's SASS and not CSS
    	$font-stack: Helvetica, sans-serif
    	$primary-color: #333

    	body
    		font: 100% $font-stack
    		color: $primary-color
    </style>

    <!-- Style lang="scss" without attributes -->
    <!-- This references the syntax highlighting file for SCSS. -->
    <style lang="scss">
    	// single-line comment to make sure it's SCSS and not CSS
    	$font-stack: Helvetica, sans-serif
    	$primary-color: #333

    	body {
    		font: 100% $font-stack;
    		color: $primary-color;
        }
    </style>

    <!-- Style lang="scss" with attributes -->
    <!-- This references the syntax highlighting file for SCSS. -->
    <style beforeLangLoneAttribute beforeLangAttribute="asd" lang="scss" afterLangLoneAttribute afterLangAttribute="asd">
    	// single-line comment to make sure it's SCSS and not CSS
    	$font-stack: Helvetica, sans-serif
    	$primary-color: #333

    	body {
    		font: 100% $font-stack;
    		color: $primary-color;
        }
    </style>

    <!-- Script without attributes -->
    <!-- This references the syntax highlighting file for Javascript. -->
    <script>
    // Single-line comment
    const a = 'abc';
    </script>

    <!-- Script with attributes -->
    <!-- This references the syntax highlighting file for Javascript. -->
    <script loneAttribute attribute="value">
    // Single-line comment
    const a = 'abc';
    </script>

    <!-- Script lang="ts" without attributes -->
    <!-- This references the syntax highlighting file for Typescript. -->
    <script lang="ts">
    // Single-line comment
    const a = 'abc';

    // Typescript
    interface SomeInterface {
        value: string;
    }
    </script>

    <!-- Script lang="ts" with attributes -->
    <!-- This references the syntax highlighting file for Typescript. -->
    <script beforeLangLoneAttribute beforeLangAttribute="asd" lang="ts" afterLangLoneAttribute afterLangAttribute="asd">
    // Single-line comment
    const a = 'abc';

    // Typescript
    interface SomeInterface {
        value: string;
    }
    </script>