This is a Markdown => NSAttributedString parser built on top of a flex parser. It takes an NSString and returns an NSAttributedString with markdown tags replaced by CoreText formatting attributes.
This project is a fork of NSAttributedMarkdownParser by NimbusKit: https://github.com/NimbusKit/markdown
Adding it to your Project
Using cocoapods
Add pod 'XNGMarkdownParser' to your Podfile and do a pod install.
Manual
- Drag all of the files from the src/ directory into your project.
- Import XNGMarkdownParser.h in your project.
- Create an instance of the parser object and pass it the string you wish to parse.
- Plug the resulting NSAttributedString into your favorite NSAttributedString label implementation (like an UITextView)
Supported Features
*italics*
**bold**
***bold italic***
~~strikethrough~~
# Header 1
## Header 2
### Header 3
#### Header 4
##### Header 5
###### Header 6
Header 1
========
Header 2
--------
http://google.com urls
[Text] (http://google.com "alt text") urls
Extended Features
- UTF-8 support
- Vastly improved speed
- Extended formatting for paragraphs
- Support different link fonts
- Tests and example project
- Support for CocoaPods
Examples
###Simplest example
XNGMarkdownParser *parser = [[XNGMarkdownParser alloc] init]; NSAttributedString *string = [parser attributedStringFromMarkdownString:@"This is __rad__."];
Further text customization
// this parser initializes only once and customizes fonts, line height and link color + (XNGMarkdownParser *)titleMarkdownParser { static dispatch_once_t onceToken; static XNGMarkdownParser *parser; dispatch_once(&onceToken, ^{ parser = [[XNGMarkdownParser alloc] init]; parser.paragraphFont = [UIFont xng_14Font]; parser.boldFontName = [UIFont xng_14Font].fontName; parser.linkFontName = [UIFont xng_14Font].fontName; const CGFloat lineHeight = 18; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.minimumLineHeight = lineHeight; parser.topAttributes = @{ NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: self.textColor }; }); return parser; }
See the included Example project and the tests to check for further options.