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