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
```
```objc
RSXMLData *xmlData = [[RSXMLData alloc] initWithData:d urlString:@"https://www.example.org"];
// TODO: check xmlData.parserError
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:`.
```
```objc
[[xmlData getParser] parseAsync:^(RSParsedFeed *parsedDocument, NSError *error) {
// process feed items ...
}];

View File

@@ -417,8 +417,8 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
ORGANIZATIONNAME = "relikd";
LastUpgradeCheck = 1200;
ORGANIZATIONNAME = relikd;
TargetAttributes = {
84AD0C041E11B7D200B38510 = {
CreatedOnToolsVersion = 8.2.1;
@@ -435,10 +435,11 @@
};
buildConfigurationList = 84F22C071B52DDEA000060CE /* Build configuration list for PBXProject "RSXML2" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 84F22C031B52DDEA000060CE;
productRefGroup = 84F22C0E1B52DDEA000060CE /* Products */;
@@ -615,7 +616,9 @@
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_STATIC_ANALYZER_MODE = deep;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -626,7 +629,11 @@
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
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_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
@@ -684,7 +691,9 @@
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_STATIC_ANALYZER_MODE = deep;
CLANG_WARN_ASSIGN_ENUM = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
@@ -695,7 +704,11 @@
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
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_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
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"?>
<Scheme
LastUpgradeVersion = "0830"
LastUpgradeVersion = "1200"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -27,6 +27,15 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84F22C0C1B52DDEA000060CE"
BuildableName = "RSXML2.framework"
BlueprintName = "RSXML2"
ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
@@ -39,17 +48,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84F22C0C1B52DDEA000060CE"
BuildableName = "RSXML2.framework"
BlueprintName = "RSXML2"
ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
@@ -70,8 +68,6 @@
ReferencedContainer = "container:RSXML2.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"

View File

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

View File

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

View File

@@ -24,6 +24,8 @@
@import Foundation;
NS_ASSUME_NONNULL_BEGIN
@interface NSString (RSXML)
- (NSString *)rsxml_stringByDecodingHTMLEntities;
@@ -32,3 +34,4 @@
@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
// SOFTWARE.
#import "RSFeedParser.h"
#import <RSXML2/RSFeedParser.h>
// <feed> <entry>
// 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
// SOFTWARE.
#import "RSXMLParser.h"
#import <RSXML2/RSXMLParser.h>
@class RSParsedFeed, RSParsedArticle;

View File

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

View File

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

View File

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

View File

@@ -27,6 +27,8 @@
#define OPML_EXPORT 0
#endif
NS_ASSUME_NONNULL_BEGIN
// OPML allows for arbitrary attributes.
// 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).
- (void)setAttribute:(id)value forKey:(NSString *)key;
/// @return Value for key (case-independent).
- (id)attributeForKey:(NSString *)key;
- (nullable id)attributeForKey:(NSString *)key;
/// Print object description for debugging purposes.
- (NSString *)recursiveDescription;
@@ -64,3 +66,5 @@
- (NSXMLDocument *)exportXML;
#endif
@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
// SOFTWARE.
#import "RSXMLParser.h"
#import <RSXML2/RSXMLParser.h>
// <opml> <outline>
// http://dev.opml.org/spec2.html#subscriptionLists

View File

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

View File

@@ -24,6 +24,8 @@
@import Foundation;
NS_ASSUME_NONNULL_BEGIN
@class RSParsedArticle;
/// Parsed result type for feeds. Does contain feed specific attributes and a sorted list or articles.
@@ -41,3 +43,5 @@
- (RSParsedArticle *)appendNewArticle;
@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
// SOFTWARE.
#import "RSFeedParser.h"
#import <RSXML2/RSFeedParser.h>
// <channel> <item>
// https://cyber.harvard.edu/rss/rss.html

View File

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

View File

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