5 Commits

Author SHA1 Message Date
relikd
e04a347c1e fix: migrate to newer xcode version 2022-09-30 17:46:04 +02:00
relikd
8d3326e532 linguist 2022-03-15 15:35:02 +01:00
relikd
40aa75beb1 syntax highlight in readme 2022-03-15 15:34:08 +01:00
relikd
43fffb3923 Upgrade recommended settings 2020-01-17 22:30:55 +01:00
relikd
2e46fdc8fd NS_ASSUME_NONNULL 2020-01-17 22:26:54 +01:00
20 changed files with 77 additions and 34 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
RSXML2Tests/Resources/* -linguist-detectable

View File

@@ -30,7 +30,7 @@ In the previous version, the test case for parsing a non-opml file (with `RSOPML
## Usage ## Usage
``` ```objc
RSXMLData *xmlData = [[RSXMLData alloc] initWithData:d urlString:@"https://www.example.org"]; RSXMLData *xmlData = [[RSXMLData alloc] initWithData:d urlString:@"https://www.example.org"];
// TODO: check xmlData.parserError // TODO: check xmlData.parserError
RSFeedParser *parser = [RSFeedParser parserWithXMLData:xmlData]; RSFeedParser *parser = [RSFeedParser parserWithXMLData:xmlData];
@@ -44,7 +44,7 @@ RSParsedFeed *document = [parser parseSync:&parseError];
If you don't care about the parser used to decode the data, `[xmlData getParser]` will return the most suitable parser. You can use that parser right away to call `parseSync:`. Anyway, you can also parse the XML file asynchronously with `parseAsync:`. If you don't care about the parser used to decode the data, `[xmlData getParser]` will return the most suitable parser. You can use that parser right away to call `parseSync:`. Anyway, you can also parse the XML file asynchronously with `parseAsync:`.
``` ```objc
[[xmlData getParser] parseAsync:^(RSParsedFeed *parsedDocument, NSError *error) { [[xmlData getParser] parseAsync:^(RSParsedFeed *parsedDocument, NSError *error) {
// process feed items ... // process feed items ...
}]; }];

View File

@@ -417,8 +417,8 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastSwiftUpdateCheck = 0700; LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700; LastUpgradeCheck = 1200;
ORGANIZATIONNAME = "relikd"; ORGANIZATIONNAME = relikd;
TargetAttributes = { TargetAttributes = {
84AD0C041E11B7D200B38510 = { 84AD0C041E11B7D200B38510 = {
CreatedOnToolsVersion = 8.2.1; CreatedOnToolsVersion = 8.2.1;
@@ -435,10 +435,11 @@
}; };
buildConfigurationList = 84F22C071B52DDEA000060CE /* Build configuration list for PBXProject "RSXML2" */; buildConfigurationList = 84F22C071B52DDEA000060CE /* Build configuration list for PBXProject "RSXML2" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
developmentRegion = English; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
knownRegions = ( knownRegions = (
en, en,
Base,
); );
mainGroup = 84F22C031B52DDEA000060CE; mainGroup = 84F22C031B52DDEA000060CE;
productRefGroup = 84F22C0E1B52DDEA000060CE /* Products */; productRefGroup = 84F22C0E1B52DDEA000060CE /* Products */;
@@ -615,7 +616,9 @@
CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_ARC = YES;
CLANG_STATIC_ANALYZER_MODE = deep; CLANG_STATIC_ANALYZER_MODE = deep;
CLANG_WARN_ASSIGN_ENUM = YES; CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -626,7 +629,11 @@
CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
@@ -684,7 +691,9 @@
CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_ARC = YES;
CLANG_STATIC_ANALYZER_MODE = deep; CLANG_STATIC_ANALYZER_MODE = deep;
CLANG_WARN_ASSIGN_ENUM = YES; CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -695,7 +704,11 @@
CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "0830" LastUpgradeVersion = "1200"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -27,6 +27,15 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84F22C0C1B52DDEA000060CE"
BuildableName = "RSXML2.framework"
BlueprintName = "RSXML2"
ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables> <Testables>
<TestableReference <TestableReference
skipped = "NO"> skipped = "NO">
@@ -39,17 +48,6 @@
</BuildableReference> </BuildableReference>
</TestableReference> </TestableReference>
</Testables> </Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84F22C0C1B52DDEA000060CE"
BuildableName = "RSXML2.framework"
BlueprintName = "RSXML2"
ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -70,8 +68,6 @@
ReferencedContainer = "container:RSXML2.xcodeproj"> ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "0830" LastUpgradeVersion = "1200"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -29,8 +29,6 @@
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES">
<Testables> <Testables>
</Testables> </Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -51,8 +49,6 @@
ReferencedContainer = "container:RSXML2.xcodeproj"> ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"

