@@ -24,108 +24,108 @@ @class OFNumber; @class OFPair OF_GENERIC(FirstType, SecondType); @class OFString; /** - * @class OFURI OFURI.h ObjFW/OFURI.h + * @class OFIRI OFIRI.h ObjFW/OFIRI.h * - * @brief A class for parsing URIs as per RFC 3986 and accessing parts of it. + * @brief A class for parsing IRIs as per RFC 3987 and accessing parts of it. */ -@interface OFURI: OFObject +@interface OFIRI: OFObject { OFString *_scheme; OFString *_Nullable _percentEncodedHost; OFNumber *_Nullable _port; OFString *_Nullable _percentEncodedUser; OFString *_Nullable _percentEncodedPassword; OFString *_percentEncodedPath; OFString *_Nullable _percentEncodedQuery; OFString *_Nullable _percentEncodedFragment; - OF_RESERVE_IVARS(OFURI, 4) + OF_RESERVE_IVARS(OFIRI, 4) } /** - * @brief The scheme part of the URI. + * @brief The scheme part of the IRI. */ @property (readonly, copy, nonatomic) OFString *scheme; /** - * @brief The host part of the URI. + * @brief The host part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *host; /** - * @brief The host part of the URI in percent-encoded form. + * @brief The host part of the IRI in percent-encoded form. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *percentEncodedHost; /** - * @brief The port part of the URI. + * @brief The port part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFNumber *port; /** - * @brief The user part of the URI. + * @brief The user part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *user; /** - * @brief The user part of the URI in percent-encoded form. + * @brief The user part of the IRI in percent-encoded form. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *percentEncodedUser; /** - * @brief The password part of the URI. + * @brief The password part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *password; /** - * @brief The password part of the URI in percent-encoded form. + * @brief The password part of the IRI in percent-encoded form. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *percentEncodedPassword; /** - * @brief The path part of the URI. + * @brief The path part of the IRI. */ @property (readonly, copy, nonatomic) OFString *path; /** - * @brief The path part of the URI in percent-encoded form. + * @brief The path part of the IRI in percent-encoded form. */ @property (readonly, copy, nonatomic) OFString *percentEncodedPath; /** - * @brief The path of the URI split into components. + * @brief The path of the IRI split into components. * * The first component must always be `/` to designate the root. */ @property (readonly, copy, nonatomic) OFArray OF_GENERIC(OFString *) *pathComponents; /** - * @brief The last path component of the URI. + * @brief The last path component of the IRI. * * Returns the empty string if the path is the root. */ @property (readonly, copy, nonatomic) OFString *lastPathComponent; /** - * @brief The query part of the URI. + * @brief The query part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *query; /** - * @brief The query part of the URI in percent-encoded form. + * @brief The query part of the IRI in percent-encoded form. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *percentEncodedQuery; /** - * @brief The query part of the URI as an array. + * @brief The query part of the IRI as an array. * * For example, a query like `key1=value1&key2=value2` would correspond to the * following array: * * @[ @@ -137,251 +137,251 @@ */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFArray OF_GENERIC(OFPair OF_GENERIC(OFString *, OFString *) *) *queryItems; /** - * @brief The fragment part of the URI. + * @brief The fragment part of the IRI. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *fragment; /** - * @brief The fragment part of the URI in URI-encoded form. + * @brief The fragment part of the IRI in percent-encoded form. */ @property OF_NULLABLE_PROPERTY (readonly, copy, nonatomic) OFString *percentEncodedFragment; /** - * @brief The URI as a string. + * @brief The IRI as a string. */ @property (readonly, nonatomic) OFString *string; /** - * @brief The URI with relative subpaths resolved. + * @brief The IRI with relative subpaths resolved. */ -@property (readonly, nonatomic) OFURI *URIByStandardizingPath; +@property (readonly, nonatomic) OFIRI *IRIByStandardizingPath; #ifdef OF_HAVE_FILES /** - * @brief The local file system representation for a file URI. + * @brief The local file system representation for a file IRI. * - * @note This only exists for URIs with the file scheme and throws an exception + * @note This only exists for IRIs with the file scheme and throws an exception * otherwise. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *fileSystemRepresentation; #endif /** - * @brief Creates a new URI with the specified string. - * - * @param string A string describing a URI - * @return A new, autoreleased OFURI - * @throw OFInvalidFormatException The specified string is not a valid URI - * string - */ -+ (instancetype)URIWithString: (OFString *)string; - -/** - * @brief Creates a new URI with the specified string relative to the - * specified URI. - * - * @param string A string describing a relative or absolute URI - * @param URI An URI to which the string is relative - * @return A new, autoreleased OFURI - * @throw OFInvalidFormatException The specified string is not a valid URI - * string - */ -+ (instancetype)URIWithString: (OFString *)string relativeToURI: (OFURI *)URI; + * @brief Creates a new IRI with the specified string. + * + * @param string A string describing an IRI + * @return A new, autoreleased OFIRI + * @throw OFInvalidFormatException The specified string is not a valid IRI + * string + */ ++ (instancetype)IRIWithString: (OFString *)string; + +/** + * @brief Creates a new IRI with the specified string relative to the + * specified IRI. + * + * @param string A string describing a relative or absolute IRI + * @param IRI An IRI to which the string is relative + * @return A new, autoreleased OFIRI + * @throw OFInvalidFormatException The specified string is not a valid IRI + * string + */ ++ (instancetype)IRIWithString: (OFString *)string relativeToIRI: (OFIRI *)IRI; #ifdef OF_HAVE_FILES /** - * @brief Creates a new URI with the specified local file path. + * @brief Creates a new IRI with the specified local file path. * * If a directory exists at the specified path, a slash is appended if there is * no slash yet. * * @param path The local file path - * @return A new, autoreleased OFURI + * @return A new, autoreleased OFIRI * @throw OFInvalidFormatException The specified path is not a valid path */ -+ (instancetype)fileURIWithPath: (OFString *)path; ++ (instancetype)fileIRIWithPath: (OFString *)path; /** - * @brief Creates a new URI with the specified local file path. + * @brief Creates a new IRI with the specified local file path. * * @param path The local file path * @param isDirectory Whether the path is a directory, in which case a slash is * appened if there is no slash yet - * @return An initialized OFURI + * @return An initialized OFIRI */ -+ (instancetype)fileURIWithPath: (OFString *)path ++ (instancetype)fileIRIWithPath: (OFString *)path isDirectory: (bool)isDirectory; #endif /** - * @brief Initializes an already allocated OFURI with the specified string. + * @brief Initializes an already allocated OFIRI with the specified string. * - * @param string A string describing a URI - * @return An initialized OFURI - * @throw OFInvalidFormatException The specified string is not a valid URI + * @param string A string describing an IRI + * @return An initialized OFIRI + * @throw OFInvalidFormatException The specified string is not a valid IRI * string */ - (instancetype)initWithString: (OFString *)string; /** - * @brief Initializes an already allocated OFURI with the specified string and - * relative URI. + * @brief Initializes an already allocated OFIRI with the specified string and + * relative IRI. * - * @param string A string describing a relative or absolute URI - * @param URI A URI to which the string is relative - * @return An initialized OFURI - * @throw OFInvalidFormatException The specified string is not a valid URI + * @param string A string describing a relative or absolute IRI + * @param IRI An IRI to which the string is relative + * @return An initialized OFIRI + * @throw OFInvalidFormatException The specified string is not a valid IRI * string */ -- (instancetype)initWithString: (OFString *)string relativeToURI: (OFURI *)URI; +- (instancetype)initWithString: (OFString *)string relativeToIRI: (OFIRI *)IRI; #ifdef OF_HAVE_FILES /** - * @brief Initializes an already allocated OFURI with the specified local file + * @brief Initializes an already allocated OFIRI with the specified local file * path. * * If a directory exists at the specified path, a slash is appended if there is * no slash yet. * * @param path The local file path - * @return An initialized OFURI + * @return An initialized OFIRI * @throw OFInvalidFormatException The specified path is not a valid path */ -- (instancetype)initFileURIWithPath: (OFString *)path; +- (instancetype)initFileIRIWithPath: (OFString *)path; /** - * @brief Initializes an already allocated OFURI with the specified local file + * @brief Initializes an already allocated OFIRI with the specified local file * path. * * @param path The local file path * @param isDirectory Whether the path is a directory, in which case a slash is * appened if there is no slash yet - * @return An initialized OFURI + * @return An initialized OFIRI */ -- (instancetype)initFileURIWithPath: (OFString *)path +- (instancetype)initFileIRIWithPath: (OFString *)path isDirectory: (bool)isDirectory; #endif - (instancetype)init OF_UNAVAILABLE; /** - * @brief Returns a new URI with the specified path component appended. + * @brief Returns a new IRI with the specified path component appended. * - * If the URI is a file URI, the file system is queried whether the appended + * If the IRI is a file IRI, the file system is queried whether the appended * component is a directory. * * @param component The path component to append. If it starts with the slash, * the component is not appended, but replaces the path * instead. - * @return A new URI with the specified path component appended + * @return A new IRI with the specified path component appended */ -- (OFURI *)URIByAppendingPathComponent: (OFString *)component; +- (OFIRI *)IRIByAppendingPathComponent: (OFString *)component; /** - * @brief Returns a new URI with the specified path component appended. + * @brief Returns a new IRI with the specified path component appended. * * @param component The path component to append. If it starts with the slash, * the component is not appended, but replaces the path * instead. * @param isDirectory Whether the appended component is a directory, meaning - * that the URI path should have a trailing slash - * @return A new URI with the specified path component appended + * that the IRI path should have a trailing slash + * @return A new IRI with the specified path component appended */ -- (OFURI *)URIByAppendingPathComponent: (OFString *)component +- (OFIRI *)IRIByAppendingPathComponent: (OFString *)component isDirectory: (bool)isDirectory; @end -@interface OFCharacterSet (URICharacterSets) +@interface OFCharacterSet (IRICharacterSets) #ifdef OF_HAVE_CLASS_PROPERTIES @property (class, readonly, nonatomic) - OFCharacterSet *URISchemeAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIHostAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIUserAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIPasswordAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIPathAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIQueryAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIQueryKeyValueAllowedCharacterSet; -@property (class, readonly, nonatomic) - OFCharacterSet *URIFragmentAllowedCharacterSet; + OFCharacterSet *IRISchemeAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIHostAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIUserAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIPasswordAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIPathAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIQueryAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIQueryKeyValueAllowedCharacterSet; +@property (class, readonly, nonatomic) + OFCharacterSet *IRIFragmentAllowedCharacterSet; #endif /** - * @brief Returns the characters allowed in the scheme part of a URI. - * - * @return The characters allowed in the scheme part of a URI. - */ -+ (OFCharacterSet *)URISchemeAllowedCharacterSet; - -/** - * @brief Returns the characters allowed in the host part of a URI. - * - * @return The characters allowed in the host part of a URI. - */ -+ (OFCharacterSet *)URIHostAllowedCharacterSet; - -/** - * @brief Returns the characters allowed in the user part of a URI. - * - * @return The characters allowed in the user part of a URI. - */ -+ (OFCharacterSet *)URIUserAllowedCharacterSet; - -/** - * @brief Returns the characters allowed in the password part of a URI. - * - * @return The characters allowed in the password part of a URI. - */ -+ (OFCharacterSet *)URIPasswordAllowedCharacterSet; - -/** - * @brief Returns the characters allowed in the path part of a URI. - * - * @return The characters allowed in the path part of a URI. - */ -+ (OFCharacterSet *)URIPathAllowedCharacterSet; - -/** - * @brief Returns the characters allowed in the query part of a URI. - * - * @return The characters allowed in the query part of a URI. - */ -+ (OFCharacterSet *)URIQueryAllowedCharacterSet; + * @brief Returns the characters allowed in the scheme part of an IRI. + * + * @return The characters allowed in the scheme part of an IRI. + */ ++ (OFCharacterSet *)IRISchemeAllowedCharacterSet; + +/** + * @brief Returns the characters allowed in the host part of an IRI. + * + * @return The characters allowed in the host part of an IRI. + */ ++ (OFCharacterSet *)IRIHostAllowedCharacterSet; + +/** + * @brief Returns the characters allowed in the user part of an IRI. + * + * @return The characters allowed in the user part of an IRI. + */ ++ (OFCharacterSet *)IRIUserAllowedCharacterSet; + +/** + * @brief Returns the characters allowed in the password part of an IRI. + * + * @return The characters allowed in the password part of an IRI. + */ ++ (OFCharacterSet *)IRIPasswordAllowedCharacterSet; + +/** + * @brief Returns the characters allowed in the path part of an IRI. + * + * @return The characters allowed in the path part of an IRI. + */ ++ (OFCharacterSet *)IRIPathAllowedCharacterSet; + +/** + * @brief Returns the characters allowed in the query part of an IRI. + * + * @return The characters allowed in the query part of an IRI. + */ ++ (OFCharacterSet *)IRIQueryAllowedCharacterSet; /** * @brief Returns the characters allowed in a key/value in the query part of a - * URI. + * IRI. * - * @return The characters allowed in a key/value in the query part of a URI. + * @return The characters allowed in a key/value in the query part of an IRI. */ -+ (OFCharacterSet *)URIQueryKeyValueAllowedCharacterSet; ++ (OFCharacterSet *)IRIQueryKeyValueAllowedCharacterSet; /** - * @brief Returns the characters allowed in the fragment part of a URI. + * @brief Returns the characters allowed in the fragment part of an IRI. * - * @return The characters allowed in the fragment part of a URI. + * @return The characters allowed in the fragment part of an IRI. */ -+ (OFCharacterSet *)URIFragmentAllowedCharacterSet; ++ (OFCharacterSet *)IRIFragmentAllowedCharacterSet; @end #ifdef __cplusplus extern "C" { #endif -extern bool OFURIIsIPv6Host(OFString *host); -extern void OFURIVerifyIsEscaped(OFString *, OFCharacterSet *, bool); +extern bool OFIRIIsIPv6Host(OFString *host); +extern void OFIRIVerifyIsEscaped(OFString *, OFCharacterSet *, bool); #ifdef __cplusplus } #endif OF_ASSUME_NONNULL_END -#import "OFMutableURI.h" +#import "OFMutableIRI.h"