Implementation of NSURLComponents

This commit is contained in:
Gregory John Casamento 2019-08-06 02:03:45 -04:00
parent 8771837ff8
commit 3bdaaefc82
3 changed files with 207 additions and 170 deletions

View file

@ -670,8 +670,8 @@ GS_NSURLComponents_IVARS;
- (void) setPassword: (NSString *)password;
- (NSString *) path;
- (void) setPath: (NSString *)path;
- (NSString *) port;
- (void) setPort: (NSString *)port;
- (NSNumber *) port;
- (void) setPort: (NSNumber *)port;
- (NSString *) query;
- (void) setQuery: (NSString *)query;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_10, GS_API_LATEST)
@ -692,8 +692,6 @@ GS_NSURLComponents_IVARS;
- (void) setPercentEncodedPassword: (NSString *)password;
- (NSString *) percentEncodedPath;
- (void) setPercentEncodedPath: (NSString *)path;
- (NSString *) percentEncodedPort;
- (void) setPercentEncodedPort: (NSString *)port;
- (NSString *) percentEncodedQuery;
- (void) setPercentEncodedQuery: (NSString *)query;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_10, GS_API_LATEST)
@ -712,9 +710,6 @@ GS_NSURLComponents_IVARS;
- (NSRange) rangeOfPath;
- (NSRange) rangeOfPort;
- (NSRange) rangeOfQuery;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_10, GS_API_LATEST)
- (NSRange) rangeOfQueryItems;
#endif
- (NSRange) rangeOfScheme;
- (NSRange) rangeOfUser;

View file

@ -1,114 +0,0 @@
/* Definition of class NSURLComponents
Copyright (C) 2019 Free Software Foundation, Inc.
Written by: Gregory Casamento <greg.casamento@gmail.com>
Date: July 2019
This file is part of the GNUstep Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02111 USA.
*/
#ifndef _NSURLComponents_h_GNUSTEP_BASE_INCLUDE
#define _NSURLComponents_h_GNUSTEP_BASE_INCLUDE
#import <GNUstepBase/GSVersionMacros.h>
#import <Foundation/NSObject.h>
#if defined(__cplusplus)
extern "C" {
#endif
@class NSString, NSDictionary, NSArray;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_9, GS_API_LATEST)
@interface NSURLComponents : NSObject <NSCopying>
{
#if GS_EXPOSE(NSURLComponents)
#endif
#if GS_NONFRAGILE
# if defined(GS_NSURLComponents_IVARS)
@public
GS_NSURLComponents_IVARS;
# endif
#else
/* Pointer to private additional data used to avoid breaking ABI
* when we don't have the non-fragile ABI available.
* Use this mechanism rather than changing the instance variable
* layout (see Source/GSInternal.h for details).
*/
@private id _internal GS_UNUSED_IVAR;
#endif
}
// Creating URL components...
+ (instancetype) componentsWithString:(NSString *)URLString;
+ (instancetype) componentsWithURL:(NSURL *)url
resolvingAgainstBaseURL:(BOOL)resolve;
- (instancetype) init;
- (instancetype)initWithString:(NSString *)URLString;
- (instancetype)initWithURL:(NSURL *)url
resolvingAgainstBaseURL:(BOOL)resolve;
// Getting the URL
- (NSString *) string;
- (void) setString: (NSString *)urlString;
- (NSURL *) URL;
- (void) setURL: (NSURL *)url;
- (NSURL *)URLRelativeToURL: (NSURL *)baseURL;
// Accessing Components in Native Format
- (NSString *) fragment;
- (void) setFragment: (NSString *)fragment;
- (NSString *) host;
- (void) setHost: (NSString *)host;
- (NSString *) password;
- (void) setPassword: (NSString *)password;
- (NSString *) path;
- (void) setPath: (NSString *)path;
- (NSString *) port;
- (void) setPort: (NSString *)port;
- (NSString *) query;
- (void) setQuery: (NSString *)query;
- (NSArray *) queryItems;
- (void) setQueryItems: (NSArray *)queryItems;
- (NSString *) scheme;
- (void) setScheme: (NSString *)scheme;
- (NSString *) user;
- (void) setUser: (NSString *)user;
// Locating components of the URL string representation
- (NSRange) rangeOfFragment;
- (NSRange) rangeOfHost;
- (NSRange) rangeOfPassword;
- (NSRange) rangeOfPath;
- (NSRange) rangeOfPort;
- (NSRange) rangeOfQuery;
- (NSRange) rangeOfQueryItems;
- (NSRange) rangeOfScheme;
- (NSRange) rangeOfUser;
@end
#if defined(__cplusplus)
}
#endif
#endif /* GS_API_MACOSX */
#endif /* _NSURLComponents_h_GNUSTEP_BASE_INCLUDE */