View File

@@ -23,6 +23,10 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSDictionary (RSXML) @interface NSDictionary (RSXML)
- (nullable id)rsxml_objectForCaseInsensitiveKey:(NSString *)key; - (nullable id)rsxml_objectForCaseInsensitiveKey:(NSString *)key;
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -24,6 +24,8 @@
@import Foundation; @import Foundation;
NS_ASSUME_NONNULL_BEGIN
@interface NSString (RSXML) @interface NSString (RSXML)
- (NSString *)rsxml_stringByDecodingHTMLEntities; - (NSString *)rsxml_stringByDecodingHTMLEntities;
@@ -32,3 +34,4 @@
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -22,7 +22,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#import "RSFeedParser.h" #import <RSXML2/RSFeedParser.h>
// <feed> <entry> // <feed> <entry>
// https://validator.w3.org/feed/docs/rfc4287.html // https://validator.w3.org/feed/docs/rfc4287.html

View File

@@ -22,7 +22,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#import "RSXMLParser.h" #import <RSXML2/RSXMLParser.h>
@class RSParsedFeed, RSParsedArticle; @class RSParsedFeed, RSParsedArticle;

View File

@@ -23,7 +23,7 @@
// SOFTWARE. // SOFTWARE.
@import Foundation; @import Foundation;
#import "RSXMLParser.h" #import <RSXML2/RSXMLParser.h>
@class RSHTMLMetadataAnchor; @class RSHTMLMetadataAnchor;

View File

@@ -31,6 +31,8 @@ typedef enum {
RSFeedTypeAtom RSFeedTypeAtom
} RSFeedType; } RSFeedType;
NS_ASSUME_NONNULL_BEGIN
RSFeedType RSFeedTypeFromLinkTypeAttribute(NSString * typeStr); RSFeedType RSFeedTypeFromLinkTypeAttribute(NSString * typeStr);
@@ -65,3 +67,5 @@ RSFeedType RSFeedTypeFromLinkTypeAttribute(NSString * typeStr);
@interface RSHTMLMetadataAnchor : RSHTMLMetadataLink // title: anchor text-value @interface RSHTMLMetadataAnchor : RSHTMLMetadataLink // title: anchor text-value
@property (nonatomic, copy, nullable) NSString *tooltip; @property (nonatomic, copy, nullable) NSString *tooltip;
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -23,7 +23,7 @@
// SOFTWARE. // SOFTWARE.
@import Foundation; @import Foundation;
#import "RSXMLParser.h" #import <RSXML2/RSXMLParser.h>
@class RSHTMLMetadata; @class RSHTMLMetadata;

View File

@@ -27,6 +27,8 @@
#define OPML_EXPORT 0 #define OPML_EXPORT 0
#endif #endif
NS_ASSUME_NONNULL_BEGIN
// OPML allows for arbitrary attributes. // OPML allows for arbitrary attributes.
// These are the common attributes in OPML files used as RSS subscription lists. // These are the common attributes in OPML files used as RSS subscription lists.
@@ -55,7 +57,7 @@
/// Sets a value in the internal dictionary (creates new empty dictionary if necessary). /// Sets a value in the internal dictionary (creates new empty dictionary if necessary).
- (void)setAttribute:(id)value forKey:(NSString *)key; - (void)setAttribute:(id)value forKey:(NSString *)key;
/// @return Value for key (case-independent). /// @return Value for key (case-independent).
- (id)attributeForKey:(NSString *)key; - (nullable id)attributeForKey:(NSString *)key;
/// Print object description for debugging purposes. /// Print object description for debugging purposes.
- (NSString *)recursiveDescription; - (NSString *)recursiveDescription;
@@ -64,3 +66,5 @@
- (NSXMLDocument *)exportXML; - (NSXMLDocument *)exportXML;
#endif #endif
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -22,7 +22,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#import "RSXMLParser.h" #import <RSXML2/RSXMLParser.h>
// <opml> <outline> // <opml> <outline>
// http://dev.opml.org/spec2.html#subscriptionLists // http://dev.opml.org/spec2.html#subscriptionLists

View File

@@ -24,6 +24,8 @@
@import Foundation; @import Foundation;
NS_ASSUME_NONNULL_BEGIN
/// Parsed result type for articles. Does contain article specific attributes like abstract and content. /// Parsed result type for articles. Does contain article specific attributes like abstract and content.
@interface RSParsedArticle : NSObject @interface RSParsedArticle : NSObject
@property (nonatomic, readonly, nonnull) NSURL *feedURL; @property (nonatomic, readonly, nonnull) NSURL *feedURL;
@@ -47,3 +49,4 @@
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -24,6 +24,8 @@
@import Foundation; @import Foundation;
NS_ASSUME_NONNULL_BEGIN
@class RSParsedArticle; @class RSParsedArticle;
/// Parsed result type for feeds. Does contain feed specific attributes and a sorted list or articles. /// Parsed result type for feeds. Does contain feed specific attributes and a sorted list or articles.
@@ -41,3 +43,5 @@
- (RSParsedArticle *)appendNewArticle; - (RSParsedArticle *)appendNewArticle;
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -22,7 +22,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE. // SOFTWARE.
#import "RSFeedParser.h" #import <RSXML2/RSFeedParser.h>
// <channel> <item> // <channel> <item>
// https://cyber.harvard.edu/rss/rss.html // https://cyber.harvard.edu/rss/rss.html

View File

@@ -23,7 +23,9 @@
// SOFTWARE. // SOFTWARE.
@import Foundation; @import Foundation;
#import "RSXMLParser.h" #import <RSXML2/RSXMLParser.h>
NS_ASSUME_NONNULL_BEGIN
@class RSXMLParser; @class RSXMLParser;
@@ -42,3 +44,5 @@
- (BOOL)canParseData; - (BOOL)canParseData;
@end @end
NS_ASSUME_NONNULL_END

View File

@@ -22,13 +22,15 @@
// SOFTWARE. // SOFTWARE.
@import Foundation; @import Foundation;
#import "RSSAXParser.h" #import <RSXML2/RSSAXParser.h>
#define EqualBytes(bytes1, bytes2, length) (memcmp(bytes1, bytes2, length) == 0) #define EqualBytes(bytes1, bytes2, length) (memcmp(bytes1, bytes2, length) == 0)
//#define EqualBytes(bytes1, bytes2, length) (!strncmp(bytes1, bytes2, length)) //#define EqualBytes(bytes1, bytes2, length) (!strncmp(bytes1, bytes2, length))
@class RSXMLData; @class RSXMLData;
NS_ASSUME_NONNULL_BEGIN
// --------------------------------------------------------------- // ---------------------------------------------------------------
// | MARK: - Parser Delegate // | MARK: - Parser Delegate
// --------------------------------------------------------------- // ---------------------------------------------------------------
@@ -55,7 +57,7 @@
/// @return @c YES if parser supports parsing HTML files. /// @return @c YES if parser supports parsing HTML files.
+ (BOOL)isHTMLParser; + (BOOL)isHTMLParser;
/// Will be called after the parsing is finished. @return Reference to parsed object. /// Will be called after the parsing is finished. @return Reference to parsed object.
- (id)xmlParserWillReturnDocument; - (nullable id)xmlParserWillReturnDocument;
@end @end
@@ -91,3 +93,4 @@
@end @end
NS_ASSUME_NONNULL_END