Creación de elementos padre-hijo a partir de la búsqueda semántica en valores de elementos en XSLT 2

Tengo una serie de etiquetas P en contenido XML que tienen una jerarquía semántica dentro de sus valores iniciales, sin embargo, las etiquetas P son lineales. Buscando la transformación XSLT 2.

La jerarquía semántica es la siguiente:

(1)
 +-(a)
    +-(I)
       +-(A)

Con la secuencia RegEx como sigue:

<xsl:param name="patternOrder" as="element(pattern)*" xmlns="">
  <pattern level="1" value="^(\([0-9]+(\.[0-9]+)?\))" />
  <pattern level="2" value="^(\([a-z]\))" />
  <pattern level="3" value="^(\((IX|IV|V?I{{0,3}})\))" />
  <pattern level="4" value="^(\([\w]+(\.[\w]+)?\))" />
</xsl>

Después de revisar mi conjunto de datos, tengo varias condiciones:

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <content>
        <p>(1) blah</p>
        <p>(2)(a) blah</p>
        <p>(b) blah</p>
        <p>(3)(a)(I) blah</p>
        <p>(II) blah</p>
        <p>(A) blah</p>
        <p>(B.1) blah</p>
        <p>(b) blah</p>
        <p>(4) blah</p>
        <p>(4.5) blah</p>
        <p>(5)(a)(I)(A) blah</p>
        <p>(B) blah</p>
        <p>(II) blah</p>
        <p>(III)(a) blah</p>
        <p>(bb.2) blah</p>
        <p>(6) blah</p>
    </content>
    <content>
        <p>blah</p>
    </content>
    <content>
        <p>blah</p>
        <p>(1) blah</p>
        <p>(a) blah</p>
        <p>(b) blah</p>
        <p>(2) blah </p>
    </content>
</test>

... y los resultados finales deben ser:

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <content>
        <p>(1) blah</p>
        <p>(2)
            <p>(a) blah</p>
            <p>(b) blah</p>
        </p>
        <p>(3)
            <p>(a)
                <p>(I) blah</p>
                <p>(II) blah
                    <p>(A) blah</p>
                    <p>(B) blah</p>
                </p>
            </p>
            <p>(b) blah</p>
        </p>
        <p>(4) blah</p>
        <p>(4.5) blah</p>
        <p>(5)
            <p>(a)
                <p>(I)
                    <p>(A) blah</p>
                    <p>(B.1) blah</p>
                </p>      
                <p>(II) blah</p>
                <p>(III)</p>
                    <p>(a) blah</p>
                    <p>(bb.2) blah</p>
                </p>
            </p>
        <p>(6) blah</p>
    </content>
    <content>
        blah
    </content>
    <content>
        blah
        <p>(1) blah
            <p>(a) blah</p>
            <p>(b) blah</p>      
        </p>
        <p>(2) blah </p>
    </content>
</test>

Tenga en cuenta la condición si la jerarquía semántica no está presente en la etiqueta P: la etiqueta P se elimina y es un valor de su elemento de contenido principal.

EDITAR:

He podido detectar todas las condiciones semánticas usando el siguiente RegEx:

^(\(([\w]+(\.[\w]+)?)\)){1,4}
*EDITAR # 2 *

Con los atributos de nivelación:

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <content>
        <p level="1">(1) blah</p>
        <p level="1">(2)</p>
        <p level="2">(a) blah</p>
        <p level="2">(b) blah</p>
        <p level="1">(3)</p>
        <p level="2">(a)</p>
        <p level="3">(I) blah</p>
        <p level="3">(II) blah</p>
        <p level="4">(A) blah</p>
        <p level="4">(B.1) blah</p>
        <p level="2">(b) blah</p>
        <p level="1">(4) blah</p>
        <p level="1">(4.5) blah</p>
        <p level="1">(5)</p>
        <p level="2">(a)</p>
        <p level="3">(I)</p>
        <p level="4">(A) blah</p>
        <p level="4">(B) blah</p>
        <p level="3">(II) blah</p>
        <p level="3">(III)</p>
        <p level="2">(a) blah</p>
        <p level="2">(bb.2) blah</p>
        <p level="2">(6) blah</p>
    </content>
    <content>
        <p>blah</p>
    </content>
    <content>
        <p>blah</p>
        <p level="1">(1) blah</p>
        <p level="2">(a) blah</p>
        <p level="2">(b) blah</p>
        <p level="1">(2) blah </p>
    </content>
</test>

Respuestas a la pregunta(1)

Su respuesta a la pregunta