This procedure is defined in the server but not documented via ad_proc or proc_doc and may be intended as a private interface.

The procedure is defined as:

proc sgml::ParseEvent:ElementOpen {tag attr opts args} {
    
    variable Name
    variable Wsp

    upvar $opts options
    upvar #0 $options(-statevariable) state
    array set cfg {-empty 0}
    array set cfg $args

    if {$options(-normalize)} {
        set tag [string toupper $tag]
    }

    # Update state
    lappend state(stack) $tag

    # Parse attribute list into a key-value representation
    if {[string compare $options(-parseattributelistcommand) {}]} {
        if {[catch {uplevel #0 $options(-parseattributelistcommand) [list $attr]} attr]} {
            if {[lindex $attr 0] ne "unterminated attribute value" } {
                uplevel #0 $options(-errorcommand) [list $attr around line $state(line)]
                set attr {}
            } else {

                # It is most likely that a ">" character was in an attribute value.
                # This manifests itself by ">" appearing in the element's text.
                # In this case the callback should return a three element list;
                # the message "unterminated attribute value", the attribute list it
                # did manage to parse and the remainder of the attribute list.

                lassign $attr msg attlist brokenattr

                upvar text elemText
                if {[string first > $elemText] >= 0} {

                    # Now piece the attribute list back together
                    regexp ($Name)[cl $Wsp]*=[cl $Wsp]*("|')(.*) $brokenattr discard attname delimiter attvalue
                    regexp (.*)>([cl ^>]*)\$ $elemText discard remattlist elemText
                    regexp ([cl ^$delimiter]*)${delimiter}(.*) $remattlist discard remattvalue remattlist

                    append attvalue >$remattvalue
                    lappend attlist $attname $attvalue

                    # Complete parsing the attribute list
                    if {[catch {uplevel #0 $options(-parseattributelistcommand) [list $remattlist]} attr]} {
                        uplevel #0 $options(-errorcommand) [list $attr around line $state(line)]
                        set attr {}
                        set attlist {}
                    } else {
                        lappend attlist {*}$attr
                    }

                    set attr $attlist

                } else {
                    uplevel #0 $options(-errorcommand) [list $attr around line $state(line)]
                    set attr {}
                }
            }
        }
    }

    set empty {}
    if {$cfg(-empty) && $options(-reportempty)} {
        set empty {-empty 1}
    }

    # Invoke callback
    uplevel #0 $options(-elementstartcommand) [list $tag $attr] $empty

    return {}

}

Show another procedure: