diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..1e66f01 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index fca9853..464c369 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Xcode +.DS_Store build/* *.pbxuser !default.pbxuser diff --git a/.gitmodules b/.gitmodules index 2d9ba3a..c55c6b4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "fmemopen"] path = fmemopen - url = git@github.com:jverkoey/fmemopen.git + url = https://github.com/jverkoey/fmemopen.git [submodule "nimbus"] path = nimbus - url = git://github.com/jverkoey/nimbus.git + url = https://github.com/jverkoey/nimbus.git diff --git a/MarkdownAttributedString.xcodeproj/project.pbxproj b/MarkdownAttributedString.xcodeproj/project.pbxproj index 0890606..fa9e9e7 100644 --- a/MarkdownAttributedString.xcodeproj/project.pbxproj +++ b/MarkdownAttributedString.xcodeproj/project.pbxproj @@ -7,6 +7,40 @@ objects = { /* Begin PBXBuildFile section */ + 4FA1965C184F99D600E70A9E /* NIAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19658184F99D600E70A9E /* NIAttributedLabel.m */; }; + 4FA1965D184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1965B184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.m */; }; + 4FA19691184F99EB00E70A9E /* NIActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1965F184F99EB00E70A9E /* NIActions.m */; }; + 4FA19692184F99EB00E70A9E /* NIButtonUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19662184F99EB00E70A9E /* NIButtonUtilities.m */; }; + 4FA19693184F99EB00E70A9E /* NICommonMetrics.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19664184F99EB00E70A9E /* NICommonMetrics.m */; }; + 4FA19694184F99EB00E70A9E /* NIDataStructures.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19666184F99EB00E70A9E /* NIDataStructures.m */; }; + 4FA19695184F99EB00E70A9E /* NIDebuggingTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19668184F99EB00E70A9E /* NIDebuggingTools.m */; }; + 4FA19696184F99EB00E70A9E /* NIDeviceOrientation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1966A184F99EB00E70A9E /* NIDeviceOrientation.m */; }; + 4FA19697184F99EB00E70A9E /* NIError.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1966C184F99EB00E70A9E /* NIError.m */; }; + 4FA19698184F99EB00E70A9E /* NIFoundationMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1966E184F99EB00E70A9E /* NIFoundationMethods.m */; }; + 4FA19699184F99EB00E70A9E /* NIImageUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19670184F99EB00E70A9E /* NIImageUtilities.m */; }; + 4FA1969A184F99EB00E70A9E /* NIInMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19672184F99EB00E70A9E /* NIInMemoryCache.m */; }; + 4FA1969B184F99EB00E70A9E /* NIInvocationMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19674184F99EB00E70A9E /* NIInvocationMethods.m */; }; + 4FA1969C184F99EB00E70A9E /* NINavigationAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19678184F99EB00E70A9E /* NINavigationAppearance.m */; }; + 4FA1969D184F99EB00E70A9E /* NINetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1967A184F99EB00E70A9E /* NINetworkActivity.m */; }; + 4FA1969E184F99EB00E70A9E /* NINonEmptyCollectionTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1967C184F99EB00E70A9E /* NINonEmptyCollectionTesting.m */; }; + 4FA1969F184F99EB00E70A9E /* NINonRetainingCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1967E184F99EB00E70A9E /* NINonRetainingCollections.m */; }; + 4FA196A0184F99EB00E70A9E /* NIOperations.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19680184F99EB00E70A9E /* NIOperations.m */; }; + 4FA196A1184F99EB00E70A9E /* NIPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19683184F99EB00E70A9E /* NIPaths.m */; }; + 4FA196A2184F99EB00E70A9E /* NIRuntimeClassModifications.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19686184F99EB00E70A9E /* NIRuntimeClassModifications.m */; }; + 4FA196A3184F99EB00E70A9E /* NISDKAvailability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19688184F99EB00E70A9E /* NISDKAvailability.m */; }; + 4FA196A4184F99EB00E70A9E /* NISnapshotRotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1968A184F99EB00E70A9E /* NISnapshotRotation.m */; }; + 4FA196A5184F99EB00E70A9E /* NIState.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1968C184F99EB00E70A9E /* NIState.m */; }; + 4FA196A6184F99EB00E70A9E /* NIViewRecycler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA1968E184F99EB00E70A9E /* NIViewRecycler.m */; }; + 4FA196A7184F99EB00E70A9E /* NSString+NimbusCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA19690184F99EB00E70A9E /* NSString+NimbusCore.m */; }; + 4FA196BD184F99FA00E70A9E /* NICellBackgrounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196A9184F99FA00E70A9E /* NICellBackgrounds.m */; }; + 4FA196BE184F99FA00E70A9E /* NICellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196AB184F99FA00E70A9E /* NICellCatalog.m */; }; + 4FA196BF184F99FA00E70A9E /* NICellFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196AD184F99FA00E70A9E /* NICellFactory.m */; }; + 4FA196C0184F99FA00E70A9E /* NIFormCellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196AF184F99FA00E70A9E /* NIFormCellCatalog.m */; }; + 4FA196C1184F99FA00E70A9E /* NIMutableTableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196B2184F99FA00E70A9E /* NIMutableTableViewModel.m */; }; + 4FA196C2184F99FA00E70A9E /* NIRadioGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196B5184F99FA00E70A9E /* NIRadioGroup.m */; }; + 4FA196C3184F99FA00E70A9E /* NIRadioGroupController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196B7184F99FA00E70A9E /* NIRadioGroupController.m */; }; + 4FA196C4184F99FA00E70A9E /* NITableViewActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196B9184F99FA00E70A9E /* NITableViewActions.m */; }; + 4FA196C5184F99FA00E70A9E /* NITableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA196BB184F99FA00E70A9E /* NITableViewModel.m */; }; 66268464172F22B500283577 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AB04A41596EA9600806DC4 /* Foundation.framework */; }; 66268487172F22C400283577 /* NSAttributedStringMarkdownParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 66AB04F71596ECAF00806DC4 /* NSAttributedStringMarkdownParser.m */; }; 66268488172F22C400283577 /* MarkdownTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 66AB05061596EDA200806DC4 /* MarkdownTokenizer.m */; }; @@ -22,41 +56,7 @@ 662684A7172F25C500283577 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 662684A6172F25C500283577 /* Default@2x.png */; }; 662684A9172F25C500283577 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 662684A8172F25C500283577 /* Default-568h@2x.png */; }; 662684AF172F25D200283577 /* libNSAttributedStringMarkdownParser.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 66268463172F22B500283577 /* libNSAttributedStringMarkdownParser.a */; }; - 662684E5172F271900283577 /* NIActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684B3172F271900283577 /* NIActions.m */; }; - 662684E6172F271900283577 /* NIButtonUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684B6172F271900283577 /* NIButtonUtilities.m */; }; - 662684E7172F271900283577 /* NICommonMetrics.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684B8172F271900283577 /* NICommonMetrics.m */; }; - 662684E8172F271900283577 /* NIDataStructures.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684BA172F271900283577 /* NIDataStructures.m */; }; - 662684E9172F271900283577 /* NIDebuggingTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684BC172F271900283577 /* NIDebuggingTools.m */; }; - 662684EA172F271900283577 /* NIDeviceOrientation.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684BE172F271900283577 /* NIDeviceOrientation.m */; }; - 662684EB172F271900283577 /* NIError.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684C0172F271900283577 /* NIError.m */; }; - 662684EC172F271900283577 /* NIFoundationMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684C2172F271900283577 /* NIFoundationMethods.m */; }; - 662684ED172F271900283577 /* NIImageUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684C4172F271900283577 /* NIImageUtilities.m */; }; - 662684EE172F271900283577 /* NIInMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684C6172F271900283577 /* NIInMemoryCache.m */; }; - 662684EF172F271900283577 /* NIInvocationMethods.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684C8172F271900283577 /* NIInvocationMethods.m */; }; - 662684F0172F271900283577 /* NINavigationAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684CC172F271900283577 /* NINavigationAppearance.m */; }; - 662684F1172F271900283577 /* NINetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684CE172F271900283577 /* NINetworkActivity.m */; }; - 662684F2172F271900283577 /* NINonEmptyCollectionTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684D0172F271900283577 /* NINonEmptyCollectionTesting.m */; }; - 662684F3172F271900283577 /* NINonRetainingCollections.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684D2172F271900283577 /* NINonRetainingCollections.m */; }; - 662684F4172F271900283577 /* NIOperations.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684D4172F271900283577 /* NIOperations.m */; }; - 662684F5172F271900283577 /* NIPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684D7172F271900283577 /* NIPaths.m */; }; - 662684F6172F271900283577 /* NIRuntimeClassModifications.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684DA172F271900283577 /* NIRuntimeClassModifications.m */; }; - 662684F7172F271900283577 /* NISDKAvailability.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684DC172F271900283577 /* NISDKAvailability.m */; }; - 662684F8172F271900283577 /* NISnapshotRotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684DE172F271900283577 /* NISnapshotRotation.m */; }; - 662684F9172F271900283577 /* NIState.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684E0172F271900283577 /* NIState.m */; }; - 662684FA172F271900283577 /* NIViewRecycler.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684E2172F271900283577 /* NIViewRecycler.m */; }; - 662684FB172F271900283577 /* NSString+NimbusCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684E4172F271900283577 /* NSString+NimbusCore.m */; }; - 66268502172F273000283577 /* NIAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 662684FE172F273000283577 /* NIAttributedLabel.m */; }; - 66268503172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268501172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.m */; }; 66268504172F273F00283577 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66AB052A1596FCC900806DC4 /* CoreText.framework */; }; - 6626851B172F276500283577 /* NICellBackgrounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268507172F276500283577 /* NICellBackgrounds.m */; }; - 6626851C172F276500283577 /* NICellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268509172F276500283577 /* NICellCatalog.m */; }; - 6626851D172F276500283577 /* NICellFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 6626850B172F276500283577 /* NICellFactory.m */; }; - 6626851E172F276500283577 /* NIFormCellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = 6626850D172F276500283577 /* NIFormCellCatalog.m */; }; - 6626851F172F276500283577 /* NIMutableTableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268510172F276500283577 /* NIMutableTableViewModel.m */; }; - 66268520172F276500283577 /* NIRadioGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268513172F276500283577 /* NIRadioGroup.m */; }; - 66268521172F276500283577 /* NIRadioGroupController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268515172F276500283577 /* NIRadioGroupController.m */; }; - 66268522172F276500283577 /* NITableViewActions.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268517172F276500283577 /* NITableViewActions.m */; }; - 66268523172F276500283577 /* NITableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 66268519172F276500283577 /* NITableViewModel.m */; }; 66FE975E172F48DE006602B4 /* CatalogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FE975D172F48DE006602B4 /* CatalogViewController.m */; }; 66FE9762172F49EA006602B4 /* EmphasisViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FE9761172F49EA006602B4 /* EmphasisViewController.m */; }; 66FE9765172F4CED006602B4 /* HeadersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FE9764172F4CED006602B4 /* HeadersViewController.m */; }; @@ -93,6 +93,83 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4FA19657184F99D600E70A9E /* NIAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIAttributedLabel.h; sourceTree = ""; }; + 4FA19658184F99D600E70A9E /* NIAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIAttributedLabel.m; sourceTree = ""; }; + 4FA19659184F99D600E70A9E /* NimbusAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusAttributedLabel.h; sourceTree = ""; }; + 4FA1965A184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableAttributedString+NimbusAttributedLabel.h"; sourceTree = ""; }; + 4FA1965B184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableAttributedString+NimbusAttributedLabel.m"; sourceTree = ""; }; + 4FA1965E184F99EB00E70A9E /* NIActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIActions.h; sourceTree = ""; }; + 4FA1965F184F99EB00E70A9E /* NIActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIActions.m; sourceTree = ""; }; + 4FA19660184F99EB00E70A9E /* NIActions+Subclassing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIActions+Subclassing.h"; sourceTree = ""; }; + 4FA19661184F99EB00E70A9E /* NIButtonUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIButtonUtilities.h; sourceTree = ""; }; + 4FA19662184F99EB00E70A9E /* NIButtonUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIButtonUtilities.m; sourceTree = ""; }; + 4FA19663184F99EB00E70A9E /* NICommonMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICommonMetrics.h; sourceTree = ""; }; + 4FA19664184F99EB00E70A9E /* NICommonMetrics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICommonMetrics.m; sourceTree = ""; }; + 4FA19665184F99EB00E70A9E /* NIDataStructures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDataStructures.h; sourceTree = ""; }; + 4FA19666184F99EB00E70A9E /* NIDataStructures.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDataStructures.m; sourceTree = ""; }; + 4FA19667184F99EB00E70A9E /* NIDebuggingTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDebuggingTools.h; sourceTree = ""; }; + 4FA19668184F99EB00E70A9E /* NIDebuggingTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDebuggingTools.m; sourceTree = ""; }; + 4FA19669184F99EB00E70A9E /* NIDeviceOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDeviceOrientation.h; sourceTree = ""; }; + 4FA1966A184F99EB00E70A9E /* NIDeviceOrientation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDeviceOrientation.m; sourceTree = ""; }; + 4FA1966B184F99EB00E70A9E /* NIError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIError.h; sourceTree = ""; }; + 4FA1966C184F99EB00E70A9E /* NIError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIError.m; sourceTree = ""; }; + 4FA1966D184F99EB00E70A9E /* NIFoundationMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIFoundationMethods.h; sourceTree = ""; }; + 4FA1966E184F99EB00E70A9E /* NIFoundationMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIFoundationMethods.m; sourceTree = ""; }; + 4FA1966F184F99EB00E70A9E /* NIImageUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIImageUtilities.h; sourceTree = ""; }; + 4FA19670184F99EB00E70A9E /* NIImageUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIImageUtilities.m; sourceTree = ""; }; + 4FA19671184F99EB00E70A9E /* NIInMemoryCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIInMemoryCache.h; sourceTree = ""; }; + 4FA19672184F99EB00E70A9E /* NIInMemoryCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIInMemoryCache.m; sourceTree = ""; }; + 4FA19673184F99EB00E70A9E /* NIInvocationMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIInvocationMethods.h; sourceTree = ""; }; + 4FA19674184F99EB00E70A9E /* NIInvocationMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIInvocationMethods.m; sourceTree = ""; }; + 4FA19675184F99EB00E70A9E /* NimbusCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusCore.h; sourceTree = ""; }; + 4FA19676184F99EB00E70A9E /* NimbusCore+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NimbusCore+Additions.h"; sourceTree = ""; }; + 4FA19677184F99EB00E70A9E /* NINavigationAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINavigationAppearance.h; sourceTree = ""; }; + 4FA19678184F99EB00E70A9E /* NINavigationAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINavigationAppearance.m; sourceTree = ""; }; + 4FA19679184F99EB00E70A9E /* NINetworkActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINetworkActivity.h; sourceTree = ""; }; + 4FA1967A184F99EB00E70A9E /* NINetworkActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINetworkActivity.m; sourceTree = ""; }; + 4FA1967B184F99EB00E70A9E /* NINonEmptyCollectionTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINonEmptyCollectionTesting.h; sourceTree = ""; }; + 4FA1967C184F99EB00E70A9E /* NINonEmptyCollectionTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINonEmptyCollectionTesting.m; sourceTree = ""; }; + 4FA1967D184F99EB00E70A9E /* NINonRetainingCollections.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINonRetainingCollections.h; sourceTree = ""; }; + 4FA1967E184F99EB00E70A9E /* NINonRetainingCollections.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINonRetainingCollections.m; sourceTree = ""; }; + 4FA1967F184F99EB00E70A9E /* NIOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIOperations.h; sourceTree = ""; }; + 4FA19680184F99EB00E70A9E /* NIOperations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIOperations.m; sourceTree = ""; }; + 4FA19681184F99EB00E70A9E /* NIOperations+Subclassing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIOperations+Subclassing.h"; sourceTree = ""; }; + 4FA19682184F99EB00E70A9E /* NIPaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIPaths.h; sourceTree = ""; }; + 4FA19683184F99EB00E70A9E /* NIPaths.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIPaths.m; sourceTree = ""; }; + 4FA19684184F99EB00E70A9E /* NIPreprocessorMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIPreprocessorMacros.h; sourceTree = ""; }; + 4FA19685184F99EB00E70A9E /* NIRuntimeClassModifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRuntimeClassModifications.h; sourceTree = ""; }; + 4FA19686184F99EB00E70A9E /* NIRuntimeClassModifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRuntimeClassModifications.m; sourceTree = ""; }; + 4FA19687184F99EB00E70A9E /* NISDKAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NISDKAvailability.h; sourceTree = ""; }; + 4FA19688184F99EB00E70A9E /* NISDKAvailability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NISDKAvailability.m; sourceTree = ""; }; + 4FA19689184F99EB00E70A9E /* NISnapshotRotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NISnapshotRotation.h; sourceTree = ""; }; + 4FA1968A184F99EB00E70A9E /* NISnapshotRotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NISnapshotRotation.m; sourceTree = ""; }; + 4FA1968B184F99EB00E70A9E /* NIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIState.h; sourceTree = ""; }; + 4FA1968C184F99EB00E70A9E /* NIState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIState.m; sourceTree = ""; }; + 4FA1968D184F99EB00E70A9E /* NIViewRecycler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIViewRecycler.h; sourceTree = ""; }; + 4FA1968E184F99EB00E70A9E /* NIViewRecycler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIViewRecycler.m; sourceTree = ""; }; + 4FA1968F184F99EB00E70A9E /* NSString+NimbusCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+NimbusCore.h"; sourceTree = ""; }; + 4FA19690184F99EB00E70A9E /* NSString+NimbusCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+NimbusCore.m"; sourceTree = ""; }; + 4FA196A8184F99FA00E70A9E /* NICellBackgrounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellBackgrounds.h; sourceTree = ""; }; + 4FA196A9184F99FA00E70A9E /* NICellBackgrounds.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellBackgrounds.m; sourceTree = ""; }; + 4FA196AA184F99FA00E70A9E /* NICellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellCatalog.h; sourceTree = ""; }; + 4FA196AB184F99FA00E70A9E /* NICellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellCatalog.m; sourceTree = ""; }; + 4FA196AC184F99FA00E70A9E /* NICellFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellFactory.h; sourceTree = ""; }; + 4FA196AD184F99FA00E70A9E /* NICellFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellFactory.m; sourceTree = ""; }; + 4FA196AE184F99FA00E70A9E /* NIFormCellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIFormCellCatalog.h; sourceTree = ""; }; + 4FA196AF184F99FA00E70A9E /* NIFormCellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIFormCellCatalog.m; sourceTree = ""; }; + 4FA196B0184F99FA00E70A9E /* NimbusModels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusModels.h; sourceTree = ""; }; + 4FA196B1184F99FA00E70A9E /* NIMutableTableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMutableTableViewModel.h; sourceTree = ""; }; + 4FA196B2184F99FA00E70A9E /* NIMutableTableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIMutableTableViewModel.m; sourceTree = ""; }; + 4FA196B3184F99FA00E70A9E /* NIMutableTableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIMutableTableViewModel+Private.h"; sourceTree = ""; }; + 4FA196B4184F99FA00E70A9E /* NIRadioGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRadioGroup.h; sourceTree = ""; }; + 4FA196B5184F99FA00E70A9E /* NIRadioGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRadioGroup.m; sourceTree = ""; }; + 4FA196B6184F99FA00E70A9E /* NIRadioGroupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRadioGroupController.h; sourceTree = ""; }; + 4FA196B7184F99FA00E70A9E /* NIRadioGroupController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRadioGroupController.m; sourceTree = ""; }; + 4FA196B8184F99FA00E70A9E /* NITableViewActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NITableViewActions.h; sourceTree = ""; }; + 4FA196B9184F99FA00E70A9E /* NITableViewActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NITableViewActions.m; sourceTree = ""; }; + 4FA196BA184F99FA00E70A9E /* NITableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NITableViewModel.h; sourceTree = ""; }; + 4FA196BB184F99FA00E70A9E /* NITableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NITableViewModel.m; sourceTree = ""; }; + 4FA196BC184F99FA00E70A9E /* NITableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NITableViewModel+Private.h"; sourceTree = ""; }; 6626845D172F228300283577 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 66268463172F22B500283577 /* libNSAttributedStringMarkdownParser.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libNSAttributedStringMarkdownParser.a; sourceTree = BUILT_PRODUCTS_DIR; }; 66268493172F25C400283577 /* MarkdownCatalog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MarkdownCatalog.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -106,83 +183,6 @@ 662684A4172F25C500283577 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; 662684A6172F25C500283577 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; 662684A8172F25C500283577 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - 662684B2172F271900283577 /* NIActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIActions.h; sourceTree = ""; }; - 662684B3172F271900283577 /* NIActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIActions.m; sourceTree = ""; }; - 662684B4172F271900283577 /* NIActions+Subclassing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIActions+Subclassing.h"; sourceTree = ""; }; - 662684B5172F271900283577 /* NIButtonUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIButtonUtilities.h; sourceTree = ""; }; - 662684B6172F271900283577 /* NIButtonUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIButtonUtilities.m; sourceTree = ""; }; - 662684B7172F271900283577 /* NICommonMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICommonMetrics.h; sourceTree = ""; }; - 662684B8172F271900283577 /* NICommonMetrics.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICommonMetrics.m; sourceTree = ""; }; - 662684B9172F271900283577 /* NIDataStructures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDataStructures.h; sourceTree = ""; }; - 662684BA172F271900283577 /* NIDataStructures.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDataStructures.m; sourceTree = ""; }; - 662684BB172F271900283577 /* NIDebuggingTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDebuggingTools.h; sourceTree = ""; }; - 662684BC172F271900283577 /* NIDebuggingTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDebuggingTools.m; sourceTree = ""; }; - 662684BD172F271900283577 /* NIDeviceOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIDeviceOrientation.h; sourceTree = ""; }; - 662684BE172F271900283577 /* NIDeviceOrientation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIDeviceOrientation.m; sourceTree = ""; }; - 662684BF172F271900283577 /* NIError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIError.h; sourceTree = ""; }; - 662684C0172F271900283577 /* NIError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIError.m; sourceTree = ""; }; - 662684C1172F271900283577 /* NIFoundationMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIFoundationMethods.h; sourceTree = ""; }; - 662684C2172F271900283577 /* NIFoundationMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIFoundationMethods.m; sourceTree = ""; }; - 662684C3172F271900283577 /* NIImageUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIImageUtilities.h; sourceTree = ""; }; - 662684C4172F271900283577 /* NIImageUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIImageUtilities.m; sourceTree = ""; }; - 662684C5172F271900283577 /* NIInMemoryCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIInMemoryCache.h; sourceTree = ""; }; - 662684C6172F271900283577 /* NIInMemoryCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIInMemoryCache.m; sourceTree = ""; }; - 662684C7172F271900283577 /* NIInvocationMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIInvocationMethods.h; sourceTree = ""; }; - 662684C8172F271900283577 /* NIInvocationMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIInvocationMethods.m; sourceTree = ""; }; - 662684C9172F271900283577 /* NimbusCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusCore.h; sourceTree = ""; }; - 662684CA172F271900283577 /* NimbusCore+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NimbusCore+Additions.h"; sourceTree = ""; }; - 662684CB172F271900283577 /* NINavigationAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINavigationAppearance.h; sourceTree = ""; }; - 662684CC172F271900283577 /* NINavigationAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINavigationAppearance.m; sourceTree = ""; }; - 662684CD172F271900283577 /* NINetworkActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINetworkActivity.h; sourceTree = ""; }; - 662684CE172F271900283577 /* NINetworkActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINetworkActivity.m; sourceTree = ""; }; - 662684CF172F271900283577 /* NINonEmptyCollectionTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINonEmptyCollectionTesting.h; sourceTree = ""; }; - 662684D0172F271900283577 /* NINonEmptyCollectionTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINonEmptyCollectionTesting.m; sourceTree = ""; }; - 662684D1172F271900283577 /* NINonRetainingCollections.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NINonRetainingCollections.h; sourceTree = ""; }; - 662684D2172F271900283577 /* NINonRetainingCollections.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NINonRetainingCollections.m; sourceTree = ""; }; - 662684D3172F271900283577 /* NIOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIOperations.h; sourceTree = ""; }; - 662684D4172F271900283577 /* NIOperations.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIOperations.m; sourceTree = ""; }; - 662684D5172F271900283577 /* NIOperations+Subclassing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIOperations+Subclassing.h"; sourceTree = ""; }; - 662684D6172F271900283577 /* NIPaths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIPaths.h; sourceTree = ""; }; - 662684D7172F271900283577 /* NIPaths.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIPaths.m; sourceTree = ""; }; - 662684D8172F271900283577 /* NIPreprocessorMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIPreprocessorMacros.h; sourceTree = ""; }; - 662684D9172F271900283577 /* NIRuntimeClassModifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRuntimeClassModifications.h; sourceTree = ""; }; - 662684DA172F271900283577 /* NIRuntimeClassModifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRuntimeClassModifications.m; sourceTree = ""; }; - 662684DB172F271900283577 /* NISDKAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NISDKAvailability.h; sourceTree = ""; }; - 662684DC172F271900283577 /* NISDKAvailability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NISDKAvailability.m; sourceTree = ""; }; - 662684DD172F271900283577 /* NISnapshotRotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NISnapshotRotation.h; sourceTree = ""; }; - 662684DE172F271900283577 /* NISnapshotRotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NISnapshotRotation.m; sourceTree = ""; }; - 662684DF172F271900283577 /* NIState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIState.h; sourceTree = ""; }; - 662684E0172F271900283577 /* NIState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIState.m; sourceTree = ""; }; - 662684E1172F271900283577 /* NIViewRecycler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIViewRecycler.h; sourceTree = ""; }; - 662684E2172F271900283577 /* NIViewRecycler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIViewRecycler.m; sourceTree = ""; }; - 662684E3172F271900283577 /* NSString+NimbusCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+NimbusCore.h"; sourceTree = ""; }; - 662684E4172F271900283577 /* NSString+NimbusCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+NimbusCore.m"; sourceTree = ""; }; - 662684FD172F273000283577 /* NIAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIAttributedLabel.h; sourceTree = ""; }; - 662684FE172F273000283577 /* NIAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIAttributedLabel.m; sourceTree = ""; }; - 662684FF172F273000283577 /* NimbusAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusAttributedLabel.h; sourceTree = ""; }; - 66268500172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableAttributedString+NimbusAttributedLabel.h"; sourceTree = ""; }; - 66268501172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableAttributedString+NimbusAttributedLabel.m"; sourceTree = ""; }; - 66268506172F276500283577 /* NICellBackgrounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellBackgrounds.h; sourceTree = ""; }; - 66268507172F276500283577 /* NICellBackgrounds.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellBackgrounds.m; sourceTree = ""; }; - 66268508172F276500283577 /* NICellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellCatalog.h; sourceTree = ""; }; - 66268509172F276500283577 /* NICellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellCatalog.m; sourceTree = ""; }; - 6626850A172F276500283577 /* NICellFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NICellFactory.h; sourceTree = ""; }; - 6626850B172F276500283577 /* NICellFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NICellFactory.m; sourceTree = ""; }; - 6626850C172F276500283577 /* NIFormCellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIFormCellCatalog.h; sourceTree = ""; }; - 6626850D172F276500283577 /* NIFormCellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIFormCellCatalog.m; sourceTree = ""; }; - 6626850E172F276500283577 /* NimbusModels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NimbusModels.h; sourceTree = ""; }; - 6626850F172F276500283577 /* NIMutableTableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMutableTableViewModel.h; sourceTree = ""; }; - 66268510172F276500283577 /* NIMutableTableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIMutableTableViewModel.m; sourceTree = ""; }; - 66268511172F276500283577 /* NIMutableTableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NIMutableTableViewModel+Private.h"; sourceTree = ""; }; - 66268512172F276500283577 /* NIRadioGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRadioGroup.h; sourceTree = ""; }; - 66268513172F276500283577 /* NIRadioGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRadioGroup.m; sourceTree = ""; }; - 66268514172F276500283577 /* NIRadioGroupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIRadioGroupController.h; sourceTree = ""; }; - 66268515172F276500283577 /* NIRadioGroupController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NIRadioGroupController.m; sourceTree = ""; }; - 66268516172F276500283577 /* NITableViewActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NITableViewActions.h; sourceTree = ""; }; - 66268517172F276500283577 /* NITableViewActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NITableViewActions.m; sourceTree = ""; }; - 66268518172F276500283577 /* NITableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NITableViewModel.h; sourceTree = ""; }; - 66268519172F276500283577 /* NITableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NITableViewModel.m; sourceTree = ""; }; - 6626851A172F276500283577 /* NITableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NITableViewModel+Private.h"; sourceTree = ""; }; 6692F5011599068F00FA074E /* fmemopen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fmemopen.c; path = fmemopen/fmemopen.c; sourceTree = ""; }; 6692F5021599068F00FA074E /* fmemopen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fmemopen.h; path = fmemopen/fmemopen.h; sourceTree = ""; }; 6692F5031599068F00FA074E /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.md; path = fmemopen/README.md; sourceTree = ""; }; @@ -279,57 +279,57 @@ 662684B1172F270E00283577 /* core */ = { isa = PBXGroup; children = ( - 662684B2172F271900283577 /* NIActions.h */, - 662684B3172F271900283577 /* NIActions.m */, - 662684B4172F271900283577 /* NIActions+Subclassing.h */, - 662684B5172F271900283577 /* NIButtonUtilities.h */, - 662684B6172F271900283577 /* NIButtonUtilities.m */, - 662684B7172F271900283577 /* NICommonMetrics.h */, - 662684B8172F271900283577 /* NICommonMetrics.m */, - 662684B9172F271900283577 /* NIDataStructures.h */, - 662684BA172F271900283577 /* NIDataStructures.m */, - 662684BB172F271900283577 /* NIDebuggingTools.h */, - 662684BC172F271900283577 /* NIDebuggingTools.m */, - 662684BD172F271900283577 /* NIDeviceOrientation.h */, - 662684BE172F271900283577 /* NIDeviceOrientation.m */, - 662684BF172F271900283577 /* NIError.h */, - 662684C0172F271900283577 /* NIError.m */, - 662684C1172F271900283577 /* NIFoundationMethods.h */, - 662684C2172F271900283577 /* NIFoundationMethods.m */, - 662684C3172F271900283577 /* NIImageUtilities.h */, - 662684C4172F271900283577 /* NIImageUtilities.m */, - 662684C5172F271900283577 /* NIInMemoryCache.h */, - 662684C6172F271900283577 /* NIInMemoryCache.m */, - 662684C7172F271900283577 /* NIInvocationMethods.h */, - 662684C8172F271900283577 /* NIInvocationMethods.m */, - 662684C9172F271900283577 /* NimbusCore.h */, - 662684CA172F271900283577 /* NimbusCore+Additions.h */, - 662684CB172F271900283577 /* NINavigationAppearance.h */, - 662684CC172F271900283577 /* NINavigationAppearance.m */, - 662684CD172F271900283577 /* NINetworkActivity.h */, - 662684CE172F271900283577 /* NINetworkActivity.m */, - 662684CF172F271900283577 /* NINonEmptyCollectionTesting.h */, - 662684D0172F271900283577 /* NINonEmptyCollectionTesting.m */, - 662684D1172F271900283577 /* NINonRetainingCollections.h */, - 662684D2172F271900283577 /* NINonRetainingCollections.m */, - 662684D3172F271900283577 /* NIOperations.h */, - 662684D4172F271900283577 /* NIOperations.m */, - 662684D5172F271900283577 /* NIOperations+Subclassing.h */, - 662684D6172F271900283577 /* NIPaths.h */, - 662684D7172F271900283577 /* NIPaths.m */, - 662684D8172F271900283577 /* NIPreprocessorMacros.h */, - 662684D9172F271900283577 /* NIRuntimeClassModifications.h */, - 662684DA172F271900283577 /* NIRuntimeClassModifications.m */, - 662684DB172F271900283577 /* NISDKAvailability.h */, - 662684DC172F271900283577 /* NISDKAvailability.m */, - 662684DD172F271900283577 /* NISnapshotRotation.h */, - 662684DE172F271900283577 /* NISnapshotRotation.m */, - 662684DF172F271900283577 /* NIState.h */, - 662684E0172F271900283577 /* NIState.m */, - 662684E1172F271900283577 /* NIViewRecycler.h */, - 662684E2172F271900283577 /* NIViewRecycler.m */, - 662684E3172F271900283577 /* NSString+NimbusCore.h */, - 662684E4172F271900283577 /* NSString+NimbusCore.m */, + 4FA1965E184F99EB00E70A9E /* NIActions.h */, + 4FA1965F184F99EB00E70A9E /* NIActions.m */, + 4FA19660184F99EB00E70A9E /* NIActions+Subclassing.h */, + 4FA19661184F99EB00E70A9E /* NIButtonUtilities.h */, + 4FA19662184F99EB00E70A9E /* NIButtonUtilities.m */, + 4FA19663184F99EB00E70A9E /* NICommonMetrics.h */, + 4FA19664184F99EB00E70A9E /* NICommonMetrics.m */, + 4FA19665184F99EB00E70A9E /* NIDataStructures.h */, + 4FA19666184F99EB00E70A9E /* NIDataStructures.m */, + 4FA19667184F99EB00E70A9E /* NIDebuggingTools.h */, + 4FA19668184F99EB00E70A9E /* NIDebuggingTools.m */, + 4FA19669184F99EB00E70A9E /* NIDeviceOrientation.h */, + 4FA1966A184F99EB00E70A9E /* NIDeviceOrientation.m */, + 4FA1966B184F99EB00E70A9E /* NIError.h */, + 4FA1966C184F99EB00E70A9E /* NIError.m */, + 4FA1966D184F99EB00E70A9E /* NIFoundationMethods.h */, + 4FA1966E184F99EB00E70A9E /* NIFoundationMethods.m */, + 4FA1966F184F99EB00E70A9E /* NIImageUtilities.h */, + 4FA19670184F99EB00E70A9E /* NIImageUtilities.m */, + 4FA19671184F99EB00E70A9E /* NIInMemoryCache.h */, + 4FA19672184F99EB00E70A9E /* NIInMemoryCache.m */, + 4FA19673184F99EB00E70A9E /* NIInvocationMethods.h */, + 4FA19674184F99EB00E70A9E /* NIInvocationMethods.m */, + 4FA19675184F99EB00E70A9E /* NimbusCore.h */, + 4FA19676184F99EB00E70A9E /* NimbusCore+Additions.h */, + 4FA19677184F99EB00E70A9E /* NINavigationAppearance.h */, + 4FA19678184F99EB00E70A9E /* NINavigationAppearance.m */, + 4FA19679184F99EB00E70A9E /* NINetworkActivity.h */, + 4FA1967A184F99EB00E70A9E /* NINetworkActivity.m */, + 4FA1967B184F99EB00E70A9E /* NINonEmptyCollectionTesting.h */, + 4FA1967C184F99EB00E70A9E /* NINonEmptyCollectionTesting.m */, + 4FA1967D184F99EB00E70A9E /* NINonRetainingCollections.h */, + 4FA1967E184F99EB00E70A9E /* NINonRetainingCollections.m */, + 4FA1967F184F99EB00E70A9E /* NIOperations.h */, + 4FA19680184F99EB00E70A9E /* NIOperations.m */, + 4FA19681184F99EB00E70A9E /* NIOperations+Subclassing.h */, + 4FA19682184F99EB00E70A9E /* NIPaths.h */, + 4FA19683184F99EB00E70A9E /* NIPaths.m */, + 4FA19684184F99EB00E70A9E /* NIPreprocessorMacros.h */, + 4FA19685184F99EB00E70A9E /* NIRuntimeClassModifications.h */, + 4FA19686184F99EB00E70A9E /* NIRuntimeClassModifications.m */, + 4FA19687184F99EB00E70A9E /* NISDKAvailability.h */, + 4FA19688184F99EB00E70A9E /* NISDKAvailability.m */, + 4FA19689184F99EB00E70A9E /* NISnapshotRotation.h */, + 4FA1968A184F99EB00E70A9E /* NISnapshotRotation.m */, + 4FA1968B184F99EB00E70A9E /* NIState.h */, + 4FA1968C184F99EB00E70A9E /* NIState.m */, + 4FA1968D184F99EB00E70A9E /* NIViewRecycler.h */, + 4FA1968E184F99EB00E70A9E /* NIViewRecycler.m */, + 4FA1968F184F99EB00E70A9E /* NSString+NimbusCore.h */, + 4FA19690184F99EB00E70A9E /* NSString+NimbusCore.m */, ); name = core; path = core/src; @@ -338,11 +338,11 @@ 662684FC172F271F00283577 /* attributed label */ = { isa = PBXGroup; children = ( - 662684FD172F273000283577 /* NIAttributedLabel.h */, - 662684FE172F273000283577 /* NIAttributedLabel.m */, - 662684FF172F273000283577 /* NimbusAttributedLabel.h */, - 66268500172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.h */, - 66268501172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.m */, + 4FA19657184F99D600E70A9E /* NIAttributedLabel.h */, + 4FA19658184F99D600E70A9E /* NIAttributedLabel.m */, + 4FA19659184F99D600E70A9E /* NimbusAttributedLabel.h */, + 4FA1965A184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.h */, + 4FA1965B184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.m */, ); name = "attributed label"; path = attributedlabel/src; @@ -351,27 +351,27 @@ 66268505172F275300283577 /* models */ = { isa = PBXGroup; children = ( - 66268506172F276500283577 /* NICellBackgrounds.h */, - 66268507172F276500283577 /* NICellBackgrounds.m */, - 66268508172F276500283577 /* NICellCatalog.h */, - 66268509172F276500283577 /* NICellCatalog.m */, - 6626850A172F276500283577 /* NICellFactory.h */, - 6626850B172F276500283577 /* NICellFactory.m */, - 6626850C172F276500283577 /* NIFormCellCatalog.h */, - 6626850D172F276500283577 /* NIFormCellCatalog.m */, - 6626850E172F276500283577 /* NimbusModels.h */, - 6626850F172F276500283577 /* NIMutableTableViewModel.h */, - 66268510172F276500283577 /* NIMutableTableViewModel.m */, - 66268511172F276500283577 /* NIMutableTableViewModel+Private.h */, - 66268512172F276500283577 /* NIRadioGroup.h */, - 66268513172F276500283577 /* NIRadioGroup.m */, - 66268514172F276500283577 /* NIRadioGroupController.h */, - 66268515172F276500283577 /* NIRadioGroupController.m */, - 66268516172F276500283577 /* NITableViewActions.h */, - 66268517172F276500283577 /* NITableViewActions.m */, - 66268518172F276500283577 /* NITableViewModel.h */, - 66268519172F276500283577 /* NITableViewModel.m */, - 6626851A172F276500283577 /* NITableViewModel+Private.h */, + 4FA196A8184F99FA00E70A9E /* NICellBackgrounds.h */, + 4FA196A9184F99FA00E70A9E /* NICellBackgrounds.m */, + 4FA196AA184F99FA00E70A9E /* NICellCatalog.h */, + 4FA196AB184F99FA00E70A9E /* NICellCatalog.m */, + 4FA196AC184F99FA00E70A9E /* NICellFactory.h */, + 4FA196AD184F99FA00E70A9E /* NICellFactory.m */, + 4FA196AE184F99FA00E70A9E /* NIFormCellCatalog.h */, + 4FA196AF184F99FA00E70A9E /* NIFormCellCatalog.m */, + 4FA196B0184F99FA00E70A9E /* NimbusModels.h */, + 4FA196B1184F99FA00E70A9E /* NIMutableTableViewModel.h */, + 4FA196B2184F99FA00E70A9E /* NIMutableTableViewModel.m */, + 4FA196B3184F99FA00E70A9E /* NIMutableTableViewModel+Private.h */, + 4FA196B4184F99FA00E70A9E /* NIRadioGroup.h */, + 4FA196B5184F99FA00E70A9E /* NIRadioGroup.m */, + 4FA196B6184F99FA00E70A9E /* NIRadioGroupController.h */, + 4FA196B7184F99FA00E70A9E /* NIRadioGroupController.m */, + 4FA196B8184F99FA00E70A9E /* NITableViewActions.h */, + 4FA196B9184F99FA00E70A9E /* NITableViewActions.m */, + 4FA196BA184F99FA00E70A9E /* NITableViewModel.h */, + 4FA196BB184F99FA00E70A9E /* NITableViewModel.m */, + 4FA196BC184F99FA00E70A9E /* NITableViewModel+Private.h */, ); name = models; path = models/src; @@ -583,46 +583,46 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4FA196C3184F99FA00E70A9E /* NIRadioGroupController.m in Sources */, + 4FA196C1184F99FA00E70A9E /* NIMutableTableViewModel.m in Sources */, 6626849F172F25C400283577 /* main.m in Sources */, + 4FA19697184F99EB00E70A9E /* NIError.m in Sources */, + 4FA196BE184F99FA00E70A9E /* NICellCatalog.m in Sources */, + 4FA1969C184F99EB00E70A9E /* NINavigationAppearance.m in Sources */, + 4FA1969D184F99EB00E70A9E /* NINetworkActivity.m in Sources */, 662684A3172F25C400283577 /* AppDelegate.m in Sources */, - 662684E5172F271900283577 /* NIActions.m in Sources */, - 662684E6172F271900283577 /* NIButtonUtilities.m in Sources */, - 662684E7172F271900283577 /* NICommonMetrics.m in Sources */, - 662684E8172F271900283577 /* NIDataStructures.m in Sources */, - 662684E9172F271900283577 /* NIDebuggingTools.m in Sources */, - 662684EA172F271900283577 /* NIDeviceOrientation.m in Sources */, - 662684EB172F271900283577 /* NIError.m in Sources */, - 662684EC172F271900283577 /* NIFoundationMethods.m in Sources */, - 662684ED172F271900283577 /* NIImageUtilities.m in Sources */, - 662684EE172F271900283577 /* NIInMemoryCache.m in Sources */, - 662684EF172F271900283577 /* NIInvocationMethods.m in Sources */, - 662684F0172F271900283577 /* NINavigationAppearance.m in Sources */, - 662684F1172F271900283577 /* NINetworkActivity.m in Sources */, - 662684F2172F271900283577 /* NINonEmptyCollectionTesting.m in Sources */, - 662684F3172F271900283577 /* NINonRetainingCollections.m in Sources */, - 662684F4172F271900283577 /* NIOperations.m in Sources */, - 662684F5172F271900283577 /* NIPaths.m in Sources */, - 662684F6172F271900283577 /* NIRuntimeClassModifications.m in Sources */, - 662684F7172F271900283577 /* NISDKAvailability.m in Sources */, - 662684F8172F271900283577 /* NISnapshotRotation.m in Sources */, - 662684F9172F271900283577 /* NIState.m in Sources */, - 662684FA172F271900283577 /* NIViewRecycler.m in Sources */, - 662684FB172F271900283577 /* NSString+NimbusCore.m in Sources */, - 66268502172F273000283577 /* NIAttributedLabel.m in Sources */, - 66268503172F273000283577 /* NSMutableAttributedString+NimbusAttributedLabel.m in Sources */, - 6626851B172F276500283577 /* NICellBackgrounds.m in Sources */, - 6626851C172F276500283577 /* NICellCatalog.m in Sources */, - 6626851D172F276500283577 /* NICellFactory.m in Sources */, - 6626851E172F276500283577 /* NIFormCellCatalog.m in Sources */, - 6626851F172F276500283577 /* NIMutableTableViewModel.m in Sources */, - 66268520172F276500283577 /* NIRadioGroup.m in Sources */, - 66268521172F276500283577 /* NIRadioGroupController.m in Sources */, - 66268522172F276500283577 /* NITableViewActions.m in Sources */, - 66268523172F276500283577 /* NITableViewModel.m in Sources */, + 4FA19696184F99EB00E70A9E /* NIDeviceOrientation.m in Sources */, + 4FA196A7184F99EB00E70A9E /* NSString+NimbusCore.m in Sources */, + 4FA19695184F99EB00E70A9E /* NIDebuggingTools.m in Sources */, + 4FA196A6184F99EB00E70A9E /* NIViewRecycler.m in Sources */, + 4FA196A3184F99EB00E70A9E /* NISDKAvailability.m in Sources */, + 4FA19692184F99EB00E70A9E /* NIButtonUtilities.m in Sources */, + 4FA196A5184F99EB00E70A9E /* NIState.m in Sources */, + 4FA19691184F99EB00E70A9E /* NIActions.m in Sources */, + 4FA196C0184F99FA00E70A9E /* NIFormCellCatalog.m in Sources */, + 4FA196BF184F99FA00E70A9E /* NICellFactory.m in Sources */, + 4FA19698184F99EB00E70A9E /* NIFoundationMethods.m in Sources */, + 4FA1969B184F99EB00E70A9E /* NIInvocationMethods.m in Sources */, + 4FA196C5184F99FA00E70A9E /* NITableViewModel.m in Sources */, + 4FA1969E184F99EB00E70A9E /* NINonEmptyCollectionTesting.m in Sources */, + 4FA196C4184F99FA00E70A9E /* NITableViewActions.m in Sources */, + 4FA196C2184F99FA00E70A9E /* NIRadioGroup.m in Sources */, + 4FA196A1184F99EB00E70A9E /* NIPaths.m in Sources */, + 4FA196A0184F99EB00E70A9E /* NIOperations.m in Sources */, 66FE975E172F48DE006602B4 /* CatalogViewController.m in Sources */, 66FE9762172F49EA006602B4 /* EmphasisViewController.m in Sources */, 66FE9765172F4CED006602B4 /* HeadersViewController.m in Sources */, + 4FA196A4184F99EB00E70A9E /* NISnapshotRotation.m in Sources */, + 4FA1969A184F99EB00E70A9E /* NIInMemoryCache.m in Sources */, + 4FA1969F184F99EB00E70A9E /* NINonRetainingCollections.m in Sources */, 66FE9768172F4DEA006602B4 /* LinksViewController.m in Sources */, + 4FA1965C184F99D600E70A9E /* NIAttributedLabel.m in Sources */, + 4FA19693184F99EB00E70A9E /* NICommonMetrics.m in Sources */, + 4FA196A2184F99EB00E70A9E /* NIRuntimeClassModifications.m in Sources */, + 4FA19694184F99EB00E70A9E /* NIDataStructures.m in Sources */, + 4FA1965D184F99D600E70A9E /* NSMutableAttributedString+NimbusAttributedLabel.m in Sources */, + 4FA196BD184F99FA00E70A9E /* NICellBackgrounds.m in Sources */, + 4FA19699184F99EB00E70A9E /* NIImageUtilities.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/fmemopen b/fmemopen index 1d696d3..44f91de 160000 --- a/fmemopen +++ b/fmemopen @@ -1 +1 @@ -Subproject commit 1d696d3793b1ab6a0fc1b7bc07ff2770534aa2a2 +Subproject commit 44f91decc1ff211c2f810dba91f381b7f325ddbb diff --git a/nimbus b/nimbus index 98e18b8..d2f5fd2 160000 --- a/nimbus +++ b/nimbus @@ -1 +1 @@ -Subproject commit 98e18b88af9dc3a3ffe5ebaa8f8d7faf62df1fff +Subproject commit d2f5fd2ab1209c5af37efe83b73405cb4612766a diff --git a/src/NSAttributedStringMarkdownParser.h b/src/NSAttributedStringMarkdownParser.h index 535e1e7..aec0d37 100644 --- a/src/NSAttributedStringMarkdownParser.h +++ b/src/NSAttributedStringMarkdownParser.h @@ -18,13 +18,13 @@ #import typedef enum { - NSAttributedStringMarkdownParserHeader1, - NSAttributedStringMarkdownParserHeader2, - NSAttributedStringMarkdownParserHeader3, - NSAttributedStringMarkdownParserHeader4, - NSAttributedStringMarkdownParserHeader5, - NSAttributedStringMarkdownParserHeader6, - + NSAttributedStringMarkdownParserHeader1, + NSAttributedStringMarkdownParserHeader2, + NSAttributedStringMarkdownParserHeader3, + NSAttributedStringMarkdownParserHeader4, + NSAttributedStringMarkdownParserHeader5, + NSAttributedStringMarkdownParserHeader6, + } NSAttributedStringMarkdownParserHeader; @protocol NSAttributedStringMarkdownStylesheet; @@ -44,6 +44,7 @@ typedef enum { @property (nonatomic, copy) NSString* boldFontName; // Default: boldSystemFont @property (nonatomic, copy) NSString* italicFontName; // Default: Helvetica-Oblique @property (nonatomic, copy) NSString* boldItalicFontName; // Default: Helvetica-BoldOblique +@property (nonatomic, strong) UIColor* foregroundColor; // Default: blackColor - (void)setFont:(UIFont *)font forHeader:(NSAttributedStringMarkdownParserHeader)header; - (UIFont *)fontForHeader:(NSAttributedStringMarkdownParserHeader)header; diff --git a/src/NSAttributedStringMarkdownParser.m b/src/NSAttributedStringMarkdownParser.m index 9fb5a89..edd2fe3 100644 --- a/src/NSAttributedStringMarkdownParser.m +++ b/src/NSAttributedStringMarkdownParser.m @@ -31,7 +31,7 @@ options:NSRegularExpressionCaseInsensitive error:nil]; }); - + return _hrefRegex; } @@ -47,169 +47,170 @@ @implementation NSAttributedStringMarkdownLink @end @implementation NSAttributedStringMarkdownParser { - NSMutableDictionary* _headerFonts; - - NSMutableArray* _bulletStarts; - - NSMutableAttributedString* _accum; - NSMutableArray* _links; - - UIFont* _topFont; - NSMutableDictionary* _fontCache; + NSMutableDictionary* _headerFonts; + + NSMutableArray* _bulletStarts; + + NSMutableAttributedString* _accum; + NSMutableArray* _links; + + UIFont* _topFont; + NSMutableDictionary* _fontCache; } - (id)init { - if ((self = [super init])) { - _headerFonts = [NSMutableDictionary dictionary]; - - self.paragraphFont = [UIFont systemFontOfSize:12]; - self.boldFontName = [UIFont boldSystemFontOfSize:12].fontName; - self.italicFontName = @"Helvetica-Oblique"; - self.boldItalicFontName = @"Helvetica-BoldOblique"; - - NSAttributedStringMarkdownParserHeader header = NSAttributedStringMarkdownParserHeader1; - for (CGFloat headerFontSize = 24; headerFontSize >= 14; headerFontSize -= 2, header++) { - [self setFont:[UIFont systemFontOfSize:headerFontSize] forHeader:header]; + if ((self = [super init])) { + _headerFonts = [NSMutableDictionary dictionary]; + + self.paragraphFont = [UIFont systemFontOfSize:12]; + self.boldFontName = [UIFont boldSystemFontOfSize:12].fontName; + self.italicFontName = @"Helvetica-Oblique"; + self.boldItalicFontName = @"Helvetica-BoldOblique"; + self.foregroundColor = [UIColor blackColor]; + + NSAttributedStringMarkdownParserHeader header = NSAttributedStringMarkdownParserHeader1; + for (CGFloat headerFontSize = 24; headerFontSize >= 14; headerFontSize -= 2, header++) { + [self setFont:[UIFont systemFontOfSize:headerFontSize] forHeader:header]; + } } - } - return self; + return self; } - (id)copyWithZone:(NSZone *)zone { - NSAttributedStringMarkdownParser* parser = [[self.class allocWithZone:zone] init]; - parser.paragraphFont = self.paragraphFont; - parser.boldFontName = self.boldFontName; - parser.italicFontName = self.italicFontName; - parser.boldItalicFontName = self.boldItalicFontName; - for (NSAttributedStringMarkdownParserHeader header = NSAttributedStringMarkdownParserHeader1; header <= NSAttributedStringMarkdownParserHeader6; ++header) { - [parser setFont:[self fontForHeader:header] forHeader:header]; - } - return parser; + NSAttributedStringMarkdownParser* parser = [[self.class allocWithZone:zone] init]; + parser.paragraphFont = self.paragraphFont; + parser.boldFontName = self.boldFontName; + parser.italicFontName = self.italicFontName; + parser.boldItalicFontName = self.boldItalicFontName; + for (NSAttributedStringMarkdownParserHeader header = NSAttributedStringMarkdownParserHeader1; header <= NSAttributedStringMarkdownParserHeader6; ++header) { + [parser setFont:[self fontForHeader:header] forHeader:header]; + } + return parser; } - (id)keyForHeader:(NSAttributedStringMarkdownParserHeader)header { - return @(header); + return @(header); } - (void)setFont:(UIFont *)font forHeader:(NSAttributedStringMarkdownParserHeader)header { - _headerFonts[[self keyForHeader:header]] = font; + _headerFonts[[self keyForHeader:header]] = font; } - (UIFont *)fontForHeader:(NSAttributedStringMarkdownParserHeader)header { - return _headerFonts[[self keyForHeader:header]]; + return _headerFonts[[self keyForHeader:header]]; } - (NSAttributedString *)attributedStringFromMarkdownString:(NSString *)string { - _links = [NSMutableArray array]; - _bulletStarts = [NSMutableArray array]; - _accum = [[NSMutableAttributedString alloc] init]; - - const char* cstr = [string UTF8String]; - FILE* markdownin = fmemopen((void *)cstr, sizeof(char) * (string.length + 1), "r"); - - yyscan_t scanner; - - markdownlex_init(&scanner); - markdownset_extra((__bridge void *)(self), scanner); - markdownset_in(markdownin, scanner); - markdownlex(scanner); - markdownlex_destroy(scanner); - - fclose(markdownin); - - if (_bulletStarts.count > 0) { - // Treat nested bullet points as flat ones... - - // Finish off the previous dash and start a new one. - NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; - [_bulletStarts removeLastObject]; + _links = [NSMutableArray array]; + _bulletStarts = [NSMutableArray array]; + _accum = [[NSMutableAttributedString alloc] init]; - [_accum addAttributes:[self paragraphStyle] + const char* cstr = [string UTF8String]; + FILE* markdownin = fmemopen((void *)cstr, sizeof(char) * (string.length + 1), "r"); + + yyscan_t scanner; + + markdownlex_init(&scanner); + markdownset_extra((__bridge void *)(self), scanner); + markdownset_in(markdownin, scanner); + markdownlex(scanner); + markdownlex_destroy(scanner); + + fclose(markdownin); + + if (_bulletStarts.count > 0) { + // Treat nested bullet points as flat ones... + + // Finish off the previous dash and start a new one. + NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; + [_bulletStarts removeLastObject]; + + [_accum addAttributes:[self paragraphStyle] range:NSMakeRange(lastBulletStart, _accum.length - lastBulletStart)]; - } - - return [_accum copy]; + } + + return [_accum copy]; } - (NSArray *)links { - return [_links copy]; + return [_links copy]; } - (NSDictionary *)paragraphStyle { - CGFloat paragraphSpacing = 0.0; - CGFloat paragraphSpacingBefore = 0.0; - CGFloat firstLineHeadIndent = 15.0; - CGFloat headIndent = 30.0; - - CGFloat firstTabStop = 35.0; // width of your indent - CGFloat lineSpacing = 0.45; - + CGFloat paragraphSpacing = 0.0; + CGFloat paragraphSpacingBefore = 0.0; + CGFloat firstLineHeadIndent = 15.0; + CGFloat headIndent = 30.0; + + CGFloat firstTabStop = 35.0; // width of your indent + CGFloat lineSpacing = 0.45; + #ifdef TARGET_OS_IPHONE - NSTextAlignment alignment = NSTextAlignmentLeft; - - NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; - style.paragraphSpacing = paragraphSpacing; - style.paragraphSpacingBefore = paragraphSpacingBefore; - style.firstLineHeadIndent = firstLineHeadIndent; - style.headIndent = headIndent; - style.lineSpacing = lineSpacing; - style.alignment = alignment; - style.tabStops = @[[[NSTextTab alloc] initWithTextAlignment:alignment location:firstTabStop options:nil]]; - - return @{ NSParagraphStyleAttributeName: style }; + NSTextAlignment alignment = NSTextAlignmentLeft; + + NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; + style.paragraphSpacing = paragraphSpacing; + style.paragraphSpacingBefore = paragraphSpacingBefore; + style.firstLineHeadIndent = firstLineHeadIndent; + style.headIndent = headIndent; + style.lineSpacing = lineSpacing; + style.alignment = alignment; + style.tabStops = @[[[NSTextTab alloc] initWithTextAlignment:alignment location:firstTabStop options:nil]]; + + return @{ NSParagraphStyleAttributeName: style }; #else - CTTextAlignment alignment = kCTLeftTextAlignment; - - CTTextTabRef tabArray[] = { CTTextTabCreate(0, firstTabStop, NULL) }; - - CFArrayRef tabStops = CFArrayCreate( kCFAllocatorDefault, (const void**) tabArray, 1, &kCFTypeArrayCallBacks ); - CFRelease(tabArray[0]); - - CTParagraphStyleSetting altSettings[] = - { - { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &lineSpacing}, - { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment}, - { kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(CGFloat), &firstLineHeadIndent}, - { kCTParagraphStyleSpecifierHeadIndent, sizeof(CGFloat), &headIndent}, - { kCTParagraphStyleSpecifierTabStops, sizeof(CFArrayRef), &tabStops}, - { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), ¶graphSpacing}, - { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), ¶graphSpacingBefore} - }; - - CTParagraphStyleRef style; - style = CTParagraphStyleCreate( altSettings, sizeof(altSettings) / sizeof(CTParagraphStyleSetting) ); - - if ( style == NULL ) - { - NSLog(@"*** Unable To Create CTParagraphStyle in apply paragraph formatting" ); - return nil; - } - - return [NSDictionary dictionaryWithObjectsAndKeys:(__bridge id)style,(NSString*) kCTParagraphStyleAttributeName, nil]; + CTTextAlignment alignment = kCTLeftTextAlignment; + + CTTextTabRef tabArray[] = { CTTextTabCreate(0, firstTabStop, NULL) }; + + CFArrayRef tabStops = CFArrayCreate( kCFAllocatorDefault, (const void**) tabArray, 1, &kCFTypeArrayCallBacks ); + CFRelease(tabArray[0]); + + CTParagraphStyleSetting altSettings[] = + { + { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &lineSpacing}, + { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment}, + { kCTParagraphStyleSpecifierFirstLineHeadIndent, sizeof(CGFloat), &firstLineHeadIndent}, + { kCTParagraphStyleSpecifierHeadIndent, sizeof(CGFloat), &headIndent}, + { kCTParagraphStyleSpecifierTabStops, sizeof(CFArrayRef), &tabStops}, + { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), ¶graphSpacing}, + { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), ¶graphSpacingBefore} + }; + + CTParagraphStyleRef style; + style = CTParagraphStyleCreate( altSettings, sizeof(altSettings) / sizeof(CTParagraphStyleSetting) ); + + if ( style == NULL ) + { + NSLog(@"*** Unable To Create CTParagraphStyle in apply paragraph formatting" ); + return nil; + } + + return [NSDictionary dictionaryWithObjectsAndKeys:(__bridge id)style,(NSString*) kCTParagraphStyleAttributeName, nil]; #endif } - (UIFont *)topFont { - if (nil == _topFont) { - return self.paragraphFont; - } else { - return _topFont; - } + if (nil == _topFont) { + return self.paragraphFont; + } else { + return _topFont; + } } - (id)keyForFontWithName:(NSString *)fontName pointSize:(CGFloat)pointSize { - return [fontName stringByAppendingFormat:@"%f", pointSize]; + return [fontName stringByAppendingFormat:@"%f", pointSize]; } - (CTFontRef)fontRefForFontWithName:(NSString *)fontName pointSize:(CGFloat)pointSize { - id key = [self keyForFontWithName:fontName pointSize:pointSize]; - NSValue* value = _fontCache[key]; - if (nil == value) { - CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, pointSize, nil); - value = [NSValue valueWithPointer:fontRef]; - _fontCache[key] = value; - } - return [value pointerValue]; + id key = [self keyForFontWithName:fontName pointSize:pointSize]; + NSValue* value = _fontCache[key]; + if (nil == value) { + CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, pointSize, nil); + value = [NSValue valueWithPointer:fontRef]; + _fontCache[key] = value; + } + return [value pointerValue]; } - (NSDictionary *)attributesForFontWithName:(NSString *)fontName { @@ -221,154 +222,180 @@ - (NSDictionary *)attributesForFont:(UIFont *)font { } - (void)recurseOnString:(NSString *)string withFont:(UIFont *)font { - NSAttributedStringMarkdownParser* recursiveParser = [self copy]; - recursiveParser->_topFont = font; - [_accum appendAttributedString:[recursiveParser attributedStringFromMarkdownString:string]]; - - // Adjust the recursive parser's links so that they are offset correctly. - for (NSValue* rangeValue in recursiveParser.links) { - NSRange range = [rangeValue rangeValue]; - range.location += _accum.length; - [_links addObject:[NSValue valueWithRange:range]]; - } + NSAttributedStringMarkdownParser* recursiveParser = [self copy]; + recursiveParser->_topFont = font; + [_accum appendAttributedString:[recursiveParser attributedStringFromMarkdownString:string]]; + + // Adjust the recursive parser's links so that they are offset correctly. + for (NSValue* rangeValue in recursiveParser.links) { + NSRange range = [rangeValue rangeValue]; + range.location += _accum.length; + [_links addObject:[NSValue valueWithRange:range]]; + } } - (void)consumeToken:(int)token text:(char*)text { - NSString* textAsString = [[NSString alloc] initWithCString:text encoding:NSUTF8StringEncoding]; - - NSMutableDictionary* attributes = [NSMutableDictionary dictionary]; - [attributes addEntriesFromDictionary:[self attributesForFont:self.topFont]]; - - switch (token) { - case MARKDOWNEM: { // * * - textAsString = [textAsString substringWithRange:NSMakeRange(1, textAsString.length - 2)]; - [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.italicFontName]]; - break; - } - case MARKDOWNSTRONG: { // ** ** - textAsString = [textAsString substringWithRange:NSMakeRange(2, textAsString.length - 4)]; - [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.boldFontName]]; - break; - } - case MARKDOWNSTRONGEM: { // *** *** - textAsString = [textAsString substringWithRange:NSMakeRange(3, textAsString.length - 6)]; - [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.boldItalicFontName]]; - break; - } - case MARKDOWNSTRIKETHROUGH: { // ~~ ~~ - textAsString = [textAsString substringWithRange:NSMakeRange(2, textAsString.length - 4)]; - [attributes addEntriesFromDictionary:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}]; - break; - } - case MARKDOWNHEADER: { // #### - NSRange rangeOfNonHash = [textAsString rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"#"] invertedSet]]; - if (rangeOfNonHash.length > 0) { - textAsString = [[textAsString substringFromIndex:rangeOfNonHash.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - - NSAttributedStringMarkdownParserHeader header = rangeOfNonHash.location - 1; - [self recurseOnString:textAsString withFont:[self fontForHeader:header]]; - - // We already appended the recursive parser's results in recurseOnString. - textAsString = nil; - } - break; - } - case MARKDOWNMULTILINEHEADER: { - NSArray* components = [textAsString componentsSeparatedByString:@"\n"]; - textAsString = [components objectAtIndex:0]; - UIFont* font = nil; - if ([[components objectAtIndex:1] rangeOfString:@"="].length > 0) { - font = [self fontForHeader:NSAttributedStringMarkdownParserHeader1]; - } else if ([[components objectAtIndex:1] rangeOfString:@"-"].length > 0) { - font = [self fontForHeader:NSAttributedStringMarkdownParserHeader2]; - } - - [self recurseOnString:textAsString withFont:font]; - - // We already appended the recursive parser's results in recurseOnString. - textAsString = nil; - break; - } - case MARKDOWNPARAGRAPH: { - textAsString = @"\n\n"; - - if (_bulletStarts.count > 0) { - // Treat nested bullet points as flat ones... - - // Finish off the previous dash and start a new one. - NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; - [_bulletStarts removeLastObject]; - - [_accum addAttributes:[self paragraphStyle] - range:NSMakeRange(lastBulletStart, _accum.length - lastBulletStart)]; - } - break; - } - case MARKDOWNBULLETSTART: { - NSInteger numberOfDashes = [textAsString rangeOfString:@" "].location; - if (_bulletStarts.count > 0 && _bulletStarts.count <= numberOfDashes) { - // Treat nested bullet points as flat ones... - - // Finish off the previous dash and start a new one. - NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; - [_bulletStarts removeLastObject]; - - [_accum addAttributes:[self paragraphStyle] - range:NSMakeRange(lastBulletStart, _accum.length - lastBulletStart)]; - } - - [_bulletStarts addObject:[NSNumber numberWithInt:_accum.length]]; - textAsString = @"•\t"; - break; - } - case MARKDOWNNEWLINE: { - textAsString = @""; - break; + NSString* textAsString = [[NSString alloc] initWithCString:text encoding:NSUTF8StringEncoding]; + + NSMutableDictionary* attributes = [NSMutableDictionary dictionary]; + [attributes addEntriesFromDictionary:[self attributesForFont:self.topFont]]; + + if (_foregroundColor != nil) { + [attributes setValue:_foregroundColor forKey:(NSString *)kCTForegroundColorAttributeName]; } - case MARKDOWNURL: { - NSAttributedStringMarkdownLink* link = [[NSAttributedStringMarkdownLink alloc] init]; - link.url = [NSURL URLWithString:textAsString]; - link.range = NSMakeRange(_accum.length, textAsString.length); - [_links addObject:link]; - break; + + switch (token) { + case MARKDOWNEM: { // * * + textAsString = [textAsString substringWithRange:NSMakeRange(1, textAsString.length - 2)]; + [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.italicFontName]]; + break; + } + case MARKDOWNSTRONG: { // ** ** + textAsString = [textAsString substringWithRange:NSMakeRange(2, textAsString.length - 4)]; + [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.boldFontName]]; + break; + } + case MARKDOWNSTRONGEM: { // *** *** + textAsString = [textAsString substringWithRange:NSMakeRange(3, textAsString.length - 6)]; + [attributes addEntriesFromDictionary:[self attributesForFontWithName:self.boldItalicFontName]]; + break; + } + case MARKDOWNSTRIKETHROUGH: { // ~~ ~~ + textAsString = [textAsString substringWithRange:NSMakeRange(2, textAsString.length - 4)]; + [attributes addEntriesFromDictionary:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}]; + break; + } + case MARKDOWNHEADER: { // #### + NSRange rangeOfNonHash = [textAsString rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"#"] invertedSet]]; + if (rangeOfNonHash.length > 0) { + textAsString = [[textAsString substringFromIndex:rangeOfNonHash.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + NSAttributedStringMarkdownParserHeader header = rangeOfNonHash.location - 1; + [self recurseOnString:textAsString withFont:[self fontForHeader:header]]; + + // We already appended the recursive parser's results in recurseOnString. + textAsString = nil; + } + break; + } + case MARKDOWNMULTILINEHEADER: { + NSArray* components = [textAsString componentsSeparatedByString:@"\n"]; + textAsString = [components objectAtIndex:0]; + UIFont* font = nil; + if ([[components objectAtIndex:1] rangeOfString:@"="].length > 0) { + font = [self fontForHeader:NSAttributedStringMarkdownParserHeader1]; + } else if ([[components objectAtIndex:1] rangeOfString:@"-"].length > 0) { + font = [self fontForHeader:NSAttributedStringMarkdownParserHeader2]; + } + + [self recurseOnString:textAsString withFont:font]; + + // We already appended the recursive parser's results in recurseOnString. + textAsString = nil; + break; + } + case MARKDOWNPARAGRAPH: { + textAsString = @"\n\n"; + + if (_bulletStarts.count > 0) { + // Treat nested bullet points as flat ones... + + // Finish off the previous dash and start a new one. + NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; + [_bulletStarts removeLastObject]; + + [_accum addAttributes:[self paragraphStyle] + range:NSMakeRange(lastBulletStart, _accum.length - lastBulletStart)]; + } + break; + } + case MARKDOWNBULLETSTART: { + NSInteger numberOfDashes = [textAsString rangeOfString:@" "].location; + if (_bulletStarts.count > 0 && _bulletStarts.count <= numberOfDashes) { + // Treat nested bullet points as flat ones... + + // Finish off the previous dash and start a new one. + NSInteger lastBulletStart = [[_bulletStarts lastObject] intValue]; + [_bulletStarts removeLastObject]; + + [_accum addAttributes:[self paragraphStyle] + range:NSMakeRange(lastBulletStart, _accum.length - lastBulletStart)]; + } + + [_bulletStarts addObject:[NSNumber numberWithInt:_accum.length]]; + textAsString = @"•\t"; + break; + } + case MARKDOWNNEWLINE: { + textAsString = @""; + break; + } + case MARKDOWNURL: { + NSAttributedStringMarkdownLink* link = [[NSAttributedStringMarkdownLink alloc] init]; + link.url = [NSURL URLWithString:textAsString]; + link.range = NSMakeRange(_accum.length, textAsString.length); + [_links addObject:link]; + break; + } + case MARKDOWNHREF: { // [Title] (url "tooltip") + + NSMutableString *mutableString = [NSMutableString new]; + + NSArray *results = [hrefRegex() matchesInString:textAsString options:0 range:NSMakeRange(0, textAsString.length)]; + + for (int i = 0; i < results.count; i++) + { + NSTextCheckingResult* result = [results objectAtIndex:i]; + NSTextCheckingResult* prevResult = (i-1 >= 0) ? [results objectAtIndex:i-1] : nil; + + NSRange linkTitleRange = [result rangeAtIndex:1]; + NSRange linkURLRange = [result rangeAtIndex:2]; + __unused NSRange tooltipRange = [result rangeAtIndex:5]; + + NSString *linkTitle = [textAsString substringWithRange:linkTitleRange]; + + if (linkTitleRange.location != NSNotFound && linkURLRange.location != NSNotFound) { + + if (prevResult != nil) { + __unused NSRange prevTitleRange = [prevResult rangeAtIndex:1]; + NSRange prevURLRange = [prevResult rangeAtIndex:2]; + + NSUInteger location = prevURLRange.location+prevURLRange.length+1; + NSUInteger lenght = (linkTitleRange.location-1) - location; + + NSString *text = [textAsString substringWithRange:NSMakeRange(location, lenght)]; + [mutableString appendString:text]; + } + + [mutableString appendString:linkTitle]; + + NSAttributedStringMarkdownLink *link = [[NSAttributedStringMarkdownLink alloc] init]; + link.url = [NSURL URLWithString:[textAsString substringWithRange:linkURLRange]]; + link.range = [mutableString rangeOfString:linkTitle]; + + [_links addObject:link]; + } + } + + textAsString = [NSString stringWithString:mutableString]; + + break; + } + default: { + break; + } } - case MARKDOWNHREF: { // [Title] (url "tooltip") - NSTextCheckingResult *result = [hrefRegex() firstMatchInString:textAsString options:0 range:NSMakeRange(0, textAsString.length)]; - - NSRange linkTitleRange = [result rangeAtIndex:1]; - NSRange linkURLRange = [result rangeAtIndex:2]; - NSRange tooltipRange = [result rangeAtIndex:5]; - - if (linkTitleRange.location != NSNotFound && linkURLRange.location != NSNotFound) { - NSAttributedStringMarkdownLink *link = [[NSAttributedStringMarkdownLink alloc] init]; - - link.url = [NSURL URLWithString:[textAsString substringWithRange:linkURLRange]]; - link.range = NSMakeRange(_accum.length, linkTitleRange.length); - - if (tooltipRange.location != NSNotFound) { - link.tooltip = [textAsString substringWithRange:tooltipRange]; - } - - [_links addObject:link]; - textAsString = [textAsString substringWithRange:linkTitleRange]; - } - break; - } - default: { - break; + + if (textAsString.length > 0) { + NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:textAsString attributes:attributes]; + [_accum appendAttributedString:attributedString]; } - } - - if (textAsString.length > 0) { - NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:textAsString attributes:attributes]; - [_accum appendAttributedString:attributedString]; - } } @end int markdownConsume(char* text, int token, yyscan_t scanner) { - NSAttributedStringMarkdownParser* string = (__bridge NSAttributedStringMarkdownParser *)(markdownget_extra(scanner)); - [string consumeToken:token text:text]; - return 0; + NSAttributedStringMarkdownParser* string = (__bridge NSAttributedStringMarkdownParser *)(markdownget_extra(scanner)); + [string consumeToken:token text:text]; + return 0; }