[
  {
    "path": ".gitignore",
    "content": "# Xcode\n.DS_Store\n*/build/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\nprofile\n*.moved-aside\nDerivedData\n.idea/\n*.hmap\n*.xccheckout\n*.xcuserstate\n\n#CocoaPods\nPods\n/Example/GONMarkupParserSample.xcodeproj/project.xcworkspace/xcshareddata\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n## [__0.8.2__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.8.2)\nUpdated HTML entities replace code<br/>\n## [__0.8.1__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.8.1)\nFixed list alignment bug in iOS12<br/>\n## [__0.8.0__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.8.0)\nImproved Paragraph layout<br/>\nImproved List Item layout<br/>\nAdded paragraph sample<br/>\nFixed a typo issue with paragraph class<br/>\n## [__0.7.9__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.9)\nFixed bug in GONMarkupParserUtils<br/>\n## [__0.7.8__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.8)\nGONMarkupParserUtils optimisation<br/>\n## [__0.7.7__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.7)\nFixed sample Podfile<br/>\n## [__0.7.6__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.6)\nFixed a bug on NSParagraphStyle mutability<br/>\n## [__0.7.5__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.5)\nFixed a bug on lists heading alignment<br/>\nFixed a bug on lists, with subitems not aligned<br/>\nAdded support for strong tag (yoohoo \\o/)<br/>\n## [__0.7.4__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.4)\nFixed (again -_-) new line character bug on lists<br/>\n## [__0.7.3__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.3)\nFixed new line character bug on lists<br/>\n## [__0.7.2__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.2)\nFixed bug #21\n## [__0.7.1__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.1)\nFixed warning #18\n## [__0.7.0__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.7.0)\nFixed bug #15\n## [__0.6.9__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.9)\nFixed bug #12\n## [__0.6.8__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.8)\nFixed import problems with cocoa Pods 0.39\n## [__0.6.7__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.7)\nAdded color attribute to font markup\n## [__0.6.6__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.6)\nAdded UIButton+GONMarkupParser category\n## [__0.6.5__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.5)\nUpdated HTML chars tables\n## [__0.6.4__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.4)\nUpdated HTML chars tables\n## [__0.6.3__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.3)\nFixed a bug in anchor support\n## [__0.6.2__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.2)\nAdded anchor support\n## [__0.6.1__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6.1)\nAdded support for underline and strikethrough color\n## [__0.6__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.6)\nAdded support for underline / strikethrough text\n## [__0.5__](https://github.com/nicolasgoutaland/GONMarkupParser/releases/tag/0.5)\nInitial release\n"
  },
  {
    "path": "Classes/GONMarkup+Private.h",
    "content": "//\n//  GONMarkup+Private.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkup.h\"\n#import \"GONMarkupParser.h\"\n\n@interface GONMarkup (Private)\n// Shared context configuration LIFO management\n// These methods can be used to shared data between markers throught shared context.\n/* Push a new configuration to shared context, under given key */\n- (void)pushConfiguration:(id)configuration toContext:(NSMutableDictionary *)context forKey:(NSString *)key;\n\n/* Return current available configuration in shared context for given key\n * May return nil if there is no configuration\n */\n- (id)currentContextConfiguration:(NSString *)key fromContext:(NSMutableDictionary *)context;\n\n/* Pop current configuration from shared context, and return it.\n * May return nil if there is no configuration */\n- (id)popContextConfiguration:(NSString *)key fromContext:(NSMutableDictionary *)context;\n\n@property (nonatomic, weak) GONMarkupParser *parser;\n@end\n"
  },
  {
    "path": "Classes/GONMarkup+Private.m",
    "content": "//\n//  GONMarkup+Private.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkup+Private.h\"\n\n@implementation GONMarkup (Private)\n#pragma mark - LIFO shared context management\n- (void)pushConfiguration:(id)configuration\n                toContext:(NSMutableDictionary *)context\n                   forKey:(NSString *)key\n{\n    // Retrieve FIFO\n    NSMutableArray *configurationsLIFO = [context objectForKey:key];\n    if (!configurationsLIFO)\n    {\n        // Create FIFO\n        configurationsLIFO = [[NSMutableArray alloc] init];\n        [context setObject:configurationsLIFO\n                    forKey:key];\n    }\n\n    // Hold current configuration\n    [configurationsLIFO addObject:configuration];\n}\n\n- (id)currentContextConfiguration:(NSString *)key\n                      fromContext:(NSMutableDictionary *)context\n{\n    return [[context objectForKey:key] lastObject];\n}\n\n- (id)popContextConfiguration:(NSString *)key\n                  fromContext:(NSMutableDictionary *)context\n{\n    // Retrieve LIFO\n    NSMutableArray *configurationsLIFO = [context objectForKey:key];\n\n    // Retrieve current configuration\n    id currentConfiguration = [configurationsLIFO lastObject];\n\n    // Remove last configuration\n    [configurationsLIFO removeLastObject];\n\n    // Check if list is empty\n    if (!configurationsLIFO.count)\n    {\n        // Remove empty list\n        [context removeObjectForKey:key];\n    }\n\n    return currentConfiguration;\n}\n\n@dynamic parser;\n@end\n"
  },
  {
    "path": "Classes/GONMarkup.h",
    "content": "//\n//  GONMarkup.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n//  Simple class defining a markup\n//  You can use it as it, or override it to add more configuration\n//\n//  Tag name will be stored lowercased, so be careful when using multiple tags\n//\n//  Markup lifecycle :\n//  - Once a tag is found, openingMarkupFound:configuration:context: method will be called\n//  - Before parser append extracted string to result, following methods will be called\n//      - prefixStringForContext:attributes:resultString: will be called, allowing tag to generate a prefix\n//      - updatedContentString:context:attributes:resultString: will be called, allowing tag to update its content string (without prefix included)\n//      - suffixStringForContext:attributes:resultString: will be called, allowing tag to generate a suffix\n//  - Once tag is closed, closingMarkupFound:configuration:context:resultString: method will be called\n//\n//  Attributes should be space separated, values affected using equal sign, and between quotes or double quotes. To escape quotes / double quotes, use \\\n//  Be careful,text heere is intended to be loaded from a file, not directly set in code. If so, do not forget to escape \\.\n//  You can also use &quot;\n//\n//  Example :\n//  Attribute               | Supported\n//  -----------------------------------\n//  <color value=\"red\">     | YES\n//  <color value = \"red\">   | YES\n//  <color value = red>     | NO\n//  <color value = \"re\"d\">  | NO\n//  <color value = \"re\\\"d\"> | YES\n//  <color value='red'>     | YES\n//  <color value = 'red'>   | YES\n//  <color value = red>     | NO\n//  <color value = \"re'd\">  | YES\n//  <color value = 're\"d'>  | YES\n//\n//\n//  Markup instance will be reused each time a matching tag is found. To persist data, use context parameter.\n\n@class GONMarkupParser;\n\n@interface GONMarkup : NSObject\n/* Class constructor */\n+ (instancetype)markupForTag:(NSString *)tag;\n\n/* Default constructor */\n- (id)initWithTag:(NSString *)tag;\n\n/* This method will be called if markup is matching current opening tag.\n * Object is responsible to update attributed string parameters in \"configurationDictionary\"\n *\n * \"tag\" is matching tag, allowing you to extract parameters\n * \"context\" is a mutable dictionary used by marker to add contextual information. This dictionary is shared throught all markers in a parser and is reset each time a new parse is started\n * It is used for example by list markers to handle list type, tabulation index and count\n * \"resultString\" is currently built result string\n *\n * You should override this method to implement new behavior\n */\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString;\n\n/* Allows marker to prefix its content string\n * This method is called right after opening markup\n */\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttribute\n                                  resultString:(NSAttributedString *)resultString;\n\n/* This method will be called once current marker tag is closed\n * This allows marker to update string content\n * \"context\" is the same as in openingMarkupFound:configuration:fromTag:context:\n *\n * Default implementation return input string\n */\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString;\n\n/* Allows marker to suffix its content string\n * This method is called right after opening markup\n */\n- (NSAttributedString *)suffixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString;\n\n/* This method will be called if markup is matching current closing tag.\n * Object is responsible to update attributed string parameters in \"configurationDictionary\"\n *\n * \"tag\" is matching tag, allowing you to extract parameters\n * \"context\" is a mutable dictionary use by marker to add contextual information. This dictionary is shared throught all markers in a parser and is reset each time a new parse is started\n * It is used for example by list markers to handle list type, tabulation index and count\n *\n * You should override this method to implement new behavior\n */\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString;\n\n@property (nonatomic, copy, readonly) NSString *tag;            // Have to be unique. Used to speed up rules matching, when using tags without parameters\n@property (nonatomic, weak, readonly) GONMarkupParser *parser;  // Parser the markup is attached to\n@end\n"
  },
  {
    "path": "Classes/GONMarkup.m",
    "content": "//\n//  GONMarkup.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n\n#import \"GONMarkup.h\"\n#import \"GONMarkupParser.h\"\n\n@interface GONMarkup()\n// Data\n@property (nonatomic, copy) NSString *tag;\n@property (nonatomic, copy) NSString *testedTag;\n\n// Parser link\n@property (nonatomic, weak) GONMarkupParser *parser;\n@end\n\n@implementation GONMarkup\n#pragma mark - Constructors\n+ (instancetype)markupForTag:(NSString *)tag\n{\n    return [[self alloc] initWithTag:tag];\n}\n\n- (id)initWithTag:(NSString *)tag\n{\n    if (self = [super init])\n    {\n        _tag = [[tag lowercaseString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n        _testedTag = [_tag stringByAppendingString:@\" \"];\n    }\n\n    return self;\n}\n\n- (id)init\n{\n    @throw @\"Error, - init constructor is not allowed. Markup MUST have a tag\";\n}\n\n#pragma mark - Test\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString\n{\n    return [[NSAttributedString alloc] initWithString:string attributes:stringAttributes];\n}\n\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n{\n    NSLog(@\"WARNING : This method will be deleted in next release. Use updatedContentString:context:attributes:stringAttributes:resultString: instead\");\n\n    return [self updatedContentString:string\n                              context:context\n                           attributes:dicAttributes\n                     stringAttributes:stringAttributes\n                         resultString:nil];\n}\n\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    return [[NSAttributedString alloc] initWithString:@\"\"];\n}\n\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n{\n    NSLog(@\"WARNING : This method will be deleted in next release. Use prefixStringForContext:attributes:stringAttributes:resultString: instead\");\n    \n    return [self prefixStringForContext:context\n                             attributes:dicAttributes\n                       stringAttributes:stringAttributes\n                           resultString:nil];\n}\n\n- (NSAttributedString *)suffixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n{\n    NSLog(@\"WARNING : This method will be deleted in next release. Use suffixStringForContext:attributes:stringAttributes:resultString: instead\");\n\n    return [self suffixStringForContext:context\n                             attributes:dicAttributes\n                       stringAttributes:stringAttributes\n                           resultString:nil];\n}\n\n- (NSAttributedString *)suffixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    return [[NSAttributedString alloc] initWithString:@\"\"];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString {}\n\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes {\n\n    NSLog(@\"WARNING : This method will be deleted in next release. Use openingMarkupFound:configuration:context:attributes:resultString: instead\");\n    \n    [self openingMarkupFound:tag\n               configuration:configurationDictionary\n                     context:context\n                  attributes:dicAttributes\n                resultString:nil];\n}\n\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes {\n\n    NSLog(@\"WARNING : This method will be deleted in next release. Use closingMarkupFound:configuration:context:attributes:resultString: instead\");\n\n    [self closingMarkupFound:tag\n               configuration:configurationDictionary\n                     context:context\n                  attributes:dicAttributes\n                resultString:nil];\n}\n\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString {}\n\n@end\n    \n"
  },
  {
    "path": "Classes/GONMarkupAlignment.h",
    "content": "//\n//  GONMarkupAlignment.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 22/07/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Markup used to handle text alignment.\n//  This markup will set a NSMutableParagraphStyle object under NSParagraphStyleAttributeName key.\n//  Be sure to make a mutable copy of it before updating when adding new tags\n//\n//  Examples\n//\n//  <left>left aligned text</>\n//  <right>right aligned text</>\n//  <center>center aligned text</>\n//  <justified>justified aligned text</>\n//  <natural>natural aligned text</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupAlignment_left_TAG                 @\"left\"\n#define GONMarkupAlignment_right_TAG                @\"right\"\n#define GONMarkupAlignment_center_TAG               @\"center\"\n#define GONMarkupAlignment_justified_TAG            @\"justified\"\n#define GONMarkupAlignment_natural_TAG              @\"natural\"\n\n@interface GONMarkupAlignment : GONMarkup\n/* Return all alignment markups */\n+ (NSArray *)allMarkups;\n\n/* Default markup to add center text alignment support */\n+ (instancetype)centerMarkup;\n\n/* Default markup to add left text alignment support */\n+ (instancetype)leftMarkup;\n\n/* Default markup to add right text alignment support */\n+ (instancetype)rightMarkup;\n\n/* Default markup to add justified text alignment support */\n+ (instancetype)justifiedMarkup;\n\n/* Default markup to add natural text alignment support */\n+ (instancetype)naturalMarkup;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupAlignment.m",
    "content": "//\n//  GONMarkupAlignment.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 22/07/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupAlignment.h\"\n\n@interface GONMarkupAlignment ()\n// Data\n@property (nonatomic, assign) NSTextAlignment alignment;\n@end\n\n@implementation GONMarkupAlignment\n#pragma mark - Markup list\n+ (NSArray *)allMarkups\n{\n    return @[[self centerMarkup], [self leftMarkup], [self rightMarkup], [self justifiedMarkup], [self naturalMarkup]];\n}\n\n#pragma mark - Constructors\n+ (instancetype)alignmentMarkup:(NSTextAlignment)alignment tag:(NSString *)tag\n{\n    GONMarkupAlignment *markupAlignment = [self markupForTag:tag];\n    \n    markupAlignment.alignment = alignment;\n    \n    return markupAlignment;\n}\n\n+ (instancetype)centerMarkup;\n{\n    return [self alignmentMarkup:NSTextAlignmentCenter tag:GONMarkupAlignment_center_TAG];\n}\n\n+ (instancetype)leftMarkup;\n{\n    return [self alignmentMarkup:NSTextAlignmentLeft tag:GONMarkupAlignment_left_TAG];\n}\n\n+ (instancetype)rightMarkup;\n{\n    return [self alignmentMarkup:NSTextAlignmentRight tag:GONMarkupAlignment_right_TAG];\n}\n\n+ (instancetype)justifiedMarkup;\n{\n    return [self alignmentMarkup:NSTextAlignmentJustified tag:GONMarkupAlignment_justified_TAG];\n}\n\n+ (instancetype)naturalMarkup;\n{\n    return [self alignmentMarkup:NSTextAlignmentNatural tag:GONMarkupAlignment_natural_TAG];\n}\n\n#pragma mark - Markup lifecycle\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    NSMutableParagraphStyle *style = [[configurationDictionary objectForKey:NSParagraphStyleAttributeName] mutableCopy];\n    if (!style)\n        style = [[NSMutableParagraphStyle alloc] init];\n\n    // Hold new configuration\n    [configurationDictionary setObject:style\n                                 forKey:NSParagraphStyleAttributeName];\n\n    // Update alignment\n    style.alignment = _alignment;\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupAnchor.h",
    "content": "//\n//  GONMarkupAnchor.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n//  Define a markup to add anchor support\n//  You can specify link value with \"value\" attribute.\n//\n//  To detect user touch on link :\n//  - display attributed string in a UITextView\n//  - configure UITextView selectable property to YES and isEditable to NO\n//  - set delegate\n//  - implement \"textView:shouldInteractWithURL:inRange:\" method\n//\n//  Examples\n//\n//  <a href=\"#1\">Link 1</>\n//  <a href=\"http://www.apple.com\">Link to apple.com</>\n//  <a href=\"myscheme://myapp\">Custom link</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupAnchor_TAG                 @\"a\"\n\n// Attributes\n#define GONMarkupAnchor_TAG_href_ATT       @\"href\"\n\n@interface GONMarkupAnchor : GONMarkup\n/* Default markup to add anchor support */\n+ (instancetype)anchorMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupAnchor.m",
    "content": "//\n//  GONMarkupAnchor.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupAnchor.h\"\n\n@interface GONMarkupAnchor ()\n@end\n\n@implementation GONMarkupAnchor\n#pragma mark - Constructor\n+ (instancetype)anchorMarkup\n{\n    return [self markupForTag:GONMarkupAnchor_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    NSString *value = [dicAttributes objectForKey:GONMarkupAnchor_TAG_href_ATT];\n    if (value)\n    {\n        // Create URL based on value\n        [configurationDictionary setObject:value\n                                    forKey:NSLinkAttributeName];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupBlock.h",
    "content": "//\n//  GONMarkupBlock.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Markup using a block as parameters. Useful to add new markup without creating new subclasses\n\n\n#import \"GONMarkup.h\"\n\n@interface GONMarkupBlock : GONMarkup\n/* Class contructor\n */\n+ (instancetype)blockMarkup:(NSString *)tag;\n\n@property (nonatomic, copy) void(^openingMarkupBlock)(NSMutableDictionary *configurationDictionary, NSString *tag, NSMutableDictionary *context, NSDictionary *dicAttributes, NSAttributedString *resultString);  // Called when opening tag is found\n@property (nonatomic, copy) void(^closingMarkupBlock)(NSMutableDictionary *configurationDictionary, NSString *tag, NSMutableDictionary *context, NSDictionary *dicAttributes, NSAttributedString *resultString);  // Called when closing tag is found\n\n@property (nonatomic, copy) NSAttributedString *(^prefixStringForContextBlock)(NSMutableDictionary *context, NSDictionary *dicAttributes, NSDictionary *stringAttributes, NSAttributedString *resultString);                 // Called to generate prefix\n@property (nonatomic, copy) NSAttributedString *(^suffixStringForContextBlock)(NSMutableDictionary *context, NSDictionary *dicAttributes, NSDictionary *stringAttributes, NSAttributedString *resultString);                 // Called to generate suffix\n@property (nonatomic, copy) NSAttributedString *(^updatedContentStringBlock)(NSString *string, NSMutableDictionary *context, NSDictionary *dicAttributes, NSDictionary *stringAttributes, NSAttributedString *resultString); // Called when extracted string is complete\n@end\n"
  },
  {
    "path": "Classes/GONMarkupBlock.m",
    "content": "//\n//  GONMarkupBlock.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupBlock.h\"\n\n@implementation GONMarkupBlock\n#pragma mark - Constructor\n+ (instancetype)blockMarkup:(NSString *)tag\n{\n    return [self markupForTag:tag];\n}\n\n#pragma mark - Configuration\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    if (_openingMarkupBlock)\n        _openingMarkupBlock(configurationDictionary, tag, context, dicAttributes, resultString);\n}\n\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    if (_closingMarkupBlock)\n        _closingMarkupBlock(configurationDictionary, tag, context, dicAttributes, resultString);\n}\n\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString\n{\n    if (_updatedContentStringBlock)\n        return _updatedContentStringBlock(string, context, dicAttributes, stringAttributes, resultString);\n\n    return [super updatedContentString:string\n                               context:context\n                            attributes:dicAttributes\n                      stringAttributes:stringAttributes\n                          resultString:resultString];\n}\n\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    if (_prefixStringForContextBlock)\n        return _prefixStringForContextBlock(context, dicAttributes, stringAttributes, resultString);\n\n    return [super prefixStringForContext:context\n                              attributes:dicAttributes\n                        stringAttributes:stringAttributes\n                            resultString:resultString];\n}\n\n- (NSAttributedString *)suffixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    if (_suffixStringForContextBlock)\n        return _suffixStringForContextBlock(context, dicAttributes, stringAttributes, resultString);\n\n    return [super suffixStringForContext:context\n                              attributes:dicAttributes\n                        stringAttributes:stringAttributes\n                            resultString:resultString];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupBold.h",
    "content": "//\n//  GONMarkupBold.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Tag updating current font style to bold\n//  This tag may not work if no bold version of current font is available.\n//  overrideBlock (GONMarkupFontTraits) allows you to override font. For example, you can used it to return a medium font instead of bold one.\n//  If overrideBlock is set, it will be called first. Is nil is returned, system will try to automatically resolve font\n//\n//  Examples\n//\n//  <b>bold text</>\n\n#import \"GONMarkupFontTraits.h\"\n\n#define GONMarkupBold_TAG                 @\"b\"\n\n@interface GONMarkupBold : GONMarkupFontTraits\n\n/* Default markup to add bold support */\n+ (instancetype)boldMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupBold.m",
    "content": "//\n//  GONMarkupBold.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupBold.h\"\n\n@implementation GONMarkupBold\n#pragma mark - Constructor\n+ (instancetype)boldMarkup\n{\n    return [super fontTraitsMarkup:GONMarkupBold_TAG\n                            traits:UIFontDescriptorTraitBold];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupColor.h",
    "content": "//\n//  GONMarkupColor.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n//  Define a generic markup to add color\n//  You can specify color value with \"value\" attribute.\n//\n//  Colors are handled via NSString+Color, using \"representedColor\" category method\n//  Have a look at https://github.com/nicolasgoutaland/NSString-Color for more information\n//\n//  Examples\n//\n//  <color value=\"red\">text</>\n//  <color value=\"#FFEEAA\">text</>\n//  <color value=\"myCustomRegisteredColor\">text</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupColor_TAG                 @\"color\"\n\n// Attributes\n#define GONMarkupColor_TAG_value_ATT       @\"value\"\n\n@interface GONMarkupColor : GONMarkup\n/* Default markup to add color support */\n+ (instancetype)colorMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupColor.m",
    "content": "//\n//  GONMarkupColor.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n\n#import \"GONMarkupColor.h\"\n#import \"NSString+Color.h\"\n\n@implementation GONMarkupColor\n#pragma mark - Constructor\n+ (instancetype)colorMarkup\n{\n    return [self markupForTag:GONMarkupColor_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    UIColor *colorValue = [[dicAttributes objectForKey:GONMarkupColor_TAG_value_ATT] representedColor];\n    if (colorValue)\n    {\n        [configurationDictionary setObject:colorValue\n                                     forKey:NSForegroundColorAttributeName];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupDec.h",
    "content": "//\n//  GONMarkupDec.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Define a markup to decrement font size. By default, font is decreased by 1 point.\n//  You can specify another decrement value with \"value\" attribute.\n//\n//  Examples\n//\n//  <dec>text</>\n//  <dec value=\"5\">text</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupDec_TAG                   @\"dec\"\n\n// Attributes\n#define GONMarkupDec_TAG_value_ATT       @\"value\"\n\n@interface GONMarkupDec : GONMarkup\n/* Default markup to add text size decrement support */\n+ (instancetype)decMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupDec.m",
    "content": "//\n//  GONMarkupDec.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupDec.h\"\n\n#define DEFAULT_DEC_VALUE   1\n\n@implementation GONMarkupDec\n#pragma mark - Constructor\n+ (instancetype)decMarkup\n{\n    return [super markupForTag:GONMarkupDec_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    NSInteger incValue = [[dicAttributes objectForKey:GONMarkupDec_TAG_value_ATT] intValue];\n    if (!incValue)\n        incValue = DEFAULT_DEC_VALUE;\n\n    // Look for current font\n    UIFont *currentFont = [configurationDictionary objectForKey:NSFontAttributeName];\n    if (!currentFont)\n    {\n        // No found defined, use default one with default size\n        currentFont = [UIFont systemFontOfSize:[UIFont systemFontSize]];\n    }\n\n    // Update current font with new size\n    [configurationDictionary setObject:[currentFont fontWithSize:MAX(currentFont.pointSize - incValue, 1)]\n                                forKey:NSFontAttributeName];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupDefaultMarkups.h",
    "content": "//\n//  GONMarkupDefaultMarkups.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupAlignment.h\"\n#import \"GONMarkupAnchor.h\"\n#import \"GONMarkupBold.h\"\n#import \"GONMarkupBlock.h\"\n#import \"GONMarkupColor.h\"\n#import \"GONMarkupDec.h\"\n#import \"GONMarkupFont.h\"\n// WIP\n//#import \"GONMarkupImage.h\"\n#import \"GONMarkupInc.h\"\n#import \"GONMarkupItalic.h\"\n#import \"GONMarkupLineBreak.h\"\n#import \"GONMarkupLineStyle.h\"\n#import \"GONMarkupList.h\"\n#import \"GONMarkupListItem.h\"\n#import \"GONMarkupNamedColor.h\"\n#import \"GONMarkupNamedFont.h\"\n#import \"GONMarkupParagraph.h\"\n#import \"GONMarkupReset.h\"\n#import \"GONMarkupSimple.h\"\n#import \"GONMarkupStrong.h\"\n#import \"GONMarkupTextStyle.h\"\n"
  },
  {
    "path": "Classes/GONMarkupFont.h",
    "content": "//\n//  GONMarkupFont.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n//  Define a generic markup to configure font\n//  \"color\" is used to change text color\n//       Colors are handled via NSString+Color, using \"representedColor\" category method\n//       Have a look at https://github.com/nicolasgoutaland/NSString-Color for more information\n//  \"size\" is used to define font size\n//      If missing, current font size will be used. If not found is set, default system font size will be used\n//  \"name\" define a registered font name or full font name\n//      - Markup will first try to find a registeredFont with given name.\n//      - If no font found, markup will try to load a font using given name\n//  If \"name\" isn't set, current defined font will be used with new defined size. If no font is currently used, default system one will be used\n//\n//  If no attribute is set, current defined font will be removed (NSFontAttributeName), and default system one will be used instead\n//\n//  Examples\n//\n//  <font size=\"18\">This text will use current font, set to 18</>\n//  <font name=\"Helvetica\">This text will use Helvetica as font, using current font size</>\n//  <font name=\"Helvetica\" size=\"18\">This text will use Helvetica, set to 18</>\n//  <font name=\"Helvetica\" size=\"18\" color=\"red\">This text will use Helvetica, set to 18, in red</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupFont_TAG                @\"font\"\n\n// Attributes\n#define GONMarkupFont_TAG_size_ATT       @\"size\"                // Font size. If missing, will use default font size, or one previously set on stack\n#define GONMarkupFont_TAG_color_ATT      @\"color\"               // Text color\n#define GONMarkupFont_TAG_name_ATT       @\"name\"                // Full font name, including style\n\n@interface GONMarkupFont : GONMarkup\n/* Default markup to add font support */\n+ (instancetype)fontMarkup;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupFont.m",
    "content": "//\n//  GONMarkupFont.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n\n#import \"GONMarkupFont.h\"\n#import \"GONMarkup+Private.h\"\n#import \"NSString+Color.h\"\n\n@interface GONMarkupFont ()\n\n@end\n\n@implementation GONMarkupFont\n#pragma mark - Constructor\n+ (instancetype)fontMarkup\n{\n    return [self markupForTag:GONMarkupFont_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    NSString *value;\n    BOOL resetFontAttribute = YES;\n\n    // Text color\n    value = [dicAttributes objectForKey:GONMarkupFont_TAG_color_ATT];\n    if (value)\n    {\n        [configurationDictionary setObject:[value representedColor]\n                                    forKey:NSForegroundColorAttributeName];\n        resetFontAttribute = NO;\n    }\n\n    // Font name\n    value = [dicAttributes objectForKey:GONMarkupFont_TAG_name_ATT];\n    if (value)\n    {\n        // Look for size attribute\n        CGFloat size;\n        NSString *sizeValue = [dicAttributes objectForKey:GONMarkupFont_TAG_size_ATT];\n        if (sizeValue)\n        {\n            size = [sizeValue floatValue];\n        }\n        else\n        {\n            UIFont *currentFont = [configurationDictionary objectForKey:NSFontAttributeName];\n            if (currentFont)\n                size = currentFont.pointSize;\n            else\n                size = [UIFont systemFontSize];\n        }\n\n        // Try to load font from registered ones\n        UIFont *font = [self.parser fontForKey:value];\n        if (!font)\n        {\n            // No matching font found, try to load it by name\n            font = [UIFont fontWithName:value size:size];\n        }\n        else\n        {\n            // Font found, update its size\n            font = [UIFont fontWithDescriptor:font.fontDescriptor size:[sizeValue floatValue]];\n        }\n\n        // Update configuration\n        [configurationDictionary setObject:font\n                                     forKey:NSFontAttributeName];\n\n        resetFontAttribute = NO;\n    }\n    else\n    {\n        // Font size only\n        value = [dicAttributes objectForKey:GONMarkupFont_TAG_size_ATT];\n        if (value)\n        {\n            // Extract size\n            CGFloat size = [value floatValue];\n            \n            // Look for current font\n            UIFont *currentFont = [configurationDictionary objectForKey:NSFontAttributeName];\n            if (currentFont)\n            {\n                // Current font found, so update it with new size\n                currentFont = [UIFont fontWithDescriptor:currentFont.fontDescriptor\n                                                    size:size];\n            }\n            else\n            {\n                // No found defined, use default one with defined size\n                currentFont = [UIFont systemFontOfSize:size];\n            }\n            \n            // Update configuration\n            [configurationDictionary setObject:currentFont\n                                        forKey:NSFontAttributeName];\n\n            resetFontAttribute = NO;\n        }\n    }\n\n    // Empty font parameter, reset configuration\n    if (resetFontAttribute)\n        [configurationDictionary removeObjectForKey:NSFontAttributeName];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupFontTraits.h",
    "content": "//\n//  GONMarkupFontTraits.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 22/09/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Super class for markers updating font traits\n//  overrideBlock allows you to override font. For example, you can used it to return a medium font instead of bold one.\n//  If overrideBlock is set, it will be called first. Is nil is returned, sysytem will try to automatically resolve font\n//  Also note that if an overrideBlock is set, it will be called even is current font have needed trait.\n//\n//  You may not need to use this class directly. Use subclasses instead (GONMarkupBold, GONMarkupItalic)\n\n#import \"GONMarkup.h\"\n\n@interface GONMarkupFontTraits : GONMarkup {\n}\n\n/* Class constructor */\n+ (instancetype)fontTraitsMarkup:(NSString *)tag traits:(UIFontDescriptorSymbolicTraits )trait;\n\n@property (nonatomic, copy) UIFont *(^overrideBlock)(UIFont *font);             // Should return a font. Markup will automatically update font to needed size.\n@property (nonatomic, assign, readonly) UIFontDescriptorSymbolicTraits trait;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupFontTraits.m",
    "content": "//\n//  GONMarkupFontTraits.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 22/09/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupFontTraits.h\"\n#import \"GONMarkup+Private.h\"\n\n@interface GONMarkupFontTraits ()\n// Data\n@property (nonatomic, assign) UIFontDescriptorSymbolicTraits trait;\n@end\n\n@implementation GONMarkupFontTraits\n#pragma mark - Constructor\n+ (instancetype)fontTraitsMarkup:(NSString *)tag traits:(UIFontDescriptorSymbolicTraits )trait\n{\n    GONMarkupFontTraits *markup = [self markupForTag:tag];\n\n    markup.trait = trait;\n\n    return markup;\n}\n\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Look for current font\n    UIFont *currentFont = [configurationDictionary objectForKey:NSFontAttributeName];\n    if (!currentFont)\n    {\n        // No found defined, use default one with default size\n        currentFont = [UIFont systemFontOfSize:[UIFont systemFontSize]];\n    }\n\n    UIFont *updatedFont = nil;\n\n    // Check override block\n    if (_overrideBlock)\n    {\n        // Try with override block\n        updatedFont = _overrideBlock(currentFont);\n    }\n\n    // Check if font already has traits, and if override blocks didn't return a font\n    if (!updatedFont)\n    {\n        // Update font to set trait\n        UIFontDescriptor *fontDescriptor = currentFont.fontDescriptor;\n        UIFontDescriptorSymbolicTraits fontTaits = fontDescriptor.symbolicTraits;\n\n        if (!(fontTaits & _trait))\n        {\n            fontTaits |= _trait;\n            updatedFont = [UIFont fontWithDescriptor:[fontDescriptor fontDescriptorWithSymbolicTraits:fontTaits]\n                                                size:currentFont.pointSize];\n\n            // Font may not exists, fallback\n            // Note : In iOS7, if no fount is found, normal one will be returned. Since iOS8, nil will be returned\n            if (!updatedFont || [currentFont isEqual:updatedFont])\n            {\n                if (self.parser.logLevel & GONMarkupParserLogLevelFonts)\n                {\n                    if (!_overrideBlock)\n                        NSLog(@\"%@ : No font found for <%@-%@> applying traits. Consider setting up <overrideBlock> to provide a font\", [[self class] description], currentFont.familyName, currentFont.fontName);\n                    else\n                        NSLog(@\"%@ : No font returned from overrideBlock for <%@-%@>. Consider seting up one\", [[self class] description], currentFont.familyName, currentFont.fontName);\n                }\n\n                // Do not update font\n                updatedFont = currentFont;\n            }\n        }\n        else\n        {\n            // Font has already requested trait, so use it\n            updatedFont = currentFont;\n        }\n    }\n\n    // Check for font size\n    if (updatedFont.pointSize != currentFont.pointSize)\n    {\n        // Build a new font with current size\n        updatedFont = [UIFont fontWithDescriptor:[updatedFont fontDescriptor]\n                                            size:currentFont.pointSize];\n    }\n\n    // Update configuration\n    [configurationDictionary setObject:updatedFont\n                                 forKey:NSFontAttributeName];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupImage.h",
    "content": "//\n//  GONMarkupImage.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/03/16.\n//  Copyright © 2016 Nicolas Goutaland. All rights reserved.\n//\n//\n//  Define a generic markup to add images\n//  You can specify image path with \"value\" attribute.\n//\n//  Examples\n//\n//  <image src=\"image.png\"/>\n//  <image src=\"#FFEEAA\"/>\n//  <image src=\"myCustomRegisteredColor\"/>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupImage_TAG                 @\"image\"\n\n// Attributes\n#define GONMarkupImage_TAG_value_ATT       @\"src\"\n\n@interface GONMarkupImage : GONMarkup\n/* Default markup to add image support */\n+ (instancetype)imageMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupImage.m",
    "content": "//\n//  GONMarkupImage.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/03/16.\n//  Copyright © 2016 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupImage.h\"\n\n@implementation GONMarkupImage\n+ (instancetype)imageMarkup\n{\n    return [self markupForTag:@\"image\"];\n}\n\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString\n{\n    UIImage *image = [UIImage imageNamed:[dicAttributes objectForKey:GONMarkupImage_TAG_value_ATT]];\n    if (image)\n    {\n        CGFloat scale = [UIScreen mainScreen].scale;\n        scale = 2;\n        NSTextAttachment *attch = [[NSTextAttachment alloc] init];\n        attch.image = image;\n        attch.bounds = CGRectMake(0, 0, image.size.width/scale, image.size.height/scale);\n        return [NSAttributedString attributedStringWithAttachment:attch];\n    }\n\n    return [super updatedContentString:string\n                               context:context\n                            attributes:dicAttributes\n                      stringAttributes:stringAttributes\n                          resultString:resultString];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupInc.h",
    "content": "//\n//  GONMarkupInc.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Define a markup to increment font size. By default, font is increased by 1 point.\n//  You can specify another increment value with \"value\" attribute.\n//\n//  Examples\n//\n//  <inc>text</>\n//  <inc value=\"5\">text</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupInc_TAG                 @\"inc\"\n\n// Attributes\n#define GONMarkupInc_TAG_value_ATT       @\"value\"\n\n@interface GONMarkupInc : GONMarkup\n/* Default markup to add text size increment support */\n+ (instancetype)incMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupInc.m",
    "content": "//\n//  GONMarkupInc.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupInc.h\"\n\n#define DEFAULT_INC_VALUE   1\n\n@implementation GONMarkupInc\n#pragma mark - Constructor\n+ (instancetype)incMarkup\n{\n    return [super markupForTag:GONMarkupInc_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    NSInteger incValue = [[dicAttributes objectForKey:GONMarkupInc_TAG_value_ATT] intValue];\n    if (!incValue)\n        incValue = DEFAULT_INC_VALUE;\n\n    // Look for current font\n    UIFont *currentFont = [configurationDictionary objectForKey:NSFontAttributeName];\n    if (!currentFont)\n    {\n        // No found defined, use default one with default size\n        currentFont = [UIFont systemFontOfSize:[UIFont systemFontSize]];\n    }\n\n    // Update current font with new size\n    [configurationDictionary setObject:[currentFont fontWithSize:currentFont.pointSize + incValue]\n                                forKey:NSFontAttributeName];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupItalic.h",
    "content": "//\n//  GONMarkupItalic.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Tag updating current font style to italic\n//  This tag may not work if no italic version of current font is available.\n//  overrideBlock (GONMarkupFontTraits) allows you to override font. For example, you can used it to return a medium italic font instead of bold italic one.\n//  If overrideBlock is set, it will be called first. Is nil is returned, system will try to automatically resolve font\n//\n//  Examples\n//\n//  <i>italic text</>\n\n#import \"GONMarkupFontTraits.h\"\n\n#define GONMarkupItalic_TAG               @\"i\"\n\n@interface GONMarkupItalic : GONMarkupFontTraits\n\n/* Default markup to add italic support */\n+ (instancetype)italicMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupItalic.m",
    "content": "//\n//  GONMarkupItalic.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupItalic.h\"\n#import \"GONMarkup+Private.h\"\n\n@implementation GONMarkupItalic\n#pragma mark - Constructor\n+ (instancetype)italicMarkup\n{\n    return [super fontTraitsMarkup:GONMarkupItalic_TAG\n                            traits:UIFontDescriptorTraitItalic];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupLineBreak.h",
    "content": "//\n//  GONMarkupLineBreak.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Markup to handle <br/> characters, generating a new line\n//\n//  Example\n//\n//  <br />\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupLineBreak_TAG                 @\"br\"\n\n@interface GONMarkupLineBreak : GONMarkup\n/* Class constructor */\n+ (instancetype)lineBreakMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupLineBreak.m",
    "content": "//\n//  GONMarkupLineBreak.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupLineBreak.h\"\n#import \"GONMarkupList.h\"\n\n#define NEW_LINE            @\"\\n\"\n#define CARRIAGE_RETURN     @\"\\u2028\"\n\n@implementation GONMarkupLineBreak\n#pragma mark - Constructor\n+ (instancetype)lineBreakMarkup\n{\n    return [self markupForTag:GONMarkupLineBreak_TAG];\n}\n\n#pragma mark - Content update\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString \n{\n    // If in a list, no new lines\n    if ([context objectForKey:GONMarkupList_CONFIGURATIONS_KEY])\n        return [[NSAttributedString alloc] initWithString:CARRIAGE_RETURN attributes:stringAttributes];\n\n    return [[NSAttributedString alloc] initWithString:NEW_LINE attributes:stringAttributes];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupLineStyle.h",
    "content": "//\n//  GONMarkupLineStyle.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 03/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n//\n//  Tag used to set underline / strikethrough style.\n//  Attribute \"word\" can be set to apply style only on words. Default is \"false\".\n//  Attribute \"style\" can be used to configure line style (single | thick | double). Default is \"single\".\n//  Attribute \"pattern\" can be used to configure pattern style (solid | dot | dash | dashdot | dashdotdot). Default is \"solid\".\n//  Attribute \"color\" can be used to configure line color. Default is the same as text\".\n//\n//  Colors are handled via NSString+Color, using \"representedColor\" category method\n//  Have a look at https://github.com/nicolasgoutaland/NSString-Color for more information\n\n//\n//  Examples\n//\n//  <u>underline text</>\n//  <u word=\"true\">underline text, only for words</>\n//  <u pattern=\"dashdot\">underline text with dashdot pattern</>\n//  <u pattern=\"dashdot\" word=\"true\">underline text with dashdot pattern, only for words</>\n//  <strike>strikethrough text</>\n//  <strike pattern=\"dashdot\">strikethrough text with dashdot pattern</>\n//  <strike pattern=\"dashdot\" word=\"true\">strikethrough text with dashdot pattern, only for words</>\n//\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupLineStyle_Underline_TAG             @\"u\"\n#define GONMarkupLineStyle_Strikethrough_TAG         @\"strike\"\n\n// Attributes\n#define GONMarkupLineStyle_TAG_word_ATT              @\"word\"\n#define GONMarkupLineStyle_TAG_style_ATT             @\"style\"\n#define GONMarkupLineStyle_TAG_pattern_ATT           @\"pattern\"\n#define GONMarkupLineStyle_TAG_color_ATT             @\"color\"\n\n@interface GONMarkupLineStyle : GONMarkup\n/* Return all markups */\n+ (NSArray *)allMarkups;\n\n/* Default markup to add underline support */\n+ (instancetype)underlineMarkup;\n\n/* Default markup to add strikethrough support */\n+ (instancetype)strikethroughMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupLineStyle.m",
    "content": "//\n//  GONMarkupLineStyle.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 03/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupLineStyle.h\"\n#import \"NSString+Color.h\"\n\n@interface GONMarkupLineStyle ()\n// Data\n@property (nonatomic, strong) NSString *configurationKey;\n@property (nonatomic, strong) NSString *colorConfigurationKey;\n@end\n\n@implementation GONMarkupLineStyle\n#pragma mark - Class initialization\nstatic NSDictionary *dicStyles;\nstatic NSDictionary *dicPatterns;\n+ (void)load\n{\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        dicStyles = @{\n                        @\"single\" : @(NSUnderlineStyleSingle),\n                        @\"double\" : @(NSUnderlineStyleDouble),\n                        @\"thick\"  : @(NSUnderlineStyleThick),\n                     };\n\n        dicPatterns = @{\n                         @\"solid\"       : @(NSUnderlinePatternSolid),\n                         @\"dot\"         : @(NSUnderlinePatternDot),\n                         @\"dash\"        : @(NSUnderlinePatternDash),\n                         @\"dashdot\"     : @(NSUnderlinePatternDashDot),\n                         @\"dashdotdot\"  : @(NSUnderlinePatternDashDotDot)\n                       };\n    });\n}\n\n#pragma mark - Constructor\n+ (NSArray *)allMarkups\n{\n    return @[[self underlineMarkup], [self strikethroughMarkup]];\n}\n\n+ (instancetype)underlineMarkup\n{\n    GONMarkupLineStyle *markup = [self markupForTag:GONMarkupLineStyle_Underline_TAG];\n\n    markup.configurationKey      = NSUnderlineStyleAttributeName;\n    markup.colorConfigurationKey = NSUnderlineColorAttributeName;\n\n    return markup;\n}\n\n+ (instancetype)strikethroughMarkup\n{\n    GONMarkupLineStyle *markup = [self markupForTag:GONMarkupLineStyle_Strikethrough_TAG];\n\n    markup.configurationKey      = NSStrikethroughStyleAttributeName;\n    markup.colorConfigurationKey = NSStrikethroughColorAttributeName;\n\n    return markup;\n}\n\n#pragma mark - Markup lifecycle\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Hold new configuration\n    [configurationDictionary setObject:@([self extractStyleFromAttributes:dicAttributes])\n                                forKey:_configurationKey];\n    \n    // Color\n    UIColor *color = [[dicAttributes objectForKey:GONMarkupLineStyle_TAG_color_ATT] representedColor];\n    if (color)\n    {\n        [configurationDictionary setObject:color\n                                    forKey:_colorConfigurationKey];\n    }\n}\n\n- (NSInteger)extractStyleFromAttributes:(NSDictionary *)dicAttributes\n{\n    NSNumber *tmp;\n    NSInteger style = 0;\n\n    // Word option\n    if ([[dicAttributes objectForKey:GONMarkupLineStyle_TAG_word_ATT] boolValue])\n        style |= NSUnderlineByWord;\n\n    // Style option\n    tmp = [dicStyles objectForKey:[[dicAttributes objectForKey:GONMarkupLineStyle_TAG_style_ATT] lowercaseString]];\n    if (tmp)\n        style |= [tmp integerValue];\n    else\n        style |= NSUnderlineStyleSingle;\n\n    // Pattern option\n    tmp = [dicPatterns objectForKey:[[dicAttributes objectForKey:GONMarkupLineStyle_TAG_pattern_ATT] lowercaseString]];\n    if (tmp)\n        style |= [tmp integerValue];\n    else\n        style |= NSUnderlinePatternSolid;\n\n    return style;\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupList.h",
    "content": "//\n//  GONMarkupList.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Markup used to handle lists\n//  You HAVE to add GONMarkupListItem support to handle list properly\n//\n//  Example\n//\n//  <ul>\n//      <li>first item</>\n//      <li>second item</>\n//      <li>third item</>\n//  </>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupList_unordered_TAG                 @\"ul\"\n#define GONMarkupList_ordered_TAG                   @\"ol\"\n\n// Context\n#define GONMarkupList_CONFIGURATIONS_KEY  @\"GONMarkupList.configurations\"   // References an array, holding automatically pushed / popped tags configurations\n\n#define GONMarkupList_INDENTATION_KEY     @\"GONMarkupList.indentation\"\n#define GONMarkupList_POSITION_KEY        @\"GONMarkupList.position\"\n#define GONMarkupList_ORDERED_KEY         @\"GONMarkupList.ordered\"\n\n@interface GONMarkupList : GONMarkup\n/* Return all markups, including list item one */\n+ (NSArray *)allMarkups;\n\n/* Default markup to add lists support */\n+ (instancetype)listMarkup;\n\n/* Default markup to add ordered lists support */\n+ (instancetype)orderedListMarkup;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupList.m",
    "content": "//\n//  GONMarkupList.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupList.h\"\n#import \"GONMarkupListItem.h\"\n#import \"GONMarkup+Private.h\"\n\n@interface GONMarkupList ()\n// Data\n@property (nonatomic, assign) BOOL isOrdered;\n@end\n\n@implementation GONMarkupList\n#pragma mark - Markup list\n+ (NSArray *)allMarkups\n{\n    return @[[self listMarkup], [self orderedListMarkup], [GONMarkupListItem listItemMarkup]];\n}\n\n#pragma mark - Constructor\n+ (instancetype)listMarkup\n{\n    GONMarkupList *markupList = [self markupForTag:GONMarkupList_unordered_TAG];\n\n    markupList.isOrdered = NO;\n\n    return markupList;\n}\n\n+ (instancetype)orderedListMarkup\n{\n    GONMarkupList *markupList = [self markupForTag:GONMarkupList_ordered_TAG];\n\n    markupList.isOrdered =YES;\n\n    return markupList;\n}\n\n#pragma mark - Markup lifecycle\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Compute indentation level\n    NSInteger indentationLevel = 0;\n    NSDictionary *currentConfiguration = [self currentContextConfiguration:GONMarkupList_CONFIGURATIONS_KEY\n                                                               fromContext:context];\n    if (currentConfiguration)\n        indentationLevel = [[currentConfiguration objectForKey:GONMarkupList_INDENTATION_KEY] intValue] + 1;\n\n    NSDictionary *configuration = [@{\n                                     GONMarkupList_ORDERED_KEY       : @(_isOrdered),\n                                     GONMarkupList_INDENTATION_KEY   : @(indentationLevel),\n                                    } mutableCopy];\n\n    [self pushConfiguration:configuration\n                  toContext:context\n                     forKey:GONMarkupList_CONFIGURATIONS_KEY];\n}\n\n- (NSAttributedString *)updatedContentString:(NSString *)string\n                                     context:(NSMutableDictionary *)context\n                                  attributes:(NSDictionary *)dicAttributes\n                            stringAttributes:(NSDictionary *)stringAttributes\n                                resultString:(NSAttributedString *)resultString\n{\n    return [[NSAttributedString alloc] initWithString:@\"\"];\n}\n\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    [self popContextConfiguration:GONMarkupList_CONFIGURATIONS_KEY\n                      fromContext:context];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupListItem.h",
    "content": "//\n//  GONMarkupListItem.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Class describing a list item\n//  You can subclass it and override methods to handle custom bullets behavior\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupListItem_TAG                 @\"li\"\n\n@interface GONMarkupListItem : GONMarkup\n/* Default markup to add list item support */\n+ (instancetype)listItemMarkup;\n\n/* Method used to compute list item prefix, in ORDERED lists\n * You can override this method in subclasses to change behavior\n *\n * indentationLevel : Current item indentation level in list, when list are nested\n * position          : Current item position in parent list.\n * listConfiguration : Parent list configuration\n * context           : Shared context\n *\n * This method is expected to return a string. You MUST NOT return nil\n */\n- (NSString *)orderedListItemPrefixForIndentation:(NSInteger)indentationLevel position:(NSInteger)position listConfiguration:(NSDictionary *)listConfiguration context:(NSMutableDictionary *)context;\n\n/* Method used to compute list item prefix, in NON ORDERED lists\n * You can override this method in subclasses to change behavior\n *\n * indentationLevel : Current item indentation level in list, when list are nested\n * position          : Current item position in parent list.\n * listConfiguration : Parent list configuration\n * context            : Shared context\n *\n * This method is expected to return a string. You MUST NOT return nil\n */\n- (NSString *)unorderedListItemPrefixForIndentation:(NSInteger)indentationLevel position:(NSInteger)position listConfiguration:(NSDictionary *)listConfiguration context:(NSMutableDictionary *)context;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupListItem.m",
    "content": "//\n//  GONMarkupListItem.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupListItem.h\"\n#import \"GONMarkupList.h\"\n#import \"GONMarkup+Private.h\"\n\n@implementation GONMarkupListItem\n#pragma mark - Constructor\n+ (instancetype)listItemMarkup\n{\n    return [self markupForTag:GONMarkupListItem_TAG];\n}\n\n#pragma mark - Internal configuration\n+ (NSString *)bulletForIndentation:(NSInteger)anIndentation\n{\n    static NSArray *bullets = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        bullets = @[@\"\\u2022\", @\"\\u25E6\"];   // Next should be @\"\\u25A0\", @\"\\u25A1\", but they are displayed too big\n    });\n    \n    return [bullets objectAtIndex:anIndentation % bullets.count];\n}\n\n- (NSString *)unorderedListItemPrefixForIndentation:(NSInteger)indentationLevel\n                                           position:(NSInteger)position\n                                  listConfiguration:(NSDictionary *)aListConfiguration\n                                            context:(NSMutableDictionary *)context\n{\n    NSString *indentation = [self listItemIndentation:indentationLevel];\n    NSString *bullet = [[self class] bulletForIndentation:indentationLevel];\n    \n    return [NSString stringWithFormat:@\"%@%@ \", indentation, bullet];\n}\n\n- (NSString *)orderedListItemPrefixForIndentation:(NSInteger)indentationLevel\n                                         position:(NSInteger)position\n                                listConfiguration:(NSDictionary *)aListConfiguration\n                                          context:(NSMutableDictionary *)context\n{\n    NSString *indentation = [self listItemIndentation:indentationLevel];\n    NSString *bullet = [NSString stringWithFormat:@\"%ld.\", (long)position];\n    \n    return [NSString stringWithFormat:@\"%@%@ \", indentation, bullet];\n}\n\n#pragma mark - Content update\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Retrieve indentation level\n    NSMutableDictionary *currentConfiguration = [self currentContextConfiguration:GONMarkupList_CONFIGURATIONS_KEY\n                                                                      fromContext:context];\n    [currentConfiguration setObject:@([[currentConfiguration objectForKey:GONMarkupList_POSITION_KEY] intValue] + 1)\n                             forKey:GONMarkupList_POSITION_KEY];\n    \n    // Retrieve and update paragraph style\n    NSMutableParagraphStyle *paragraphStyle = [self paragraphStyle:configurationDictionary];\n    \n    // Generate prefix string\n    NSAttributedString *prefixString = [self prefixStringForContext:context\n                                                         attributes:dicAttributes\n                                                   stringAttributes:configurationDictionary\n                                                       resultString:resultString];\n    \n    // Compute prefix string width\n    paragraphStyle.headIndent = CGRectGetWidth([prefixString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)\n                                                                          options:NSStringDrawingUsesLineFragmentOrigin\n                                                                          context:nil]);\n}\n\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    // Retrieve configuration\n    NSDictionary *listConfiguration = [[context objectForKey:GONMarkupList_CONFIGURATIONS_KEY] lastObject];\n    \n    NSInteger indentation = [[listConfiguration objectForKey:GONMarkupList_INDENTATION_KEY] intValue];\n    NSInteger position    = [[listConfiguration objectForKey:GONMarkupList_POSITION_KEY] intValue];\n    BOOL isOrdered        = [[listConfiguration objectForKey:GONMarkupList_ORDERED_KEY] intValue];\n    \n    NSString *prefix;\n    if (isOrdered)\n    {\n        prefix = [self orderedListItemPrefixForIndentation:indentation\n                                                  position:position\n                                         listConfiguration:listConfiguration\n                                                   context:context];\n    }\n    else\n    {    prefix = [self unorderedListItemPrefixForIndentation:indentation\n                                                     position:position\n                                            listConfiguration:listConfiguration\n                                                      context:context];\n    }\n    \n    // If starting a new list, we must have a blank line before previous text\n    if (position == 1 && indentation == 0)\n    {\n        // If last char isn't a new line, add a new line\n        if (resultString.string.length > 0 && ![[NSCharacterSet newlineCharacterSet] characterIsMember:[resultString.string characterAtIndex:resultString.string.length - 1]])\n        {\n            prefix = [@\"\\n\\n\" stringByAppendingString:prefix];\n        } // Last char was a newline, so check if a blank line already exists before paragraph\n        else if (resultString.string.length > 1 && ![[NSCharacterSet newlineCharacterSet] characterIsMember:[resultString.string characterAtIndex:resultString.string.length - 2]])\n        {\n            prefix = [@\"\\n\" stringByAppendingString:prefix];\n        }\n    }\n    else\n    {\n        prefix = [@\"\\n\" stringByAppendingString:prefix];\n    }\n    \n    return [[NSAttributedString alloc] initWithString:prefix attributes:stringAttributes];\n}\n\n#pragma mark - Utils\n- (NSMutableParagraphStyle *)paragraphStyle:(NSMutableDictionary *)configurationDictionary\n{\n    NSMutableParagraphStyle *paragraphStyle = [[configurationDictionary objectForKey:NSParagraphStyleAttributeName] mutableCopy];\n    if (!paragraphStyle)\n        paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];\n    \n    // Hold updated paragraph style\n    [configurationDictionary setObject:paragraphStyle\n                                forKey:NSParagraphStyleAttributeName];\n    \n    return paragraphStyle;\n}\n\n- (NSString *)listItemIndentation:(NSInteger)anIndentation\n{\n    NSMutableString *indentString = [[NSMutableString alloc] init];\n    \n    for (NSInteger i=0; i<anIndentation; i++)\n        [indentString appendString:@\"\\t\"];\n    \n    return indentString;\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupNamedColor.h",
    "content": "//\n//  GONMarkupNamedColor.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Define a tag to set foreground text color\n//  When encountered, contained text will use associated color\n//\n\n#import \"GONMarkup.h\"\n\n@interface GONMarkupNamedColor : GONMarkup\n/* Class constructor\n * If aColor is nil, so this tag will reset current color to parser default one\n */\n+ (instancetype)namedColorMarkup:(UIColor *)aColor forTag:(NSString *)tag;\n\n@property (nonatomic, strong, readonly) UIColor *color;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupNamedColor.m",
    "content": "//\n//  GONMarkupNamedColor.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupNamedColor.h\"\n#import \"GONMarkup+Private.h\"\n\n@interface GONMarkupNamedColor ()\n// Data\n@property (nonatomic, strong) UIColor *color;\n@end\n\n@implementation GONMarkupNamedColor\n#pragma mark - Class constructor\n+ (instancetype)namedColorMarkup:(UIColor *)aColor forTag:(NSString *)tag\n{\n    GONMarkupNamedColor *markup = [self markupForTag:tag];\n\n    markup.color = aColor;\n\n    return markup;\n}\n\n#pragma mark - Configuration\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    if (_color)\n    {\n        [configurationDictionary setObject:_color\n                                     forKey:NSForegroundColorAttributeName];\n    }\n    else\n    {\n        UIColor *defaultColor = [[self.parser defaultConfiguration] objectForKey:NSForegroundColorAttributeName];\n        if (defaultColor)\n        {\n            [configurationDictionary setObject:defaultColor\n                                         forKey:NSForegroundColorAttributeName];\n        }\n        else\n        {\n            [configurationDictionary removeObjectForKey:NSForegroundColorAttributeName];\n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupNamedFont.h",
    "content": "//\n//  GONMarkupNamedFont.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Define a tag to set font / remove font\n//  When encountered, contained text will use associated font and color if set\n\n#import \"GONMarkup.h\"\n\n@interface GONMarkupNamedFont : GONMarkup\n/* Class constructor \n * If font is nil, so this tag will reset current font to parser default one\n */\n+ (instancetype)namedFontMarkup:(UIFont *)font forTag:(NSString *)tag;\n\n@property (nonatomic, strong, readonly) UIFont *font;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupNamedFont.m",
    "content": "//\n//  GONMarkupNamedFont.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupNamedFont.h\"\n#import \"GONMarkup+Private.h\"\n\n@interface GONMarkupNamedFont ()\n// Data\n@property (nonatomic, strong) UIFont *font;\n@end\n\n@implementation GONMarkupNamedFont\n#pragma mark - Class constructor\n+ (instancetype)namedFontMarkup:(UIFont *)font forTag:(NSString *)tag\n{\n    GONMarkupNamedFont *markup = [self markupForTag:tag];\n\n    markup.font = font;\n    \n    return markup;\n}\n\n#pragma mark - Configuration\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    if (_font)\n    {\n        [configurationDictionary setObject:_font\n                                     forKey:NSFontAttributeName];\n    }\n    else\n    {\n        UIFont *defaultfont = [[self.parser defaultConfiguration] objectForKey:NSFontAttributeName];\n        if (defaultfont)\n        {\n            [configurationDictionary setObject:defaultfont\n                                         forKey:NSFontAttributeName];\n        }\n        else\n        {\n            [configurationDictionary removeObjectForKey:NSFontAttributeName];\n        }\n    }\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParagraph.h",
    "content": "//\n//  GONMarkupParagraph.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 06/08/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Markup to handle paragraphs\n//  A paragraph will automatically insert a new line after text\n//\n//  Example\n//\n//  <p>First paragraph</p>\n//\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupParagraph_TAG                 @\"p\"\n\n@interface GONMarkupParagraph : GONMarkup\n/* Class constructor */\n+ (instancetype)paragraphMarkup;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParagraph.m",
    "content": "//\n//  GONMarkupParagraph.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 06/08/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n// Markup to handle <p>. A blank line will be inserted after the paragraph end (\\n\\n)\n\n#import \"GONMarkupParagraph.h\"\n\n@implementation GONMarkupParagraph\n#pragma mark - Constructor\n+ (instancetype)paragraphMarkup\n{\n    return [self markupForTag:GONMarkupParagraph_TAG];\n}\n\n#pragma mark - Content update\n- (NSAttributedString *)prefixStringForContext:(NSMutableDictionary *)context\n                                    attributes:(NSDictionary *)dicAttributes\n                              stringAttributes:(NSDictionary *)stringAttributes\n                                  resultString:(NSAttributedString *)resultString\n{\n    NSString *prefix = @\"\";\n    \n    // Check for previous newline\n    if (resultString.string.length > 0)\n    {\n        // If last char isn't a new line, add a new line\n        if (![[NSCharacterSet newlineCharacterSet] characterIsMember:[resultString.string characterAtIndex:resultString.string.length - 1]])\n        {\n            prefix = @\"\\n\\n\";\n        } // Last char was a newline, so check if a blank line already exists before paragraph\n        else if (resultString.string.length > 1 && ![[NSCharacterSet newlineCharacterSet] characterIsMember:[resultString.string characterAtIndex:resultString.string.length - 2]])\n        {\n            prefix = @\"\\n\";\n        }\n    }\n    \n    return [[NSAttributedString alloc] initWithString:prefix attributes:stringAttributes];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParser.h",
    "content": "//\n//  GONMarkupParser.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n//  A simple string parser, allowing string manipulation, usually used to parse HTML like string.\n//  You have to define your own rules and ensure that tags are wellformed\n//\n//  To close a tag, you do not have to specity its name, </> is valid\n//  <//> is also valid to close all previoulsy opened tags\n//\n// History\n// -------\n// 0.7.5 : Fixed bugs on lists, Added support for strong tag\n// 0.7.4 : Fixed (again -_-) new line character bug on lists\n// 0.7.3 : Fixed new line character bug on lists\n// 0.7.2 : Fixed bug #21\n// 0.7.1 : Fixed warning #18\n// 0.7.0 : Fixed bug #15\n// 0.6.9 : Fixed bug #12\n// 0.6.8 : Fixed import problems with cocoa Pods 0.39\n// 0.6.7 : Added color attribute to font markup\n// 0.6.6 : Added UIButton+GONMarkupParser category\n// 0.6.5 : Updated HTML chars tables\n// 0.6.4 : Updated HTML chars tables\n// 0.6.3 : Fixed a bug in anchor support\n// 0.6.2 : Added anchor support\n// 0.6.1 : Added support for underline and strikethrough color\n// 0.6   : Added support for underline / strikethrough text\n// 0.5   : Initial release\n\n// Roadmap\n// -------\n// Evolution : Allow markup to be encoded (NSCoding)\n// Evolution : Loading from PLIST file\n// Evolution : Allow copy for parsers / markup\n\n#import \"GONMarkup.h\"\n\n#define GONMarkupParser_ERROR_DOMAIN                   @\"error.markupParser\"\n#define GONMarkupParser_StringMalformed_ERROR_CODE     69\n#define GONMarkupParser_incorrectClosingTag_KEY        @\"incorrectClosingTag\"\n\ntypedef enum : NSUInteger {\n    GONMarkupParserLogLevelNone           = 0,              // No logs\n    GONMarkupParserLogLevelUnbalancedTags = 0x01 << 0,      // Logs when unbalanced tags are found\n    GONMarkupParserLogLevelUnknownTag     = 0x01 << 1,      // Logs when an unknow tag is found\n    GONMarkupParserLogLevelWorkflow       = 0x01 << 2,      // Logs parser workflow (Very verbose)\n    GONMarkupParserLogLevelFonts          = 0x01 << 3,      // Logs fonts errors (Very useful to detect missing bold / italic fonts)\n    GONMarkupParserLogLevelAll            = 0xFF,           // Logs all\n    GONMarkupParserLogLevelErrors         = GONMarkupParserLogLevelFonts | GONMarkupParserLogLevelUnknownTag | GONMarkupParserLogLevelUnbalancedTags\n} GONMarkupParserLogLevel;\n\n@interface GONMarkupParser : NSObject\n// Constructors\n/* Instanciate a new markup parser, configured to handle all default tags */\n+ (GONMarkupParser *)defaultMarkupParser;\n\n/* Instanciate a new empty markup parser. This parser won't have any configured tag\n * Same as [[GONMarkupParser alloc] init]\n */\n+ (GONMarkupParser *)emptyMarkupParser;\n\n/* Add a new markup to parser\n * A markup can be used in only one parser at a time\n * If you are trying to a markup already used by another parser, an exception willl be thrown\n */\n- (void)addMarkup:(GONMarkup *)markup;\n\n/* Add some markups */\n- (void)addMarkups:(id <NSFastEnumeration>)markups;\n\n/* Return a previously registered markup that can handle given tag */\n- (GONMarkup *)markupForTag:(NSString *)tag;\n\n/* Remove given markup from parser, if previously added */\n- (void)removeMarkup:(GONMarkup *)markup;\n\n/* Remove given markups from parser, if previously added */\n- (void)removeMarkups:(id <NSFastEnumeration>)markups;\n\n/* Remove all currently applied markups */\n- (void)removeAllMarkups;\n\n// Fonts management\n/* Register given font */\n- (void)registerFont:(UIFont *)font forKey:(NSString *)key;\n\n/* Register given font */\n- (UIFont *)fontForKey:(NSString *)key;\n\n/* Register given font */\n- (void)unregisterFontForKey:(NSString *)key;\n\n/* Convert given string to an attributed string.\n * String will be parsed and updated according to stored markups\n * If nil is passed as parameter, an empty string will be returned\n *\n * anError may be set if input string seems malformed, but method will return a valid string. Only last error is returned.\n */\n- (NSMutableAttributedString *)attributedStringFromString:(NSString *)string error:(NSError **)error;\n\n/* Same as attributedStringFromString:string error:nil.\n * Because sometimes, you don't care about errors.\n */\n- (NSMutableAttributedString *)attributedStringFromString:(NSString *)string;\n\n@property (nonatomic, assign)           BOOL replaceNewLineCharactersFromInputString;                           // If YES, all [NSCharacterSet newlineCharacterSet] will be replaced by spaces from input string.\n                                                                                                                // Replacing process will occur AFTER preprocessingBlock, BEFORE parsing.\n                                                                                                                // Use <br/> and <p> to add new lines. Default is NO.\n\n@property (nonatomic, assign)           BOOL replaceHTMLCharactersFromOutputString;                             // If YES, all HTML entities will be replaced in output string.\n                                                                                                                // Replacing process will occur BEFORE postProcessingBlock, AFTER parsing.\n                                                                                                                // Default is YES\n\n@property (nonatomic, strong, readonly) NSMutableDictionary *defaultConfiguration;                              // Default attributed string configuration\n@property (nonatomic, readonly)         NSArray *markups;                                                       // Retrieve all applied markups\n@property (nonatomic, readonly)         NSDictionary *registeredFonts;                                          // Retrieve all applied markups\n@property (nonatomic, copy)             void (^preProcessingBlock)(NSMutableString *inputString);               // Block automatically called to preprocess input string\n@property (nonatomic, copy)             void (^postProcessingBlock)(NSMutableAttributedString *inputString);    // Block automatically called to postprocess result attributed string\n@property (nonatomic, assign)           GONMarkupParserLogLevel logLevel;                                       // Bitmask to select displayed logs\n@property (nonatomic, assign)           BOOL assertOnError;                                                     // Enables assert when an error is generated. Useful when debugging.\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParser.m",
    "content": "//\n//  GONMarkupParser.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland All rights reserved.\n//\n\n#import \"GONMarkupParser.h\"\n#import \"GONMarkup+Private.h\"\n#import \"GONMarkupDefaultMarkups.h\"\n#import \"GONMarkupParserUtils.h\"\n\n#define MARKUP_REGEX                           @\"(.*?)(<[^>]+>|\\\\Z)\"\n#define ATTRIBUTES_REGEX                       @\"([^\\\\s=]+)\\\\s*=\\\\s*('(\\\\\\\\'|[^']*')|\\\"(\\\\\\\\\\\"|[^\\\"])*\\\")\"\n#define LOG_IF_DEBUG(level, msg, ...)          do {if (_logLevel & level) { NSLog(@\"MarkupParser : %@\", [NSString stringWithFormat:msg, ##__VA_ARGS__]); }} while(0)\n\n@interface GONMarkupParser ()\n// Style\n@property (nonatomic, strong) NSMutableDictionary *defaultConfiguration;     // Default attributed string configuration\n\n// Fonts\n@property (nonatomic, strong) NSMutableDictionary *dicRegisteredFonts;       // Registered fonts\n\n// Data\n@property (nonatomic, strong) NSMutableDictionary *dicCurrentMarkup;         // Dictionary representation of markups\n@property (nonatomic, strong) NSRegularExpression *markupRegex;              // Regular expression to extract tokens\n@property (nonatomic, strong) NSRegularExpression *attributesRegex;          // Attributes regex\n\n// Ephemeral internal data. Used to reduce parameters count in internal methods\n@property (nonatomic, strong) NSMutableArray      *configurationsStack;      // Configurations stack\n@property (nonatomic, strong) NSMutableArray      *markupsStack;             // Markups stack\n@property (nonatomic, strong) NSMutableArray      *markupAttributesStack;    // Markups attributes stack\n@property (nonatomic, strong) NSMutableDictionary *currentContext;           // Current context\n@end\n\n@implementation GONMarkupParser\n#pragma mark - Constructor\n+ (GONMarkupParser *)defaultMarkupParser\n{\n    GONMarkupParser *parser = [[GONMarkupParser alloc] init];\n\n    // WIP\n    // [parser addMarkup:[GONMarkupImage imageMarkup]];\n\n    [parser addMarkup:[GONMarkupItalic italicMarkup]];\n    [parser addMarkup:[GONMarkupBold boldMarkup]];\n    [parser addMarkup:[GONMarkupStrong strongMarkup]];\n\n    [parser addMarkup:[GONMarkupDec decMarkup]];\n    [parser addMarkup:[GONMarkupInc incMarkup]];\n\n    [parser addMarkup:[GONMarkupAnchor anchorMarkup]];\n    [parser addMarkup:[GONMarkupFont fontMarkup]];\n    [parser addMarkup:[GONMarkupColor colorMarkup]];\n    [parser addMarkup:[GONMarkupLineBreak lineBreakMarkup]];\n    [parser addMarkup:[GONMarkupReset resetMarkup]];\n    [parser addMarkup:[GONMarkupParagraph paragraphMarkup]];\n\n    [parser addMarkups:[GONMarkupLineStyle allMarkups]];\n    [parser addMarkups:[GONMarkupTextStyle allMarkups]];\n    [parser addMarkups:[GONMarkupList allMarkups]];\n    [parser addMarkups:[GONMarkupAlignment allMarkups]];\n\n    return parser;\n}\n\n+ (GONMarkupParser *)emptyMarkupParser\n{\n    return [[GONMarkupParser alloc] init];\n}\n\n- (id)init\n{\n    if (self = [super init])\n    {\n        _markupRegex = [[NSRegularExpression alloc] initWithPattern:MARKUP_REGEX\n                                                            options:NSRegularExpressionDotMatchesLineSeparators\n                                                              error:nil];\n\n        _attributesRegex = [[NSRegularExpression alloc] initWithPattern:ATTRIBUTES_REGEX\n                                                                options:NSRegularExpressionDotMatchesLineSeparators\n                                                                  error:nil];\n\n        _assertOnError           = NO;\n        _logLevel                = GONMarkupParserLogLevelNone;\n        _defaultConfiguration    = [[NSMutableDictionary alloc] init];\n        _dicCurrentMarkup        = [[NSMutableDictionary alloc] init];\n        _dicRegisteredFonts      = [[NSMutableDictionary alloc] init];\n\n        _replaceNewLineCharactersFromInputString = NO;\n        _replaceHTMLCharactersFromOutputString   = YES;\n    }\n\n    return self;\n}\n\n#pragma mark - Markup management\n- (void)addMarkup:(GONMarkup *)markup\n{\n    // Nothing to do if already added to parser\n    if (markup.parser == self)\n        return;\n\n    if (markup.parser != nil)\n        @throw @\"Error, a Markup can be used by only one parser at a time\";\n\n    // Bind to parser\n    markup.parser = self;\n    [_dicCurrentMarkup setObject:markup\n                          forKey:markup.tag];\n}\n\n- (GONMarkup *)markupForTag:(NSString *)tag\n{\n    // Retrieve markup\n    return [_dicCurrentMarkup objectForKey:tag];\n}\n\n- (void)addMarkups:(id <NSFastEnumeration>)markups\n{\n    for (GONMarkup *markup in markups)\n        [self addMarkup:markup];\n}\n\n- (void)removeMarkup:(GONMarkup *)markup\n{\n    GONMarkup *currentMarkup = [_dicCurrentMarkup objectForKey:markup.tag];\n    if (currentMarkup == markup)\n    {\n        // Remove parser link\n        markup.parser = nil;\n        [_dicCurrentMarkup removeObjectForKey:markup.tag];\n    }\n}\n\n- (void)removeMarkups:(id <NSFastEnumeration>)markups\n{\n    for (GONMarkup *markup in markups)\n        [self removeMarkup:markup];\n}\n\n- (void)removeAllMarkups\n{\n    for (GONMarkup *markup in [_dicCurrentMarkup allValues])\n        markup.parser = nil;\n\n    [_dicCurrentMarkup removeAllObjects];\n}\n\n#pragma mark - Parser\n- (NSMutableAttributedString *)attributedStringFromString:(NSString *)string\n{\n    return [self attributedStringFromString:string\n                                      error:nil];\n}\n\n- (NSMutableAttributedString *)attributedStringFromString:(NSString *)string error:(NSError **)error\n{\n    LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Input string :\\n%@\\n\", string);\n\n    // Check for nil values\n    if (!string)\n    {\n        LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Input string was <nil>, returning empty string\");\n        return [[NSMutableAttributedString alloc] init];\n    }\n\n    // Make input string mutable\n    NSMutableString *inputString = [string mutableCopy];\n\n    // Handle pre processing\n    LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Preprocessing string\");\n    if (_preProcessingBlock)\n        _preProcessingBlock(inputString);\n\n    // Replace new line characters\n    if (_replaceNewLineCharactersFromInputString)\n        inputString = [[[inputString componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@\" \"] mutableCopy];\n\n    // Parse input string\n    NSMutableAttributedString *resString = [self parseString:inputString error:error];\n\n    if (error)\n        LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Parsing completed with an error <%@>\", *error);\n    else\n        LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Parsing completed without error\");\n\n    // Replace html entities\n    if (_replaceHTMLCharactersFromOutputString)\n        [GONMarkupParserUtils cleanHTMLEntitiesFromString:resString.mutableString];\n\n    // Handle post processing\n    LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Postprocessing string\");\n    if (_postProcessingBlock)\n        _postProcessingBlock(resString);\n\n    LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Result string :\\n%@\\n\", resString);\n\n    return resString;\n}\n\n- (NSMutableAttributedString *)parseString:(NSString *)inputString error:(NSError **)error\n{\n    // Init stack\n    _configurationsStack   = [[NSMutableArray alloc] init];\n    _currentContext        = [[NSMutableDictionary alloc] init];\n    _markupsStack          = [[NSMutableArray alloc] init];\n    _markupAttributesStack = [[NSMutableArray alloc] init];\n\n    // Parse string\n    NSArray *results = [_markupRegex matchesInString:inputString\n                                             options:0\n                                               range:NSMakeRange(0, inputString.length)];\n\n    // Prepare result string\n    NSMutableAttributedString *resultString = [[NSMutableAttributedString alloc] init];\n\n    // Browse chunks\n    NSString *tag;\n    BOOL autoclosingMarkup;\n    @try\n    {\n        [resultString beginEditing];\n\n        for (NSTextCheckingResult *result in results)\n        {\n            // Split string\n            NSArray *parts = [[inputString substringWithRange:result.range] componentsSeparatedByString:@\"<\"];\n            \n            // Append extracted string\n            [resultString appendAttributedString:[self computeFinalExtractedString:[parts firstObject]\n                                                                      resultString:resultString]];\n            \n            // Check if a tag was found\n            if (parts.count > 1)\n            {\n                // Extract tag and clean it\n                tag = [parts objectAtIndex:1];\n                tag = [tag substringToIndex:tag.length - 1]; // Remove final >\n                tag = [tag stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n                \n                if ([tag rangeOfString:@\"/\"].location == 0)\n                {\n                    // Lowercase tag, trim closing character\n                    tag = [[tag substringFromIndex:1] lowercaseString];\n                    \n                    // Trim potential remaining white spaces\n                    tag = [tag stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n                    \n                    // Closing current tag, so append result string\n                    [resultString appendAttributedString:[self computeSuffixString:resultString]];\n                    [self handleClosingTag:tag\n                              resultString:resultString\n                                     error:error];\n                }\n                else\n                {\n                    // Check if autoclosing markup or not\n                    autoclosingMarkup = [tag rangeOfString:@\"/\" options:NSBackwardsSearch].location == (tag.length - 1);\n                    \n                    // If autoclosing markup, trim last /\n                    if (autoclosingMarkup)\n                        tag = [tag substringToIndex:tag.length - 1];\n                    \n                    // Trim potential remaining white spaces\n                    tag = [tag stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n                    \n                    // Split tag / attributes\n                    tag = [self extractTagAndPushAttributesFromTag:tag];\n                    \n                    // Handle autoclosing markup\n                    if (autoclosingMarkup)\n                    {\n                        // Opening tag\n                        [self handleOpeningTag:tag\n                                  resultString:resultString\n                                         error:error];\n                        \n                        // Append an extracted empty string\n                        [resultString appendAttributedString:[self computePrefixString:resultString]];\n                        [resultString appendAttributedString:[self computeFinalExtractedString:@\"\" resultString:resultString]];\n                        [resultString appendAttributedString:[self computeSuffixString:resultString]];\n                        \n                        // Close tag\n                        [self handleClosingTag:tag\n                                         resultString:resultString\n                                         error:error];\n                    }\n                    else\n                    {\n                        // Opening tag\n                        [self handleOpeningTag:tag\n                                  resultString:resultString\n                                         error:error];\n                        [resultString appendAttributedString:[self computePrefixString:resultString]];\n                    }\n                }\n            }\n        }\n        [resultString endEditing];\n\n        if (_configurationsStack.count != 0)\n        {\n            LOG_IF_DEBUG(GONMarkupParserLogLevelUnbalancedTags, @\"Parsing completed, but stack isn't empty, some closing tags seems missing :\\nStack :%@\\n\", _configurationsStack);\n            [self generateError:error tag:nil];\n        }\n    }\n    @catch (NSException *exception)\n    {\n        LOG_IF_DEBUG(GONMarkupParserLogLevelErrors, @\"An error did occur while parsing :%@\\n\", exception);\n        LOG_IF_DEBUG(GONMarkupParserLogLevelErrors, @\"Parsed string so for :\\n%@\\n\", resultString.string);\n        [self generateError:error tag:nil];\n    }\n\n    // Flush unuseful data\n    _markupsStack          = nil;\n    _configurationsStack   = nil;\n    _currentContext        = nil;\n    _markupAttributesStack = nil;\n\n    return resultString;\n}\n\n#pragma mark - Utils\n- (NSString *)extractTagAndPushAttributesFromTag:(NSString *)tag\n{\n    // Check for attributes\n    NSRange range = [tag rangeOfString:@\" \"];\n    NSDictionary *attributes = nil;\n    NSString *extractedTag;\n    if (range.location == NSNotFound)\n    {\n        // No attributed to extract, and tag is full string\n        extractedTag = tag;\n    }\n    else\n    {\n        // There may be some attributes, so extract tag\n        extractedTag = [tag substringToIndex:range.location];\n\n        attributes = [self extractAttributesFromString:[tag substringFromIndex:range.location]];\n    }\n\n    // Check if some attributes were found\n    [_markupAttributesStack addObject:(attributes.count ? attributes : [NSNull null])];\n\n    return [extractedTag lowercaseString];\n}\n\n- (NSDictionary *)attributesForCurrentTag\n{\n    id attributes = [_markupAttributesStack lastObject];\n    if (attributes == [NSNull null])\n        return nil;\n\n    return attributes;\n}\n\n- (NSDictionary *)extractAttributesFromString:(NSString *)string\n{\n    NSMutableDictionary *dicAttributes = [[NSMutableDictionary alloc] init];\n\n    // Parse string\n    NSArray *results = [_attributesRegex matchesInString:string\n                                                 options:0\n                                                   range:NSMakeRange(0, string.length)];\n\n    // Browse chunks\n    NSString *matchedString;\n    NSRange range;\n    NSString *attributeKey;\n    NSMutableString *attributeValue;\n    for (NSTextCheckingResult *result in results)\n    {\n        // Extract matched string\n        matchedString = [string substringWithRange:result.range];\n        \n        // Look for character to split string\n        range = [matchedString rangeOfString:@\"=\"];\n\n        // Extract key\n        attributeKey    = [[matchedString substringToIndex:range.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];\n        \n        // Extract value\n        attributeValue  = [[[matchedString substringFromIndex:range.location + 1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] mutableCopy];\n\n        // Clean value, by trimming enclosing quotes / double quotes, cleaning potential &quot; entities\n        [attributeValue replaceCharactersInRange:NSMakeRange(attributeValue.length - 1, 1) withString:@\"\"];\n        [attributeValue replaceCharactersInRange:NSMakeRange(0, 1)                         withString:@\"\"];\n        [attributeValue replaceOccurrencesOfString:@\"&quot;\" withString:@\"\\\"\" options:0 range:NSMakeRange(0, attributeValue.length)];\n\n        // Clean pontential html entities in string\n        [dicAttributes setObject:attributeValue\n                          forKey:attributeKey];\n    }\n\n    return dicAttributes;\n}\n\n#pragma mark - Tag content managements\n- (NSAttributedString *)computePrefixString:(NSAttributedString *)resultString\n{\n    GONMarkup *currentMarker = [_markupsStack lastObject];\n    if (currentMarker && ![currentMarker isKindOfClass:[NSNull class]])\n    {\n        return [currentMarker prefixStringForContext:_currentContext\n                                          attributes:[self attributesForCurrentTag]\n                                    stringAttributes:[self currentConfiguration]\n                                        resultString:resultString];\n\n    }\n\n    return [[NSAttributedString alloc] initWithString:@\"\"];\n}\n\n- (NSAttributedString *)computeSuffixString:(NSAttributedString *)resultString\n{\n    GONMarkup *currentMarker = [_markupsStack lastObject];\n    if (currentMarker && ![currentMarker isKindOfClass:[NSNull class]])\n    {\n        return [currentMarker suffixStringForContext:_currentContext\n                                          attributes:[self attributesForCurrentTag]\n                                    stringAttributes:[self currentConfiguration]\n                                        resultString:resultString];\n\n    }\n\n    return [[NSAttributedString alloc] initWithString:@\"\" attributes:[self currentConfiguration]];\n}\n\n- (NSAttributedString *)computeFinalExtractedString:(NSString *)inputString\n                                       resultString:(NSAttributedString *)resultString\n{\n    GONMarkup *currentMarker = [_markupsStack lastObject];\n    if (currentMarker && ![currentMarker isKindOfClass:[NSNull class]])\n    {\n        return [currentMarker updatedContentString:inputString\n                                           context:_currentContext\n                                        attributes:[self attributesForCurrentTag]\n                                  stringAttributes:[self currentConfiguration]\n                                      resultString:resultString];\n    }\n\n    return [[NSAttributedString alloc] initWithString:inputString attributes:[self currentConfiguration]];\n}\n\n#pragma mark - Tag managements\n- (BOOL)handleClosingTag:(NSString *)tag\n            resultString:(NSAttributedString *)resultString\n                   error:(NSError **)error\n{\n    // Hold error status\n    BOOL errorGenerated = NO;\n\n    // Look for full style closing tag, @\"//\"\n    // Checking only for one /, because first one was trimmed\n    if ([tag rangeOfString:@\"/\"].location == 0)\n    {\n        if (!_configurationsStack.count)\n        {\n            LOG_IF_DEBUG(GONMarkupParserLogLevelUnbalancedTags, @\"Trying to close all tags, but stack is empty\");\n            errorGenerated = [self generateError:error tag:tag];\n        }\n        else\n        {\n            GONMarkup *markup;\n            NSMutableDictionary *currentTagConfiguration;\n            for (NSInteger i=_markupsStack.count - 1; i>=0; i--)\n            {\n                markup = [_markupsStack objectAtIndex:i];\n                currentTagConfiguration = [_configurationsStack objectAtIndex:i];\n\n                // If we are closing an unknown tag, skip it\n                if (![markup isKindOfClass:[NSNull class]])\n                {\n                    [markup closingMarkupFound:tag\n                                 configuration:currentTagConfiguration\n                                       context:_currentContext\n                                    attributes:([_markupAttributesStack objectAtIndex:i] == [NSNull null] ? nil : [_markupAttributesStack objectAtIndex:i])\n                                  resultString:resultString];\n                }\n                else\n                {\n                    LOG_IF_DEBUG(GONMarkupParserLogLevelUnknownTag, @\"Closing unkown found tag <%@>\", tag);\n                    errorGenerated = [self generateError:error tag:tag];\n                }\n            }\n\n            [_configurationsStack removeAllObjects];\n            [_markupsStack removeAllObjects];\n            [_currentContext removeAllObjects];\n            [_markupAttributesStack removeAllObjects];\n\n            LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Closing all tags\\nStack : %@\\n\", _configurationsStack);\n        }\n    }\n    else\n    {\n        // Check if available tags\n        if (!_configurationsStack.count)\n        {\n            // Closing a tag, but tags stack is empty\n            LOG_IF_DEBUG(GONMarkupParserLogLevelUnbalancedTags, @\"Trying to close last tag, but stack is empty\");\n            errorGenerated = [self generateError:error tag:tag];\n        }\n        else\n        {\n            \n            // Extract current markup\n            GONMarkup *markup = [_markupsStack lastObject];\n\n            // Present error when closing an unkwnow markup\n            if (markup && ![markup isKindOfClass:[NSNull class]])\n            {\n                // Check that closing that is matching opening one\n                if (tag.length)\n                {\n                    if (![tag isEqualToString:markup.tag])\n                    {\n                        LOG_IF_DEBUG(GONMarkupParserLogLevelUnbalancedTags, @\"Closing tag found <%@>, is not matching currently opened one <%@>\", tag, markup.tag);\n                        errorGenerated = [self generateError:error tag:tag];\n                    }\n                }\n\n                [markup closingMarkupFound:tag\n                             configuration:[_configurationsStack lastObject]\n                                   context:_currentContext\n                                attributes:[self attributesForCurrentTag]\n                              resultString:resultString];\n            }\n\n            // Remove last tag objet\n            [_configurationsStack removeLastObject];\n            [_markupsStack removeLastObject];\n            [_markupAttributesStack removeLastObject];\n\n            LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Closing tag (%@)\\nStack : %@\\n\", tag, _configurationsStack);\n        }\n    }\n\n    return errorGenerated;\n}\n\n- (BOOL)handleOpeningTag:(NSString *)tag\n            resultString:(NSAttributedString *)resultString\n                   error:(NSError **)error\n{\n    // Hold error status\n    BOOL errorGenerated = NO;\n\n    // Prepare tag configuration\n    NSMutableDictionary *currentTagConfiguration = [self mutableCurrentConfiguration];\n\n    // Retrieve markup associated to tag\n    GONMarkup *markup = [self markupForTag:tag];\n\n    // Ensure a markup was found\n    if (!markup)\n    {\n        LOG_IF_DEBUG(GONMarkupParserLogLevelUnknownTag, @\"No markup found for tag <%@>\\n\", tag);\n        errorGenerated = [self generateError:error\n                                         tag:tag];\n\n        [_markupsStack addObject:[NSNull null]];\n    }\n    else\n    {\n        [markup openingMarkupFound:tag\n                     configuration:currentTagConfiguration\n                           context:_currentContext\n                        attributes:[self attributesForCurrentTag]\n                      resultString:resultString];\n\n        [_markupsStack addObject:markup];\n    }\n\n    // Hold configuration\n    [_configurationsStack addObject:currentTagConfiguration];\n\n    LOG_IF_DEBUG(GONMarkupParserLogLevelWorkflow, @\"Opening tag (%@)\\nStack : %@\\n\", tag, _configurationsStack);\n\n    return errorGenerated;\n}\n\n- (NSDictionary *)currentConfiguration\n{\n    // Extract configuration on top of stack\n    if (!_configurationsStack.count)\n        return _defaultConfiguration;\n\n    return [_configurationsStack lastObject];\n}\n\n- (NSMutableDictionary *)mutableCurrentConfiguration\n{\n    NSMutableDictionary *mutableConfiguration = [[self currentConfiguration] mutableCopy];\n\n    // Force paragraph style mutability\n    NSParagraphStyle *paragraphStyle = [mutableConfiguration objectForKey:NSParagraphStyleAttributeName];\n    if (paragraphStyle)\n    {\n        [mutableConfiguration setObject:[paragraphStyle mutableCopy]\n                                 forKey:NSParagraphStyleAttributeName];\n    }\n\n    return mutableConfiguration;\n}\n\n#pragma mark - Fonts management\n- (void)registerFont:(UIFont *)font forKey:(NSString *)key\n{\n    [_dicRegisteredFonts setObject:font\n                            forKey:key];\n}\n\n- (UIFont *)fontForKey:(NSString *)key\n{\n    return [_dicRegisteredFonts objectForKey:key];\n}\n\n- (void)unregisterFontForKey:(NSString *)key\n{\n    [_dicRegisteredFonts removeObjectForKey:key];\n}\n\n#pragma mark - Error handling\n- (BOOL)generateError:(NSError **)error tag:(NSString *)tag\n{\n    // Assert only is requested\n    if (_assertOnError)\n        NSAssert1(NO, @\"An error was generated parsing following text, found at markup <%@>\", tag);\n\n    if (error)\n    {\n        // Initialize user info\n        NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:@\"Input string is malformed. Output attributed string may not be displayed correctly\"\n                                                                           forKey:NSLocalizedDescriptionKey];\n\n        // Add tag if avalaible\n        if (tag)\n        {\n            [userInfo setObject:tag\n                         forKey:GONMarkupParser_incorrectClosingTag_KEY];\n        }\n\n        // Build error\n        *error = [NSError errorWithDomain:GONMarkupParser_ERROR_DOMAIN\n                                     code:GONMarkupParser_StringMalformed_ERROR_CODE\n                                 userInfo:userInfo];\n        \n        return YES;\n    }\n\n    return NO;\n}\n\n#pragma mark - Getters\n- (NSArray *)markups\n{\n    return [[_dicCurrentMarkup allValues] copy];\n}\n\n- (NSDictionary *)registeredFonts\n{\n    return [_dicRegisteredFonts copy];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParserManager.h",
    "content": "//\n//  GONMarkupParserManager.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/07/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  This class helps you to manage shared parsers\n//  It also provides a default shared parser for your application\n\n#import \"GONMarkupParser.h\"\n\n@interface GONMarkupParserManager : NSObject\n// Shared parsers management\n/* Return shared parser instance.\n * Shared parser is preconfigured to handle all default tags\n */\n+ (GONMarkupParser *)sharedParser;\n\n/* Retrieve a parser registered under given key\n * Return nil if not found\n */\n+ (GONMarkupParser *)registeredMarkupParserForKey:(NSString *)key;\n\n/* Register given parser under key\n * Use this method to be able to share a parser\n */\n+ (void)registerMarkupParser:(GONMarkupParser *)parser forKey:(NSString *)key;\n\n/* Unregister parser under given key */\n+ (void)unregisterMarkupParserForKey:(NSString *)key;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParserManager.m",
    "content": "//\n//  GONMarkupParserManager.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/07/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupParserManager.h\"\n#import \"GONMarkupDefaultMarkups.h\"\n\n@interface GONMarkupParserManager ()\n// Data\n@property (nonatomic, strong) NSMutableDictionary *registeredParsers;\n@end\n\n@implementation GONMarkupParserManager\n#pragma mark - Shared manager\n+ (instancetype)manager\n{\n    static GONMarkupParserManager *sharedInstance = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        sharedInstance = [[self alloc] init];\n    });\n\n    return sharedInstance;\n}\n\n- (id)init\n{\n    if (self = [super init])\n    {\n        _registeredParsers = [[NSMutableDictionary alloc] init];\n    }\n\n    return self;\n}\n\n#pragma mark - Shared instance\n+ (GONMarkupParser *)sharedParser\n{\n    static GONMarkupParser *sharedParser = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        sharedParser = [GONMarkupParser defaultMarkupParser];\n    });\n\n    return sharedParser;\n}\n\n+ (GONMarkupParser *)registeredMarkupParserForKey:(NSString *)key\n{\n    return [[[self manager] registeredParsers] objectForKey:key];\n}\n\n+ (void)registerMarkupParser:(GONMarkupParser *)parser forKey:(NSString *)key\n{\n    [[[self manager] registeredParsers] setObject:parser\n                                           forKey:key];\n}\n\n+ (void)unregisterMarkupParserForKey:(NSString *)key\n{\n    [[[self manager] registeredParsers] removeObjectForKey:key];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParserUtils.h",
    "content": "//\n//  GONMarkupParserUtils.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/08/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Utils\n//  Why not using some categories Sir ? Because I'm pretty sure everyone already have a cleanHTMLEntities method on their strings,\n//  and I don't want to conflict with existing methods, nor adding a pod dependency that will add tons of new methods\n@class GONMarkupParser;\n\n@interface GONMarkupParserUtils : NSObject\n/* Clean HTML entities from string */\n+ (void)cleanHTMLEntitiesFromString:(NSMutableString *)inputString;\n\n/* Helper method to generate an attributed string from a parser, but allowing to set default text color, text alignment and font \n * if they are not set in parser default configuration.\n * This mthod will update parser default configuration, generate string, then revert configuration back to previous state\n * Used in UILAbel+GONMarkupParser and UITextField+GONMarkupParser categories to prevent duplicated code\n * If parser is nil, [GONMarkupParserManager sharedParser] will be used\n */\n+ (NSAttributedString *)attributedString:(GONMarkupParser *)parser\n                              withString:(NSString *)inputString\n                             defautColor:(UIColor *)defaultColor\n                             defaultFont:(UIFont *)defaultFont\n                        defaultAlignment:(NSTextAlignment)defaultAlignment;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParserUtils.m",
    "content": "//\n//  GONMarkupParserUtils.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/08/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  http://www.w3schools.com/charsets/ref_html_entities_4.asp\n\n#import \"GONMarkupParserUtils.h\"\n#import \"GONMarkupParserManager.h\"\n\n#define HTML_ENTITY_REGEX               @\"&#?[a-zA-Z0-9]+;\"\n#define HTML_ENTITY_256_PREFIX_SEARCH   @\"&#0\"\n#define HTML_ENTITY_256_PREFIX_REPLACE  @\"&#\"\n#define HTML_ENTITY_256_LENGTH          6\n\n@implementation GONMarkupParserUtils\n#pragma mark - Utils\n+ (void)cleanHTMLEntitiesFromString:(NSMutableString *)inputString\n{\n    static NSRegularExpression *regex = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        regex = [NSRegularExpression regularExpressionWithPattern:HTML_ENTITY_REGEX\n                                                          options:0\n                                                            error:nil];\n    });\n\n    NSRange range                = NSMakeRange(0, inputString.length);\n    NSTextCheckingResult *result = nil;\n    NSString *entity             = nil;\n    NSString * match             = nil;\n    while ((result = [regex firstMatchInString:inputString options:0 range:range]) != nil) {\n\n        // Check if entity is known\n        match  = [inputString substringWithRange:result.range];\n        entity = [dicEntities objectForKey:match];\n\n        // If no entity found, try with alternate synthax\n        if (!entity)\n        {\n            // Check only if\n            if (match.length == HTML_ENTITY_256_LENGTH && [match rangeOfString:HTML_ENTITY_256_PREFIX_SEARCH].location == 0)\n            {\n                match = [match stringByReplacingOccurrencesOfString:HTML_ENTITY_256_PREFIX_SEARCH withString:HTML_ENTITY_256_PREFIX_REPLACE];\n\n                // Look again for entity\n                entity = [dicEntities objectForKey:match];\n            }\n        }\n\n        if (entity)\n            [inputString replaceCharactersInRange:result.range withString:entity];\n\n        // Update range\n        range = NSMakeRange(result.range.location + 1, inputString.length - result.range.location - 1);\n\n        // Break if reaching end of string\n        if (range.location + range.length > inputString.length)\n            break;\n    };\n}\n\n+ (NSAttributedString *)attributedString:(GONMarkupParser *)parser\n                              withString:(NSString *)inputString\n                             defautColor:(UIColor *)defaultColor\n                             defaultFont:(UIFont *)defaultFont\n                        defaultAlignment:(NSTextAlignment)defaultAlignment\n{\n    GONMarkupParser *selectedParser = parser;\n    if (!selectedParser)\n        selectedParser = [GONMarkupParserManager sharedParser];\n    \n    // Hold initial default configuration\n    NSDictionary *defaultConfiguration = [selectedParser.defaultConfiguration copy];\n    \n    // Check if parser has default configuration for color / font / alignment. If not, use default configuration\n    // Text color\n    if (![selectedParser.defaultConfiguration objectForKey:NSForegroundColorAttributeName])\n    {\n        [selectedParser.defaultConfiguration setObject:(defaultColor ? defaultColor : [UIColor blackColor])\n                                                forKey:NSForegroundColorAttributeName];\n    }\n    \n    // Font\n    if (![selectedParser.defaultConfiguration objectForKey:NSFontAttributeName] && defaultFont)\n    {\n        [selectedParser.defaultConfiguration setObject:defaultFont\n                                                forKey:NSFontAttributeName];\n    }\n    \n    // Alignment\n    if (![selectedParser.defaultConfiguration objectForKey:NSParagraphStyleAttributeName])\n    {\n        NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];\n        paragraphStyle.alignment = defaultAlignment;\n        [selectedParser.defaultConfiguration setObject:paragraphStyle\n                                                forKey:NSParagraphStyleAttributeName];\n    }\n    \n    // Compute attributed string\n    NSAttributedString *attributedString = [selectedParser attributedStringFromString:inputString\n                                                                                error:nil];\n    \n    // Reset default configuration\n    [selectedParser.defaultConfiguration removeAllObjects];\n    [selectedParser.defaultConfiguration addEntriesFromDictionary:defaultConfiguration];\n    \n    \n    return attributedString;\n}\n\n#pragma mark - Config\nstatic NSDictionary *dicEntities;\n+ (void)initialize\n{\n    [super initialize];\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        \n        dicEntities = @{\n                        @\"&quot;\" : @\"\\\"\",\n                        @\"&amp;\" : @\"&\",\n                        @\"&apos;\" : @\"'\",\n                        @\"&lt;\" : @\"<\",\n                        @\"&gt;\" : @\">\",\n                        @\"&nbsp;\" : @\"\\u00A0\",\n                        @\"&iexcl;\" : @\"\\u00A1\",\n                        @\"&cent;\" : @\"\\u00A2\",\n                        @\"&pound;\" : @\"\\u00A3\",\n                        @\"&curren;\" : @\"\\u00A4\",\n                        @\"&yen;\" : @\"\\u00A5\",\n                        @\"&brvbar;\" : @\"\\u00A6\",\n                        @\"&sect;\" : @\"\\u00A7\",\n                        @\"&uml;\" : @\"\\u00A8\",\n                        @\"&copy;\" : @\"\\u00A9\",\n                        @\"&ordf;\" : @\"\\u00AA\",\n                        @\"&laquo;\" : @\"\\u00AB\",\n                        @\"&not;\" : @\"\\u00AC\",\n                        @\"&shy;\" : @\"\\u00AD\",\n                        @\"&reg;\" : @\"\\u00AE\",\n                        @\"&macr;\" : @\"\\u00AF\",\n                        @\"&deg;\" : @\"\\u00B0\",\n                        @\"&plusmn;\" : @\"\\u00B1\",\n                        @\"&sup2;\" : @\"\\u00B2\",\n                        @\"&sup3;\" : @\"\\u00B3\",\n                        @\"&acute;\" : @\"\\u00B4\",\n                        @\"&micro;\" : @\"\\u00B5\",\n                        @\"&para;\" : @\"\\u00B6\",\n                        @\"&middot;\" : @\"\\u00B7\",\n                        @\"&cedil;\" : @\"\\u00B8\",\n                        @\"&sup1;\" : @\"\\u00B9\",\n                        @\"&ordm;\" : @\"\\u00BA\",\n                        @\"&raquo;\" : @\"\\u00BB\",\n                        @\"&frac14;\" : @\"\\u00BC\",\n                        @\"&frac12;\" : @\"\\u00BD\",\n                        @\"&frac34;\" : @\"\\u00BE\",\n                        @\"&iquest;\" : @\"\\u00BF\",\n                        @\"&Agrave;\" : @\"\\u00C0\",\n                        @\"&Aacute;\" : @\"\\u00C1\",\n                        @\"&Acirc;\" : @\"\\u00C2\",\n                        @\"&Atilde;\" : @\"\\u00C3\",\n                        @\"&Auml;\" : @\"\\u00C4\",\n                        @\"&Aring;\" : @\"\\u00C5\",\n                        @\"&AElig;\" : @\"\\u00C6\",\n                        @\"&Ccedil;\" : @\"\\u00C7\",\n                        @\"&Egrave;\" : @\"\\u00C8\",\n                        @\"&Eacute;\" : @\"\\u00C9\",\n                        @\"&Ecirc;\" : @\"\\u00CA\",\n                        @\"&Euml;\" : @\"\\u00CB\",\n                        @\"&Igrave;\" : @\"\\u00CC\",\n                        @\"&Iacute;\" : @\"\\u00CD\",\n                        @\"&Icirc;\" : @\"\\u00CE\",\n                        @\"&Iuml;\" : @\"\\u00CF\",\n                        @\"&ETH;\" : @\"\\u00D0\",\n                        @\"&Ntilde;\" : @\"\\u00D1\",\n                        @\"&Ograve;\" : @\"\\u00D2\",\n                        @\"&Oacute;\" : @\"\\u00D3\",\n                        @\"&Ocirc;\" : @\"\\u00D4\",\n                        @\"&Otilde;\" : @\"\\u00D5\",\n                        @\"&Ouml;\" : @\"\\u00D6\",\n                        @\"&times;\" : @\"\\u00D7\",\n                        @\"&Oslash;\" : @\"\\u00D8\",\n                        @\"&Ugrave;\" : @\"\\u00D9\",\n                        @\"&Uacute;\" : @\"\\u00DA\",\n                        @\"&Ucirc;\" : @\"\\u00DB\",\n                        @\"&Uuml;\" : @\"\\u00DC\",\n                        @\"&Yacute;\" : @\"\\u00DD\",\n                        @\"&THORN;\" : @\"\\u00DE\",\n                        @\"&szlig;\" : @\"\\u00DF\",\n                        @\"&agrave;\" : @\"\\u00E0\",\n                        @\"&aacute;\" : @\"\\u00E1\",\n                        @\"&acirc;\" : @\"\\u00E2\",\n                        @\"&atilde;\" : @\"\\u00E3\",\n                        @\"&auml;\" : @\"\\u00E4\",\n                        @\"&aring;\" : @\"\\u00E5\",\n                        @\"&aelig;\" : @\"\\u00E6\",\n                        @\"&ccedil;\" : @\"\\u00E7\",\n                        @\"&egrave;\" : @\"\\u00E8\",\n                        @\"&eacute;\" : @\"\\u00E9\",\n                        @\"&ecirc;\" : @\"\\u00EA\",\n                        @\"&euml;\" : @\"\\u00EB\",\n                        @\"&igrave;\" : @\"\\u00EC\",\n                        @\"&iacute;\" : @\"\\u00ED\",\n                        @\"&icirc;\" : @\"\\u00EE\",\n                        @\"&iuml;\" : @\"\\u00EF\",\n                        @\"&eth;\" : @\"\\u00F0\",\n                        @\"&ntilde;\" : @\"\\u00F1\",\n                        @\"&ograve;\" : @\"\\u00F2\",\n                        @\"&oacute;\" : @\"\\u00F3\",\n                        @\"&ocirc;\" : @\"\\u00F4\",\n                        @\"&otilde;\" : @\"\\u00F5\",\n                        @\"&ouml;\" : @\"\\u00F6\",\n                        @\"&divide;\" : @\"\\u00F7\",\n                        @\"&oslash;\" : @\"\\u00F8\",\n                        @\"&ugrave;\" : @\"\\u00F9\",\n                        @\"&uacute;\" : @\"\\u00FA\",\n                        @\"&ucirc;\" : @\"\\u00FB\",\n                        @\"&uuml;\" : @\"\\u00FC\",\n                        @\"&yacute;\" : @\"\\u00FD\",\n                        @\"&thorn;\" : @\"\\u00FE\",\n                        @\"&yuml;\" : @\"\\u00FF\",\n                        @\"&OElig;\" : @\"\\u0152\",\n                        @\"&oelig;\" : @\"\\u0153\",\n                        @\"&Scaron;\" : @\"\\u0160\",\n                        @\"&scaron;\" : @\"\\u0161\",\n                        @\"&Yuml;\" : @\"\\u0178\",\n                        @\"&fnof;\" : @\"\\u0192\",\n                        @\"&circ;\" : @\"\\u02C6\",\n                        @\"&tilde;\" : @\"\\u02DC\",\n                        @\"&Alpha;\" : @\"\\u0391\",\n                        @\"&Beta;\" : @\"\\u0392\",\n                        @\"&Gamma;\" : @\"\\u0393\",\n                        @\"&Delta;\" : @\"\\u0394\",\n                        @\"&Epsilon;\" : @\"\\u0395\",\n                        @\"&Zeta;\" : @\"\\u0396\",\n                        @\"&Eta;\" : @\"\\u0397\",\n                        @\"&Theta;\" : @\"\\u0398\",\n                        @\"&Iota;\" : @\"\\u0399\",\n                        @\"&Kappa;\" : @\"\\u039A\",\n                        @\"&Lambda;\" : @\"\\u039B\",\n                        @\"&Mu;\" : @\"\\u039C\",\n                        @\"&Nu;\" : @\"\\u039D\",\n                        @\"&Xi;\" : @\"\\u039E\",\n                        @\"&Omicron;\" : @\"\\u039F\",\n                        @\"&Pi;\" : @\"\\u03A0\",\n                        @\"&Rho;\" : @\"\\u03A1\",\n                        @\"&Sigma;\" : @\"\\u03A3\",\n                        @\"&Tau;\" : @\"\\u03A4\",\n                        @\"&Upsilon;\" : @\"\\u03A5\",\n                        @\"&Phi;\" : @\"\\u03A6\",\n                        @\"&Chi;\" : @\"\\u03A7\",\n                        @\"&Psi;\" : @\"\\u03A8\",\n                        @\"&Omega;\" : @\"\\u03A9\",\n                        @\"&alpha;\" : @\"\\u03B1\",\n                        @\"&beta;\" : @\"\\u03B2\",\n                        @\"&gamma;\" : @\"\\u03B3\",\n                        @\"&delta;\" : @\"\\u03B4\",\n                        @\"&epsilon;\" : @\"\\u03B5\",\n                        @\"&zeta;\" : @\"\\u03B6\",\n                        @\"&eta;\" : @\"\\u03B7\",\n                        @\"&theta;\" : @\"\\u03B8\",\n                        @\"&iota;\" : @\"\\u03B9\",\n                        @\"&kappa;\" : @\"\\u03BA\",\n                        @\"&lambda;\" : @\"\\u03BB\",\n                        @\"&mu;\" : @\"\\u03BC\",\n                        @\"&nu;\" : @\"\\u03BD\",\n                        @\"&xi;\" : @\"\\u03BE\",\n                        @\"&omicron;\" : @\"\\u03BF\",\n                        @\"&pi;\" : @\"\\u03C0\",\n                        @\"&rho;\" : @\"\\u03C1\",\n                        @\"&sigmaf;\" : @\"\\u03C2\",\n                        @\"&sigma;\" : @\"\\u03C3\",\n                        @\"&tau;\" : @\"\\u03C4\",\n                        @\"&upsilon;\" : @\"\\u03C5\",\n                        @\"&phi;\" : @\"\\u03C6\",\n                        @\"&chi;\" : @\"\\u03C7\",\n                        @\"&psi;\" : @\"\\u03C8\",\n                        @\"&omega;\" : @\"\\u03C9\",\n                        @\"&thetasym;\" : @\"\\u03D1\",\n                        @\"&upsih;\" : @\"\\u03D2\",\n                        @\"&piv;\" : @\"\\u03D6\",\n                        @\"&ensp;\" : @\"\\u2002\",\n                        @\"&emsp;\" : @\"\\u2003\",\n                        @\"&thinsp;\" : @\"\\u2009\",\n                        @\"&zwnj;\" : @\"\\u200C\",\n                        @\"&zwj;\" : @\"\\u200D\",\n                        @\"&lrm;\" : @\"\\u200E\",\n                        @\"&rlm;\" : @\"\\u200F\",\n                        @\"&ndash;\" : @\"\\u2013\",\n                        @\"&mdash;\" : @\"\\u2014\",\n                        @\"&lsquo;\" : @\"\\u2018\",\n                        @\"&rsquo;\" : @\"\\u2019\",\n                        @\"&sbquo;\" : @\"\\u201A\",\n                        @\"&ldquo;\" : @\"\\u201C\",\n                        @\"&rdquo;\" : @\"\\u201D\",\n                        @\"&bdquo;\" : @\"\\u201E\",\n                        @\"&dagger;\" : @\"\\u2020\",\n                        @\"&Dagger;\" : @\"\\u2021\",\n                        @\"&bull;\" : @\"\\u2022\",\n                        @\"&hellip;\" : @\"\\u2026\",\n                        @\"&permil;\" : @\"\\u2030\",\n                        @\"&prime;\" : @\"\\u2032\",\n                        @\"&Prime;\" : @\"\\u2033\",\n                        @\"&lsaquo;\" : @\"\\u2039\",\n                        @\"&rsaquo;\" : @\"\\u203A\",\n                        @\"&oline;\" : @\"\\u203E\",\n                        @\"&frasl;\" : @\"\\u2044\",\n                        @\"&euro;\" : @\"\\u20AC\",\n                        @\"&image;\" : @\"\\u2111\",\n                        @\"&weierp;\" : @\"\\u2118\",\n                        @\"&real;\" : @\"\\u211C\",\n                        @\"&trade;\" : @\"\\u2122\",\n                        @\"&alefsym;\" : @\"\\u2135\",\n                        @\"&larr;\" : @\"\\u2190\",\n                        @\"&uarr;\" : @\"\\u2191\",\n                        @\"&rarr;\" : @\"\\u2192\",\n                        @\"&darr;\" : @\"\\u2193\",\n                        @\"&harr;\" : @\"\\u2194\",\n                        @\"&crarr;\" : @\"\\u21B5\",\n                        @\"&lArr;\" : @\"\\u21D0\",\n                        @\"&uArr;\" : @\"\\u21D1\",\n                        @\"&rArr;\" : @\"\\u21D2\",\n                        @\"&dArr;\" : @\"\\u21D3\",\n                        @\"&hArr;\" : @\"\\u21D4\",\n                        @\"&forall;\" : @\"\\u2200\",\n                        @\"&part;\" : @\"\\u2202\",\n                        @\"&exist;\" : @\"\\u2203\",\n                        @\"&empty;\" : @\"\\u2205\",\n                        @\"&nabla;\" : @\"\\u2207\",\n                        @\"&isin;\" : @\"\\u2208\",\n                        @\"&notin;\" : @\"\\u2209\",\n                        @\"&ni;\" : @\"\\u220B\",\n                        @\"&prod;\" : @\"\\u220F\",\n                        @\"&sum;\" : @\"\\u2211\",\n                        @\"&minus;\" : @\"\\u2212\",\n                        @\"&lowast;\" : @\"\\u2217\",\n                        @\"&radic;\" : @\"\\u221A\",\n                        @\"&prop;\" : @\"\\u221D\",\n                        @\"&infin;\" : @\"\\u221E\",\n                        @\"&ang;\" : @\"\\u2220\",\n                        @\"&and;\" : @\"\\u2227\",\n                        @\"&or;\" : @\"\\u2228\",\n                        @\"&cap;\" : @\"\\u2229\",\n                        @\"&cup;\" : @\"\\u222A\",\n                        @\"&int;\" : @\"\\u222B\",\n                        @\"&there4;\" : @\"\\u2234\",\n                        @\"&sim;\" : @\"\\u223C\",\n                        @\"&cong;\" : @\"\\u2245\",\n                        @\"&asymp;\" : @\"\\u2248\",\n                        @\"&ne;\" : @\"\\u2260\",\n                        @\"&equiv;\" : @\"\\u2261\",\n                        @\"&le;\" : @\"\\u2264\",\n                        @\"&ge;\" : @\"\\u2265\",\n                        @\"&sub;\" : @\"\\u2282\",\n                        @\"&sup;\" : @\"\\u2283\",\n                        @\"&nsub;\" : @\"\\u2284\",\n                        @\"&sube;\" : @\"\\u2286\",\n                        @\"&supe;\" : @\"\\u2287\",\n                        @\"&oplus;\" : @\"\\u2295\",\n                        @\"&otimes;\" : @\"\\u2297\",\n                        @\"&perp;\" : @\"\\u22A5\",\n                        @\"&sdot;\" : @\"\\u22C5\",\n                        @\"&vellip;\" : @\"\\u22EE\",\n                        @\"&lceil;\" : @\"\\u2308\",\n                        @\"&rceil;\" : @\"\\u2309\",\n                        @\"&lfloor;\" : @\"\\u230A\",\n                        @\"&rfloor;\" : @\"\\u230B\",\n                        @\"&lang;\" : @\"\\u2329\",\n                        @\"&rang;\" : @\"\\u232A\",\n                        @\"&loz;\" : @\"\\u25CA\",\n                        @\"&spades;\" : @\"\\u2660\",\n                        @\"&clubs;\" : @\"\\u2663\",\n                        @\"&hearts;\" : @\"\\u2665\",\n                        @\"&diams;\" : @\"\\u2666\",\n                        @\"&#32;\" : @\" \",\n                        @\"&#33;\" : @\"!\",\n                        @\"&#34;\" : @\"\\\"\",\n                        @\"&#35;\" : @\"#\",\n                        @\"&#36;\" : @\"$\",\n                        @\"&#37;\" : @\"%\",\n                        @\"&#38;\" : @\"&\",\n                        @\"&#39;\" : @\"'\",\n                        @\"&#40;\" : @\"(\",\n                        @\"&#41;\" : @\")\",\n                        @\"&#42;\" : @\"*\",\n                        @\"&#43;\" : @\"+\",\n                        @\"&#44;\" : @\",\",\n                        @\"&#45;\" : @\"-\",\n                        @\"&#46;\" : @\".\",\n                        @\"&#47;\" : @\"/\",\n                        @\"&#48;\" : @\"0\",\n                        @\"&#49;\" : @\"1\",\n                        @\"&#50;\" : @\"2\",\n                        @\"&#51;\" : @\"3\",\n                        @\"&#52;\" : @\"4\",\n                        @\"&#53;\" : @\"5\",\n                        @\"&#54;\" : @\"6\",\n                        @\"&#55;\" : @\"7\",\n                        @\"&#56;\" : @\"8\",\n                        @\"&#57;\" : @\"9\",\n                        @\"&#58;\" : @\":\",\n                        @\"&#59;\" : @\";\",\n                        @\"&#60;\" : @\"<\",\n                        @\"&#61;\" : @\"=\",\n                        @\"&#62;\" : @\">\",\n                        @\"&#63;\" : @\"?\",\n                        @\"&#64;\" : @\"@\",\n                        @\"&#65;\" : @\"A\",\n                        @\"&#66;\" : @\"B\",\n                        @\"&#67;\" : @\"C\",\n                        @\"&#68;\" : @\"D\",\n                        @\"&#69;\" : @\"E\",\n                        @\"&#70;\" : @\"F\",\n                        @\"&#71;\" : @\"G\",\n                        @\"&#72;\" : @\"H\",\n                        @\"&#73;\" : @\"I\",\n                        @\"&#74;\" : @\"J\",\n                        @\"&#75;\" : @\"K\",\n                        @\"&#76;\" : @\"L\",\n                        @\"&#77;\" : @\"M\",\n                        @\"&#78;\" : @\"N\",\n                        @\"&#79;\" : @\"O\",\n                        @\"&#80;\" : @\"P\",\n                        @\"&#81;\" : @\"Q\",\n                        @\"&#82;\" : @\"R\",\n                        @\"&#83;\" : @\"S\",\n                        @\"&#84;\" : @\"T\",\n                        @\"&#85;\" : @\"U\",\n                        @\"&#86;\" : @\"V\",\n                        @\"&#87;\" : @\"W\",\n                        @\"&#88;\" : @\"X\",\n                        @\"&#89;\" : @\"Y\",\n                        @\"&#90;\" : @\"Z\",\n                        @\"&#91;\" : @\"[\",\n                        @\"&#92;\" : @\"\\\\\",\n                        @\"&#93;\" : @\"]\",\n                        @\"&#94;\" : @\"^\",\n                        @\"&#95;\" : @\"_\",\n                        @\"&#96;\" : @\"`\",\n                        @\"&#97;\" : @\"a\",\n                        @\"&#98;\" : @\"b\",\n                        @\"&#99;\" : @\"c\",\n                        @\"&#100;\" : @\"d\",\n                        @\"&#101;\" : @\"e\",\n                        @\"&#102;\" : @\"f\",\n                        @\"&#103;\" : @\"g\",\n                        @\"&#104;\" : @\"h\",\n                        @\"&#105;\" : @\"i\",\n                        @\"&#106;\" : @\"j\",\n                        @\"&#107;\" : @\"k\",\n                        @\"&#108;\" : @\"l\",\n                        @\"&#109;\" : @\"m\",\n                        @\"&#110;\" : @\"n\",\n                        @\"&#111;\" : @\"o\",\n                        @\"&#112;\" : @\"p\",\n                        @\"&#113;\" : @\"q\",\n                        @\"&#114;\" : @\"r\",\n                        @\"&#115;\" : @\"s\",\n                        @\"&#116;\" : @\"t\",\n                        @\"&#117;\" : @\"u\",\n                        @\"&#118;\" : @\"v\",\n                        @\"&#119;\" : @\"w\",\n                        @\"&#120;\" : @\"x\",\n                        @\"&#121;\" : @\"y\",\n                        @\"&#122;\" : @\"z\",\n                        @\"&#123;\" : @\"{\",\n                        @\"&#124;\" : @\"|\",\n                        @\"&#125;\" : @\"}\",\n                        @\"&#126;\" : @\"~\",\n                        @\"&#127;\" : @\"\\u0127\",\n                        @\"&#128;\" : @\"\\u0128\",\n                        @\"&#129;\" : @\"\\u0129\",\n                        @\"&#130;\" : @\"\\u0130\",\n                        @\"&#131;\" : @\"\\u0131\",\n                        @\"&#132;\" : @\"\\u0132\",\n                        @\"&#133;\" : @\"\\u0133\",\n                        @\"&#134;\" : @\"\\u0134\",\n                        @\"&#135;\" : @\"\\u0135\",\n                        @\"&#136;\" : @\"\\u0136\",\n                        @\"&#137;\" : @\"\\u0137\",\n                        @\"&#138;\" : @\"\\u0138\",\n                        @\"&#139;\" : @\"\\u0139\",\n                        @\"&#140;\" : @\"\\u0140\",\n                        @\"&#141;\" : @\"\\u0141\",\n                        @\"&#142;\" : @\"\\u0142\",\n                        @\"&#143;\" : @\"\\u0143\",\n                        @\"&#144;\" : @\"\\u0144\",\n                        @\"&#145;\" : @\"\\u0145\",\n                        @\"&#146;\" : @\"\\u0146\",\n                        @\"&#147;\" : @\"\\u0147\",\n                        @\"&#148;\" : @\"\\u0148\",\n                        @\"&#149;\" : @\"\\u0149\",\n                        @\"&#150;\" : @\"\\u0150\",\n                        @\"&#151;\" : @\"\\u0151\",\n                        @\"&#152;\" : @\"\\u0152\",\n                        @\"&#153;\" : @\"\\u0153\",\n                        @\"&#154;\" : @\"\\u0154\",\n                        @\"&#155;\" : @\"\\u0155\",\n                        @\"&#156;\" : @\"\\u0156\",\n                        @\"&#157;\" : @\"\\u0157\",\n                        @\"&#158;\" : @\"\\u0158\",\n                        @\"&#159;\" : @\"\\u0159\",\n                        @\"&#160;\" : @\"\\u00A0\",\n                        @\"&#161;\" : @\"\\u00A1\",\n                        @\"&#162;\" : @\"\\u00A2\",\n                        @\"&#163;\" : @\"\\u00A3\",\n                        @\"&#164;\" : @\"\\u00A4\",\n                        @\"&#165;\" : @\"\\u00A5\",\n                        @\"&#166;\" : @\"\\u00A6\",\n                        @\"&#167;\" : @\"\\u00A7\",\n                        @\"&#168;\" : @\"\\u00A8\",\n                        @\"&#169;\" : @\"\\u00A9\",\n                        @\"&#170;\" : @\"\\u00AA\",\n                        @\"&#171;\" : @\"\\u00AB\",\n                        @\"&#172;\" : @\"\\u00AC\",\n                        @\"&#173;\" : @\"\\u00AD\",\n                        @\"&#174;\" : @\"\\u00AE\",\n                        @\"&#175;\" : @\"\\u00AF\",\n                        @\"&#176;\" : @\"\\u00B0\",\n                        @\"&#177;\" : @\"\\u00B1\",\n                        @\"&#178;\" : @\"\\u00B2\",\n                        @\"&#179;\" : @\"\\u00B3\",\n                        @\"&#180;\" : @\"\\u00B4\",\n                        @\"&#181;\" : @\"\\u00B5\",\n                        @\"&#182;\" : @\"\\u00B6\",\n                        @\"&#183;\" : @\"\\u00B7\",\n                        @\"&#184;\" : @\"\\u00B8\",\n                        @\"&#185;\" : @\"\\u00B9\",\n                        @\"&#186;\" : @\"\\u00BA\",\n                        @\"&#187;\" : @\"\\u00BB\",\n                        @\"&#188;\" : @\"\\u00BC\",\n                        @\"&#189;\" : @\"\\u00BD\",\n                        @\"&#190;\" : @\"\\u00BE\",\n                        @\"&#191;\" : @\"\\u00BF\",\n                        @\"&#192;\" : @\"\\u00C0\",\n                        @\"&#193;\" : @\"\\u00C1\",\n                        @\"&#194;\" : @\"\\u00C2\",\n                        @\"&#195;\" : @\"\\u00C3\",\n                        @\"&#196;\" : @\"\\u00C4\",\n                        @\"&#197;\" : @\"\\u00C5\",\n                        @\"&#198;\" : @\"\\u00C6\",\n                        @\"&#199;\" : @\"\\u00C7\",\n                        @\"&#200;\" : @\"\\u00C8\",\n                        @\"&#201;\" : @\"\\u00C9\",\n                        @\"&#202;\" : @\"\\u00CA\",\n                        @\"&#203;\" : @\"\\u00CB\",\n                        @\"&#204;\" : @\"\\u00CC\",\n                        @\"&#205;\" : @\"\\u00CD\",\n                        @\"&#206;\" : @\"\\u00CE\",\n                        @\"&#207;\" : @\"\\u00CF\",\n                        @\"&#208;\" : @\"\\u00D0\",\n                        @\"&#209;\" : @\"\\u00D1\",\n                        @\"&#210;\" : @\"\\u00D2\",\n                        @\"&#211;\" : @\"\\u00D3\",\n                        @\"&#212;\" : @\"\\u00D4\",\n                        @\"&#213;\" : @\"\\u00D5\",\n                        @\"&#214;\" : @\"\\u00D6\",\n                        @\"&#215;\" : @\"\\u00D7\",\n                        @\"&#216;\" : @\"\\u00D8\",\n                        @\"&#217;\" : @\"\\u00D9\",\n                        @\"&#218;\" : @\"\\u00DA\",\n                        @\"&#219;\" : @\"\\u00DB\",\n                        @\"&#220;\" : @\"\\u00DC\",\n                        @\"&#221;\" : @\"\\u00DD\",\n                        @\"&#222;\" : @\"\\u00DE\",\n                        @\"&#223;\" : @\"\\u00DF\",\n                        @\"&#224;\" : @\"\\u00E0\",\n                        @\"&#225;\" : @\"\\u00E1\",\n                        @\"&#226;\" : @\"\\u00E2\",\n                        @\"&#227;\" : @\"\\u00E3\",\n                        @\"&#228;\" : @\"\\u00E4\",\n                        @\"&#229;\" : @\"\\u00E5\",\n                        @\"&#230;\" : @\"\\u00E6\",\n                        @\"&#231;\" : @\"\\u00E7\",\n                        @\"&#232;\" : @\"\\u00E8\",\n                        @\"&#233;\" : @\"\\u00E9\",\n                        @\"&#234;\" : @\"\\u00EA\",\n                        @\"&#235;\" : @\"\\u00EB\",\n                        @\"&#236;\" : @\"\\u00EC\",\n                        @\"&#237;\" : @\"\\u00ED\",\n                        @\"&#238;\" : @\"\\u00EE\",\n                        @\"&#239;\" : @\"\\u00EF\",\n                        @\"&#240;\" : @\"\\u00F0\",\n                        @\"&#241;\" : @\"\\u00F1\",\n                        @\"&#242;\" : @\"\\u00F2\",\n                        @\"&#243;\" : @\"\\u00F3\",\n                        @\"&#244;\" : @\"\\u00F4\",\n                        @\"&#245;\" : @\"\\u00F5\",\n                        @\"&#246;\" : @\"\\u00F6\",\n                        @\"&#247;\" : @\"\\u00F7\",\n                        @\"&#248;\" : @\"\\u00F8\",\n                        @\"&#249;\" : @\"\\u00F9\",\n                        @\"&#250;\" : @\"\\u00FA\",\n                        @\"&#251;\" : @\"\\u00FB\",\n                        @\"&#252;\" : @\"\\u00FC\",\n                        @\"&#253;\" : @\"\\u00FD\",\n                        @\"&#254;\" : @\"\\u00FE\",\n                        @\"&#255;\" : @\"\\u00FF\",\n                        @\"&#402;\" : @\"\\u0192\",\n                        @\"&#913;\" : @\"\\u0391\",\n                        @\"&#914;\" : @\"\\u0392\",\n                        @\"&#915;\" : @\"\\u0393\",\n                        @\"&#916;\" : @\"\\u0394\",\n                        @\"&#917;\" : @\"\\u0395\",\n                        @\"&#918;\" : @\"\\u0396\",\n                        @\"&#919;\" : @\"\\u0397\",\n                        @\"&#920;\" : @\"\\u0398\",\n                        @\"&#921;\" : @\"\\u0399\",\n                        @\"&#922;\" : @\"\\u039A\",\n                        @\"&#923;\" : @\"\\u039B\",\n                        @\"&#924;\" : @\"\\u039C\",\n                        @\"&#925;\" : @\"\\u039D\",\n                        @\"&#926;\" : @\"\\u039E\",\n                        @\"&#927;\" : @\"\\u039F\",\n                        @\"&#928;\" : @\"\\u03A0\",\n                        @\"&#929;\" : @\"\\u03A1\",\n                        @\"&#931;\" : @\"\\u03A3\",\n                        @\"&#932;\" : @\"\\u03A4\",\n                        @\"&#933;\" : @\"\\u03A5\",\n                        @\"&#934;\" : @\"\\u03A6\",\n                        @\"&#935;\" : @\"\\u03A7\",\n                        @\"&#936;\" : @\"\\u03A8\",\n                        @\"&#937;\" : @\"\\u03A9\",\n                        @\"&#945;\" : @\"\\u03B1\",\n                        @\"&#946;\" : @\"\\u03B2\",\n                        @\"&#947;\" : @\"\\u03B3\",\n                        @\"&#948;\" : @\"\\u03B4\",\n                        @\"&#949;\" : @\"\\u03B5\",\n                        @\"&#950;\" : @\"\\u03B6\",\n                        @\"&#951;\" : @\"\\u03B7\",\n                        @\"&#952;\" : @\"\\u03B8\",\n                        @\"&#953;\" : @\"\\u03B9\",\n                        @\"&#954;\" : @\"\\u03BA\",\n                        @\"&#955;\" : @\"\\u03BB\",\n                        @\"&#956;\" : @\"\\u03BC\",\n                        @\"&#957;\" : @\"\\u03BD\",\n                        @\"&#958;\" : @\"\\u03BE\",\n                        @\"&#959;\" : @\"\\u03BF\",\n                        @\"&#960;\" : @\"\\u03C0\",\n                        @\"&#961;\" : @\"\\u03C1\",\n                        @\"&#962;\" : @\"\\u03C2\",\n                        @\"&#963;\" : @\"\\u03C3\",\n                        @\"&#964;\" : @\"\\u03C4\",\n                        @\"&#965;\" : @\"\\u03C5\",\n                        @\"&#966;\" : @\"\\u03C6\",\n                        @\"&#967;\" : @\"\\u03C7\",\n                        @\"&#968;\" : @\"\\u03C8\",\n                        @\"&#969;\" : @\"\\u03C9\",\n                        @\"&#977;\" : @\"\\u03D1\",\n                        @\"&#978;\" : @\"\\u03D2\",\n                        @\"&#982;\" : @\"\\u03D6\",\n                        @\"&#8226;\" : @\"\\u2022\",\n                        @\"&#8230;\" : @\"\\u2026\",\n                        @\"&#8242;\" : @\"\\u2032\",\n                        @\"&#8243;\" : @\"\\u2033\",\n                        @\"&#8254;\" : @\"\\u203E\",\n                        @\"&#8260;\" : @\"\\u2044\",\n                        @\"&#8472;\" : @\"\\u2118\",\n                        @\"&#8465;\" : @\"\\u2111\",\n                        @\"&#8476;\" : @\"\\u211C\",\n                        @\"&#8482;\" : @\"\\u2122\",\n                        @\"&#8501;\" : @\"\\u2135\",\n                        @\"&#8592;\" : @\"\\u2190\",\n                        @\"&#8593;\" : @\"\\u2191\",\n                        @\"&#8594;\" : @\"\\u2192\",\n                        @\"&#8595;\" : @\"\\u2193\",\n                        @\"&#8596;\" : @\"\\u2194\",\n                        @\"&#8629;\" : @\"\\u21B5\",\n                        @\"&#8656;\" : @\"\\u21D0\",\n                        @\"&#8657;\" : @\"\\u21D1\",\n                        @\"&#8658;\" : @\"\\u21D2\",\n                        @\"&#8659;\" : @\"\\u21D3\",\n                        @\"&#8660;\" : @\"\\u21D4\",\n                        @\"&#8704;\" : @\"\\u2200\",\n                        @\"&#8706;\" : @\"\\u2202\",\n                        @\"&#8707;\" : @\"\\u2203\",\n                        @\"&#8709;\" : @\"\\u2205\",\n                        @\"&#8711;\" : @\"\\u2207\",\n                        @\"&#8712;\" : @\"\\u2208\",\n                        @\"&#8713;\" : @\"\\u2209\",\n                        @\"&#8715;\" : @\"\\u220B\",\n                        @\"&#8719;\" : @\"\\u220F\",\n                        @\"&#8721;\" : @\"\\u2211\",\n                        @\"&#8722;\" : @\"\\u2212\",\n                        @\"&#8727;\" : @\"\\u2217\",\n                        @\"&#8730;\" : @\"\\u221A\",\n                        @\"&#8733;\" : @\"\\u221D\",\n                        @\"&#8734;\" : @\"\\u221E\",\n                        @\"&#8736;\" : @\"\\u2220\",\n                        @\"&#8743;\" : @\"\\u2227\",\n                        @\"&#8744;\" : @\"\\u2228\",\n                        @\"&#8745;\" : @\"\\u2229\",\n                        @\"&#8746;\" : @\"\\u222A\",\n                        @\"&#8747;\" : @\"\\u222B\",\n                        @\"&#8756;\" : @\"\\u2234\",\n                        @\"&#8764;\" : @\"\\u223C\",\n                        @\"&#8773;\" : @\"\\u2245\",\n                        @\"&#8776;\" : @\"\\u2248\",\n                        @\"&#8800;\" : @\"\\u2260\",\n                        @\"&#8801;\" : @\"\\u2261\",\n                        @\"&#8804;\" : @\"\\u2264\",\n                        @\"&#8805;\" : @\"\\u2265\",\n                        @\"&#8834;\" : @\"\\u2282\",\n                        @\"&#8835;\" : @\"\\u2283\",\n                        @\"&#8836;\" : @\"\\u2284\",\n                        @\"&#8838;\" : @\"\\u2286\",\n                        @\"&#8839;\" : @\"\\u2287\",\n                        @\"&#8853;\" : @\"\\u2295\",\n                        @\"&#8855;\" : @\"\\u2297\",\n                        @\"&#8869;\" : @\"\\u22A5\",\n                        @\"&#8901;\" : @\"\\u22C5\",\n                        @\"&#8968;\" : @\"\\u2308\",\n                        @\"&#8969;\" : @\"\\u2309\",\n                        @\"&#8970;\" : @\"\\u230A\",\n                        @\"&#8971;\" : @\"\\u230B\",\n                        @\"&#9001;\" : @\"\\u2329\",\n                        @\"&#9002;\" : @\"\\u232A\",\n                        @\"&#9674;\" : @\"\\u25CA\",\n                        @\"&#9824;\" : @\"\\u2660\",\n                        @\"&#9827;\" : @\"\\u2663\",\n                        @\"&#9829;\" : @\"\\u2665\",\n                        @\"&#9830;\" : @\"\\u2666\",\n                        @\"&#x20;\" : @\" \",\n                        @\"&#x21;\" : @\"!\",\n                        @\"&#x22;\" : @\"\\\"\",\n                        @\"&#x23;\" : @\"#\",\n                        @\"&#x24;\" : @\"$\",\n                        @\"&#x25;\" : @\"%\",\n                        @\"&#x26;\" : @\"&\",\n                        @\"&#x27;\" : @\"'\",\n                        @\"&#x28;\" : @\"(\",\n                        @\"&#x29;\" : @\")\",\n                        @\"&#x2A;\" : @\"*\",\n                        @\"&#x2B;\" : @\"+\",\n                        @\"&#x2C;\" : @\",\",\n                        @\"&#x2D;\" : @\"-\",\n                        @\"&#x2E;\" : @\".\",\n                        @\"&#x2F;\" : @\"/\",\n                        @\"&#x30;\" : @\"0\",\n                        @\"&#x31;\" : @\"1\",\n                        @\"&#x32;\" : @\"2\",\n                        @\"&#x33;\" : @\"3\",\n                        @\"&#x34;\" : @\"4\",\n                        @\"&#x35;\" : @\"5\",\n                        @\"&#x36;\" : @\"6\",\n                        @\"&#x37;\" : @\"7\",\n                        @\"&#x38;\" : @\"8\",\n                        @\"&#x39;\" : @\"9\",\n                        @\"&#x3A;\" : @\":\",\n                        @\"&#x3B;\" : @\";\",\n                        @\"&#x3C;\" : @\"<\",\n                        @\"&#x3D;\" : @\"=\",\n                        @\"&#x3E;\" : @\">\",\n                        @\"&#x3F;\" : @\"?\",\n                        @\"&#x40;\" : @\"@\",\n                        @\"&#x41;\" : @\"A\",\n                        @\"&#x42;\" : @\"B\",\n                        @\"&#x43;\" : @\"C\",\n                        @\"&#x44;\" : @\"D\",\n                        @\"&#x45;\" : @\"E\",\n                        @\"&#x46;\" : @\"F\",\n                        @\"&#x47;\" : @\"G\",\n                        @\"&#x48;\" : @\"H\",\n                        @\"&#x49;\" : @\"I\",\n                        @\"&#x4A;\" : @\"J\",\n                        @\"&#x4B;\" : @\"K\",\n                        @\"&#x4C;\" : @\"L\",\n                        @\"&#x4D;\" : @\"M\",\n                        @\"&#x4E;\" : @\"N\",\n                        @\"&#x4F;\" : @\"O\",\n                        @\"&#x50;\" : @\"P\",\n                        @\"&#x51;\" : @\"Q\",\n                        @\"&#x52;\" : @\"R\",\n                        @\"&#x53;\" : @\"S\",\n                        @\"&#x54;\" : @\"T\",\n                        @\"&#x55;\" : @\"U\",\n                        @\"&#x56;\" : @\"V\",\n                        @\"&#x57;\" : @\"W\",\n                        @\"&#x58;\" : @\"X\",\n                        @\"&#x59;\" : @\"Y\",\n                        @\"&#x5A;\" : @\"Z\",\n                        @\"&#x5B;\" : @\"[\",\n                        @\"&#x5C;\" : @\"\\\\\",\n                        @\"&#x5D;\" : @\"]\",\n                        @\"&#x5E;\" : @\"^\",\n                        @\"&#x5F;\" : @\"_\",\n                        @\"&#x60;\" : @\"`\",\n                        @\"&#x61;\" : @\"a\",\n                        @\"&#x62;\" : @\"b\",\n                        @\"&#x63;\" : @\"c\",\n                        @\"&#x64;\" : @\"d\",\n                        @\"&#x65;\" : @\"e\",\n                        @\"&#x66;\" : @\"f\",\n                        @\"&#x67;\" : @\"g\",\n                        @\"&#x68;\" : @\"h\",\n                        @\"&#x69;\" : @\"i\",\n                        @\"&#x6A;\" : @\"j\",\n                        @\"&#x6B;\" : @\"k\",\n                        @\"&#x6C;\" : @\"l\",\n                        @\"&#x6D;\" : @\"m\",\n                        @\"&#x6E;\" : @\"n\",\n                        @\"&#x6F;\" : @\"o\",\n                        @\"&#x70;\" : @\"p\",\n                        @\"&#x71;\" : @\"q\",\n                        @\"&#x72;\" : @\"r\",\n                        @\"&#x73;\" : @\"s\",\n                        @\"&#x74;\" : @\"t\",\n                        @\"&#x75;\" : @\"u\",\n                        @\"&#x76;\" : @\"v\",\n                        @\"&#x77;\" : @\"w\",\n                        @\"&#x78;\" : @\"x\",\n                        @\"&#x79;\" : @\"y\",\n                        @\"&#x7A;\" : @\"z\",\n                        @\"&#x7B;\" : @\"{\",\n                        @\"&#x7C;\" : @\"|\",\n                        @\"&#x7D;\" : @\"}\",\n                        @\"&#x7E;\" : @\"~\",\n                        @\"&#x7F;\" : @\"\\u0127\",\n                        @\"&#x80;\" : @\"\\u0128\",\n                        @\"&#x81;\" : @\"\\u0129\",\n                        @\"&#x82;\" : @\"\\u0130\",\n                        @\"&#x83;\" : @\"\\u0131\",\n                        @\"&#x84;\" : @\"\\u0132\",\n                        @\"&#x85;\" : @\"\\u0133\",\n                        @\"&#x86;\" : @\"\\u0134\",\n                        @\"&#x87;\" : @\"\\u0135\",\n                        @\"&#x88;\" : @\"\\u0136\",\n                        @\"&#x89;\" : @\"\\u0137\",\n                        @\"&#x8A;\" : @\"\\u0138\",\n                        @\"&#x8B;\" : @\"\\u0139\",\n                        @\"&#x8C;\" : @\"\\u0140\",\n                        @\"&#x8D;\" : @\"\\u0141\",\n                        @\"&#x8E;\" : @\"\\u0142\",\n                        @\"&#x8F;\" : @\"\\u0143\",\n                        @\"&#x90;\" : @\"\\u0144\",\n                        @\"&#x91;\" : @\"\\u0145\",\n                        @\"&#x92;\" : @\"\\u0146\",\n                        @\"&#x93;\" : @\"\\u0147\",\n                        @\"&#x94;\" : @\"\\u0148\",\n                        @\"&#x95;\" : @\"\\u0149\",\n                        @\"&#x96;\" : @\"\\u0150\",\n                        @\"&#x97;\" : @\"\\u0151\",\n                        @\"&#x98;\" : @\"\\u0152\",\n                        @\"&#x99;\" : @\"\\u0153\",\n                        @\"&#x9A;\" : @\"\\u0154\",\n                        @\"&#x9B;\" : @\"\\u0155\",\n                        @\"&#x9C;\" : @\"\\u0156\",\n                        @\"&#x9D;\" : @\"\\u0157\",\n                        @\"&#x9E;\" : @\"\\u0158\",\n                        @\"&#x9F;\" : @\"\\u0159\",\n                        @\"&#xA0;\" : @\"\\u00A0\",\n                        @\"&#xA1;\" : @\"\\u00A1\",\n                        @\"&#xA2;\" : @\"\\u00A2\",\n                        @\"&#xA3;\" : @\"\\u00A3\",\n                        @\"&#xA4;\" : @\"\\u00A4\",\n                        @\"&#xA5;\" : @\"\\u00A5\",\n                        @\"&#xA6;\" : @\"\\u00A6\",\n                        @\"&#xA7;\" : @\"\\u00A7\",\n                        @\"&#xA8;\" : @\"\\u00A8\",\n                        @\"&#xA9;\" : @\"\\u00A9\",\n                        @\"&#xAA;\" : @\"\\u00AA\",\n                        @\"&#xAB;\" : @\"\\u00AB\",\n                        @\"&#xAC;\" : @\"\\u00AC\",\n                        @\"&#xAD;\" : @\"\\u00AD\",\n                        @\"&#xAE;\" : @\"\\u00AE\",\n                        @\"&#xAF;\" : @\"\\u00AF\",\n                        @\"&#xB0;\" : @\"\\u00B0\",\n                        @\"&#xB1;\" : @\"\\u00B1\",\n                        @\"&#xB2;\" : @\"\\u00B2\",\n                        @\"&#xB3;\" : @\"\\u00B3\",\n                        @\"&#xB4;\" : @\"\\u00B4\",\n                        @\"&#xB5;\" : @\"\\u00B5\",\n                        @\"&#xB6;\" : @\"\\u00B6\",\n                        @\"&#xB7;\" : @\"\\u00B7\",\n                        @\"&#xB8;\" : @\"\\u00B8\",\n                        @\"&#xB9;\" : @\"\\u00B9\",\n                        @\"&#xBA;\" : @\"\\u00BA\",\n                        @\"&#xBB;\" : @\"\\u00BB\",\n                        @\"&#xBC;\" : @\"\\u00BC\",\n                        @\"&#xBD;\" : @\"\\u00BD\",\n                        @\"&#xBE;\" : @\"\\u00BE\",\n                        @\"&#xBF;\" : @\"\\u00BF\",\n                        @\"&#xC0;\" : @\"\\u00C0\",\n                        @\"&#xC1;\" : @\"\\u00C1\",\n                        @\"&#xC2;\" : @\"\\u00C2\",\n                        @\"&#xC3;\" : @\"\\u00C3\",\n                        @\"&#xC4;\" : @\"\\u00C4\",\n                        @\"&#xC5;\" : @\"\\u00C5\",\n                        @\"&#xC6;\" : @\"\\u00C6\",\n                        @\"&#xC7;\" : @\"\\u00C7\",\n                        @\"&#xC8;\" : @\"\\u00C8\",\n                        @\"&#xC9;\" : @\"\\u00C9\",\n                        @\"&#xCA;\" : @\"\\u00CA\",\n                        @\"&#xCB;\" : @\"\\u00CB\",\n                        @\"&#xCC;\" : @\"\\u00CC\",\n                        @\"&#xCD;\" : @\"\\u00CD\",\n                        @\"&#xCE;\" : @\"\\u00CE\",\n                        @\"&#xCF;\" : @\"\\u00CF\",\n                        @\"&#xD0;\" : @\"\\u00D0\",\n                        @\"&#xD1;\" : @\"\\u00D1\",\n                        @\"&#xD2;\" : @\"\\u00D2\",\n                        @\"&#xD3;\" : @\"\\u00D3\",\n                        @\"&#xD4;\" : @\"\\u00D4\",\n                        @\"&#xD5;\" : @\"\\u00D5\",\n                        @\"&#xD6;\" : @\"\\u00D6\",\n                        @\"&#xD7;\" : @\"\\u00D7\",\n                        @\"&#xD8;\" : @\"\\u00D8\",\n                        @\"&#xD9;\" : @\"\\u00D9\",\n                        @\"&#xDA;\" : @\"\\u00DA\",\n                        @\"&#xDB;\" : @\"\\u00DB\",\n                        @\"&#xDC;\" : @\"\\u00DC\",\n                        @\"&#xDD;\" : @\"\\u00DD\",\n                        @\"&#xDE;\" : @\"\\u00DE\",\n                        @\"&#xDF;\" : @\"\\u00DF\",\n                        @\"&#xE0;\" : @\"\\u00E0\",\n                        @\"&#xE1;\" : @\"\\u00E1\",\n                        @\"&#xE2;\" : @\"\\u00E2\",\n                        @\"&#xE3;\" : @\"\\u00E3\",\n                        @\"&#xE4;\" : @\"\\u00E4\",\n                        @\"&#xE5;\" : @\"\\u00E5\",\n                        @\"&#xE6;\" : @\"\\u00E6\",\n                        @\"&#xE7;\" : @\"\\u00E7\",\n                        @\"&#xE8;\" : @\"\\u00E8\",\n                        @\"&#xE9;\" : @\"\\u00E9\",\n                        @\"&#xEA;\" : @\"\\u00EA\",\n                        @\"&#xEB;\" : @\"\\u00EB\",\n                        @\"&#xEC;\" : @\"\\u00EC\",\n                        @\"&#xED;\" : @\"\\u00ED\",\n                        @\"&#xEE;\" : @\"\\u00EE\",\n                        @\"&#xEF;\" : @\"\\u00EF\",\n                        @\"&#xF0;\" : @\"\\u00F0\",\n                        @\"&#xF1;\" : @\"\\u00F1\",\n                        @\"&#xF2;\" : @\"\\u00F2\",\n                        @\"&#xF3;\" : @\"\\u00F3\",\n                        @\"&#xF4;\" : @\"\\u00F4\",\n                        @\"&#xF5;\" : @\"\\u00F5\",\n                        @\"&#xF6;\" : @\"\\u00F6\",\n                        @\"&#xF7;\" : @\"\\u00F7\",\n                        @\"&#xF8;\" : @\"\\u00F8\",\n                        @\"&#xF9;\" : @\"\\u00F9\",\n                        @\"&#xFA;\" : @\"\\u00FA\",\n                        @\"&#xFB;\" : @\"\\u00FB\",\n                        @\"&#xFC;\" : @\"\\u00FC\",\n                        @\"&#xFD;\" : @\"\\u00FD\",\n                        @\"&#xFE;\" : @\"\\u00FE\",\n                        @\"&#xFF;\" : @\"\\u00FF\",\n                        @\"&#x192;\" : @\"\\u0192\",\n                        @\"&#x391;\" : @\"\\u0391\",\n                        @\"&#x392;\" : @\"\\u0392\",\n                        @\"&#x393;\" : @\"\\u0393\",\n                        @\"&#x394;\" : @\"\\u0394\",\n                        @\"&#x395;\" : @\"\\u0395\",\n                        @\"&#x396;\" : @\"\\u0396\",\n                        @\"&#x397;\" : @\"\\u0397\",\n                        @\"&#x398;\" : @\"\\u0398\",\n                        @\"&#x399;\" : @\"\\u0399\",\n                        @\"&#x39A;\" : @\"\\u039A\",\n                        @\"&#x39B;\" : @\"\\u039B\",\n                        @\"&#x39C;\" : @\"\\u039C\",\n                        @\"&#x39D;\" : @\"\\u039D\",\n                        @\"&#x39E;\" : @\"\\u039E\",\n                        @\"&#x39F;\" : @\"\\u039F\",\n                        @\"&#x3A0;\" : @\"\\u03A0\",\n                        @\"&#x3A1;\" : @\"\\u03A1\",\n                        @\"&#x3A3;\" : @\"\\u03A3\",\n                        @\"&#x3A4;\" : @\"\\u03A4\",\n                        @\"&#x3A5;\" : @\"\\u03A5\",\n                        @\"&#x3A6;\" : @\"\\u03A6\",\n                        @\"&#x3A7;\" : @\"\\u03A7\",\n                        @\"&#x3A8;\" : @\"\\u03A8\",\n                        @\"&#x3A9;\" : @\"\\u03A9\",\n                        @\"&#x3B1;\" : @\"\\u03B1\",\n                        @\"&#x3B2;\" : @\"\\u03B2\",\n                        @\"&#x3B3;\" : @\"\\u03B3\",\n                        @\"&#x3B4;\" : @\"\\u03B4\",\n                        @\"&#x3B5;\" : @\"\\u03B5\",\n                        @\"&#x3B6;\" : @\"\\u03B6\",\n                        @\"&#x3B7;\" : @\"\\u03B7\",\n                        @\"&#x3B8;\" : @\"\\u03B8\",\n                        @\"&#x3B9;\" : @\"\\u03B9\",\n                        @\"&#x3BA;\" : @\"\\u03BA\",\n                        @\"&#x3BB;\" : @\"\\u03BB\",\n                        @\"&#x3BC;\" : @\"\\u03BC\",\n                        @\"&#x3BD;\" : @\"\\u03BD\",\n                        @\"&#x3BE;\" : @\"\\u03BE\",\n                        @\"&#x3BF;\" : @\"\\u03BF\",\n                        @\"&#x3C0;\" : @\"\\u03C0\",\n                        @\"&#x3C1;\" : @\"\\u03C1\",\n                        @\"&#x3C2;\" : @\"\\u03C2\",\n                        @\"&#x3C3;\" : @\"\\u03C3\",\n                        @\"&#x3C4;\" : @\"\\u03C4\",\n                        @\"&#x3C5;\" : @\"\\u03C5\",\n                        @\"&#x3C6;\" : @\"\\u03C6\",\n                        @\"&#x3C7;\" : @\"\\u03C7\",\n                        @\"&#x3C8;\" : @\"\\u03C8\",\n                        @\"&#x3C9;\" : @\"\\u03C9\",\n                        @\"&#x3D1;\" : @\"\\u03D1\",\n                        @\"&#x3D2;\" : @\"\\u03D2\",\n                        @\"&#x3D6;\" : @\"\\u03D6\",\n                        @\"&#x2022;\" : @\"\\u2022\",\n                        @\"&#x2026;\" : @\"\\u2026\",\n                        @\"&#x2032;\" : @\"\\u2032\",\n                        @\"&#x2033;\" : @\"\\u2033\",\n                        @\"&#x203E;\" : @\"\\u203E\",\n                        @\"&#x2044;\" : @\"\\u2044\",\n                        @\"&#x2118;\" : @\"\\u2118\",\n                        @\"&#x2111;\" : @\"\\u2111\",\n                        @\"&#x211C;\" : @\"\\u211C\",\n                        @\"&#x2122;\" : @\"\\u2122\",\n                        @\"&#x2135;\" : @\"\\u2135\",\n                        @\"&#x2190;\" : @\"\\u2190\",\n                        @\"&#x2191;\" : @\"\\u2191\",\n                        @\"&#x2192;\" : @\"\\u2192\",\n                        @\"&#x2193;\" : @\"\\u2193\",\n                        @\"&#x2194;\" : @\"\\u2194\",\n                        @\"&#x21B5;\" : @\"\\u21B5\",\n                        @\"&#x21D0;\" : @\"\\u21D0\",\n                        @\"&#x21D1;\" : @\"\\u21D1\",\n                        @\"&#x21D2;\" : @\"\\u21D2\",\n                        @\"&#x21D3;\" : @\"\\u21D3\",\n                        @\"&#x21D4;\" : @\"\\u21D4\",\n                        @\"&#x2200;\" : @\"\\u2200\",\n                        @\"&#x2202;\" : @\"\\u2202\",\n                        @\"&#x2203;\" : @\"\\u2203\",\n                        @\"&#x2205;\" : @\"\\u2205\",\n                        @\"&#x2207;\" : @\"\\u2207\",\n                        @\"&#x2208;\" : @\"\\u2208\",\n                        @\"&#x2209;\" : @\"\\u2209\",\n                        @\"&#x220B;\" : @\"\\u220B\",\n                        @\"&#x220F;\" : @\"\\u220F\",\n                        @\"&#x2211;\" : @\"\\u2211\",\n                        @\"&#x2212;\" : @\"\\u2212\",\n                        @\"&#x2217;\" : @\"\\u2217\",\n                        @\"&#x221A;\" : @\"\\u221A\",\n                        @\"&#x221D;\" : @\"\\u221D\",\n                        @\"&#x221E;\" : @\"\\u221E\",\n                        @\"&#x2220;\" : @\"\\u2220\",\n                        @\"&#x2227;\" : @\"\\u2227\",\n                        @\"&#x2228;\" : @\"\\u2228\",\n                        @\"&#x2229;\" : @\"\\u2229\",\n                        @\"&#x222A;\" : @\"\\u222A\",\n                        @\"&#x222B;\" : @\"\\u222B\",\n                        @\"&#x2234;\" : @\"\\u2234\",\n                        @\"&#x223C;\" : @\"\\u223C\",\n                        @\"&#x2245;\" : @\"\\u2245\",\n                        @\"&#x2248;\" : @\"\\u2248\",\n                        @\"&#x2260;\" : @\"\\u2260\",\n                        @\"&#x2261;\" : @\"\\u2261\",\n                        @\"&#x2264;\" : @\"\\u2264\",\n                        @\"&#x2265;\" : @\"\\u2265\",\n                        @\"&#x2282;\" : @\"\\u2282\",\n                        @\"&#x2283;\" : @\"\\u2283\",\n                        @\"&#x2284;\" : @\"\\u2284\",\n                        @\"&#x2286;\" : @\"\\u2286\",\n                        @\"&#x2287;\" : @\"\\u2287\",\n                        @\"&#x2295;\" : @\"\\u2295\",\n                        @\"&#x2297;\" : @\"\\u2297\",\n                        @\"&#x22A5;\" : @\"\\u22A5\",\n                        @\"&#x22C5;\" : @\"\\u22C5\",\n                        @\"&#x2308;\" : @\"\\u2308\",\n                        @\"&#x2309;\" : @\"\\u2309\",\n                        @\"&#x230A;\" : @\"\\u230A\",\n                        @\"&#x230B;\" : @\"\\u230B\",\n                        @\"&#x2329;\" : @\"\\u2329\",\n                        @\"&#x232A;\" : @\"\\u232A\",\n                        @\"&#x25CA;\" : @\"\\u25CA\",\n                        @\"&#x2660;\" : @\"\\u2660\",\n                        @\"&#x2663;\" : @\"\\u2663\",\n                        @\"&#x2665;\" : @\"\\u2665\",\n                        @\"&#x2666;\" : @\"\\u2666\"\n                        };\n    });\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupParser_All.h",
    "content": "//\n//  GONMarkupParser_All.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 15/07/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n#import \"GONMarkupParser.h\"\n#import \"GONMarkupParserManager.h\"\n#import \"GONMarkupDefaultMarkups.h\"\n#import \"GONMarkupParser_Categories.h\""
  },
  {
    "path": "Classes/GONMarkupParser_Categories.h",
    "content": "//\n//  GONMarkupParser_Categories.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#ifndef GONMarkupParserSample_GONMarkupParser_Categories_h\n#define GONMarkupParserSample_GONMarkupParser_Categories_h\n\n#import \"UIButton+GONMarkupParser.h\"\n#import \"UILabel+GONMarkupParser.h\"\n#import \"UITextField+GONMarkupParser.h\"\n#import \"UITextView+GONMarkupParser.h\"\n\n#endif\n"
  },
  {
    "path": "Classes/GONMarkupReset.h",
    "content": "//\n//  GONMarkupReset.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Reset tag is used to reset all current configuration, and use default one\n//  It allows you to protect a string portion, for example :\n//  <red>this text is red<strong>red strong <reset> <yellow> yellow default <yellow> </reset> red strong </strong> red </red>\n//\n//  \"all\" attribute can be used to also remove default configuration\n//  sharedContext will also be reset\n\n#import \"GONMarkup.h\"\n\n// Context\n#define GONMarkupReset_SAVED_CONTEXT_KEY  @\"GONMarkupReset.savedContext\"   // Saved context before reset, to be restored on tag end\n\n// Tag\n#define GONMarkupReset_TAG                 @\"reset\"\n\n// Attributes\n#define GONMarkupReset_TAG_all_ATT         @\"all\"   // If true default parser configuration won't be set, default is false.\n\n@interface GONMarkupReset : GONMarkup\n/* Class constructor */\n+ (instancetype)resetMarkup;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupReset.m",
    "content": "//\n//  GONMarkupReset.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupReset.h\"\n#import \"GONMarkup+Private.h\"\n\n@implementation GONMarkupReset\n#pragma mark - Constructor\n+ (instancetype)resetMarkup\n{\n    return [self markupForTag:GONMarkupReset_TAG];\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Reset configuration\n    [configurationDictionary removeAllObjects];\n\n    // Set it back to default if allowed\n    if (![[dicAttributes objectForKey:GONMarkupReset_TAG_all_ATT] boolValue])\n        [configurationDictionary addEntriesFromDictionary:self.parser.defaultConfiguration];\n\n    // Copy current context\n    NSMutableDictionary *contextCopy = [context mutableCopy];\n\n    // Reset it\n    [context removeAllObjects];\n\n    // Hold saved context\n    [context setObject:contextCopy\n                 forKey:GONMarkupReset_SAVED_CONTEXT_KEY];\n}\n\n- (void)closingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // Copy current context\n    NSMutableDictionary *savedContext = [context objectForKey:GONMarkupReset_SAVED_CONTEXT_KEY];\n\n    // Reset context\n    [context removeAllObjects];\n\n    // Reset current context to previously saved one\n    [context addEntriesFromDictionary:savedContext];\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupSimple.h",
    "content": "//\n//  GONMarkupSimple.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 18/07/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Define a markup to automatically add attributes to current string\n//  Content of style dictionary is added to current style dictionary\n//  \"style\" dictionary is intended to be the same as you may pass to configure an NSMutableAttributedString using -setAttributes:range: method\n//\n//  If overriding NSParagraphStyleAttributeName, check merging strategy to use\n//  - override (default)\n//  - merge\n//\n\n#import \"GONMarkup.h\"\n\ntypedef NS_ENUM(NSInteger, GONMarkupSimpleMergingStrategy) {\n    GONMarkupSimpleMergingStrategyMergeAll                      = -1,\n    GONMarkupSimpleMergingStrategyOverride                      = 0,\n\n    GONMarkupSimpleMergingStrategyMergeAlignment                = 1 << 0,\n    GONMarkupSimpleMergingStrategyMergeFirstLineHeadIndent      = 1 << 1,\n    GONMarkupSimpleMergingStrategyMergeHeadIndent               = 1 << 2,\n    GONMarkupSimpleMergingStrategyMergeTailIndent               = 1 << 3,\n    GONMarkupSimpleMergingStrategyMergeLineBreakMode            = 1 << 4,\n    GONMarkupSimpleMergingStrategyMergeMaximumLineHeight        = 1 << 5,\n    GONMarkupSimpleMergingStrategyMergeMinimumLineHeight        = 1 << 6,\n    GONMarkupSimpleMergingStrategyMergeLineSpacing              = 1 << 7,\n    GONMarkupSimpleMergingStrategyMergeParagraphSpacing         = 1 << 8,\n    GONMarkupSimpleMergingStrategyMergeParagraphSpacingBefore   = 1 << 9,\n    GONMarkupSimpleMergingStrategyMergeBaseWritingDirection     = 1 << 10,\n    GONMarkupSimpleMergingStrategyMergeLineHeightMultiple       = 1 << 11,\n    GONMarkupSimpleMergingStrategyMergeTabStops                 = 1 << 12,\n    GONMarkupSimpleMergingStrategyMergeDefaultTabInterval       = 1 << 13,\n    GONMarkupSimpleMergingStrategyMergeHyphenationFactor        = 1 << 14\n};\n\n@interface GONMarkupSimple : GONMarkup\n/* Class contructor, allowing to specify a merging strategy.\n * Use this constructor if this markup will update NSParagraphStyleAttributeName key\n * strategy can be a combinaison of GONMarkupSimpleMergingStrategy values to define per attribute merging strategy\n * \"style\" dictionary is intended to be the same as you may pass to configure an NSMutableAttributedString using -setAttributes:range: method\n */\n+ (instancetype)simpleMarkup:(NSString *)tag style:(NSDictionary *)style mergingStrategy:(GONMarkupSimpleMergingStrategy)strategy;\n\n/* Default class contructor, using override as default merging strategy\n * Use this constructor is this markup won't update NSParagraphStyleAttributeName key, will throw an exception otherwise\n * \"style\" dictionary is intended to be the same as you may pass to configure an NSMutableAttributedString using -setAttributes:range: method\n */\n+ (instancetype)simpleMarkup:(NSString *)tag style:(NSDictionary *)style;\n\n@property (nonatomic, copy, readonly) NSDictionary *style;\n@end\n"
  },
  {
    "path": "Classes/GONMarkupSimple.m",
    "content": "//\n//  GONMarkupSimple.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 18/07/14.\n//  Copyright 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupSimple.h\"\n\n#define MERGE_ATTRIBUTE(att) (_mergingStrategy == GONMarkupSimpleMergingStrategyMergeAll || _mergingStrategy | att)\n\n@interface GONMarkupSimple ()\n// Data\n@property (nonatomic, copy)   NSDictionary *style;\n@property (nonatomic, assign) GONMarkupSimpleMergingStrategy mergingStrategy;\n@end\n\n@implementation GONMarkupSimple\n#pragma mark - Constructor\n+ (instancetype)simpleMarkup:(NSString *)tag\n                       style:(NSDictionary *)style\n             mergingStrategy:(GONMarkupSimpleMergingStrategy)strategy\n{\n    GONMarkupSimple *markup = [self markupForTag:tag];\n\n    markup.style = style;\n    markup.mergingStrategy = strategy;\n\n    return markup;\n}\n\n+ (instancetype)simpleMarkup:(NSString *)tag\n                       style:(NSDictionary *)style\n{\n    if ([style objectForKey:NSParagraphStyleAttributeName])\n        @throw @\"Critical error. You cannot update NSParagraphStyleAttributeName without setting a merging strategy \";\n\n    GONMarkupSimple *markup = [self markupForTag:tag];\n\n    markup.style = style;\n\n    return markup;\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    // No NSParagraphStyleAttributeName update, or set in only one dic, nothing to do\n    if ((![_style objectForKey:NSParagraphStyleAttributeName] && ![configurationDictionary objectForKey:NSParagraphStyleAttributeName]) ||\n        ( [_style objectForKey:NSParagraphStyleAttributeName] && ![configurationDictionary objectForKey:NSParagraphStyleAttributeName]) ||\n        (![_style objectForKey:NSParagraphStyleAttributeName] &&  [configurationDictionary objectForKey:NSParagraphStyleAttributeName]))\n    {\n        [configurationDictionary addEntriesFromDictionary:_style];\n        return;\n    }\n\n    // Should apply a defined strategy\n    NSMutableDictionary *updatedStyleDic = [_style mutableCopy];\n    [updatedStyleDic setObject:[self merge:[_style objectForKey:NSParagraphStyleAttributeName] into:[configurationDictionary objectForKey:NSParagraphStyleAttributeName]]\n                        forKey:NSParagraphStyleAttributeName];\n\n    [configurationDictionary addEntriesFromDictionary:_style];\n}\n\n- (NSParagraphStyle *)merge:(NSParagraphStyle *)sourceStyle\n                       into:(NSParagraphStyle *)destStyle\n{\n    // On override, nothing to do\n    if (_mergingStrategy == GONMarkupSimpleMergingStrategyOverride)\n        return [sourceStyle mutableCopy];\n\n    // Merge all strategy\n    NSMutableParagraphStyle *mergedStyle = [destStyle mutableCopy];\n\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeAlignment))              mergedStyle.alignment               = sourceStyle.alignment;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeFirstLineHeadIndent))    mergedStyle.firstLineHeadIndent     = sourceStyle.firstLineHeadIndent;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeHeadIndent))             mergedStyle.headIndent              = sourceStyle.headIndent;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeTailIndent))             mergedStyle.tailIndent              = sourceStyle.tailIndent;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeLineBreakMode))          mergedStyle.lineBreakMode           = sourceStyle.lineBreakMode;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeMaximumLineHeight))      mergedStyle.maximumLineHeight       = sourceStyle.maximumLineHeight;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeMinimumLineHeight))      mergedStyle.minimumLineHeight       = sourceStyle.minimumLineHeight;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeLineSpacing))            mergedStyle.lineSpacing             = sourceStyle.lineSpacing;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeParagraphSpacing))       mergedStyle.paragraphSpacing        = sourceStyle.paragraphSpacing;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeParagraphSpacingBefore)) mergedStyle.paragraphSpacingBefore  = sourceStyle.paragraphSpacingBefore;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeBaseWritingDirection))   mergedStyle.baseWritingDirection    = sourceStyle.baseWritingDirection;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeLineHeightMultiple))     mergedStyle.lineHeightMultiple      = sourceStyle.lineHeightMultiple;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeTabStops))               mergedStyle.tabStops                = sourceStyle.tabStops;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeDefaultTabInterval))     mergedStyle.defaultTabInterval      = sourceStyle.defaultTabInterval;\n    if (MERGE_ATTRIBUTE(GONMarkupSimpleMergingStrategyMergeHyphenationFactor))      mergedStyle.hyphenationFactor       = sourceStyle.hyphenationFactor;\n\n    return mergedStyle;\n}\n@end\n"
  },
  {
    "path": "Classes/GONMarkupStrong.h",
    "content": "//\n//  GONMarkupStrong.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/05/2017.\n//  Copyright 2017 Nicolas Goutaland. All rights reserved.\n//\n//  Same as b tag.\n//  Subclassing b allowing users to override strong markup behavior\n//\n//  Examples\n//\n//  <strong>bold text</>\n\n#import \"GONMarkupBold.h\"\n\n#define GONMarkupStrong_TAG                 @\"strong\"\n\n@interface GONMarkupStrong : GONMarkupBold\n/* Default markup to add strong support */\n+ (instancetype)strongMarkup;\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupStrong.m",
    "content": "//\n//  GONMarkupStrong.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/05/2017.\n//  Copyright 2017 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupStrong.h\"\n\n@interface GONMarkupStrong ()\n@end\n\n@implementation GONMarkupStrong\n#pragma mark - Constructor\n+ (instancetype)strongMarkup\n{\n    return [super fontTraitsMarkup:GONMarkupStrong_TAG\n                            traits:UIFontDescriptorTraitBold];\n}\n\n@end\n"
  },
  {
    "path": "Classes/GONMarkupTextStyle.h",
    "content": "//\n//  GONMarkupTextStyle.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/07/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n//  Tag updating current font style (subscripted / superscripted).\n//\n//  Examples\n//\n//  <sup>superscripted text</>\n//  <sub>subscripted text</>\n\n#import \"GONMarkup.h\"\n\n// Tag\n#define GONMarkupTextStyle_Superscripted_TAG        @\"sup\"\n#define GONMarkupTextStyle_Subscripted_TAG          @\"sub\"\n\n@interface GONMarkupTextStyle : GONMarkup\n/* Return all markups */\n+ (NSArray *)allMarkups;\n\n/* Default markup to add superscripted support */\n+ (instancetype)superscriptedMarkup;\n\n/* Default markup to add subscripted support */\n+ (instancetype)subscriptedMarkup;\n@end\n\n\n"
  },
  {
    "path": "Classes/GONMarkupTextStyle.m",
    "content": "//\n//  GONMarkupTextStyle.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/07/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"GONMarkupTextStyle.h\"\n#import <CoreText/CoreText.h>\n\n@interface GONMarkupTextStyle ()\n// Data\n@property (nonatomic, strong) NSNumber *superscriptValue;\n@end\n\n@implementation GONMarkupTextStyle\n#pragma mark - Constructor\n+ (NSArray *)allMarkups\n{\n    return @[[self superscriptedMarkup], [self subscriptedMarkup]];\n}\n\n+ (instancetype)superscriptedMarkup\n{\n    GONMarkupTextStyle *markup = [self markupForTag:GONMarkupTextStyle_Superscripted_TAG];\n\n    markup.superscriptValue = @(1);\n\n    return markup;\n}\n\n+ (instancetype)subscriptedMarkup\n{\n    GONMarkupTextStyle *markup = [self markupForTag:GONMarkupTextStyle_Subscripted_TAG];\n\n    markup.superscriptValue = @(-1);\n\n    return markup;\n}\n\n#pragma mark - Style\n- (void)openingMarkupFound:(NSString *)tag\n             configuration:(NSMutableDictionary *)configurationDictionary\n                   context:(NSMutableDictionary *)context\n                attributes:(NSDictionary *)dicAttributes\n              resultString:(NSAttributedString *)resultString\n{\n    [configurationDictionary setObject:_superscriptValue\n                                 forKey:(NSString *)kCTSuperscriptAttributeName];\n}\n\n@end\n"
  },
  {
    "path": "Classes/UIButton+GONMarkupParser.h",
    "content": "//\n//  UIButton+GONMarkupParser.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 23/08/15.\n//  Copyright (c) 2015 Nicolas Goutaland. All rights reserved.\n//\n#import \"GONMarkupParser.h\"\n\n@interface UIButton (GONMarkupParser)\n/* Update button label with given text, considering it as a marked up string.\n * Given parser will be used to parse string\n * If parser is nil, [GONMarkupParserManager sharedParser] will be used\n */\n- (void)setMarkedUpTitle:(NSString *)title forState:(UIControlState)controlState parser:(GONMarkupParser *)parser;\n\n/* Update button with given text, considering it as a marked up string.\n * [GONMarkupParserManager sharedParser] will be used to parse string\n */\n- (void)setMarkedUpTitle:(NSString *)title forState:(UIControlState)controlState;\n@end\n"
  },
  {
    "path": "Classes/UIButton+GONMarkupParser.m",
    "content": "//\n//  UIButton+GONMarkupParser.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 23/08/15.\n//  Copyright (c) 2015 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"UIButton+GONMarkupParser.h\"\n#import \"GONMarkupParserUtils.h\"\n\n@implementation UIButton (GONMarkupParser)\n#pragma mark - GONMarkupParser\n- (void)setMarkedUpTitle:(NSString *)title forState:(UIControlState)controlState parser:(GONMarkupParser *)parser\n{\n    NSAttributedString *attributedText = [GONMarkupParserUtils attributedString:parser\n                                                                     withString:title\n                                                                    defautColor:[self titleColorForState:controlState]\n                                                                    defaultFont:self.titleLabel.font\n                                                               defaultAlignment:self.titleLabel.textAlignment];\n    \n    [self setAttributedTitle:attributedText\n                    forState:controlState];\n}\n\n- (void)setMarkedUpTitle:(NSString *)title forState:(UIControlState)controlState\n{\n    [self setMarkedUpTitle:title\n                  forState:UIControlStateNormal\n                    parser:nil];\n}\n\n@end\n"
  },
  {
    "path": "Classes/UILabel+GONMarkupParser.h",
    "content": "//\n//  UILabel+GONMarkupParser.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n#import \"GONMarkupParser.h\"\n\n@interface UILabel (GONMarkupParser)\n/* Update label with given text, considering it as a marked up string.\n * Given parser will be used to parse string\n * If parser is nil, [GONMarkupParserManager sharedParser] will be used\n */\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser;\n\n/* Update label with given text, considering it as a marked up string.\n * [GONMarkupParserManager sharedParser] will be used to parse string\n */\n- (void)setMarkedUpText:(NSString *)text;\n@end\n"
  },
  {
    "path": "Classes/UILabel+GONMarkupParser.m",
    "content": "//\n//  UILabel+GONMarkupParser.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"UILabel+GONMarkupParser.h\"\n#import \"GONMarkupParserManager.h\"\n#import \"GONMarkupParserUtils.h\"\n\n@implementation UILabel (GONMarkupParser)\n#pragma mark - GONMarkupParser\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser\n{\n    self.attributedText = [GONMarkupParserUtils attributedString:parser\n                                                      withString:text\n                                                     defautColor:self.textColor\n                                                     defaultFont:self.font\n                                                defaultAlignment:self.textAlignment];\n}\n\n- (void)setMarkedUpText:(NSString *)text\n{\n    [self setMarkedUpText:text\n                   parser:nil];\n}\n@end\n"
  },
  {
    "path": "Classes/UITextField+GONMarkupParser.h",
    "content": "//\n//  UITextField+GONMarkupParser.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n#import \"GONMarkupParser.h\"\n\n@interface UITextField (GONMarkupParser)\n/* Update textfield with given text, considering it as a marked up string.\n * Given parser will be used to parse string\n * If parser is nil, [GONMarkupParserManager sharedParser] will be used\n */\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser;\n\n/* Update textfield with given text, considering it as a marked up string.\n * [GONMarkupParserManager sharedParser] will be used to parse string\n */\n- (void)setMarkedUpText:(NSString *)text;\n\n@end\n"
  },
  {
    "path": "Classes/UITextField+GONMarkupParser.m",
    "content": "//\n//  UITextField+GONMarkupParser.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 08/09/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"UITextField+GONMarkupParser.h\"\n#import \"GONMarkupParserManager.h\"\n#import \"GONMarkupParserUtils.h\"\n\n@implementation UITextField (GONMarkupParser)\n#pragma mark - GONMarkupParser\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser\n{\n    self.attributedText = [GONMarkupParserUtils attributedString:parser\n                                                      withString:text\n                                                     defautColor:self.textColor\n                                                     defaultFont:self.font\n                                                defaultAlignment:self.textAlignment];\n}\n\n- (void)setMarkedUpText:(NSString *)text\n{\n    [self setMarkedUpText:text\n                   parser:nil];\n}\n@end\n"
  },
  {
    "path": "Classes/UITextView+GONMarkupParser.h",
    "content": "//\n//  UITextView+GONMarkupParser.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n#import \"GONMarkupParser.h\"\n\n@interface UITextView (GONMarkupParser)\n/* Update textfield with given text, considering it as a marked up string.\n * Given parser will be used to parse string\n * If parser is nil, [GONMarkupParserManager sharedParser] will be used\n */\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser;\n\n/* Update textfield with given text, considering it as a marked up string.\n * [GONMarkupParserManager sharedParser] will be used to parse string\n */\n- (void)setMarkedUpText:(NSString *)text;\n\n@end\n"
  },
  {
    "path": "Classes/UITextView+GONMarkupParser.m",
    "content": "//\n//  UITextView+GONMarkupParser.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 04/02/15.\n//  Copyright 2015 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"UITextView+GONMarkupParser.h\"\n#import \"GONMarkupParserManager.h\"\n#import \"GONMarkupParserUtils.h\"\n\n@implementation UITextView (GONMarkupParser)\n#pragma mark - GONMarkupParser\n- (void)setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser\n{\n    self.attributedText = [GONMarkupParserUtils attributedString:parser\n                                                      withString:text\n                                                     defautColor:self.textColor\n                                                     defaultFont:self.font\n                                                defaultAlignment:self.textAlignment];\n}\n\n- (void)setMarkedUpText:(NSString *)text\n{\n    [self setMarkedUpText:text\n                   parser:nil];\n}\n@end"
  },
  {
    "path": "Example/GONMarkupParserSample/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) IBOutlet UIWindow *window;\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import \"GONMarkupParser_All.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    // Set your custom configuration here\n#ifdef DEBUG\n    [GONMarkupParserManager sharedParser].logLevel = GONMarkupParserLogLevelErrors; // Fuck yeah, error logging\n#endif\n    \n    return YES;\n}\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ComplexExample",
    "content": "default text here <red>this text should be red <small>small </small> </red><small>black small</small>.\nThis one should be black\n<font name=\"Didot-Italic\" size=\"12\"> Using a new font, using its full name (Didot-Italic) </><br/><br/>\n<color value=\"F4D03F\">yellow <reset>protected \\o/</reset>ye<font size=\"12\">ll</>ow<//>\nLet me add some <custom>Custom tag here</>\nYep, that was big.\nYou can also change text alignment\n<center>Centered</>\n<left>Left</>\n<right>Right</>\n<justified>Justified paragraph Lorem ipsum dolor sit amet, consectetur adipiscing elit. In <red>rhoncus diam nec sem consequat</red> tincidunt. Etiam eu lacus a lorem cursus sodales et nec sapien. </>\n<natural>Natural</>\n<inc>Text <inc>size <inc>can <inc>also <inc>be <inc>incremented <dec>or <dec>decremented<dec>, <dec>1 <dec>per <dec>1, <inc value=\"15\">or specifying <dec value=\"10\">a value.<//>\n\n<font name=\"customfont\">This text will be written using a registered font on your parser, allowing to use it specifying a code, instead of its full name.</>\n\n<custom>Another Custom tag here, but with <reset all=\"true\">a full protected section</reset>, pretty cool huh ?</>\nAnd now, an unordered list\n<ul>\n<li>Item</li>\n<ul>\n<li>very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong Item</li>\n<ul>\n<li>very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong Item</li>\n<li>very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong Item<br />with a new line inside.....</li>\n</ul>\n<ul>\n<li>Item</li>\n</ul>\n</ul>\n<li><red>Item</red></li>\n<li>Item</li>\n</ul>\n\nand an ordered list\n<ol>\n<li>Item 1</li>\n<ol>\n<li>Item 1</li>\n<ol>\n<li>Item 1</li>\n</ol>\n<ol>\n<li>Item 1 (New sub list)</li>\n</ol>\n</ol>\n<li>Item 2</li>\n<li>Item 3</li></ol>\n<dec><dec><color value=\"gray\">Anchor are also supported. If you are using a UITextView to display your attributed string, set it non editable, but selectionnable, set its delegate and implements\n<b>- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange</>\nmethod to handle user interaction.\n<a href=\"https://github.com/nicolasgoutaland/GONMarkupParser\">Link example ;)<//>\n\n\nFinally, you can set <b>bold text</>, <i>italic text</> or <b><i>both</></>\n\n<u>Underline</> and <strike>strikethrough</> text is also available.\nYou can customize line <u pattern=\"dash\">pattern</>, <strike style=\"double\">style</> and <u word=\"true\">limit style to words only</>.\n<strike pattern=\"dashdotdot\" words=\"true\"><u style=\"double\">Ugly style is also available ;)</></>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ComplexExampleViewController.h",
    "content": "//\n//  ComplexExampleViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 11/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface ComplexExampleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ComplexExampleViewController.m",
    "content": "//\n//  ComplexExampleViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 11/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"ComplexExampleViewController.h\"\n#import \"ResultViewController.h\"\n\n#define COMPLEX_EXAMPLE_INPUT_FILE  @\"ComplexExample\"\n\n@interface ComplexExampleViewController ()\n// Data\n@property (nonatomic, strong) GONMarkupParser *parser;\n\n// View controllers\n@property (nonatomic, strong) ResultViewController *resultViewController;\n\n// Outlets\n@property (nonatomic, weak  ) IBOutlet UITextView      *inputTextView;\n@property (nonatomic, strong) IBOutlet UIBarButtonItem *validateButton;\n@end\n\n@implementation ComplexExampleViewController\n#pragma mark - View management\n- (void)viewDidLoad {\n    [super viewDidLoad];\n\n    // Validate button\n    self.navigationItem.rightBarButtonItem = _validateButton;\n\n    // Load default text for a complex example\n    NSString *defaultString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:COMPLEX_EXAMPLE_INPUT_FILE ofType:nil]\n                                                        encoding:NSUTF8StringEncoding error:nil];\n    self.inputTextView.text = defaultString;\n\n    [self configureParser];\n}\n\n#pragma mark - Parser configuration\n- (void)configureParser\n{\n    // Create a new parser\n    _parser = [GONMarkupParser defaultMarkupParser];\n\n    // Set your custom configuration here\n#ifdef DEBUG\n    _parser.logLevel = GONMarkupParserLogLevelErrors; // Fuck yeah, error logging\n#endif\n\n    // Set default text configuration\n    [_parser.defaultConfiguration setObject:[UIFont systemFontOfSize:25.0]\n                                     forKey:NSFontAttributeName];\n\n    // Add a custom markup, that will center text when used, and display it in pink.\n    NSMutableParagraphStyle *defaultParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];\n    defaultParagraphStyle.alignment = NSTextAlignmentCenter;\n    [_parser addMarkup:[GONMarkupSimple simpleMarkup:@\"pwet\"\n                                               style:@{\n                                                        NSParagraphStyleAttributeName : defaultParagraphStyle,\n                                                        NSForegroundColorAttributeName : [@\"pink\" representedColor] // NSString+Color\n                                                       }\n                                     mergingStrategy:GONMarkupSimpleMergingStrategyMergeAll]];\n    \n    // Add add font markup, to display small text when encountered\n    [_parser addMarkup:[GONMarkupNamedFont namedFontMarkup:[UIFont systemFontOfSize:12.0] forTag:@\"small\"]];\n\n    // Add a convenient tag for red color\n    [_parser addMarkup:[GONMarkupNamedColor namedColorMarkup:[UIColor redColor]\n                                                      forTag:@\"red\"]];\n\n    // Custom markup, based on block\n    GONMarkupBlock *markupBlock = [GONMarkupBlock blockMarkup:@\"custom\"];\n    markupBlock.openingMarkupBlock = ^(NSMutableDictionary *configurationDictionary, NSString *tag, NSMutableDictionary *context, NSDictionary *dicAttributes, NSAttributedString *resultString) {\n        [configurationDictionary setObject:[UIFont boldSystemFontOfSize:69.0]\n                                    forKey:NSFontAttributeName];\n        [configurationDictionary setObject:[@\"brown\" representedColor]\n                                    forKey:NSForegroundColorAttributeName];\n    };\n\n    [_parser addMarkup:markupBlock];\n\n    // Finally registering a custom font. You can refer to it using its key\n    [_parser registerFont:[UIFont fontWithName:@\"AmericanTypewriter\" size:22]\n                   forKey:@\"customfont\"];\n}\n\n#pragma mark - UI Actions\n- (IBAction)showResult\n{\n    // Parse string\n    self.resultViewController.resultAttributedString = [_parser attributedStringFromString:_inputTextView.text];\n\n    // Show results\n    [self.navigationController pushViewController:self.resultViewController\n                                         animated:YES];\n}\n\nLAZY_PROPERTY(resultViewController);\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ComplexExampleViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6250\" systemVersion=\"14B25\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6244\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ComplexExampleViewController\">\n            <connections>\n                <outlet property=\"inputTextView\" destination=\"POq-EJ-nFs\" id=\"tde-IK-RHB\"/>\n                <outlet property=\"validateButton\" destination=\"eLD-U2-qOP\" id=\"dM4-Fu-LKp\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"POq-EJ-nFs\">\n                    <rect key=\"frame\" x=\"10\" y=\"10\" width=\"580\" height=\"580\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                </textView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstAttribute=\"bottom\" secondItem=\"POq-EJ-nFs\" secondAttribute=\"bottom\" constant=\"10\" id=\"K5f-js-Zsa\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"POq-EJ-nFs\" secondAttribute=\"trailing\" constant=\"10\" id=\"RDw-de-k2F\"/>\n                <constraint firstItem=\"POq-EJ-nFs\" firstAttribute=\"top\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"top\" constant=\"10\" id=\"WDX-hM-WMF\"/>\n                <constraint firstItem=\"POq-EJ-nFs\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"10\" id=\"cNO-p5-NOK\"/>\n            </constraints>\n        </view>\n        <barButtonItem systemItem=\"done\" id=\"eLD-U2-qOP\">\n            <connections>\n                <action selector=\"showResult\" destination=\"-1\" id=\"3Ry-4t-Nyu\"/>\n            </connections>\n        </barButtonItem>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/DefaultConfigurationViewController.h",
    "content": "//\n//  DefaultConfigurationViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n@interface DefaultConfigurationViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/DefaultConfigurationViewController.m",
    "content": "//\n//  DefaultConfigurationViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 19/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"DefaultConfigurationViewController.h\"\n\n@interface DefaultConfigurationViewController ()\n// Outlets\n@property (nonatomic, weak) IBOutlet UILabel *inputLabel;\n@property (nonatomic, weak) IBOutlet UILabel *resultLabel;\n@end\n\n@implementation DefaultConfigurationViewController\n#pragma mark - View management\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\n    // Set a default configuration\n    _inputLabel.textColor      = [@\"red\" representedColor];\n    _inputLabel.textAlignment  = NSTextAlignmentRight;\n    _resultLabel.textColor     = [@\"red\" representedColor];\n    _resultLabel.textAlignment = NSTextAlignmentRight;\n\n    // NSString\n    NSString *inputText = @\"This label is red by default, <color value=\\\"blue\\\">and default text will be displayed red.</><br/><left>Text alignment is also set by label here.</><br/><color value=\\\"black\\\">This allows you to configure style in IB for example, without setting a default parser configuration.</>\";\n\n    // Configure labels\n    _inputLabel.text            = inputText;\n    [_resultLabel setMarkedUpText:inputText\n                           parser:[GONMarkupParser defaultMarkupParser]];\n}\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/DefaultConfigurationViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"DefaultConfigurationViewController\">\n            <connections>\n                <outlet property=\"inputLabel\" destination=\"vH7-rZ-Mou\" id=\"y06-d9-8vk\"/>\n                <outlet property=\"resultLabel\" destination=\"HKj-5h-IlX\" id=\"Esd-16-6cg\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Result\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HKj-5h-IlX\">\n                    <rect key=\"frame\" x=\"20\" y=\"310\" width=\"560\" height=\"270\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Input\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"vH7-rZ-Mou\">\n                    <rect key=\"frame\" x=\"20\" y=\"20\" width=\"560\" height=\"270\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DbL-6G-pYC\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"299\" width=\"600\" height=\"2\"/>\n                    <color key=\"backgroundColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"2\" id=\"ixd-lx-qtw\"/>\n                    </constraints>\n                </view>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstAttribute=\"trailing\" secondItem=\"HKj-5h-IlX\" secondAttribute=\"trailing\" constant=\"20\" id=\"4wW-rc-vBZ\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"HKj-5h-IlX\" secondAttribute=\"bottom\" constant=\"20\" id=\"Byl-lH-cOq\"/>\n                <constraint firstItem=\"vH7-rZ-Mou\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"20\" id=\"FnY-YM-rG7\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"vH7-rZ-Mou\" secondAttribute=\"trailing\" constant=\"20\" id=\"LBF-Yc-AvB\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"DbL-6G-pYC\" secondAttribute=\"trailing\" id=\"NCI-UJ-9fr\"/>\n                <constraint firstItem=\"DbL-6G-pYC\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" id=\"PjP-OV-WfK\"/>\n                <constraint firstItem=\"HKj-5h-IlX\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"20\" id=\"biS-M5-3Kb\"/>\n                <constraint firstItem=\"vH7-rZ-Mou\" firstAttribute=\"top\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"top\" constant=\"20\" id=\"qpp-el-1eP\"/>\n                <constraint firstItem=\"vH7-rZ-Mou\" firstAttribute=\"height\" secondItem=\"HKj-5h-IlX\" secondAttribute=\"height\" id=\"urq-eY-wb2\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"DbL-6G-pYC\" secondAttribute=\"centerY\" id=\"y6c-MW-W5L\"/>\n                <constraint firstItem=\"HKj-5h-IlX\" firstAttribute=\"top\" secondItem=\"vH7-rZ-Mou\" secondAttribute=\"bottom\" constant=\"20\" id=\"ysq-1V-eha\"/>\n            </constraints>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/GONMarkupParserSample-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSMainNibFile</key>\n\t<string>MainWindow</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/GONMarkupParserSample-Prefix.pch",
    "content": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_5_0\n#warning \"This project uses features only available in iOS SDK 5.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n    #import \"NSString+Color.h\"\n    #import <CoreText/CoreText.h>\n    #import \"LazyProperty.h\"\n    #import \"GONMarkupParser_All.h\"\n#endif\n"
  },
  {
    "path": "Example/GONMarkupParserSample/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/GONMarkupParserSample/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"splash@2x.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"filename\" : \"splash@2x-1.png\",\n      \"minimum-system-version\" : \"7.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/GONMarkupParserSample/MainWindow.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14C109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"UIApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"gwP-y8-sxd\" id=\"GEv-tk-vmS\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <window opaque=\"NO\" clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"Na2-4i-xf1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n            <connections>\n                <outlet property=\"rootViewController\" destination=\"VUy-Hf-22c\" id=\"wIg-8K-Ekf\"/>\n            </connections>\n            <point key=\"canvasLocation\" x=\"435\" y=\"389\"/>\n        </window>\n        <customObject id=\"gwP-y8-sxd\" userLabel=\"AppDelegate\" customClass=\"AppDelegate\"/>\n        <navigationController id=\"VUy-Hf-22c\">\n            <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" translucent=\"NO\" id=\"jSj-b3-qCe\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n            </navigationBar>\n            <viewControllers>\n                <viewController nibName=\"RootViewController\" id=\"yXb-Vn-s4H\" customClass=\"RootViewController\">\n                    <navigationItem key=\"navigationItem\" title=\"Item\" id=\"AwQ-rR-fzr\"/>\n                </viewController>\n            </viewControllers>\n            <point key=\"canvasLocation\" x=\"324\" y=\"758\"/>\n        </navigationController>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/PlaygroundViewController.h",
    "content": "//\n//  PlaygroundViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface PlaygroundViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/PlaygroundViewController.m",
    "content": "//\n//  PlaygroundViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"PlaygroundViewController.h\"\n#import \"ResultViewController.h\"\n\n@interface PlaygroundViewController ()\n// View controllers\n@property (nonatomic, strong) ResultViewController *resultViewController;\n\n// Outlets\n@property (nonatomic, weak  ) IBOutlet UITextView      *inputTextView;\n@property (nonatomic, strong) IBOutlet UIBarButtonItem *validateButton;\n@end\n\n@implementation PlaygroundViewController\n#pragma mark - View management\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\n    // Title\n    self.title = @\"Playground\";\n\n    self.navigationItem.rightBarButtonItem = _validateButton;\n}\n\n- (void)viewDidAppear:(BOOL)animated\n{\n    [super viewDidAppear:animated];\n\n    [_inputTextView becomeFirstResponder];\n}\n\n#pragma mark - UI Actions\n- (IBAction)showResult\n{\n    // Parse string\n    self.resultViewController.resultAttributedString = [[GONMarkupParserManager sharedParser] attributedStringFromString:_inputTextView.text];\n\n    // Show results\n    [self.navigationController pushViewController:self.resultViewController\n                                         animated:YES];\n}\n\nLAZY_PROPERTY(resultViewController);\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/PlaygroundViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14C109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"PlaygroundViewController\">\n            <connections>\n                <outlet property=\"inputTextView\" destination=\"POq-EJ-nFs\" id=\"tde-IK-RHB\"/>\n                <outlet property=\"validateButton\" destination=\"eLD-U2-qOP\" id=\"dM4-Fu-LKp\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"POq-EJ-nFs\">\n                    <rect key=\"frame\" x=\"10\" y=\"10\" width=\"300\" height=\"548\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                </textView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstAttribute=\"bottom\" secondItem=\"POq-EJ-nFs\" secondAttribute=\"bottom\" constant=\"10\" id=\"K5f-js-Zsa\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"POq-EJ-nFs\" secondAttribute=\"trailing\" constant=\"10\" id=\"RDw-de-k2F\"/>\n                <constraint firstItem=\"POq-EJ-nFs\" firstAttribute=\"top\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"top\" constant=\"10\" id=\"WDX-hM-WMF\"/>\n                <constraint firstItem=\"POq-EJ-nFs\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"10\" id=\"cNO-p5-NOK\"/>\n            </constraints>\n            <point key=\"canvasLocation\" x=\"211\" y=\"303\"/>\n        </view>\n        <barButtonItem systemItem=\"done\" id=\"eLD-U2-qOP\">\n            <connections>\n                <action selector=\"showResult\" destination=\"-1\" id=\"3Ry-4t-Nyu\"/>\n            </connections>\n        </barButtonItem>\n    </objects>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\" type=\"retina4\"/>\n    </simulatedMetricsContainer>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ResultViewController.h",
    "content": "//\n//  ResultViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface ResultViewController : UIViewController <UITextViewDelegate>\n@property (nonatomic, strong) NSAttributedString *resultAttributedString;\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ResultViewController.m",
    "content": "//\n//  ResultViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"ResultViewController.h\"\n\n@interface ResultViewController ()\n// Outlets\n@property (nonatomic, weak) IBOutlet UITextView  *resultTextView;\n@end\n\n@implementation ResultViewController\n#pragma mark - View management\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n\n    // Title\n    self.title = @\"Result\";\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n\n    // Affect result string\n    _resultTextView.attributedText = _resultAttributedString;\n}\n\n#pragma mark - UITextViewDelegate methods\n- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange\n{\n    // Show link value\n    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Information\"\n                                                    message:[URL description]\n                                                   delegate:nil\n                                          cancelButtonTitle:@\"OK\"\n                                          otherButtonTitles:nil];\n    [alert show];\n    \n    return NO;\n}\n\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/ResultViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14C109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ResultViewController\">\n            <connections>\n                <outlet property=\"resultTextView\" destination=\"rHw-RK-M6H\" id=\"gSs-qv-ED7\"/>\n                <outlet property=\"view\" destination=\"iN0-l3-epB\" id=\"eA2-0h-OaT\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" editable=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"rHw-RK-M6H\">\n                    <rect key=\"frame\" x=\"10\" y=\"10\" width=\"580\" height=\"580\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <string key=\"text\">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"dCy-1z-Iww\"/>\n                    </connections>\n                </textView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"rHw-RK-M6H\" firstAttribute=\"top\" secondItem=\"iN0-l3-epB\" secondAttribute=\"top\" constant=\"10\" id=\"0Lk-ej-lzV\"/>\n                <constraint firstItem=\"rHw-RK-M6H\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"10\" id=\"QWe-ir-wsq\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"rHw-RK-M6H\" secondAttribute=\"bottom\" constant=\"10\" id=\"dD1-3g-qnt\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"rHw-RK-M6H\" secondAttribute=\"trailing\" constant=\"10\" id=\"qwf-9H-pBA\"/>\n            </constraints>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/RootViewController.h",
    "content": "//\n//  RootViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface RootViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/RootViewController.m",
    "content": "//\n//  RootViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"RootViewController.h\"\n#import \"SampleViewController.h\"\n\n#define SAMPLES_DATA_FILE       @\"samples\"\n\n#define TITLE_KEY               @\"title\"\n#define SAMPLE_KEY              @\"sample\"\n#define BACKGROUND_KEY          @\"background\"\n#define VIEW_CONTROLLER_KEY     @\"viewController\"\n\n@interface RootViewController ()\n// Data\n@property (nonatomic, strong) NSArray             *samplesData;\n@property (nonatomic, strong) NSMutableDictionary *viewControllerCache;\n@end\n\n@implementation RootViewController\n#pragma mark - Constructor\n- (id)initWithCoder:(NSCoder *)aDecoder\n{\n    if (self = [super initWithCoder:aDecoder])\n    {\n        self.title = @\"Samples list\";\n    }\n\n    return self;\n}\n\n#pragma mark - View management\n- (void)viewDidLoad {\n    [super viewDidLoad];\n\n    // Load data\n    _samplesData = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:SAMPLES_DATA_FILE\n                                                                                    ofType:@\"plist\"]];\n}\n\n#pragma mark - UITableViewDelegate methods\n- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    NSDictionary *sampleData = [_samplesData objectAtIndex:indexPath.row];\n\n    // Set sample title\n    cell.textLabel.text = [sampleData objectForKey:TITLE_KEY];\n\n    // Set sample cell background color\n    cell.backgroundColor = [[sampleData objectForKey:BACKGROUND_KEY] representedColor];\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    UIViewController *viewController;\n    NSString *viewControllerClassName = [[_samplesData objectAtIndex:indexPath.row] objectForKey:VIEW_CONTROLLER_KEY];\n    if (viewControllerClassName.length)\n    {\n        // Check cache\n        viewController = [_viewControllerCache objectForKey:viewControllerClassName];\n        if (!viewController)\n        {\n            // Instantiate\n            viewController = [[NSClassFromString(viewControllerClassName) alloc] init];\n\n            // Hold reference for reuse\n            [_viewControllerCache setObject:viewController\n                                     forKey:viewControllerClassName];\n        }\n            \n    }\n    else\n    {\n        // Configure sample view controller\n        SampleViewController *sampleViewController = [[SampleViewController alloc] init];\n        sampleViewController.sampleText            = [[_samplesData objectAtIndex:indexPath.row] objectForKey:SAMPLE_KEY];\n\n        viewController = sampleViewController;\n    }\n\n    // Push associated view controller\n    [self.navigationController pushViewController:viewController\n                                         animated:YES];\n\n    // Deselect row\n    [tableView deselectRowAtIndexPath:indexPath\n                             animated:YES];\n}\n\n#pragma mark - UITableViewDatasource methods\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[UITableViewCell description]];\n    if (!cell)\n    {\n        // Load cell\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault\n                                      reuseIdentifier:[UITableViewCell description]];\n    }\n\n    return cell;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return _samplesData.count;\n}\n\n#pragma mark - Memory\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n\n    [_viewControllerCache removeAllObjects];\n}\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/RootViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6254\" systemVersion=\"14C109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6247\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"RootViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Lft-ya-qUM\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <color key=\"separatorColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"11d-KL-pw3\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"aCG-Ia-0bG\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"Lft-ya-qUM\" firstAttribute=\"top\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"top\" id=\"2un-qt-QS6\"/>\n                <constraint firstItem=\"Lft-ya-qUM\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" id=\"6EV-LF-LhV\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"Lft-ya-qUM\" secondAttribute=\"trailing\" id=\"e5n-wk-PA5\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"Lft-ya-qUM\" secondAttribute=\"bottom\" id=\"noo-aK-mi3\"/>\n            </constraints>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"451\" y=\"428\"/>\n        </view>\n    </objects>\n    <simulatedMetricsContainer key=\"defaultSimulatedMetrics\">\n        <simulatedStatusBarMetrics key=\"statusBar\"/>\n        <simulatedOrientationMetrics key=\"orientation\"/>\n        <simulatedScreenMetrics key=\"destination\" type=\"retina4\"/>\n    </simulatedMetricsContainer>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/SampleViewController.h",
    "content": "//\n//  SampleViewController.h\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n@interface SampleViewController : UIViewController <UITextViewDelegate>\n@property (nonatomic, strong) NSString *sampleText;\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/SampleViewController.m",
    "content": "//\n//  SampleViewController.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 10/11/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import \"SampleViewController.h\"\n\n@interface SampleViewController ()\n// Outlets\n@property (nonatomic, weak) IBOutlet UITextView *inputTextView;\n@property (nonatomic, weak) IBOutlet UITextView *resultTextView;\n@end\n\n@implementation SampleViewController\n#pragma mark - View management\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n\n    // Configure textviews\n    _inputTextView.text             = _sampleText;\n    [_resultTextView setMarkedUpText:_sampleText\n                              parser:[GONMarkupParser defaultMarkupParser]];\n}\n\n#pragma mark - UITextViewDelegate methods\n- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange\n{\n    // Show link value\n    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Information\"\n                                                    message:[URL description]\n                                                   delegate:nil\n                                          cancelButtonTitle:@\"OK\"\n                                          otherButtonTitles:nil];\n    [alert show];\n    \n    return NO;\n}\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSample/SampleViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"9532\" systemVersion=\"15D21\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9530\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"SampleViewController\">\n            <connections>\n                <outlet property=\"inputTextView\" destination=\"2bg-WY-COJ\" id=\"pVi-sl-Zk6\"/>\n                <outlet property=\"resultTextView\" destination=\"Kay-pb-0HH\" id=\"XfX-LS-Nw8\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DbL-6G-pYC\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"283\" width=\"320\" height=\"2\"/>\n                    <color key=\"backgroundColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"2\" id=\"ixd-lx-qtw\"/>\n                    </constraints>\n                </view>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" editable=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kay-pb-0HH\" userLabel=\"result\">\n                    <rect key=\"frame\" x=\"20\" y=\"295\" width=\"280\" height=\"253\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <string key=\"text\">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                    <connections>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"jLa-gR-YBF\"/>\n                    </connections>\n                </textView>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" editable=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2bg-WY-COJ\" userLabel=\"input\">\n                    <rect key=\"frame\" x=\"20\" y=\"20\" width=\"280\" height=\"253\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <string key=\"text\">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"14\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                </textView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"Kay-pb-0HH\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"20\" id=\"8jX-bl-Ar9\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"DbL-6G-pYC\" secondAttribute=\"trailing\" id=\"NCI-UJ-9fr\"/>\n                <constraint firstItem=\"DbL-6G-pYC\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" id=\"PjP-OV-WfK\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"2bg-WY-COJ\" secondAttribute=\"trailing\" constant=\"20\" id=\"Q3o-Lt-qHP\"/>\n                <constraint firstItem=\"2bg-WY-COJ\" firstAttribute=\"leading\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"leading\" constant=\"20\" id=\"ZYt-g0-57r\"/>\n                <constraint firstItem=\"Kay-pb-0HH\" firstAttribute=\"top\" secondItem=\"DbL-6G-pYC\" secondAttribute=\"bottom\" constant=\"10\" id=\"atK-dh-19o\"/>\n                <constraint firstItem=\"2bg-WY-COJ\" firstAttribute=\"top\" secondItem=\"i5M-Pr-FkT\" secondAttribute=\"top\" constant=\"20\" id=\"bpK-Vi-Wi7\"/>\n                <constraint firstItem=\"DbL-6G-pYC\" firstAttribute=\"top\" secondItem=\"2bg-WY-COJ\" secondAttribute=\"bottom\" constant=\"10\" id=\"q2o-Jm-Uq2\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"Kay-pb-0HH\" secondAttribute=\"bottom\" constant=\"20\" id=\"sX1-Kz-GN6\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"Kay-pb-0HH\" secondAttribute=\"trailing\" constant=\"20\" id=\"wlN-fq-1qp\"/>\n                <constraint firstAttribute=\"centerY\" secondItem=\"DbL-6G-pYC\" secondAttribute=\"centerY\" id=\"y6c-MW-W5L\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <point key=\"canvasLocation\" x=\"416\" y=\"345\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/GONMarkupParserSample/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Example/GONMarkupParserSample/main.m",
    "content": "//\n//  main.m\n//  GONMarkupParserSample\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example/GONMarkupParserSample/samples.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<array>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Playground</string>\n\t\t<key>viewController</key>\n\t\t<string>PlaygroundViewController</string>\n\t\t<key>background</key>\n\t\t<string>eeeeee</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Complex example</string>\n\t\t<key>viewController</key>\n\t\t<string>ComplexExampleViewController</string>\n\t\t<key>background</key>\n\t\t<string>eeeeee</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Invalid format</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;br&gt;&gt;&lt;&lt;body&gt;This is expected string&lt;font color=\\&quot;&gt;Color&lt;/xxxx&gt;&lt;/body&gt;&lt;</string>\n\t\t<key>background</key>\n\t\t<string>D91E18</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Anchor</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;a href=&quot;Hello&quot;&gt;A simple link&lt;/&gt;. &lt;a href=&quot;http://www.apple.com&quot;&gt;An internet link&lt;/&gt;.</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Bold, Italic, Strong, Sup, Sub</string>\n\t\t<key>sample</key>\n\t\t<string>This text is &lt;b&gt;in bold&lt;/&gt;&lt;br/&gt;This text is &lt;i&gt;in italic&lt;/&gt;&lt;br/&gt;This text is &lt;strong&gt;in strong&lt;/&gt;&lt;br/&gt;This text is &lt;sup&gt;superscripted&lt;/&gt;&lt;br/&gt;This text is &lt;sub&gt;subscripted&lt;/&gt;&lt;br/&gt;&lt;b&gt;&lt;i&gt;This text is bold italic&lt;//&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Color</string>\n\t\t<key>sample</key>\n\t\t<string>Default, &lt;color value=&quot;red&quot;&gt;red&lt;/&gt;, &lt;color value=&quot;blue&quot;&gt;blue&lt;/&gt;, &lt;color value=&quot;magenta&quot;&gt;magenta&lt;/&gt;, &lt;color value=&quot;FF5533&quot;&gt;FF5533&lt;/&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Default label configuration</string>\n\t\t<key>viewController</key>\n\t\t<string>DefaultConfigurationViewController</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Font</string>\n\t\t<key>sample</key>\n\t\t<string>Default&lt;br/&gt;&lt;font size=&quot;30&quot;&gt;Size to 30&lt;/&gt;&lt;br/&gt;&lt;font name=&quot;Didot&quot;&gt;font name Didot&lt;/&gt;&lt;br/&gt;&lt;font name=&quot;AmericanTypewriter&quot; color=&quot;red&quot; size=&quot;20&quot;&gt;font name AmericanTypewriter, size 20, red&lt;/&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Inc / Dec</string>\n\t\t<key>sample</key>\n\t\t<string>Default size, &lt;inc&gt;inc 1 &lt;inc&gt; inc 1 &lt;inc value=&quot;10&quot;&gt;inc 10&lt;//&gt;  &lt;dec&gt;dec 1 &lt;dec&gt; dec 1 &lt;dec value=&quot;10&quot;&gt;dec 10&lt;//&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Ordered list</string>\n\t\t<key>sample</key>\n\t\t<string>This text is a list.&lt;br/&gt;&lt;ol&gt;&lt;li&gt;First item&lt;/li&gt;&lt;li&gt;Second &lt;b&gt;bold&lt;/&gt; item &lt;/&gt;&lt;ol&gt;&lt;li&gt;Second.first&lt;/&gt;&lt;li&gt;Second.second&lt;/&gt;&lt;ol&gt;&lt;li&gt;Third&lt;/&gt;&lt;ol&gt;&lt;li&gt;Fourth&lt;/li&gt;&lt;/&gt;&lt;/&gt;&lt;/&gt;&lt;li&gt;Third item&lt;/&gt;&lt;/&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Paragraph</string>\n\t\t<key>sample</key>\n\t\t<string>No paragraph&lt;p&gt;first paragraph&lt;/p&gt;&lt;p&gt;second one&lt;/p&gt;&lt;br/&gt;Still no paragraph</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Reset</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;font size=&quot;20&quot;&gt;&lt;color value=&quot;red&quot;&gt;&lt;right&gt;Reset tag allows you to&lt;br/&gt;&lt;reset&gt;&lt;center&gt;protect&lt;/&gt;&lt;/reset&gt;&lt;br/&gt; certains parts of your text, making it&lt;br/&gt;&lt;reset&gt;&lt;color value=&quot;green&quot;&gt; easier&lt;/&gt;&lt;/&gt;&lt;br/&gt; to be reconfigured.&lt;//&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Strikethrough text</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;strike&gt;Text strikethrough&lt;/&gt;.\n&lt;strike word=&quot;true&quot;&gt;Text strikethrough&lt;/&gt;.\n&lt;strike word=&quot;true&quot; pattern=&quot;dashdotdot&quot; style=&quot;double&quot; color=&quot;green&quot;&gt;Text strikethrough&lt;/&gt;.</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Text alignment</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;left&gt;Left&lt;/&gt;&lt;br/&gt;&lt;center&gt;center&lt;/&gt;&lt;br/&gt;&lt;right&gt;Right&lt;/&gt;&lt;br/&gt;&lt;justified&gt;Justified paragraph Lorem ipsum dolor sit amet, consectetur adipiscing elit. In&lt;//&gt;\n&lt;normal&gt;Normal&lt;/&gt;\n</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Underline text</string>\n\t\t<key>sample</key>\n\t\t<string>&lt;u&gt;Text underline&lt;/&gt;.\n&lt;u word=&quot;true&quot;&gt;Text underline&lt;/&gt;.\n&lt;u word=&quot;true&quot; pattern=&quot;dashdotdot&quot; style=&quot;double&quot; color=&quot;red&quot;&gt;Text underline&lt;/&gt;.</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n\t<dict>\n\t\t<key>title</key>\n\t\t<string>Unordered list</string>\n\t\t<key>sample</key>\n\t\t<string>This text is a list.&lt;br/&gt;&lt;ul&gt;&lt;li&gt;First item&lt;/li&gt;&lt;li&gt;Second &lt;b&gt;bold&lt;/&gt; item &lt;/&gt;&lt;ul&gt;&lt;li&gt;Second.first&lt;/&gt;&lt;li&gt;Second.second&lt;/&gt;&lt;ul&gt;&lt;li&gt;Third&lt;/&gt;&lt;ul&gt;&lt;li&gt;Fourth&lt;/li&gt;&lt;/&gt;&lt;/&gt;&lt;/&gt;&lt;li&gt;Third item&lt;/&gt;&lt;/&gt;</string>\n\t\t<key>background</key>\n\t\t<string>ABB7B7</string>\n\t</dict>\n</array>\n</plist>\n"
  },
  {
    "path": "Example/GONMarkupParserSample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t401E32021B281142C6BABB70 /* libPods-defaults-GONMarkupParserSample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E6D2CD1AD599D4565EAA3ED /* libPods-defaults-GONMarkupParserSample.a */; };\n\t\t5C0790A81ED74D0B0011FF0E /* GONMarkupStrong.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C0790A71ED74D0B0011FF0E /* GONMarkupStrong.m */; };\n\t\t5C1D1C2E19920D7100F7B642 /* GONMarkupParagraph.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C1D1C2D19920D7100F7B642 /* GONMarkupParagraph.m */; };\n\t\t5C2E11E41B8A146D0065D29C /* UIButton+GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E11E31B8A146D0065D29C /* UIButton+GONMarkupParser.m */; };\n\t\t5C396DD21A80D80800AC8E45 /* GONMarkupLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C396DD11A80D80800AC8E45 /* GONMarkupLineStyle.m */; };\n\t\t5C396DD31A80D80800AC8E45 /* GONMarkupLineStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C396DD11A80D80800AC8E45 /* GONMarkupLineStyle.m */; };\n\t\t5C404BCC1A1C9115007DCB2C /* DefaultConfigurationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C404BCB1A1C9115007DCB2C /* DefaultConfigurationViewController.m */; };\n\t\t5C404BD01A1C951F007DCB2C /* DefaultConfigurationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C404BCF1A1C951F007DCB2C /* DefaultConfigurationViewController.xib */; };\n\t\t5C4241B91C89995A00E5B289 /* lama.png in Resources */ = {isa = PBXBuildFile; fileRef = 5C4241B81C89995A00E5B289 /* lama.png */; };\n\t\t5C43EE491A8251920053A667 /* GONMarkupAnchor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C43EE481A8251920053A667 /* GONMarkupAnchor.m */; };\n\t\t5C43EE4A1A8251920053A667 /* GONMarkupAnchor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C43EE481A8251920053A667 /* GONMarkupAnchor.m */; };\n\t\t5C43EE511A8267D60053A667 /* UITextView+GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C43EE501A8267D60053A667 /* UITextView+GONMarkupParser.m */; };\n\t\t5C43EE521A8267D60053A667 /* UITextView+GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C43EE501A8267D60053A667 /* UITextView+GONMarkupParser.m */; };\n\t\t5C44A9D119D0690A00CF6957 /* GONMarkupFontTraits.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C44A9D019D0690A00CF6957 /* GONMarkupFontTraits.m */; };\n\t\t5C65F3EA1A1114EC005A76A3 /* GONMarkupInc.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F3E91A1114EC005A76A3 /* GONMarkupInc.m */; };\n\t\t5C65F3ED1A11150A005A76A3 /* GONMarkupDec.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F3EC1A11150A005A76A3 /* GONMarkupDec.m */; };\n\t\t5C65F3F11A112231005A76A3 /* samples.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F3F01A112231005A76A3 /* samples.plist */; };\n\t\t5C65F3F31A112EBE005A76A3 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F3F21A112EBE005A76A3 /* MainWindow.xib */; };\n\t\t5C65F3F81A112F3A005A76A3 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F3F61A112F3A005A76A3 /* RootViewController.m */; };\n\t\t5C65F3F91A112F3A005A76A3 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F3F71A112F3A005A76A3 /* RootViewController.xib */; };\n\t\t5C65F3FE1A1133F8005A76A3 /* SampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F3FC1A1133F8005A76A3 /* SampleViewController.m */; };\n\t\t5C65F3FF1A1133F8005A76A3 /* SampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F3FD1A1133F8005A76A3 /* SampleViewController.xib */; };\n\t\t5C65F4041A1139CD005A76A3 /* PlaygroundViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F4021A1139CD005A76A3 /* PlaygroundViewController.m */; };\n\t\t5C65F4051A1139CD005A76A3 /* PlaygroundViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F4031A1139CD005A76A3 /* PlaygroundViewController.xib */; };\n\t\t5C65F4071A1153A2005A76A3 /* ResultViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F4061A1153A2005A76A3 /* ResultViewController.xib */; };\n\t\t5C65F40B1A11FDB2005A76A3 /* ComplexExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F40A1A11FDB2005A76A3 /* ComplexExampleViewController.m */; };\n\t\t5C65F40D1A11FFFE005A76A3 /* ComplexExampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C65F40C1A11FFFE005A76A3 /* ComplexExampleViewController.xib */; };\n\t\t5C7C5B291994CB55003BE47A /* GONMarkupParserUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C7C5B281994CB55003BE47A /* GONMarkupParserUtils.m */; };\n\t\t5C7C5B2A1994CB55003BE47A /* GONMarkupParserUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C7C5B281994CB55003BE47A /* GONMarkupParserUtils.m */; };\n\t\t5CB1C580195B19C400590186 /* ResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C57F195B19C400590186 /* ResultViewController.m */; };\n\t\t5CB1C58A195B1EE600590186 /* GONMarkupNamedColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C589195B1EE600590186 /* GONMarkupNamedColor.m */; };\n\t\t5CB1C58E195B24F200590186 /* GONMarkupBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C58D195B24F200590186 /* GONMarkupBlock.m */; };\n\t\t5CB1C58F195B250A00590186 /* GONMarkupBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C58D195B24F200590186 /* GONMarkupBlock.m */; };\n\t\t5CB1C590195B250A00590186 /* GONMarkupNamedColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C589195B1EE600590186 /* GONMarkupNamedColor.m */; };\n\t\t5CB1C591195B250A00590186 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27160195B11E0007FCF44 /* AppDelegate.m */; };\n\t\t5CB1C593195B250A00590186 /* ResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C57F195B19C400590186 /* ResultViewController.m */; };\n\t\t5CB1C594195B250A00590186 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2715C195B11E0007FCF44 /* main.m */; };\n\t\t5CB1C59C195B25E800590186 /* GONMarkupReset.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C59B195B25E800590186 /* GONMarkupReset.m */; };\n\t\t5CB1C59D195B25E800590186 /* GONMarkupReset.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C59B195B25E800590186 /* GONMarkupReset.m */; };\n\t\t5CB1C5A0195B2B7700590186 /* GONMarkupNamedFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C59F195B2B7700590186 /* GONMarkupNamedFont.m */; };\n\t\t5CB1C5A1195B2B7700590186 /* GONMarkupNamedFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C59F195B2B7700590186 /* GONMarkupNamedFont.m */; };\n\t\t5CB1C5A4195B333700590186 /* GONMarkup+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5A3195B333700590186 /* GONMarkup+Private.m */; };\n\t\t5CB1C5A5195B333700590186 /* GONMarkup+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5A3195B333700590186 /* GONMarkup+Private.m */; };\n\t\t5CB1C5A8195B3B7400590186 /* ComplexExample in Resources */ = {isa = PBXBuildFile; fileRef = 5CB1C5A7195B3B7400590186 /* ComplexExample */; };\n\t\t5CB1C5A9195B3B7400590186 /* ComplexExample in Resources */ = {isa = PBXBuildFile; fileRef = 5CB1C5A7195B3B7400590186 /* ComplexExample */; };\n\t\t5CB1C5AD195B4FA000590186 /* GONMarkupList.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5AC195B4FA000590186 /* GONMarkupList.m */; };\n\t\t5CB1C5AE195B4FA000590186 /* GONMarkupList.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5AC195B4FA000590186 /* GONMarkupList.m */; };\n\t\t5CB1C5B5195B4FB600590186 /* GONMarkupListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5B4195B4FB600590186 /* GONMarkupListItem.m */; };\n\t\t5CB1C5B6195B4FB600590186 /* GONMarkupListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5B4195B4FB600590186 /* GONMarkupListItem.m */; };\n\t\t5CB1C5B9195B55BE00590186 /* GONMarkupLineBreak.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5B8195B55BE00590186 /* GONMarkupLineBreak.m */; };\n\t\t5CB1C5BA195B55BE00590186 /* GONMarkupLineBreak.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB1C5B8195B55BE00590186 /* GONMarkupLineBreak.m */; };\n\t\t5CB3106F19BE026C00B06D0D /* UILabel+GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB3106E19BE026C00B06D0D /* UILabel+GONMarkupParser.m */; };\n\t\t5CB3107219BE027A00B06D0D /* UITextField+GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB3107119BE027A00B06D0D /* UITextField+GONMarkupParser.m */; };\n\t\t5CC284B7197974870009D443 /* GONMarkupSimple.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CC284B6197974870009D443 /* GONMarkupSimple.m */; };\n\t\t5CC43CD5197E616600E46A03 /* GONMarkupAlignment.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CC43CD4197E616600E46A03 /* GONMarkupAlignment.m */; };\n\t\t5CD617E319828AA90001C3D9 /* GONMarkupParserManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CD617E219828AA90001C3D9 /* GONMarkupParserManager.m */; };\n\t\t5CD617E719828B1C0001C3D9 /* GONMarkupTextStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CD617E619828B1C0001C3D9 /* GONMarkupTextStyle.m */; };\n\t\t5CD617E919828B2E0001C3D9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD617E819828B2E0001C3D9 /* CoreText.framework */; };\n\t\t5CE1493A19CC2B6300B73518 /* GONMarkupItalic.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE1493919CC2B6300B73518 /* GONMarkupItalic.m */; };\n\t\t5CE1493D19CC2B6900B73518 /* GONMarkupBold.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE1493C19CC2B6900B73518 /* GONMarkupBold.m */; };\n\t\t5CE27151195B11E0007FCF44 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE27150195B11E0007FCF44 /* Foundation.framework */; };\n\t\t5CE27153195B11E0007FCF44 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE27152195B11E0007FCF44 /* CoreGraphics.framework */; };\n\t\t5CE27155195B11E0007FCF44 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE27154195B11E0007FCF44 /* UIKit.framework */; };\n\t\t5CE2715B195B11E0007FCF44 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CE27159195B11E0007FCF44 /* InfoPlist.strings */; };\n\t\t5CE2715D195B11E0007FCF44 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2715C195B11E0007FCF44 /* main.m */; };\n\t\t5CE27161195B11E0007FCF44 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27160195B11E0007FCF44 /* AppDelegate.m */; };\n\t\t5CE27169195B11E0007FCF44 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5CE27168195B11E0007FCF44 /* Images.xcassets */; };\n\t\t5CE27170195B11E0007FCF44 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2716F195B11E0007FCF44 /* XCTest.framework */; };\n\t\t5CE27171195B11E0007FCF44 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE27150195B11E0007FCF44 /* Foundation.framework */; };\n\t\t5CE27172195B11E0007FCF44 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE27154195B11E0007FCF44 /* UIKit.framework */; };\n\t\t5CE2717A195B11E0007FCF44 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CE27178195B11E0007FCF44 /* InfoPlist.strings */; };\n\t\t5CE2717C195B11E0007FCF44 /* GONMarkupParserSampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2717B195B11E0007FCF44 /* GONMarkupParserSampleTests.m */; };\n\t\t5CE27194195B1412007FCF44 /* GONMarkup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2718D195B1412007FCF44 /* GONMarkup.m */; };\n\t\t5CE27195195B1412007FCF44 /* GONMarkup.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2718D195B1412007FCF44 /* GONMarkup.m */; };\n\t\t5CE27196195B1412007FCF44 /* GONMarkupColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2718F195B1412007FCF44 /* GONMarkupColor.m */; };\n\t\t5CE27197195B1412007FCF44 /* GONMarkupColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE2718F195B1412007FCF44 /* GONMarkupColor.m */; };\n\t\t5CE27198195B1412007FCF44 /* GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27191195B1412007FCF44 /* GONMarkupParser.m */; };\n\t\t5CE27199195B1412007FCF44 /* GONMarkupParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27191195B1412007FCF44 /* GONMarkupParser.m */; };\n\t\t5CE2719A195B1412007FCF44 /* GONMarkupFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27193195B1412007FCF44 /* GONMarkupFont.m */; };\n\t\t5CE2719B195B1412007FCF44 /* GONMarkupFont.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE27193195B1412007FCF44 /* GONMarkupFont.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t5CE27173195B11E0007FCF44 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 5CE27145195B11E0007FCF44 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 5CE2714C195B11E0007FCF44;\n\t\t\tremoteInfo = GONMarkupParserSample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t5C0790A61ED74D0B0011FF0E /* GONMarkupStrong.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupStrong.h; path = ../Classes/GONMarkupStrong.h; sourceTree = \"<group>\"; };\n\t\t5C0790A71ED74D0B0011FF0E /* GONMarkupStrong.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupStrong.m; path = ../Classes/GONMarkupStrong.m; sourceTree = \"<group>\"; };\n\t\t5C1BA2E419BF45BD00E3D67C /* GONMarkupParser_Categories.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GONMarkupParser_Categories.h; path = ../Classes/GONMarkupParser_Categories.h; sourceTree = \"<group>\"; };\n\t\t5C1D1C2C19920D7100F7B642 /* GONMarkupParagraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupParagraph.h; path = ../Classes/GONMarkupParagraph.h; sourceTree = \"<group>\"; };\n\t\t5C1D1C2D19920D7100F7B642 /* GONMarkupParagraph.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupParagraph.m; path = ../Classes/GONMarkupParagraph.m; sourceTree = \"<group>\"; };\n\t\t5C2E11E21B8A146D0065D29C /* UIButton+GONMarkupParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"UIButton+GONMarkupParser.h\"; path = \"../Classes/UIButton+GONMarkupParser.h\"; sourceTree = \"<group>\"; };\n\t\t5C2E11E31B8A146D0065D29C /* UIButton+GONMarkupParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"UIButton+GONMarkupParser.m\"; path = \"../Classes/UIButton+GONMarkupParser.m\"; sourceTree = \"<group>\"; };\n\t\t5C2E11E51B8A175F0065D29C /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = \"<group>\"; };\n\t\t5C396DD01A80D80800AC8E45 /* GONMarkupLineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupLineStyle.h; path = ../Classes/GONMarkupLineStyle.h; sourceTree = \"<group>\"; };\n\t\t5C396DD11A80D80800AC8E45 /* GONMarkupLineStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupLineStyle.m; path = ../Classes/GONMarkupLineStyle.m; sourceTree = \"<group>\"; };\n\t\t5C404BCA1A1C9115007DCB2C /* DefaultConfigurationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultConfigurationViewController.h; sourceTree = \"<group>\"; };\n\t\t5C404BCB1A1C9115007DCB2C /* DefaultConfigurationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DefaultConfigurationViewController.m; sourceTree = \"<group>\"; };\n\t\t5C404BCF1A1C951F007DCB2C /* DefaultConfigurationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DefaultConfigurationViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C4241B51C89982000E5B289 /* GONMarkupImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupImage.h; path = ../Classes/GONMarkupImage.h; sourceTree = \"<group>\"; };\n\t\t5C4241B61C89982000E5B289 /* GONMarkupImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupImage.m; path = ../Classes/GONMarkupImage.m; sourceTree = \"<group>\"; };\n\t\t5C4241B81C89995A00E5B289 /* lama.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = lama.png; sourceTree = \"<group>\"; };\n\t\t5C43EE471A8251920053A667 /* GONMarkupAnchor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupAnchor.h; path = ../Classes/GONMarkupAnchor.h; sourceTree = \"<group>\"; };\n\t\t5C43EE481A8251920053A667 /* GONMarkupAnchor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupAnchor.m; path = ../Classes/GONMarkupAnchor.m; sourceTree = \"<group>\"; };\n\t\t5C43EE4F1A8267D60053A667 /* UITextView+GONMarkupParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"UITextView+GONMarkupParser.h\"; path = \"../Classes/UITextView+GONMarkupParser.h\"; sourceTree = \"<group>\"; };\n\t\t5C43EE501A8267D60053A667 /* UITextView+GONMarkupParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"UITextView+GONMarkupParser.m\"; path = \"../Classes/UITextView+GONMarkupParser.m\"; sourceTree = \"<group>\"; };\n\t\t5C44A9CF19D0690A00CF6957 /* GONMarkupFontTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupFontTraits.h; path = ../Classes/GONMarkupFontTraits.h; sourceTree = \"<group>\"; };\n\t\t5C44A9D019D0690A00CF6957 /* GONMarkupFontTraits.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupFontTraits.m; path = ../Classes/GONMarkupFontTraits.m; sourceTree = \"<group>\"; };\n\t\t5C65F3E81A1114EC005A76A3 /* GONMarkupInc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupInc.h; path = ../Classes/GONMarkupInc.h; sourceTree = \"<group>\"; };\n\t\t5C65F3E91A1114EC005A76A3 /* GONMarkupInc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupInc.m; path = ../Classes/GONMarkupInc.m; sourceTree = \"<group>\"; };\n\t\t5C65F3EB1A11150A005A76A3 /* GONMarkupDec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupDec.h; path = ../Classes/GONMarkupDec.h; sourceTree = \"<group>\"; };\n\t\t5C65F3EC1A11150A005A76A3 /* GONMarkupDec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupDec.m; path = ../Classes/GONMarkupDec.m; sourceTree = \"<group>\"; };\n\t\t5C65F3F01A112231005A76A3 /* samples.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = samples.plist; sourceTree = \"<group>\"; };\n\t\t5C65F3F21A112EBE005A76A3 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = \"<group>\"; };\n\t\t5C65F3F51A112F3A005A76A3 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = \"<group>\"; };\n\t\t5C65F3F61A112F3A005A76A3 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = \"<group>\"; };\n\t\t5C65F3F71A112F3A005A76A3 /* RootViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C65F3FB1A1133F8005A76A3 /* SampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleViewController.h; sourceTree = \"<group>\"; };\n\t\t5C65F3FC1A1133F8005A76A3 /* SampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleViewController.m; sourceTree = \"<group>\"; };\n\t\t5C65F3FD1A1133F8005A76A3 /* SampleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SampleViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C65F4011A1139CD005A76A3 /* PlaygroundViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlaygroundViewController.h; sourceTree = \"<group>\"; };\n\t\t5C65F4021A1139CD005A76A3 /* PlaygroundViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlaygroundViewController.m; sourceTree = \"<group>\"; };\n\t\t5C65F4031A1139CD005A76A3 /* PlaygroundViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlaygroundViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C65F4061A1153A2005A76A3 /* ResultViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ResultViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C65F4091A11FDB2005A76A3 /* ComplexExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComplexExampleViewController.h; sourceTree = \"<group>\"; };\n\t\t5C65F40A1A11FDB2005A76A3 /* ComplexExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ComplexExampleViewController.m; sourceTree = \"<group>\"; };\n\t\t5C65F40C1A11FFFE005A76A3 /* ComplexExampleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ComplexExampleViewController.xib; sourceTree = \"<group>\"; };\n\t\t5C7C5B271994CB55003BE47A /* GONMarkupParserUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupParserUtils.h; path = ../Classes/GONMarkupParserUtils.h; sourceTree = \"<group>\"; };\n\t\t5C7C5B281994CB55003BE47A /* GONMarkupParserUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupParserUtils.m; path = ../Classes/GONMarkupParserUtils.m; sourceTree = \"<group>\"; };\n\t\t5CB1C57E195B19C400590186 /* ResultViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResultViewController.h; sourceTree = \"<group>\"; };\n\t\t5CB1C57F195B19C400590186 /* ResultViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResultViewController.m; sourceTree = \"<group>\"; };\n\t\t5CB1C582195B1A0100590186 /* GONMarkupDefaultMarkups.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GONMarkupDefaultMarkups.h; path = ../Classes/GONMarkupDefaultMarkups.h; sourceTree = \"<group>\"; };\n\t\t5CB1C588195B1EE600590186 /* GONMarkupNamedColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupNamedColor.h; path = ../Classes/GONMarkupNamedColor.h; sourceTree = \"<group>\"; };\n\t\t5CB1C589195B1EE600590186 /* GONMarkupNamedColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupNamedColor.m; path = ../Classes/GONMarkupNamedColor.m; sourceTree = \"<group>\"; };\n\t\t5CB1C58C195B24F200590186 /* GONMarkupBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupBlock.h; path = ../Classes/GONMarkupBlock.h; sourceTree = \"<group>\"; };\n\t\t5CB1C58D195B24F200590186 /* GONMarkupBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupBlock.m; path = ../Classes/GONMarkupBlock.m; sourceTree = \"<group>\"; };\n\t\t5CB1C59A195B25E800590186 /* GONMarkupReset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupReset.h; path = ../Classes/GONMarkupReset.h; sourceTree = \"<group>\"; };\n\t\t5CB1C59B195B25E800590186 /* GONMarkupReset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupReset.m; path = ../Classes/GONMarkupReset.m; sourceTree = \"<group>\"; };\n\t\t5CB1C59E195B2B7700590186 /* GONMarkupNamedFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupNamedFont.h; path = ../Classes/GONMarkupNamedFont.h; sourceTree = \"<group>\"; };\n\t\t5CB1C59F195B2B7700590186 /* GONMarkupNamedFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupNamedFont.m; path = ../Classes/GONMarkupNamedFont.m; sourceTree = \"<group>\"; };\n\t\t5CB1C5A2195B333700590186 /* GONMarkup+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"GONMarkup+Private.h\"; path = \"../Classes/GONMarkup+Private.h\"; sourceTree = \"<group>\"; };\n\t\t5CB1C5A3195B333700590186 /* GONMarkup+Private.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"GONMarkup+Private.m\"; path = \"../Classes/GONMarkup+Private.m\"; sourceTree = \"<group>\"; };\n\t\t5CB1C5A7195B3B7400590186 /* ComplexExample */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ComplexExample; sourceTree = \"<group>\"; };\n\t\t5CB1C5AB195B4FA000590186 /* GONMarkupList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupList.h; path = ../Classes/GONMarkupList.h; sourceTree = \"<group>\"; };\n\t\t5CB1C5AC195B4FA000590186 /* GONMarkupList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupList.m; path = ../Classes/GONMarkupList.m; sourceTree = \"<group>\"; };\n\t\t5CB1C5B3195B4FB600590186 /* GONMarkupListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupListItem.h; path = ../Classes/GONMarkupListItem.h; sourceTree = \"<group>\"; };\n\t\t5CB1C5B4195B4FB600590186 /* GONMarkupListItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupListItem.m; path = ../Classes/GONMarkupListItem.m; sourceTree = \"<group>\"; };\n\t\t5CB1C5B7195B55BE00590186 /* GONMarkupLineBreak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupLineBreak.h; path = ../Classes/GONMarkupLineBreak.h; sourceTree = \"<group>\"; };\n\t\t5CB1C5B8195B55BE00590186 /* GONMarkupLineBreak.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupLineBreak.m; path = ../Classes/GONMarkupLineBreak.m; sourceTree = \"<group>\"; };\n\t\t5CB3106D19BE026C00B06D0D /* UILabel+GONMarkupParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"UILabel+GONMarkupParser.h\"; path = \"../Classes/UILabel+GONMarkupParser.h\"; sourceTree = \"<group>\"; };\n\t\t5CB3106E19BE026C00B06D0D /* UILabel+GONMarkupParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"UILabel+GONMarkupParser.m\"; path = \"../Classes/UILabel+GONMarkupParser.m\"; sourceTree = \"<group>\"; };\n\t\t5CB3107019BE027A00B06D0D /* UITextField+GONMarkupParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = \"UITextField+GONMarkupParser.h\"; path = \"../Classes/UITextField+GONMarkupParser.h\"; sourceTree = \"<group>\"; };\n\t\t5CB3107119BE027A00B06D0D /* UITextField+GONMarkupParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = \"UITextField+GONMarkupParser.m\"; path = \"../Classes/UITextField+GONMarkupParser.m\"; sourceTree = \"<group>\"; };\n\t\t5CBDC0A0195C334D007279A0 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; name = README.md; path = ../README.md; sourceTree = \"<group>\"; };\n\t\t5CBDC0A1195C3356007279A0 /* GONMarkupParser.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; name = GONMarkupParser.podspec; path = ../GONMarkupParser.podspec; sourceTree = \"<group>\"; };\n\t\t5CC284B5197974870009D443 /* GONMarkupSimple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupSimple.h; path = ../Classes/GONMarkupSimple.h; sourceTree = \"<group>\"; };\n\t\t5CC284B6197974870009D443 /* GONMarkupSimple.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupSimple.m; path = ../Classes/GONMarkupSimple.m; sourceTree = \"<group>\"; };\n\t\t5CC43CD3197E616600E46A03 /* GONMarkupAlignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupAlignment.h; path = ../Classes/GONMarkupAlignment.h; sourceTree = \"<group>\"; };\n\t\t5CC43CD4197E616600E46A03 /* GONMarkupAlignment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupAlignment.m; path = ../Classes/GONMarkupAlignment.m; sourceTree = \"<group>\"; };\n\t\t5CD617E119828AA90001C3D9 /* GONMarkupParserManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupParserManager.h; path = ../Classes/GONMarkupParserManager.h; sourceTree = \"<group>\"; };\n\t\t5CD617E219828AA90001C3D9 /* GONMarkupParserManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupParserManager.m; path = ../Classes/GONMarkupParserManager.m; sourceTree = \"<group>\"; };\n\t\t5CD617E519828B1C0001C3D9 /* GONMarkupTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupTextStyle.h; path = ../Classes/GONMarkupTextStyle.h; sourceTree = \"<group>\"; };\n\t\t5CD617E619828B1C0001C3D9 /* GONMarkupTextStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupTextStyle.m; path = ../Classes/GONMarkupTextStyle.m; sourceTree = \"<group>\"; };\n\t\t5CD617E819828B2E0001C3D9 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };\n\t\t5CE1493619CC253600B73518 /* GONMarkupItalic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupItalic.h; path = ../Classes/GONMarkupItalic.h; sourceTree = \"<group>\"; };\n\t\t5CE1493919CC2B6300B73518 /* GONMarkupItalic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupItalic.m; path = ../Classes/GONMarkupItalic.m; sourceTree = \"<group>\"; };\n\t\t5CE1493B19CC2B6900B73518 /* GONMarkupBold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupBold.h; path = ../Classes/GONMarkupBold.h; sourceTree = \"<group>\"; };\n\t\t5CE1493C19CC2B6900B73518 /* GONMarkupBold.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupBold.m; path = ../Classes/GONMarkupBold.m; sourceTree = \"<group>\"; };\n\t\t5CE1493E19CC2BBC00B73518 /* GONMarkupParser_All.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GONMarkupParser_All.h; path = ../Classes/GONMarkupParser_All.h; sourceTree = \"<group>\"; };\n\t\t5CE2714D195B11E0007FCF44 /* GONMarkupParserSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GONMarkupParserSample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5CE27150195B11E0007FCF44 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t5CE27152195B11E0007FCF44 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t5CE27154195B11E0007FCF44 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t5CE27158195B11E0007FCF44 /* GONMarkupParserSample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"GONMarkupParserSample-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t5CE2715A195B11E0007FCF44 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t5CE2715C195B11E0007FCF44 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t5CE2715E195B11E0007FCF44 /* GONMarkupParserSample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"GONMarkupParserSample-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t5CE2715F195B11E0007FCF44 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t5CE27160195B11E0007FCF44 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t5CE27168195B11E0007FCF44 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t5CE2716E195B11E0007FCF44 /* GONMarkupParserSampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GONMarkupParserSampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t5CE2716F195B11E0007FCF44 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\t5CE27177195B11E0007FCF44 /* GONMarkupParserSampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"GONMarkupParserSampleTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t5CE27179195B11E0007FCF44 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t5CE2717B195B11E0007FCF44 /* GONMarkupParserSampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GONMarkupParserSampleTests.m; sourceTree = \"<group>\"; };\n\t\t5CE2718A195B12E6007FCF44 /* PodFile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PodFile; path = ../PodFile; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };\n\t\t5CE2718C195B1412007FCF44 /* GONMarkup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkup.h; path = ../Classes/GONMarkup.h; sourceTree = \"<group>\"; };\n\t\t5CE2718D195B1412007FCF44 /* GONMarkup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkup.m; path = ../Classes/GONMarkup.m; sourceTree = \"<group>\"; };\n\t\t5CE2718E195B1412007FCF44 /* GONMarkupColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupColor.h; path = ../Classes/GONMarkupColor.h; sourceTree = \"<group>\"; };\n\t\t5CE2718F195B1412007FCF44 /* GONMarkupColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupColor.m; path = ../Classes/GONMarkupColor.m; sourceTree = \"<group>\"; };\n\t\t5CE27190195B1412007FCF44 /* GONMarkupParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupParser.h; path = ../Classes/GONMarkupParser.h; sourceTree = \"<group>\"; };\n\t\t5CE27191195B1412007FCF44 /* GONMarkupParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupParser.m; path = ../Classes/GONMarkupParser.m; sourceTree = \"<group>\"; };\n\t\t5CE27192195B1412007FCF44 /* GONMarkupFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GONMarkupFont.h; path = ../Classes/GONMarkupFont.h; sourceTree = \"<group>\"; };\n\t\t5CE27193195B1412007FCF44 /* GONMarkupFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GONMarkupFont.m; path = ../Classes/GONMarkupFont.m; sourceTree = \"<group>\"; };\n\t\t8E6D2CD1AD599D4565EAA3ED /* libPods-defaults-GONMarkupParserSample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-defaults-GONMarkupParserSample.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA11B08D3B67C671A7C1F41EB /* Pods-defaults-GONMarkupParserSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-defaults-GONMarkupParserSample.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-defaults-GONMarkupParserSample/Pods-defaults-GONMarkupParserSample.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tCB19407DB2362C93C6FF1BC5 /* Pods-defaults-GONMarkupParserSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-defaults-GONMarkupParserSample.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-defaults-GONMarkupParserSample/Pods-defaults-GONMarkupParserSample.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t5CE2714A195B11E0007FCF44 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5CD617E919828B2E0001C3D9 /* CoreText.framework in Frameworks */,\n\t\t\t\t5CE27153195B11E0007FCF44 /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t5CE27155195B11E0007FCF44 /* UIKit.framework in Frameworks */,\n\t\t\t\t5CE27151195B11E0007FCF44 /* Foundation.framework in Frameworks */,\n\t\t\t\t401E32021B281142C6BABB70 /* libPods-defaults-GONMarkupParserSample.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5CE2716B195B11E0007FCF44 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5CE27170195B11E0007FCF44 /* XCTest.framework in Frameworks */,\n\t\t\t\t5CE27172195B11E0007FCF44 /* UIKit.framework in Frameworks */,\n\t\t\t\t5CE27171195B11E0007FCF44 /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t2686016DECE5E515511864F6 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA11B08D3B67C671A7C1F41EB /* Pods-defaults-GONMarkupParserSample.debug.xcconfig */,\n\t\t\t\tCB19407DB2362C93C6FF1BC5 /* Pods-defaults-GONMarkupParserSample.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C404BC91A1C90E0007DCB2C /* DefaultConfiguration */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C404BCA1A1C9115007DCB2C /* DefaultConfigurationViewController.h */,\n\t\t\t\t5C404BCB1A1C9115007DCB2C /* DefaultConfigurationViewController.m */,\n\t\t\t\t5C404BCF1A1C951F007DCB2C /* DefaultConfigurationViewController.xib */,\n\t\t\t);\n\t\t\tname = DefaultConfiguration;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C4241B41C8997F500E5B289 /* Image */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C4241B51C89982000E5B289 /* GONMarkupImage.h */,\n\t\t\t\t5C4241B61C89982000E5B289 /* GONMarkupImage.m */,\n\t\t\t);\n\t\t\tname = Image;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C43EE461A8251510053A667 /* Anchor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C43EE471A8251920053A667 /* GONMarkupAnchor.h */,\n\t\t\t\t5C43EE481A8251920053A667 /* GONMarkupAnchor.m */,\n\t\t\t);\n\t\t\tname = Anchor;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C65F3DF1A111468005A76A3 /* TextSize */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F3E81A1114EC005A76A3 /* GONMarkupInc.h */,\n\t\t\t\t5C65F3E91A1114EC005A76A3 /* GONMarkupInc.m */,\n\t\t\t\t5C65F3EB1A11150A005A76A3 /* GONMarkupDec.h */,\n\t\t\t\t5C65F3EC1A11150A005A76A3 /* GONMarkupDec.m */,\n\t\t\t);\n\t\t\tname = TextSize;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C65F3F41A112F1E005A76A3 /* Root */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F3F51A112F3A005A76A3 /* RootViewController.h */,\n\t\t\t\t5C65F3F61A112F3A005A76A3 /* RootViewController.m */,\n\t\t\t\t5C65F3F71A112F3A005A76A3 /* RootViewController.xib */,\n\t\t\t);\n\t\t\tname = Root;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C65F3FA1A1133E6005A76A3 /* Sample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F3FB1A1133F8005A76A3 /* SampleViewController.h */,\n\t\t\t\t5C65F3FC1A1133F8005A76A3 /* SampleViewController.m */,\n\t\t\t\t5C65F3FD1A1133F8005A76A3 /* SampleViewController.xib */,\n\t\t\t);\n\t\t\tname = Sample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C65F4001A1139B5005A76A3 /* Playground */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F4011A1139CD005A76A3 /* PlaygroundViewController.h */,\n\t\t\t\t5C65F4021A1139CD005A76A3 /* PlaygroundViewController.m */,\n\t\t\t\t5C65F4031A1139CD005A76A3 /* PlaygroundViewController.xib */,\n\t\t\t);\n\t\t\tname = Playground;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C65F4081A11FD87005A76A3 /* ComplexExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F4091A11FDB2005A76A3 /* ComplexExampleViewController.h */,\n\t\t\t\t5C65F40A1A11FDB2005A76A3 /* ComplexExampleViewController.m */,\n\t\t\t\t5C65F40C1A11FFFE005A76A3 /* ComplexExampleViewController.xib */,\n\t\t\t);\n\t\t\tname = ComplexExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5C7C5B221994CA3A003BE47A /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C7C5B271994CB55003BE47A /* GONMarkupParserUtils.h */,\n\t\t\t\t5C7C5B281994CB55003BE47A /* GONMarkupParserUtils.m */,\n\t\t\t);\n\t\t\tname = Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C581195B19C800590186 /* Result */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C57E195B19C400590186 /* ResultViewController.h */,\n\t\t\t\t5CB1C57F195B19C400590186 /* ResultViewController.m */,\n\t\t\t\t5C65F4061A1153A2005A76A3 /* ResultViewController.xib */,\n\t\t\t);\n\t\t\tname = Result;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C583195B1A3100590186 /* Color */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2718E195B1412007FCF44 /* GONMarkupColor.h */,\n\t\t\t\t5CE2718F195B1412007FCF44 /* GONMarkupColor.m */,\n\t\t\t\t5CB1C588195B1EE600590186 /* GONMarkupNamedColor.h */,\n\t\t\t\t5CB1C589195B1EE600590186 /* GONMarkupNamedColor.m */,\n\t\t\t);\n\t\t\tname = Color;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C584195B1A3500590186 /* Font */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE27192195B1412007FCF44 /* GONMarkupFont.h */,\n\t\t\t\t5CE27193195B1412007FCF44 /* GONMarkupFont.m */,\n\t\t\t\t5CB1C59E195B2B7700590186 /* GONMarkupNamedFont.h */,\n\t\t\t\t5CB1C59F195B2B7700590186 /* GONMarkupNamedFont.m */,\n\t\t\t);\n\t\t\tname = Font;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C58B195B24DB00590186 /* Block */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C58C195B24F200590186 /* GONMarkupBlock.h */,\n\t\t\t\t5CB1C58D195B24F200590186 /* GONMarkupBlock.m */,\n\t\t\t);\n\t\t\tname = Block;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C599195B25A400590186 /* Special */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C59A195B25E800590186 /* GONMarkupReset.h */,\n\t\t\t\t5CB1C59B195B25E800590186 /* GONMarkupReset.m */,\n\t\t\t\t5CB1C5B7195B55BE00590186 /* GONMarkupLineBreak.h */,\n\t\t\t\t5CB1C5B8195B55BE00590186 /* GONMarkupLineBreak.m */,\n\t\t\t\t5C1D1C2C19920D7100F7B642 /* GONMarkupParagraph.h */,\n\t\t\t\t5C1D1C2D19920D7100F7B642 /* GONMarkupParagraph.m */,\n\t\t\t);\n\t\t\tname = Special;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C5A6195B333B00590186 /* Private */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C5A2195B333700590186 /* GONMarkup+Private.h */,\n\t\t\t\t5CB1C5A3195B333700590186 /* GONMarkup+Private.m */,\n\t\t\t);\n\t\t\tname = Private;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB1C5AA195B4F8900590186 /* List */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C5AB195B4FA000590186 /* GONMarkupList.h */,\n\t\t\t\t5CB1C5AC195B4FA000590186 /* GONMarkupList.m */,\n\t\t\t\t5CB1C5B3195B4FB600590186 /* GONMarkupListItem.h */,\n\t\t\t\t5CB1C5B4195B4FB600590186 /* GONMarkupListItem.m */,\n\t\t\t);\n\t\t\tname = List;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CB3106919BE023300B06D0D /* Categories */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C1BA2E419BF45BD00E3D67C /* GONMarkupParser_Categories.h */,\n\t\t\t\t5C2E11E21B8A146D0065D29C /* UIButton+GONMarkupParser.h */,\n\t\t\t\t5C2E11E31B8A146D0065D29C /* UIButton+GONMarkupParser.m */,\n\t\t\t\t5CB3106D19BE026C00B06D0D /* UILabel+GONMarkupParser.h */,\n\t\t\t\t5CB3106E19BE026C00B06D0D /* UILabel+GONMarkupParser.m */,\n\t\t\t\t5CB3107019BE027A00B06D0D /* UITextField+GONMarkupParser.h */,\n\t\t\t\t5CB3107119BE027A00B06D0D /* UITextField+GONMarkupParser.m */,\n\t\t\t\t5C43EE4F1A8267D60053A667 /* UITextView+GONMarkupParser.h */,\n\t\t\t\t5C43EE501A8267D60053A667 /* UITextView+GONMarkupParser.m */,\n\t\t\t);\n\t\t\tname = Categories;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CC284B41979746D0009D443 /* Simple */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CC284B5197974870009D443 /* GONMarkupSimple.h */,\n\t\t\t\t5CC284B6197974870009D443 /* GONMarkupSimple.m */,\n\t\t\t);\n\t\t\tname = Simple;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CC43CD2197E613800E46A03 /* Alignment */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CC43CD3197E616600E46A03 /* GONMarkupAlignment.h */,\n\t\t\t\t5CC43CD4197E616600E46A03 /* GONMarkupAlignment.m */,\n\t\t\t);\n\t\t\tname = Alignment;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CD617E419828AF50001C3D9 /* TextStyle */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C44A9CF19D0690A00CF6957 /* GONMarkupFontTraits.h */,\n\t\t\t\t5C44A9D019D0690A00CF6957 /* GONMarkupFontTraits.m */,\n\t\t\t\t5CE1493B19CC2B6900B73518 /* GONMarkupBold.h */,\n\t\t\t\t5CE1493C19CC2B6900B73518 /* GONMarkupBold.m */,\n\t\t\t\t5CE1493619CC253600B73518 /* GONMarkupItalic.h */,\n\t\t\t\t5CE1493919CC2B6300B73518 /* GONMarkupItalic.m */,\n\t\t\t\t5C396DD01A80D80800AC8E45 /* GONMarkupLineStyle.h */,\n\t\t\t\t5C396DD11A80D80800AC8E45 /* GONMarkupLineStyle.m */,\n\t\t\t\t5CD617E519828B1C0001C3D9 /* GONMarkupTextStyle.h */,\n\t\t\t\t5CD617E619828B1C0001C3D9 /* GONMarkupTextStyle.m */,\n\t\t\t\t5C0790A61ED74D0B0011FF0E /* GONMarkupStrong.h */,\n\t\t\t\t5C0790A71ED74D0B0011FF0E /* GONMarkupStrong.m */,\n\t\t\t);\n\t\t\tname = TextStyle;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27144195B11E0007FCF44 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C2E11E51B8A175F0065D29C /* CHANGELOG.md */,\n\t\t\t\t5CBDC0A0195C334D007279A0 /* README.md */,\n\t\t\t\t5CBDC0A1195C3356007279A0 /* GONMarkupParser.podspec */,\n\t\t\t\t5CE27185195B1226007FCF44 /* Lib */,\n\t\t\t\t5CE27156195B11E0007FCF44 /* GONMarkupParserSample */,\n\t\t\t\t5CE27175195B11E0007FCF44 /* GONMarkupParserSampleTests */,\n\t\t\t\t5CE2714F195B11E0007FCF44 /* Frameworks */,\n\t\t\t\t5CE2714E195B11E0007FCF44 /* Products */,\n\t\t\t\t2686016DECE5E515511864F6 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE2714E195B11E0007FCF44 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2714D195B11E0007FCF44 /* GONMarkupParserSample.app */,\n\t\t\t\t5CE2716E195B11E0007FCF44 /* GONMarkupParserSampleTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE2714F195B11E0007FCF44 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CD617E819828B2E0001C3D9 /* CoreText.framework */,\n\t\t\t\t5CE27150195B11E0007FCF44 /* Foundation.framework */,\n\t\t\t\t5CE27152195B11E0007FCF44 /* CoreGraphics.framework */,\n\t\t\t\t5CE27154195B11E0007FCF44 /* UIKit.framework */,\n\t\t\t\t5CE2716F195B11E0007FCF44 /* XCTest.framework */,\n\t\t\t\t8E6D2CD1AD599D4565EAA3ED /* libPods-defaults-GONMarkupParserSample.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27156195B11E0007FCF44 /* GONMarkupParserSample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE27186195B123A007FCF44 /* Classes */,\n\t\t\t\t5CE27187195B1241007FCF44 /* Resources */,\n\t\t\t\t5CE27157195B11E0007FCF44 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = GONMarkupParserSample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27157195B11E0007FCF44 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE27158195B11E0007FCF44 /* GONMarkupParserSample-Info.plist */,\n\t\t\t\t5CE27159195B11E0007FCF44 /* InfoPlist.strings */,\n\t\t\t\t5CE2715C195B11E0007FCF44 /* main.m */,\n\t\t\t\t5CE2715E195B11E0007FCF44 /* GONMarkupParserSample-Prefix.pch */,\n\t\t\t\t5C65F3F21A112EBE005A76A3 /* MainWindow.xib */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27175195B11E0007FCF44 /* GONMarkupParserSampleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2717B195B11E0007FCF44 /* GONMarkupParserSampleTests.m */,\n\t\t\t\t5CE27176195B11E0007FCF44 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = GONMarkupParserSampleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27176195B11E0007FCF44 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE27177195B11E0007FCF44 /* GONMarkupParserSampleTests-Info.plist */,\n\t\t\t\t5CE27178195B11E0007FCF44 /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27185195B1226007FCF44 /* Lib */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE1493E19CC2BBC00B73518 /* GONMarkupParser_All.h */,\n\t\t\t\t5CE27190195B1412007FCF44 /* GONMarkupParser.h */,\n\t\t\t\t5CE27191195B1412007FCF44 /* GONMarkupParser.m */,\n\t\t\t\t5CD617E119828AA90001C3D9 /* GONMarkupParserManager.h */,\n\t\t\t\t5CD617E219828AA90001C3D9 /* GONMarkupParserManager.m */,\n\t\t\t\t5CB3106919BE023300B06D0D /* Categories */,\n\t\t\t\t5CE271A1195B1437007FCF44 /* DefaultMarkup */,\n\t\t\t\t5CE2719C195B141A007FCF44 /* Markup */,\n\t\t\t\t5C7C5B221994CA3A003BE47A /* Utils */,\n\t\t\t);\n\t\t\tname = Lib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27186195B123A007FCF44 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2715F195B11E0007FCF44 /* AppDelegate.h */,\n\t\t\t\t5CE27160195B11E0007FCF44 /* AppDelegate.m */,\n\t\t\t\t5CE27188195B126A007FCF44 /* ViewControllers */,\n\t\t\t);\n\t\t\tname = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27187195B1241007FCF44 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C4241B81C89995A00E5B289 /* lama.png */,\n\t\t\t\t5CE27168195B11E0007FCF44 /* Images.xcassets */,\n\t\t\t\t5CE2718A195B12E6007FCF44 /* PodFile */,\n\t\t\t\t5C65F3F01A112231005A76A3 /* samples.plist */,\n\t\t\t\t5CB1C5A7195B3B7400590186 /* ComplexExample */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27188195B126A007FCF44 /* ViewControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5C65F4081A11FD87005A76A3 /* ComplexExample */,\n\t\t\t\t5C404BC91A1C90E0007DCB2C /* DefaultConfiguration */,\n\t\t\t\t5C65F4001A1139B5005A76A3 /* Playground */,\n\t\t\t\t5CB1C581195B19C800590186 /* Result */,\n\t\t\t\t5C65F3F41A112F1E005A76A3 /* Root */,\n\t\t\t\t5C65F3FA1A1133E6005A76A3 /* Sample */,\n\t\t\t);\n\t\t\tname = ViewControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE2719C195B141A007FCF44 /* Markup */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2718C195B1412007FCF44 /* GONMarkup.h */,\n\t\t\t\t5CE2718D195B1412007FCF44 /* GONMarkup.m */,\n\t\t\t\t5CB1C5A6195B333B00590186 /* Private */,\n\t\t\t);\n\t\t\tname = Markup;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE271A1195B1437007FCF44 /* DefaultMarkup */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t5CB1C582195B1A0100590186 /* GONMarkupDefaultMarkups.h */,\n\t\t\t\t5CC43CD2197E613800E46A03 /* Alignment */,\n\t\t\t\t5C43EE461A8251510053A667 /* Anchor */,\n\t\t\t\t5CB1C58B195B24DB00590186 /* Block */,\n\t\t\t\t5CB1C583195B1A3100590186 /* Color */,\n\t\t\t\t5CB1C584195B1A3500590186 /* Font */,\n\t\t\t\t5CB1C5AA195B4F8900590186 /* List */,\n\t\t\t\t5C4241B41C8997F500E5B289 /* Image */,\n\t\t\t\t5CC284B41979746D0009D443 /* Simple */,\n\t\t\t\t5CB1C599195B25A400590186 /* Special */,\n\t\t\t\t5C65F3DF1A111468005A76A3 /* TextSize */,\n\t\t\t\t5CD617E419828AF50001C3D9 /* TextStyle */,\n\t\t\t);\n\t\t\tname = DefaultMarkup;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t5CE2714C195B11E0007FCF44 /* GONMarkupParserSample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5CE2717F195B11E0007FCF44 /* Build configuration list for PBXNativeTarget \"GONMarkupParserSample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF5CFB22B9E5CC0864471E289 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t5CE27149195B11E0007FCF44 /* Sources */,\n\t\t\t\t5CE2714A195B11E0007FCF44 /* Frameworks */,\n\t\t\t\t5CE2714B195B11E0007FCF44 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = GONMarkupParserSample;\n\t\t\tproductName = GONMarkupParserSample;\n\t\t\tproductReference = 5CE2714D195B11E0007FCF44 /* GONMarkupParserSample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t5CE2716D195B11E0007FCF44 /* GONMarkupParserSampleTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 5CE27182195B11E0007FCF44 /* Build configuration list for PBXNativeTarget \"GONMarkupParserSampleTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t5CE2716A195B11E0007FCF44 /* Sources */,\n\t\t\t\t5CE2716B195B11E0007FCF44 /* Frameworks */,\n\t\t\t\t5CE2716C195B11E0007FCF44 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t5CE27174195B11E0007FCF44 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = GONMarkupParserSampleTests;\n\t\t\tproductName = GONMarkupParserSampleTests;\n\t\t\tproductReference = 5CE2716E195B11E0007FCF44 /* GONMarkupParserSampleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t5CE27145195B11E0007FCF44 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1150;\n\t\t\t\tORGANIZATIONNAME = \"Nicolas Goutaland\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t5CE2716D195B11E0007FCF44 = {\n\t\t\t\t\t\tTestTargetID = 5CE2714C195B11E0007FCF44;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 5CE27148195B11E0007FCF44 /* Build configuration list for PBXProject \"GONMarkupParserSample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 5CE27144195B11E0007FCF44;\n\t\t\tproductRefGroup = 5CE2714E195B11E0007FCF44 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t5CE2714C195B11E0007FCF44 /* GONMarkupParserSample */,\n\t\t\t\t5CE2716D195B11E0007FCF44 /* GONMarkupParserSampleTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t5CE2714B195B11E0007FCF44 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5CE27169195B11E0007FCF44 /* Images.xcassets in Resources */,\n\t\t\t\t5C65F4051A1139CD005A76A3 /* PlaygroundViewController.xib in Resources */,\n\t\t\t\t5C4241B91C89995A00E5B289 /* lama.png in Resources */,\n\t\t\t\t5CB1C5A8195B3B7400590186 /* ComplexExample in Resources */,\n\t\t\t\t5C65F3FF1A1133F8005A76A3 /* SampleViewController.xib in Resources */,\n\t\t\t\t5C65F3F31A112EBE005A76A3 /* MainWindow.xib in Resources */,\n\t\t\t\t5CE2715B195B11E0007FCF44 /* InfoPlist.strings in Resources */,\n\t\t\t\t5C65F3F91A112F3A005A76A3 /* RootViewController.xib in Resources */,\n\t\t\t\t5C404BD01A1C951F007DCB2C /* DefaultConfigurationViewController.xib in Resources */,\n\t\t\t\t5C65F4071A1153A2005A76A3 /* ResultViewController.xib in Resources */,\n\t\t\t\t5C65F40D1A11FFFE005A76A3 /* ComplexExampleViewController.xib in Resources */,\n\t\t\t\t5C65F3F11A112231005A76A3 /* samples.plist in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5CE2716C195B11E0007FCF44 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5CE2717A195B11E0007FCF44 /* InfoPlist.strings in Resources */,\n\t\t\t\t5CB1C5A9195B3B7400590186 /* ComplexExample in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\tF5CFB22B9E5CC0864471E289 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-defaults-GONMarkupParserSample-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t5CE27149195B11E0007FCF44 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5CB1C5B9195B55BE00590186 /* GONMarkupLineBreak.m in Sources */,\n\t\t\t\t5CE2719A195B1412007FCF44 /* GONMarkupFont.m in Sources */,\n\t\t\t\t5CE1493D19CC2B6900B73518 /* GONMarkupBold.m in Sources */,\n\t\t\t\t5CE27198195B1412007FCF44 /* GONMarkupParser.m in Sources */,\n\t\t\t\t5C2E11E41B8A146D0065D29C /* UIButton+GONMarkupParser.m in Sources */,\n\t\t\t\t5C396DD21A80D80800AC8E45 /* GONMarkupLineStyle.m in Sources */,\n\t\t\t\t5CB1C5A0195B2B7700590186 /* GONMarkupNamedFont.m in Sources */,\n\t\t\t\t5CB1C58E195B24F200590186 /* GONMarkupBlock.m in Sources */,\n\t\t\t\t5C65F4041A1139CD005A76A3 /* PlaygroundViewController.m in Sources */,\n\t\t\t\t5CB1C5B5195B4FB600590186 /* GONMarkupListItem.m in Sources */,\n\t\t\t\t5C1D1C2E19920D7100F7B642 /* GONMarkupParagraph.m in Sources */,\n\t\t\t\t5CC284B7197974870009D443 /* GONMarkupSimple.m in Sources */,\n\t\t\t\t5CD617E719828B1C0001C3D9 /* GONMarkupTextStyle.m in Sources */,\n\t\t\t\t5C404BCC1A1C9115007DCB2C /* DefaultConfigurationViewController.m in Sources */,\n\t\t\t\t5C65F40B1A11FDB2005A76A3 /* ComplexExampleViewController.m in Sources */,\n\t\t\t\t5C43EE491A8251920053A667 /* GONMarkupAnchor.m in Sources */,\n\t\t\t\t5C44A9D119D0690A00CF6957 /* GONMarkupFontTraits.m in Sources */,\n\t\t\t\t5CB3107219BE027A00B06D0D /* UITextField+GONMarkupParser.m in Sources */,\n\t\t\t\t5C7C5B291994CB55003BE47A /* GONMarkupParserUtils.m in Sources */,\n\t\t\t\t5CE1493A19CC2B6300B73518 /* GONMarkupItalic.m in Sources */,\n\t\t\t\t5CB3106F19BE026C00B06D0D /* UILabel+GONMarkupParser.m in Sources */,\n\t\t\t\t5CE27196195B1412007FCF44 /* GONMarkupColor.m in Sources */,\n\t\t\t\t5C65F3F81A112F3A005A76A3 /* RootViewController.m in Sources */,\n\t\t\t\t5CB1C59C195B25E800590186 /* GONMarkupReset.m in Sources */,\n\t\t\t\t5C65F3EA1A1114EC005A76A3 /* GONMarkupInc.m in Sources */,\n\t\t\t\t5CB1C58A195B1EE600590186 /* GONMarkupNamedColor.m in Sources */,\n\t\t\t\t5CE27161195B11E0007FCF44 /* AppDelegate.m in Sources */,\n\t\t\t\t5CB1C5AD195B4FA000590186 /* GONMarkupList.m in Sources */,\n\t\t\t\t5CD617E319828AA90001C3D9 /* GONMarkupParserManager.m in Sources */,\n\t\t\t\t5C65F3ED1A11150A005A76A3 /* GONMarkupDec.m in Sources */,\n\t\t\t\t5C43EE511A8267D60053A667 /* UITextView+GONMarkupParser.m in Sources */,\n\t\t\t\t5C0790A81ED74D0B0011FF0E /* GONMarkupStrong.m in Sources */,\n\t\t\t\t5CE2715D195B11E0007FCF44 /* main.m in Sources */,\n\t\t\t\t5CB1C5A4195B333700590186 /* GONMarkup+Private.m in Sources */,\n\t\t\t\t5CE27194195B1412007FCF44 /* GONMarkup.m in Sources */,\n\t\t\t\t5CC43CD5197E616600E46A03 /* GONMarkupAlignment.m in Sources */,\n\t\t\t\t5CB1C580195B19C400590186 /* ResultViewController.m in Sources */,\n\t\t\t\t5C65F3FE1A1133F8005A76A3 /* SampleViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t5CE2716A195B11E0007FCF44 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t5C43EE4A1A8251920053A667 /* GONMarkupAnchor.m in Sources */,\n\t\t\t\t5CB1C590195B250A00590186 /* GONMarkupNamedColor.m in Sources */,\n\t\t\t\t5CB1C5AE195B4FA000590186 /* GONMarkupList.m in Sources */,\n\t\t\t\t5C396DD31A80D80800AC8E45 /* GONMarkupLineStyle.m in Sources */,\n\t\t\t\t5CE2717C195B11E0007FCF44 /* GONMarkupParserSampleTests.m in Sources */,\n\t\t\t\t5C43EE521A8267D60053A667 /* UITextView+GONMarkupParser.m in Sources */,\n\t\t\t\t5CB1C591195B250A00590186 /* AppDelegate.m in Sources */,\n\t\t\t\t5CB1C5A1195B2B7700590186 /* GONMarkupNamedFont.m in Sources */,\n\t\t\t\t5C7C5B2A1994CB55003BE47A /* GONMarkupParserUtils.m in Sources */,\n\t\t\t\t5CB1C593195B250A00590186 /* ResultViewController.m in Sources */,\n\t\t\t\t5CB1C5B6195B4FB600590186 /* GONMarkupListItem.m in Sources */,\n\t\t\t\t5CB1C5A5195B333700590186 /* GONMarkup+Private.m in Sources */,\n\t\t\t\t5CE27195195B1412007FCF44 /* GONMarkup.m in Sources */,\n\t\t\t\t5CB1C59D195B25E800590186 /* GONMarkupReset.m in Sources */,\n\t\t\t\t5CE2719B195B1412007FCF44 /* GONMarkupFont.m in Sources */,\n\t\t\t\t5CE27199195B1412007FCF44 /* GONMarkupParser.m in Sources */,\n\t\t\t\t5CB1C5BA195B55BE00590186 /* GONMarkupLineBreak.m in Sources */,\n\t\t\t\t5CE27197195B1412007FCF44 /* GONMarkupColor.m in Sources */,\n\t\t\t\t5CB1C594195B250A00590186 /* main.m in Sources */,\n\t\t\t\t5CB1C58F195B250A00590186 /* GONMarkupBlock.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t5CE27174195B11E0007FCF44 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 5CE2714C195B11E0007FCF44 /* GONMarkupParserSample */;\n\t\t\ttargetProxy = 5CE27173195B11E0007FCF44 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t5CE27159195B11E0007FCF44 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE2715A195B11E0007FCF44 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t5CE27178195B11E0007FCF44 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t5CE27179195B11E0007FCF44 /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t5CE2717D195B11E0007FCF44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5CE2717E195B11E0007FCF44 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t5CE27180195B11E0007FCF44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A11B08D3B67C671A7C1F41EB /* Pods-defaults-GONMarkupParserSample.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GONMarkupParserSample/GONMarkupParserSample-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"GONMarkupParserSample/GONMarkupParserSample-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.nicolasgoutaland.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5CE27181195B11E0007FCF44 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = CB19407DB2362C93C6FF1BC5 /* Pods-defaults-GONMarkupParserSample.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GONMarkupParserSample/GONMarkupParserSample-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"GONMarkupParserSample/GONMarkupParserSample-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.nicolasgoutaland.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t5CE27183195B11E0007FCF44 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/GONMarkupParserSample.app/GONMarkupParserSample\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GONMarkupParserSample/GONMarkupParserSample-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = \"GONMarkupParserSampleTests/GONMarkupParserSampleTests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.nicolasgoutaland.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t5CE27184195B11E0007FCF44 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/GONMarkupParserSample.app/GONMarkupParserSample\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GONMarkupParserSample/GONMarkupParserSample-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"GONMarkupParserSampleTests/GONMarkupParserSampleTests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.nicolasgoutaland.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t5CE27148195B11E0007FCF44 /* Build configuration list for PBXProject \"GONMarkupParserSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5CE2717D195B11E0007FCF44 /* Debug */,\n\t\t\t\t5CE2717E195B11E0007FCF44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t5CE2717F195B11E0007FCF44 /* Build configuration list for PBXNativeTarget \"GONMarkupParserSample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5CE27180195B11E0007FCF44 /* Debug */,\n\t\t\t\t5CE27181195B11E0007FCF44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t5CE27182195B11E0007FCF44 /* Build configuration list for PBXNativeTarget \"GONMarkupParserSampleTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t5CE27183195B11E0007FCF44 /* Debug */,\n\t\t\t\t5CE27184195B11E0007FCF44 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 5CE27145195B11E0007FCF44 /* Project object */;\n}\n"
  },
  {
    "path": "Example/GONMarkupParserSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:GONMarkupParserSample.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/GONMarkupParserSample.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version='1.0' encoding='UTF-8'?><Workspace version='1.0'><FileRef location='group:GONMarkupParserSample.xcodeproj'/><FileRef location='group:Pods/Pods.xcodeproj'/></Workspace>"
  },
  {
    "path": "Example/GONMarkupParserSample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/GONMarkupParserSampleTests/GONMarkupParserSampleTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/GONMarkupParserSampleTests/GONMarkupParserSampleTests.m",
    "content": "//\n//  GONMarkupParserSampleTests.m\n//  GONMarkupParserSampleTests\n//\n//  Created by Nicolas Goutaland on 25/06/14.\n//  Copyright (c) 2014 Nicolas Goutaland. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface GONMarkupParserSampleTests : XCTestCase\n\n@end\n\n@implementation GONMarkupParserSampleTests\n\n- (void)setUp\n{\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample\n{\n    XCTFail(@\"No implementation for \\\"%s\\\"\", __PRETTY_FUNCTION__);\n}\n\n@end\n"
  },
  {
    "path": "Example/GONMarkupParserSampleTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Example/PodFile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\nplatform :ios, '7.0'\n\nabstract_target 'defaults' do\n\tpod 'NSString+Color'\n\tpod 'LazyProperty'\n\n    target 'GONMarkupParserSample'\nend\n"
  },
  {
    "path": "GONMarkupParser.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"GONMarkupParser\"\n  s.version      = \"0.8.2\"\n  s.summary      = \"NSAttributedString generation from NSString using XML, that can be easily extended.\"\n  s.platform     = :ios, \"7.0\"\n  s.description  = <<-DESC\n\t\t\t\t\t\tCreating rich text under iOS can be cumbersome, needing a lot of code.\n\t\t\t\t\t\tThe main goal of GONMarkupParser is to provide an easy to use syntax, near XML/HTML, but more flexible.\n\t\t\t\t\t\tSome others projects exists, allowing you to build NSAttributedString from HTML, but my main goal here was to focus on text semantic. In fact, the parser will detect registered markup and apply style on text.\n\t\t\t\t\t\tThe purpose of this was to be able to generate different outputs from the same input string, without editing its content, but editing the markups style.\n\n\t\t\t\t\t\tGONMarkupParser is not an out of the box solution to parse HTML files.\n\t\t\t\t\t\tARC only\n\t\t\t\t\tDESC\n\n  s.homepage     = \"https://github.com/nicolasgoutaland/GONMarkupParser\"\n  s.license      = { :type => 'MIT', :file => 'LICENSE' }\n  s.author       = { \"nicolasgoutaland\" => \"nicolas.goutaland@gmail.com\" }\n  s.source       = { :git => \"https://github.com/nicolasgoutaland/GONMarkupParser.git\", :tag => \"#{s.version}\" }\n  s.source_files  = 'Classes', 'Classes/**/*.{h,m}'\n  s.exclude_files = 'Classes/Exclude'\n  s.requires_arc = true\n  s.dependency  \"NSString+Color\"\n  s.framework    = 'CoreText'\nend\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 nicolasgoutaland\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "# GONMarkupParser\nEasily build NSAttributedString from XML/HTML like strings.\n\n## Demo\n![ScreenShot](https://github.com/nicolasgoutaland/GONMarkupParser/blob/master/Assets/sample.gif)\n\n## TL;DR;\n```\n    NSString *inputText = @\"Simple input text, using a preconfigured parser.\\n<color value=\\\"red\\\">This text will be displayed in red</>.\\n<font size=\"8\">This one will be displayed in small</>.\\nNow a list:\\n<ul><li>First item</><li>Second item</><li><color value=\"blue\">Third blue item</></><li><b><color value=\"green\">Fourth bold green item<//>\";\n\n    // No custom configuration, use default tags only\n\n    // Affect text to label\n    label.attributedText = [[GONMarkupParserManager sharedParser] attributedStringFromString:inputText                  \n                                                                                       error:nil];\n    // You can also use [label setMarkedUpText:inputText];\n````\n![ScreenShot](https://raw.github.com/nicolasgoutaland/GONMarkupParser/master/Assets/GONMarkupParser-example1.png)\n\nNeed a more complex example  ?\n\n```\n    NSString *inputText = @\"Simple input text, using a preconfigured parser.\\n<red>This text will be displayed in red</>.\\n<small>This one will be displayed in small</>.\\n<pwet>This one is a custom one, to demonstrate how easy it is to declare a new markup.</>\";\n\n    // Set your custom configuration here\n#ifdef DEBUG\n    [GONMarkupParserManager sharedParser].logLevel = GONMarkupParserLogLevelAll; // Fuck yeah, error debugging\n#endif\n    \n    // Set default string configuration\n    [[GONMarkupParserManager sharedParser].defaultConfiguration setObject:[UIFont systemFontOfSize:25.0] forKey:NSFontAttributeName];\n    \n    // Add a custom markup, that will center text when used, and display it in pink.\n    NSMutableParagraphStyle *defaultParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];\n    defaultParagraphStyle.alignment = NSTextAlignmentCenter;\n    [[GONMarkupParserManager sharedParser] addMarkup:[GONMarkupSimple simpleMarkup:@\"pwet\"\n                                                                             style:@{\n                                                                                     NSParagraphStyleAttributeName : defaultParagraphStyle,\n                                                                                     NSForegroundColorAttributeName : [@\"pink\" representedColor] // NSString+Color\n                                                                                     }\n                                                                   mergingStrategy:GONMarkupSimpleMergingStrategyMergeAll]];\n    \n    // Add add font markup, to display small text when encountered\n    [[GONMarkupParserManager sharedParser] addMarkup:[GONMarkupNamedFont namedFontMarkup:[UIFont systemFontOfSize:12.0] forTag:@\"small\"]];\n\n    // Add a convenient tag for red color\n    [[GONMarkupParserManager sharedParser] addMarkup:[GONMarkupNamedColor namedColorMarkup:[UIColor redColor]\n                                                                                    forTag:@\"red\"]];\n\n    // Affect text to label\n    label.attributedText = [[GONMarkupParserManager sharedParser] attributedStringFromString:inputText                  \n                                                                                       error:nil];\n````\n![ScreenShot](https://raw.github.com/nicolasgoutaland/GONMarkupParser/master/Assets/GONMarkupParser-example2.png)\n\n\n\n## Description\nCreating rich text under iOS can be cumbersome, needing a lot of code.<br/>\nThe main goal of GONMarkupParser is to provide an easy to use syntax, near XML/HTML, but more flexible.<br/>\nSome others projects exists, allowing you to build NSAttributedString from HTML, but my main goal here was to focus on text semantic. In fact, the parser will detect registered markups and apply style on text.<br/>\nThe purpose of this was to be able to generate different outputs from the same input string, without editing its content, but editing the markups style.<br/>\n\nGONMarkupParser is **not** an out of the box solution to parse HTML files.\n\n## Installation\n__CocoaPods__:\n    `pod 'GONMarkupParser'`<br/>\n__Manual__: Copy the __Classes__ folder in your project. You will also need to __manually__ install [NSString+Color](https://github.com/nicolasgoutaland/NSString-Color). Seriously, consider using [cocoapods](http://cocoapods.org) instead ;) <br/>\n\nImport wanted headers in your project. .pch is a good place ;)<br/>\n__GONMarkupParser_All.h__ will reference all library headers, whereas __GONMarkupDefaultMarkups.h__ only references default markup classes.\n\n## Usage\n- instantiate a new __GONMarkupParser__ or use the  __+ GONMarkupParserManager sharedParser__ one.\n- configure your parser adding supported tags, default ones, custom ones, etc...\n- parse input string and retrieve result __NSMutableAttributedString__ using __- attributedStringFromString:error:__ method from __GONMarkupParser__\n- you can also set text on __UILabel__ / __UITextField__ / __UITextView__ / __UIButton__ by using [__setMarkedUpText:__](#available-uikit-categories) methods\n\n## How does it work ?\n![ScreenShot](https://raw.github.com/nicolasgoutaland/GONMarkupParser/master/Assets/GONMarkupParser-howdoesitworks.gif)\n\nTo fully understand how style will be applied to string, you have to imagine a [LIFO stack](http://en.wikipedia.org/wiki/LIFO_(computing)) composed of style description.<br/>\nEach time a new markup is found, current style configuration will be saved then stacked. New configuration will be the previous one, updated by current markup configuration.<br/>\nEach time a closing markup is found, current style configuration is popped out, and previous one restored.\n\n## Syntax\nSyntax is pretty easy. It's like XML, but non valid one, to be easier and faster to write.\n- Each markup  should be contained between __<__ and __>__ characters\n - __&lt;strong&gt;__\n- Like XML, closing markup should start with __/__ character. You can omit markup name in closing tag. If closing tag isn't matching currently opened one, an error will be generated, no crash will occur and generated text may not be be as expected\n - __&lt;/strong&gt;__, __</>__\n- You can also close all opened markup by using __<//>__\n\n### Examples\n```\n This is a <strong>valid</strong> string with some <color value=\"red\">red <b>bold text</b></color>.\n This is a <strong>valid</>string with some <color value=\"red\">red <b>bold text</></>.\n This is a <strong>valid</Hakuna> string with some <color value=\"red\">red <b>bold text</mata></ta>. // Will work but generates an error\n This is a <strong>valid</> string with some <color value=\"red\">red <b>bold text<//>.\n```\n\n## Parser\n### Constructor\n__GONMarkupParser__ class provide two class constructors.\n- __+ defaultMarkupParser__ is a parser with all default tags registered (See [Default tags summary](#default-tags) for more information)\n- __+ emptyMarkgiupParser__ is a parser without any registered tags\n\n### Properties\nA parser can have a pre / post processing block, that will be called prior and after parsing. This allows you to perform some string replace before parsing for example. \n\nParsers have two interesting properties :\n- __replaceNewLineCharactersFromInputString__, is intended to strip all newlines characters from input string. Use __br__ markup to add new lines. Default is __NO__.\n- __replaceHTMLCharactersFromOutputString__, is intended to replace all HTML entities contained in string, after parsing. Default is __YES__.\n\n__defaultConfiguration__ will contains default style configuration for generated attributed string. Content should be valid attributes parameters, as you may pass to __- addAttributes:range:__ of __NSMutableAttributedString__ objects. For default text color, you can set __NSForegroundColorAttributeName__ for example.\n\nFor debugging purpose, you can configure __debugLevel__ property.\n\n__assertOnError__ property is also available to generate an assert when an error is encountered.\n\n### Configuration\nA parser must have some registered markups to correctly handling strings.<br/>\nUse __- addMarkup:__, __- addMarkups:__, __- removeMarkups:__ and __- removeAllMarkups__ methods for that purpose.<br/>\n__A markup can be added to only one parser at a time.__\n\n### Registered fonts\nTo simplify fonts uses, you can register then using __- registerFont:forKey:__ method, then referencing them using given key.<br/>\nVery useful with __&lt;font&gt;__ markup, allowing you to directly use code instead of full font name. You can also use codes such as __mainFont__, __titleFont__ to easily update them later throught all your strings.\n\n## GONMarkupParserManager\n### sharedParser\nA shared parser is available, so you don't have to create one and reference it throught all your application.<br/>\nShared parser is configured with all default markups.\n\n### Parsers registration\nYou can register some parser to this class, allowing you to use them from different places in your application.\n\n## Available UIKit Categories\n__UILabel__/__UITextField__/__UITextView__<br/>\n2 methods were added to UILabel, UITextField and UITextView, allowing you to easily update its attributed string using a markedup one.<br/>\n- __- setMarkedUpText:(NSString *)text parser:(GONMarkupParser *)parser__ will use given parser to handle string and generate attributed one.\n- __- setMarkedUpText:(NSString *)text__ will use shared one, aka __[GONMarkupParserManager sharedParser]__\n\nIf no parser default configuration is set for __NSForegroundColorAttributeName__, __NSFontAttributeName__ and NSParagraphStyleAttributeName, components __textColor__, __textAlignment__ and __font__ properties will be used as default.\n\nYou are strongly encouraged to use these methods if you want to use your component style as default parser configuration.\n\n## Anchor support\nAnchor support is supported using __&lt;a href=\"...\"&gt;__ markup.<br/>\nIf __NSAttributedString__ is displayed in a UITextView, you can handle user clicks on it.<br/>\nBe sure your UITextView is __non editable__, __selectable__ and have its __delegate__ set.<br/>\nThen, in your delegate, implements<br/>\n```- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange``` <br/>\nmethod.\n\nColor style won't be applied to links. You have to use __linkTextAttributes__ attribute from your __UITextView__ to set it.\n\n## Default tags\n### Summary\n| Tag        | Class | Parameters           | Effect |\n|:-------------:|-------------| -----|---|\n| **left** | GONMarkupAlignment | none | Force text alignment to left |\n| **right** | GONMarkupAlignment | none |  Force text alignment to right |\n| **center** | GONMarkupAlignment | none | Force text alignment to center |\n| **justified** | GONMarkupAlignment | none | Force text alignment to justified |\n| **natural** | GONMarkupAlignment | none | Force text alignment to natural  |\n| **color**      | GONMarkupColor | **value** | Set text color. For supported __value__ syntaxes, check [NSString+Color](https://github.com/nicolasgoutaland/NSString-Color) [__representedColor__](https://github.com/nicolasgoutaland/NSString-Color#example) method. |\n| **N/A**      | GONMarkupNamedColor | none | Set text color. Can be used to reset text color to parser default one if specified color is nil |\n| **font**      | GONMarkupFont | **size**, **name**, **color**  | Set text font, text size or both. Can be used also to set text color |\n| **N/A**      | GONMarkupNamedFont | none  | Set text font and size. Can be used to reset font to parser default one if specified font is nil |\n| **br**      | GONMarkupLineBreak | none | Add a new line |\n| **ul**      | GONMarkupList | none  | Create an unordered list |\n| **ol**      | GONMarkupList | none | Create an ordered list | \n| **li**      | GONMarkupListItem | none | Add a list item to current list |\n| **p**      | GONMarkupParagraph | none | Specify a paragraph. A paragraph will automatically insert a new blanck line after it |\n| **inc**      | GONMarkupInc | **value** | Increment text font size. If __value__ is missing, font will be increased by one point  |\n| **dec**      | GONMarkupDec | **value** | Decrement text font size. If __value__ is missing, font will be decreased by one point  |\n| **reset**      | GONMarkupReset | **all** | All enclosed text will use default parser configuration |\n| **N/A**      | GONMarkupSimple | none | Apply a configuration to enclosed text |\n| **b**      | GONMarkupBold | none | Set text to bold. Allows user to define an override block overrideBlock to provide another font. Useful to provide a medium font instead of bold one for example.|\n| **strong**      | GONMarkupStrong | none | Set text to strong (bold). Allows user to define an override block overrideBlock to provide another font. Useful to provide a medium font instead of bold one for example.|\n| **i**      | GONMarkupItalic | none | Set text to italic. Allows user to define an override block overrideBlock to provide another font. Useful to provide a medium italic font instead of bold italic one for example.|\n| **sup**      | GONMarkupTextStyle | none | Set text to superscript |\n| **sub**      | GONMarkupTextStyle | none | Set text to subscript |\n| **u**      | GONMarkupLineStyle | __words__ to apply style only on words (true, **false**), __pattern__ (**solid**, dot, dash, dashdot, dashdotdot), __style__ (**single**, thick, double) and __color__ (Check [NSString+Color](https://github.com/nicolasgoutaland/NSString-Color) [__representedColor__](https://github.com/nicolasgoutaland/NSString-Color#example) method)| Underline text |\n| **strike**      | GONMarkupLineStyle |  __words__ to apply style only on words (true, **false**), __pattern__ (**solid**, dot, dash, dashdot, dashdotdot), __style__ (**single**, thick, double) and __color__ (Check [NSString+Color](https://github.com/nicolasgoutaland/NSString-Color) [__representedColor__](https://github.com/nicolasgoutaland/NSString-Color#example) method)|strikethrough text |\n| **a**      | GONMarkupAnchor | __href__ link value | Support an anchor link. See [Anchor support](#anchor-support) for more information. |\n| **N/A**   | GONMarkupBlock | none | When encountered executes associated block |\n\n### Reset\nReset is a special tag, allowing you to protect some parts of a string. You can also force markup to ignore default parser configuration by setting __all__ attribute.\n\n![ScreenShot](https://raw.github.com/nicolasgoutaland/GONMarkupParser/master/Assets/GONMarkupParser-reset.gif)\n\n## How to add new markup\nYou can add new markup in your application, to add new style, or to just add some semantic to your text, allowing you to update rendering, without changing input string.<br/>\nThere is 3 ways to do it.\n\n### Adding a new simple marker\nThe simpler way to add a new markup in your application is to use one of theses 3 following classes :\n- __GONMarkupNamedColor__, allows you to add a markup that updates text color\n- __GONMarkupNamedFont__, allows you to add a markup that updates text font\n- __GONMarkupSimple__, allows you to add a markup that updates all text attributes. Dictionary is intended to be the same as you may pass to configure an __NSMutableAttributedString__ using -setAttributes:range: method.\n\n#### Example\n```\n    // Retrieve shared parser\n    GONMarkupParser *parser = [GONMarkupParserManager sharedParser];\n    \n    // Add a named color markup\n    [parser addMarkup:[GONMarkupNamedColor namedColorMarkup:[UIColor redColor]\n               forTag:@\"red\"]];\n\n    // Add a named font markup\n    [parser addMarkup:[GONMarkupNamedFont namedFontMarkup:[UIFont systemFontOfSize:12.0] \n               forTag:@\"small\"]];\n\n    // Add a custom markup, that will center text when used, and display it in pink.\n    NSMutableParagraphStyle *defaultParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];\n    defaultParagraphStyle.alignment = NSTextAlignmentCenter;\n    [parser addMarkup:[GONMarkupSimple simpleMarkup:@\"pwet\"\n                                              style:@{\n                                                        NSParagraphStyleAttributeName : defaultParagraphStyle,\n                                                        NSForegroundColorAttributeName : [@\"pink\" representedColor] // NSString+Color\n                                                     }\n                                    mergingStrategy:GONMarkupSimpleMergingStrategyMergeAll]];\n````\n\n### Adding a new block based marker\nFor more complexe markup, you can add __GONMarkupBlock__ instances.<br />\n\nIt have blocks 5 parameters :\n- __openingMarkupBlock__, called when markup opening is found. Used to pushed your custom configuration to stack\n- __closingMarkupBlock__, called once markup is closed.\n- __updatedContentStringBlock__, called right after __closingMarkupBlock__, allowing you to override returned string\n- __prefixStringForContextBlock__, called right after __openingMarkupBlock__, allowing you to return a prefix\n- __suffixStringForContextBlock__, called right after __openingMarkupBlock__, allowing you to return a suffix\n\n#### Example\n```\n    // Retrieve shared parser\n    GONMarkupParser *parser = [GONMarkupParserManager sharedParser];\n    \n    // Custom markup, based on block\n    GONMarkupBlock *markupBlock = [GONMarkupBlock blockMarkup:@\"custom\"];\n    markupBlock.openingMarkupBlock = ^(NSMutableDictionary *configurationDictionary, NSString *tag, NSMutableDictionary *context, NSDictionary *attributes) {\n        // Update font size\n        [configurationDictionary setObject:[UIFont boldSystemFontOfSize:69.0]\n                                    forKey:NSFontAttributeName];\n        \n        // Update text color\n        [configurationDictionary setObject:[@\"brown\" representedColor]\n                                    forKey:NSForegroundColorAttributeName];\n    };\n\n    [parser addMarkup:markupBlock];\n````\n\n### Creating a new GONMarkup subclass\nYou can add a custom markup by subclassing __GONMarkup__  class.\n\nAdding a new markup by subclassing is useful if you want to reuse your markups between several projets, or to implement more complex behavior. When subclassing, you have access to a shared object, allowing you to persists data and share it between each markup handling.\n\nFor examples, have a look a currently defined markups ;)\nSee __GONMarkupList__ and __GONMarkupListItem__ for an implementation using shared context.\n\n## Troubleshooting\n### Some text is missing\nCheck that your markup is correctly registered and that your tags are right balanced.\n\n### When using &lt; / &gt;, some text is missing\nUse &amp;lt; and &amp;gt; in text.\n\n### Text color is still applied after my tag is closed.\nThis is caused by __NSAttributedString__ internal behavior. Once a color is set, it is applied until a new one is set.<br/>\nTo prevent this problem, be sure to have set a default text color in your parser (__defaultConfiguration__ / __NSForegroundColorAttributeName__ key). You can use __setMarkedUpText:__ on __UILabel__ / __UITextField__ to use default component configuration.\n\n### Text style isn't applied to my link\nSee [Anchor support](#anchor-support) for more information.\n\n### I am encountering some crashes when using custom font\nBe sure to use correct font name, or that font code you are using is correctly registered to your parser. <br/>\nWant to dump all available fonts on your device and check real names ?<br/>\nHave a look [at DUMP_FONT_LIST() here](https://github.com/nicolasgoutaland/GONMacros#gonutilsmacrosh)\n\n### No new lines are inserted using __&lt;br&gt;__\n*__&lt;br&gt;__* alone is not valid in __GONMarkupParser__. Be sure to use __&lt;br/&gt;__.\n\n### Color isn't applied\nCheck that you color value synthax is correct.<br/>\nFor more information on supported synthax, have a look at [NSString+UIColor here](https://github.com/nicolasgoutaland/NSString-Color#nsstringcolor-), that is used to compute colors from your string values.\n\n### Did Kim Kardashian broke the Internet ?\nNo, definitely not. I was still able to push to GitHub yesterday.\n\n## Evolutions\n- Allow indentation prefix in lists customisation\n- Implement **NSCoder** in parser and Markers\n- Allow **copy** on parsers / markers\n- Improve closing tag\n\n## Contributors\nSee the [Contributors page](https://github.com/nicolasgoutaland/GONMarkupParser/graphs/contributors) on github.\n\n## Changelog\nChangelog can be found [here](https://github.com/nicolasgoutaland/GONMarkupParser/blob/master/CHANGELOG.md)\n"
  }
]