diff --git a/HTMLKit/HTMLNode.h b/HTMLKit/HTMLNode.h index 70bbdfe..4699522 100644 --- a/HTMLKit/HTMLNode.h +++ b/HTMLKit/HTMLNode.h @@ -80,4 +80,6 @@ typedef NS_ENUM(short, HTMLNodeType) - (NSEnumerator *)treeEnumerator; - (NSEnumerator *)reverseTreeEnumerator; +- (NSString *)treeDescription; + @end diff --git a/HTMLKit/HTMLNode.m b/HTMLKit/HTMLNode.m index 3d0c6f4..f46d77b 100644 --- a/HTMLKit/HTMLNode.m +++ b/HTMLKit/HTMLNode.m @@ -353,6 +353,36 @@ NS_INLINE void CheckInvalidCombination(HTMLNode *parent, HTMLNode *node, NSStrin return copy; } +#pragma mark - Description + +- (NSString *)treeDescription +{ + NSMutableString *string = [NSMutableString string]; + + __weak __block void (^ weakAccumulator) (HTMLNode *, NSUInteger); + void (^ accumulator) (HTMLNode *, NSUInteger); + static NSString *prefix = @"| "; + + weakAccumulator = accumulator = ^ (HTMLNode *node, NSUInteger level) { + + NSString *indent = [prefix stringByPaddingToLength:level * 2 + prefix.length + withString:@" " + startingAtIndex:0]; + if (level > 0) { + [string appendString:@"\n"]; + } + + [string appendString:indent]; + [string appendString:node.description]; + + for (HTMLNode *child in node.childNodes) { + weakAccumulator(child, level + 1); + } + }; + accumulator(self, 0); + + return string; +} - (NSString *)description {