// // DTHTMLElement.h // DTCoreText (WeRead custom fork) // // Reverse-engineered from WeChat Reading (微信读书) binary. // Represents a single HTML element in the DOM tree built during parsing. // Each node can produce an NSAttributedString via -attributedString. // #import #import @class DTTextAttachment; @class DTBorderStyle; @class DTBackgroundImageStyle; @class DTTableStyle; @class DTCSSStylesheet; @class DTCoreTextFontDescriptor; @class DTCoreTextParagraphStyle; // --------------------------------------------------------------------------- // DTHTMLElement // --------------------------------------------------------------------------- @interface DTHTMLElement : NSObject // --- Initialization --- - (instancetype)initWithTagName:(NSString *)tagName attributes:(NSDictionary *)attributes; // --- Tree structure --- @property (nonatomic, weak) DTHTMLElement *parent; @property (nonatomic, strong) NSMutableArray *children; // --- Tag identity --- @property (nonatomic, copy) NSString *tagName; @property (nonatomic, copy) NSString *elementId; @property (nonatomic, strong) NSArray *classNames; // --- Attributes & style --- @property (nonatomic, strong) NSDictionary *attributes; @property (nonatomic, strong) NSDictionary *styleDictionary; // --- Text content --- @property (nonatomic, copy) NSString *text; @property (nonatomic, strong) NSArray *textRuns; // --- Display properties --- @property (nonatomic, assign) BOOL isLineBreak; @property (nonatomic, assign) BOOL isBlockElement; @property (nonatomic, assign) BOOL shouldAvoidPageBreakInside; @property (nonatomic, assign) BOOL pageBreakAfter; @property (nonatomic, assign) BOOL pageBreakBefore; // --- Font & paragraph --- @property (nonatomic, strong) DTCoreTextFontDescriptor *fontDescriptor; @property (nonatomic, strong) DTCoreTextParagraphStyle *paragraphStyle; // --- Colors --- @property (nonatomic, strong) UIColor *textColor; @property (nonatomic, strong) UIColor *backgroundColor; // --- Links --- @property (nonatomic, strong) NSURL *linkURL; // --- Images & attachments --- @property (nonatomic, strong) NSURL *imageURL; @property (nonatomic, strong) DTTextAttachment *textAttachment; // --- WeRead-specific page layout properties --- @property (nonatomic, copy) NSString *verticalCenterStyle; @property (nonatomic, copy) NSString *pageRelate; @property (nonatomic, strong) UIColor *pageBackgroundColor; @property (nonatomic, copy) NSString *pageBackgroundImage; // --- Border & background --- @property (nonatomic, strong) DTBorderStyle *borderStyle; @property (nonatomic, strong) DTBackgroundImageStyle *backgroundImageStyle; @property (nonatomic, strong) DTTableStyle *tableStyle; // --- Additional string fields observed in ivars --- @property (nonatomic, copy) NSString *cssClass; @property (nonatomic, copy) NSString *cssId; @property (nonatomic, copy) NSString *lang; @property (nonatomic, copy) NSString *direction; // ltr / rtl @property (nonatomic, copy) NSString *whiteSpace; @property (nonatomic, copy) NSString *textAlign; // --- Public methods --- /** Applies a CSS style dictionary to this element, resolving font, color, paragraph style, etc. @param styleDict The CSS properties to apply. @param isLatin Whether the content language is Latin-script. */ - (void)applyStyleDictionary:(NSDictionary *)styleDict isLatinLanguageBook:(BOOL)isLatin; /** Recursively converts this element and its children into an NSAttributedString. @return The attributed string representing this subtree. */ - (NSAttributedString *)attributedString; /** Finalizes attributes after all children have been parsed. Called when the closing tag is encountered. */ - (void)interpretAttributes; /** Appends text content to this element (called during SAX foundCharacters:). */ - (void)appendText:(NSString *)text; /** Returns YES if this element is a void / self-closing element (img, br, hr, etc.) */ - (BOOL)isVoidElement; @end