@@ -929,3 +929,165 @@ fn collect_element_names_from_particle(
929929 GroupParticle :: Any ( _) => { }
930930 }
931931}
932+
933+ /// Debug test to understand why topic content model is empty
934+ #[ test]
935+ #[ ignore = "Debug test - run with: cargo test debug_topic_content_model -- --ignored --nocapture" ]
936+ fn debug_topic_content_model ( ) {
937+ let ( _temp_dir, base_path) = extract_bundle_to_temp :: < Dita12 > ( ) ;
938+
939+ // Find topic.xsd
940+ if let Some ( topic_path) = walkdir_find ( & base_path, "topic.xsd" ) {
941+ eprintln ! ( "Found topic.xsd at: {}" , topic_path. display( ) ) ;
942+
943+ let schema = XsdSchema :: from_file ( & topic_path)
944+ . expect ( "Should parse topic.xsd" ) ;
945+
946+ // Find the topic element
947+ eprintln ! ( "\n === Global Elements ===" ) ;
948+ for ( qname, _elem) in schema. maps . global_maps . elements . iter ( ) {
949+ eprintln ! ( " Element: {:?}" , qname) ;
950+ }
951+
952+ // Find the topic.class type
953+ eprintln ! ( "\n === Global Types ===" ) ;
954+ for ( qname, global_type) in schema. maps . global_maps . types . iter ( ) {
955+ if qname. local_name . contains ( "topic" ) {
956+ eprintln ! ( " Type: {:?} -> {:?}" , qname, match global_type {
957+ GlobalType :: Complex ( _) => "Complex" ,
958+ GlobalType :: Simple ( _) => "Simple" ,
959+ } ) ;
960+
961+ if let GlobalType :: Complex ( ct) = global_type {
962+ eprintln ! ( " Content: {:?}" , match & ct. content {
963+ ComplexContent :: Group ( g) => format!( "Group(particles={})" , g. particles. len( ) ) ,
964+ ComplexContent :: Simple ( _) => "Simple" . to_string( ) ,
965+ } ) ;
966+
967+ if let ComplexContent :: Group ( group) = & ct. content {
968+ eprintln ! ( " Particles:" ) ;
969+ for ( i, particle) in group. particles . iter ( ) . enumerate ( ) {
970+ match particle {
971+ GroupParticle :: Element ( elem) => {
972+ eprintln ! ( " [{}] Element: {:?}" , i, elem. name) ;
973+ }
974+ GroupParticle :: Group ( g) => {
975+ eprintln ! ( " [{}] Group: name={:?}, group_ref={:?}, particles={}" ,
976+ i, g. name, g. group_ref, g. particles. len( ) ) ;
977+ // Recurse one level
978+ for ( j, p) in g. particles . iter ( ) . enumerate ( ) {
979+ match p {
980+ GroupParticle :: Element ( e) => {
981+ eprintln ! ( " [{}.{}] Element: {:?}" , i, j, e. name) ;
982+ }
983+ GroupParticle :: Group ( gg) => {
984+ eprintln ! ( " [{}.{}] Group: name={:?}, group_ref={:?}, particles={}" ,
985+ i, j, gg. name, gg. group_ref, gg. particles. len( ) ) ;
986+ }
987+ GroupParticle :: Any ( _) => {
988+ eprintln ! ( " [{}.{}] Any" , i, j) ;
989+ }
990+ }
991+ }
992+ }
993+ GroupParticle :: Any ( _) => {
994+ eprintln ! ( " [{}] Any" , i) ;
995+ }
996+ }
997+ }
998+ }
999+ }
1000+ }
1001+ }
1002+
1003+ // Check global groups
1004+ eprintln ! ( "\n === Global Groups ===" ) ;
1005+ for ( qname, group) in schema. maps . global_maps . groups . iter ( ) {
1006+ if qname. local_name . contains ( "topic" ) {
1007+ eprintln ! ( " Group: {:?} -> particles={}" , qname, group. particles. len( ) ) ;
1008+ }
1009+ }
1010+
1011+ // Find the 'topic' element specifically
1012+ let topic_element = schema. maps . global_maps . elements . iter ( )
1013+ . find ( |( qname, _) | qname. local_name == "topic" ) ;
1014+
1015+ if let Some ( ( qname, topic_elem) ) = topic_element {
1016+ eprintln ! ( "\n === Topic Element Details ===" ) ;
1017+ eprintln ! ( " QName: {:?}" , qname) ;
1018+
1019+ use xmlschema:: validators:: ElementType ;
1020+ match & topic_elem. element_type {
1021+ ElementType :: Complex ( ct) => {
1022+ eprintln ! ( " Type: Complex" ) ;
1023+ eprintln ! ( " Type Name: {:?}" , ct. name) ;
1024+ eprintln ! ( " Base Type: {:?}" , ct. base_type) ;
1025+ eprintln ! ( " Derivation: {:?}" , ct. derivation) ;
1026+ eprintln ! ( " Content: {:?}" , match & ct. content {
1027+ ComplexContent :: Group ( g) => format!( "Group(particles={})" , g. particles. len( ) ) ,
1028+ ComplexContent :: Simple ( _) => "Simple" . to_string( ) ,
1029+ } ) ;
1030+
1031+ // Print particle details
1032+ if let ComplexContent :: Group ( group) = & ct. content {
1033+ eprintln ! ( " Particles:" ) ;
1034+ for ( i, particle) in group. particles . iter ( ) . enumerate ( ) {
1035+ match particle {
1036+ GroupParticle :: Element ( ep) => {
1037+ eprintln ! ( " [{}] Element: {:?}" , i, ep. name) ;
1038+ }
1039+ GroupParticle :: Group ( g) => {
1040+ eprintln ! ( " [{}] Group: name={:?}, group_ref={:?}, particles={}" ,
1041+ i, g. name, g. group_ref, g. particles. len( ) ) ;
1042+ // Recurse one level
1043+ for ( j, p) in g. particles . iter ( ) . enumerate ( ) {
1044+ match p {
1045+ GroupParticle :: Element ( e) => {
1046+ eprintln ! ( " [{}.{}] Element: {:?}" , i, j, e. name) ;
1047+ }
1048+ GroupParticle :: Group ( gg) => {
1049+ eprintln ! ( " [{}.{}] Group: name={:?}, group_ref={:?}, particles={}" ,
1050+ i, j, gg. name, gg. group_ref, gg. particles. len( ) ) ;
1051+ }
1052+ GroupParticle :: Any ( _) => {
1053+ eprintln ! ( " [{}.{}] Any" , i, j) ;
1054+ }
1055+ }
1056+ }
1057+ }
1058+ GroupParticle :: Any ( _) => {
1059+ eprintln ! ( " [{}] Any" , i) ;
1060+ }
1061+ }
1062+ }
1063+ }
1064+
1065+ // Look up this type in global_maps.types to compare
1066+ if let Some ( ref type_name) = ct. name {
1067+ eprintln ! ( "\n === Lookup in global_maps.types ===" ) ;
1068+ if let Some ( global_type) = schema. maps . global_maps . types . get ( type_name) {
1069+ eprintln ! ( " FOUND: {:?}" , match global_type {
1070+ GlobalType :: Complex ( gct) => format!( "Complex(particles={})" ,
1071+ match & gct. content {
1072+ ComplexContent :: Group ( g) => g. particles. len( ) ,
1073+ ComplexContent :: Simple ( _) => 0 ,
1074+ } ) ,
1075+ GlobalType :: Simple ( _) => "Simple" . to_string( ) ,
1076+ } ) ;
1077+ } else {
1078+ eprintln ! ( " NOT FOUND - type {:?} not in global_maps.types" , type_name) ;
1079+ }
1080+ }
1081+ }
1082+ ElementType :: Simple ( _) => {
1083+ eprintln ! ( " Type: Simple" ) ;
1084+ }
1085+ ElementType :: Any => {
1086+ eprintln ! ( " Type: Any" ) ;
1087+ }
1088+ }
1089+ }
1090+ } else {
1091+ eprintln ! ( "topic.xsd not found" ) ;
1092+ }
1093+ }
0 commit comments