@@ -802,27 +802,12 @@ impl Comment {
802
802
}
803
803
}
804
804
805
- /// Given that this comment is an HTML start tag, get the number of HTML
806
- /// attributes it has.
807
- pub fn get_num_tag_attrs ( & self ) -> c_uint {
808
- unsafe {
809
- clang_HTMLStartTag_getNumAttrs ( self . x )
810
- }
811
- }
812
-
813
- /// Given that this comment is an HTML start tag, get the `idx`th
814
- /// attribute's name.
815
- pub fn get_tag_attr_name ( & self , idx : c_uint ) -> String {
816
- unsafe {
817
- String_ { x : clang_HTMLStartTag_getAttrName ( self . x , idx) } . to_string ( )
818
- }
819
- }
820
-
821
- /// Given that this comment is an HTML start tag, get the `idx`th
822
- /// attribute's value.
823
- pub fn get_tag_attr_value ( & self , idx : c_uint ) -> String {
824
- unsafe {
825
- String_ { x : clang_HTMLStartTag_getAttrValue ( self . x , idx) } . to_string ( )
805
+ /// Given that this comment is an HTML start tag, get its attributes.
806
+ pub fn get_tag_attrs ( & self ) -> CommentAttributesIntoIterator {
807
+ CommentAttributesIntoIterator {
808
+ x : self . x ,
809
+ length : unsafe { clang_HTMLStartTag_getNumAttrs ( self . x ) } ,
810
+ index : 0
826
811
}
827
812
}
828
813
}
@@ -848,6 +833,38 @@ impl Iterator for CommentChildrenIntoIterator {
848
833
}
849
834
}
850
835
836
+ /// An HTML start tag comment attribute
837
+ pub struct CommentAttribute {
838
+ /// HTML start tag attribute name
839
+ pub name : String ,
840
+ /// HTML start tag attribute value
841
+ pub value : String
842
+ }
843
+
844
+ /// An iterator for a comment's attributes
845
+ pub struct CommentAttributesIntoIterator {
846
+ x : CXComment ,
847
+ length : c_uint ,
848
+ index : c_uint
849
+ }
850
+
851
+ impl Iterator for CommentAttributesIntoIterator {
852
+ type Item = CommentAttribute ;
853
+ fn next ( & mut self ) -> Option < CommentAttribute > {
854
+ if self . index < self . length {
855
+ let idx = self . index ;
856
+ self . index += 1 ;
857
+ Some ( CommentAttribute {
858
+ name : String_ { x : unsafe { clang_HTMLStartTag_getAttrName ( self . x , idx) } } . to_string ( ) ,
859
+ value : String_ { x : unsafe { clang_HTMLStartTag_getAttrValue ( self . x , idx) } } . to_string ( )
860
+ } )
861
+ }
862
+ else {
863
+ None
864
+ }
865
+ }
866
+ }
867
+
851
868
/// A source file.
852
869
pub struct File {
853
870
x : CXFile
0 commit comments