diff --git a/Sources/HTMLAttributePolicy.h b/Sources/HTMLAttributePolicy.h
index 2f9c72b..4202500 100644
--- a/Sources/HTMLAttributePolicy.h
+++ b/Sources/HTMLAttributePolicy.h
@@ -8,6 +8,18 @@
#import
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString * _Nullable (^ SanitizeAttrbiuteValueBlock) (NSString * _Nullable value, NSString * key);
+
@interface HTMLAttributePolicy : NSObject
++ (instancetype)identity;
++ (instancetype)rejectAll;
++ (instancetype)policyWithBlock:(SanitizeAttrbiuteValueBlock)block;
+
+- (NSString *)sanitizeValue:(NSString *)value forKey:(NSString *)key;
+
@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Sources/HTMLAttributePolicy.m b/Sources/HTMLAttributePolicy.m
index 41eb99c..a4838e6 100644
--- a/Sources/HTMLAttributePolicy.m
+++ b/Sources/HTMLAttributePolicy.m
@@ -8,6 +8,49 @@
#import "HTMLAttributePolicy.h"
+@interface HTMLAttributePolicy()
+{
+ SanitizeAttrbiuteValueBlock _block;
+}
+@end
+
@implementation HTMLAttributePolicy
++ (instancetype)identity
+{
+ return [self policyWithBlock:^NSString * _Nullable (NSString * _Nullable value, NSString * _Nonnull key) {
+ return value;
+ }];
+}
+
++ (instancetype)rejectAll
+{
+ return [self policyWithBlock:^NSString * _Nullable (NSString * _Nullable value, NSString * _Nonnull key) {
+ return nil;
+ }];
+}
+
++ (instancetype)policyWithBlock:(SanitizeAttrbiuteValueBlock)block
+{
+ HTMLAttributePolicy *policy = [[HTMLAttributePolicy alloc] initWithBlock:block];
+ return policy;
+}
+
+- (instancetype)initWithBlock:(SanitizeAttrbiuteValueBlock)block
+{
+ self = [super init];
+ if (self) {
+ _block = block;
+ }
+ return self;
+}
+
+- (NSString *)sanitizeValue:(NSString *)value forKey:(NSString *)key
+{
+ if (_block) {
+ return _block(value, key);
+ }
+ return value;
+}
+
@end