View file

@ -36,6 +36,41 @@ function may be incorrect
* I've put 2 functions to make tests. You can add your own tests
* Some functions are not implemented
*/
#define GS_NSURLQueryItem_IVARS \
NSString *_name; \
NSString *_value;
#define GS_NSURLComponents_IVARS \
NSURL *_url; \
NSString *_fragment; \
NSString *_host; \
NSString *_password; \
NSString *_path; \
NSNumber *_port; \
NSString *_query; \
NSArray *_queryItems; \
NSString *_scheme; \
NSString *_user; \
NSString *_percentEncodedFragment; \
NSString *_percentEncodedHost; \
NSString *_percentEncodedPassword; \
NSString *_percentEncodedPath; \
NSNumber *_percentEncodedPort; \
NSString *_percentEncodedQuery; \
NSArray *_percentEncodedQueryItems; \
NSString *_percentEncodedScheme; \
NSString *_percentEncodedUser; \
NSRange _rangeOfFragment; \
NSRange _rangeOfHost; \
NSRange _rangeOfPassword; \
NSRange _rangeOfPath; \
NSRange _rangeOfPort; \
NSRange _rangeOfQuery; \
NSRange _rangeOfQueryItems; \
NSRange _rangeOfScheme; \
NSRange _rangeOfUser;
#import "common.h"
#define EXPOSE_NSURL_IVARS 1
#import "Foundation/NSArray.h"
@ -52,9 +87,14 @@ function may be incorrect
#import "Foundation/NSURL.h"
#import "Foundation/NSURLHandle.h"
#import "Foundation/NSValue.h"
#import "Foundation/NSCharacterSet.h"
#import "Foundation/NSString.h"
#import "GNUstepBase/NSURL+GNUstepBase.h"
#define GSInternal NSURLComponentsInternal
#include "GSInternal.h"
GS_PRIVATE_INTERNAL(NSURLComponents)
NSString * const NSURLErrorDomain = @"NSURLErrorDomain";
NSString * const NSErrorFailingURLStringKey = @"NSErrorFailingURLStringKey";
@ -2159,54 +2199,167 @@ static NSUInteger urlAlign;
return nil;
}
- (id) initWithCoder: (NSCoder *)acoder
{
return nil;
}
- (void) encodeWithCoder: (NSCoder *)acoder
{
}
- (id) copyWithZone: (NSZone *)zone
{
return nil;
}
@end
@implementation NSURLComponents
// Creating URL components...
+ (instancetype) componentsWithString:(NSString *)URLString
+ (instancetype) componentsWithString:(NSString *)urlString
{
return nil;
return [[NSURLComponents alloc] initWithString: urlString];
}
+ (instancetype) componentsWithURL:(NSURL *)url
resolvingAgainstBaseURL:(BOOL)resolve
{
return nil;
return [[NSURLComponents alloc] initWithURL: url
resolvingAgainstBaseURL: resolve];
}
- (instancetype) init
{
return nil;
self = [super init];
if (self != nil)
{
GS_CREATE_INTERNAL(NSURLComponents);
}
return self;
}
- (instancetype)initWithString:(NSString *)URLString
{
return nil;
self = [self init];
if (self != nil)
{
[self setString: URLString];
}
return self;
}
- (instancetype)initWithURL:(NSURL *)url
resolvingAgainstBaseURL:(BOOL)resolve
{
return nil;
NSURL *tempURL = url;
self = [self init];
if (self != nil)
{
if (resolve)
{
tempURL = [url absoluteURL];
}
[self setURL: tempURL];
}
return self;
}
- (void) dealloc
{
RELEASE(internal->_url);
RELEASE(internal->_fragment);
RELEASE(internal->_host);
RELEASE(internal->_password);
RELEASE(internal->_path);
RELEASE(internal->_port);
RELEASE(internal->_query);
RELEASE(internal->_queryItems);
RELEASE(internal->_scheme);
RELEASE(internal->_user);
RELEASE(internal->_percentEncodedFragment);
RELEASE(internal->_percentEncodedHost);
RELEASE(internal->_percentEncodedPassword);
RELEASE(internal->_percentEncodedPath);
RELEASE(internal->_percentEncodedPort);
RELEASE(internal->_percentEncodedQuery);
RELEASE(internal->_percentEncodedQueryItems);
RELEASE(internal->_percentEncodedScheme);
RELEASE(internal->_percentEncodedUser);
[super dealloc];
}
- (id) copyWithZone: (NSZone *)zone
{
return [[NSURLComponents allocWithZone: zone] initWithURL: [self URL]
resolvingAgainstBaseURL: NO];
}
// Getting the URL
- (NSString *) string
{
return nil;
return [internal->_url absoluteString];
}
- (void) setString: (NSString *)urlString
{
NSURL *url = [NSURL URLWithString: urlString];
[self setURL: url];
}
- (NSURL *) URL
{
return nil;
return internal->_url;
}
- (void) setURL: (NSURL *)url
{
ASSIGN(_url, url);
// components...
[self setFragment: [url fragment]];
[self setHost: [url host]];
[self setPassword: [url password]];
[self setPath: [url path]];
[self setPort: [url port]];
[self setQuery: [url query]];
[self setScheme: [url scheme]];
[self setUser: [url user]];
// Percent encoded portions...
[self setPercentEncodedFragment:
[[url fragment] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLFragmentAllowedCharacterSet]]];
[self setPercentEncodedHost:
[[url host] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLHostAllowedCharacterSet]]];
[self setPercentEncodedPassword:
[[url password] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPasswordAllowedCharacterSet]]];;
[self setPercentEncodedPath:
[[url path] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]];
[self setPercentEncodedQuery:
[[url query] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLQueryAllowedCharacterSet]]];
[self setPercentEncodedScheme:
[[url scheme] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]];
[self setPercentEncodedUser:
[[url user] stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLUserAllowedCharacterSet]]];;
// Find ranges
_rangeOfFragment = [[url absoluteString] rangeOfString: internal->_fragment];
_rangeOfHost = [[url absoluteString] rangeOfString: internal->_host];
_rangeOfPassword = [[url absoluteString] rangeOfString: internal->_password];
_rangeOfPath = [[url absoluteString] rangeOfString: internal->_path];
_rangeOfPort = [[url absoluteString] rangeOfString: [internal->_port stringValue]];
_rangeOfQuery = [[url absoluteString] rangeOfString: internal->_query];
_rangeOfScheme = [[url absoluteString] rangeOfString: internal->_scheme];
_rangeOfUser = [[url absoluteString] rangeOfString: internal->_user];
}
- (NSURL *)URLRelativeToURL: (NSURL *)baseURL
@ -2217,211 +2370,214 @@ static NSUInteger urlAlign;
// Accessing Components in Native Format
- (NSString *) fragment
{
return nil;
return internal->_fragment;
}
- (void) setFragment: (NSString *)fragment
{
ASSIGN(internal->_fragment, fragment);
}
- (NSString *) host
{
return nil;
return internal->_host;
}
- (void) setHost: (NSString *)host
{
ASSIGN(internal->_host, host);
}
- (NSString *) password
{
return nil;
return internal->_password;
}
- (void) setPassword: (NSString *)password
{
ASSIGN(internal->_password, password);
}
- (NSString *) path
{
return nil;
return internal->_path;
}
- (void) setPath: (NSString *)path
{
ASSIGN(internal->_path, path);
}
- (NSString *) port
- (NSNumber *) port
{
return nil;
return internal->_port;
}
- (void) setPort: (NSString *)port
- (void) setPort: (NSNumber *)port
{
ASSIGN(internal->_port, port);
}
- (NSString *) query
{
return nil;
return internal->_query;
}
- (void) setQuery: (NSString *)query
{
ASSIGN(internal->_query, query);
}
- (NSArray *) queryItems
{
return nil;
return internal->_queryItems;
}
- (void) setQueryItems: (NSArray *)queryItems
{
ASSIGN(internal->_queryItems, queryItems);
}
- (NSString *) scheme
{
return nil;
return internal->_scheme;
}
- (void) setScheme: (NSString *)scheme
{
ASSIGN(internal->_scheme, scheme);
}
- (NSString *) user
{
return nil;
return internal->_user;
}
- (void) setUser: (NSString *)user
{
ASSIGN(internal->_user, user);
}
// Accessing Components in PercentEncoded Format
- (NSString *) percentEncodedFragment
{
return nil;
return internal->_percentEncodedFragment;
}
- (void) setPercentEncodedFragment: (NSString *)fragment
{
ASSIGN(internal->_percentEncodedFragment, fragment);
}
- (NSString *) percentEncodedHost
{
return nil;
return internal->_percentEncodedHost;
}
- (void) setPercentEncodedHost: (NSString *)host
{
ASSIGN(internal->_percentEncodedHost, host);
}
- (NSString *) percentEncodedPassword
{
return nil;
return internal->_percentEncodedPassword;
}
- (void) setPercentEncodedPassword: (NSString *)password
{
ASSIGN(internal->_percentEncodedPassword, password);
}
- (NSString *) percentEncodedPath
{
return nil;
return internal->_percentEncodedPath;
}
- (void) setPercentEncodedPath: (NSString *)path
{
}
- (NSString *) percentEncodedPort
{
return nil;
}
- (void) setPercentEncodedPort: (NSString *)port
{
ASSIGN(internal->_percentEncodedPath, path);
}
- (NSString *) percentEncodedQuery
{
return nil;
return internal->_percentEncodedQuery;
}
- (void) setPercentEncodedQuery: (NSString *)query
{
ASSIGN(internal->_percentEncodedQuery, query);
}
- (NSArray *) percentEncodedQueryItems
{
return nil;
return internal->_percentEncodedQueryItems;
}
- (void) setPercentEncodedQueryItems: (NSArray *)queryItems
{
ASSIGN(internal->_percentEncodedQueryItems, queryItems);
}
- (NSString *) percentEncodedScheme
{
return nil;
return internal->_percentEncodedScheme;
}
- (void) setPercentEncodedScheme: (NSString *)scheme
{
ASSIGN(internal->_percentEncodedScheme, scheme);
}
- (NSString *) percentEncodedUser
{
return nil;
return internal->_percentEncodedUser;;
}
- (void) setPercentEncodedUser: (NSString *)user
{
ASSIGN(internal->_percentEncodedUser, user);
}
// Locating components of the URL string representation
- (NSRange) rangeOfFragment
{
return NSMakeRange(0,0);
return internal->_rangeOfFragment;
}
- (NSRange) rangeOfHost
{
return NSMakeRange(0,0);
return internal->_rangeOfHost;
}
- (NSRange) rangeOfPassword
{
return NSMakeRange(0,0);
return internal->_rangeOfPassword;
}
- (NSRange) rangeOfPath
{
return NSMakeRange(0,0);
return internal->_rangeOfPath;
}
- (NSRange) rangeOfPort
{
return NSMakeRange(0,0);
return internal->_rangeOfPort;
}
- (NSRange) rangeOfQuery
{
return NSMakeRange(0,0);
}
- (NSRange) rangeOfQueryItems
{
return NSMakeRange(0,0);
return internal->_rangeOfQuery;
}
- (NSRange) rangeOfScheme
{
return NSMakeRange(0,0);
return internal->_rangeOfScheme;
}
- (NSRange) rangeOfUser
{
return NSMakeRange(0,0);
return internal->_rangeOfUser;
}
@end