1e5c31af7Sopenharmony_ci# Copyright 2020-2024 The Khronos Group Inc.
2e5c31af7Sopenharmony_ci#
3e5c31af7Sopenharmony_ci# SPDX-License-Identifier: Apache-2.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_cirequire 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
6e5c31af7Sopenharmony_ci
7e5c31af7Sopenharmony_ciinclude ::Asciidoctor
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_ciclass VUIDExpanderTreeprocessor < Extensions::Treeprocessor
10e5c31af7Sopenharmony_ci  def process document
11e5c31af7Sopenharmony_ci    # Find all list items inside Valid Usage sidebar blocks
12e5c31af7Sopenharmony_ci    document.find_by(context: :sidebar).each do |sidebar|
13e5c31af7Sopenharmony_ci      # Get sidebar title from instance variable to avoid side-effects from substitutions
14e5c31af7Sopenharmony_ci      if sidebar.title? and sidebar.instance_variable_get(:@title).start_with? "Valid Usage"
15e5c31af7Sopenharmony_ci        sidebar.find_by(context: :list_item) do |item|
16e5c31af7Sopenharmony_ci            # Get item text directly from instance variable to avoid inline substitutions
17e5c31af7Sopenharmony_ci            original_text = item.instance_variable_get(:@text)
18e5c31af7Sopenharmony_ci            # Find VUID anchor and append with matching VUID-styled text and line break
19e5c31af7Sopenharmony_ci            item.text = original_text.gsub(/(\[\[(VUID-[^\]]*)\]\])/, "\\1 [vuid]#\\2# +\n")
20e5c31af7Sopenharmony_ci        end
21e5c31af7Sopenharmony_ci      end
22e5c31af7Sopenharmony_ci    end
23e5c31af7Sopenharmony_ci    nil
24e5c31af7Sopenharmony_ci  end
25e5c31af7Sopenharmony_ciend
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_ciExtensions.register do
28e5c31af7Sopenharmony_ci  treeprocessor VUIDExpanderTreeprocessor
29e5c31af7Sopenharmony_ciend
30