Skip to content

Commit 408e0a5

Browse files
author
Денис Морозов
committed
Improve caclucating of count mask characters
1 parent ff6aacd commit 408e0a5

7 files changed

Lines changed: 47 additions & 31 deletions

File tree

Src/Core/Formatting/MaskFormatter/FTCMaskFormatter.m

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,20 @@ - (NSString *)rawFromFormatted:(NSString *)formattedValue
4646

4747
- (NSString *)formattedFromRaw:(NSString *)rawValue
4848
{
49-
NSString * const format = config.format;
49+
NSString * const mask = config.mask;
5050

51-
NSMutableString *formattedValue = [[NSMutableString alloc] initWithCapacity:format.length];
51+
NSMutableString *formattedValue = [[NSMutableString alloc] initWithCapacity:mask.length];
5252

53-
for( NSUInteger indexInFormat = 0, indexInRawValue = 0; indexInFormat < format.length; ++indexInFormat )
53+
for( NSUInteger indexInFormat = 0, indexInRawValue = 0; indexInFormat < mask.length; ++indexInFormat )
5454
{
5555
if( config.cutTail && indexInRawValue == rawValue.length )
5656
{
5757
break;
5858
}
5959

60-
if( config.maskCharacter != [format characterAtIndex:indexInFormat] || indexInRawValue >= rawValue.length )
60+
if( config.maskCharacter != [mask characterAtIndex:indexInFormat] || indexInRawValue >= rawValue.length )
6161
{
62-
unichar c = [format characterAtIndex:indexInFormat];
62+
unichar c = [mask characterAtIndex:indexInFormat];
6363
[formattedValue appendString:[FTCTextEntryFormattingStringUtils stringWithCharacter:c]];
6464
}
6565
else
@@ -122,9 +122,9 @@ - (NSUInteger)positionOfRawSymbolInFormattedValue:(const NSUInteger)rawNumber
122122

123123
NSUInteger currentPosition = 0;
124124

125-
for( NSUInteger i = 0; i < config.format.length; ++i )
125+
for( NSUInteger i = 0; i < config.mask.length; ++i )
126126
{
127-
if( config.maskCharacter != [config.format characterAtIndex:i] )
127+
if( config.maskCharacter != [config.mask characterAtIndex:i] )
128128
{
129129
continue;
130130
}
@@ -145,13 +145,13 @@ - (NSUInteger)positionOfRawSymbolInFormattedValue:(const NSUInteger)rawNumber
145145
- (nonnull NSString *)rawValueStringFromFormattedString:(nullable NSString *const)formattedString
146146
inFormattedRange:(const NSRange)range
147147
{
148-
NSString * const format = config.format;
148+
NSString * const mask = config.mask;
149149

150150
NSMutableString *rawString = [[NSMutableString alloc] init];
151151

152152
for( NSUInteger i = range.location; (i < range.location + range.length) && (i < formattedString.length); ++i )
153153
{
154-
if ( config.maskCharacter == [format characterAtIndex:i] && config.maskCharacter != [formattedString characterAtIndex:i] )
154+
if ( config.maskCharacter == [mask characterAtIndex:i] && config.maskCharacter != [formattedString characterAtIndex:i] )
155155
{
156156
unichar c = [formattedString characterAtIndex:i];
157157
[rawString appendString:[FTCTextEntryFormattingStringUtils stringWithCharacter:c]];

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterConfig.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ NS_ASSUME_NONNULL_BEGIN
2222

2323
@protocol FTCMaskFormatterConfig<NSObject>
2424

25-
@property (nonatomic, readonly) NSString *format;
25+
@property (nonatomic, readonly) NSString *mask;
2626
@property (nonatomic, readonly) unichar maskCharacter;
27+
@property (nonatomic, readonly) NSUInteger countMaskCharacters;
2728
@property (nonatomic, readonly) BOOL cutTail;
2829

2930
@end

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterGenericConfig.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ NS_ASSUME_NONNULL_BEGIN
2424

2525
@interface FTCMaskFormatterGenericConfig : NSObject<FTCMaskFormatterConfig>
2626

27-
@property (nonatomic, readwrite) unichar maskCharacter; // default '_'
2827
@property (nonatomic, readwrite) BOOL cutTail; // default NO
2928

3029
- (instancetype)initWithFormat:(NSString *)format NS_DESIGNATED_INITIALIZER;

Src/Core/Formatting/MaskFormatter/FTCMaskFormatterGenericConfig.m

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,39 @@
2222

2323
@implementation FTCMaskFormatterGenericConfig
2424

25-
@synthesize format = _format;
26-
27-
- (instancetype)init
28-
{
29-
assert( false && @"Won't happen" );
30-
return nil;
31-
}
25+
@synthesize mask = _mask;
26+
@synthesize maskCharacter = _maskCharacter;
27+
@synthesize countMaskCharacters = _countMaskCharacters;
3228

3329
- (instancetype)initWithFormat:(NSString *)format
3430
{
3531
assert( nil != format );
32+
assert( format.length > 1 );
3633

3734
self = [super init];
3835

39-
_format = format;
40-
_maskCharacter = '_';
36+
_mask = [format substringFromIndex:1];
37+
_maskCharacter = [format characterAtIndex:0];
4138
_cutTail = NO;
4239

40+
NSUInteger countMaskCharacters = 0;
41+
for( NSUInteger i = 0; i < _mask.length; ++i )
42+
{
43+
if( [_mask characterAtIndex:i] == _maskCharacter )
44+
{
45+
++countMaskCharacters;
46+
}
47+
}
48+
49+
_countMaskCharacters = countMaskCharacters;
50+
4351
return self;
4452
}
4553

54+
- (instancetype)init
55+
{
56+
assert( false && @"Won't happen" );
57+
return nil;
58+
}
59+
4660
@end

Src/Core/InputFiltering/LimitedLengthInputFilter/FTCLimitedLengthInputFilter.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
// SOFTWARE.
2020

21-
@import Foundation;
22-
2321
#import "FTCTextEntryEditingInputFilter.h"
2422
#import "FTCTextEntryNotEditingInputFilter.h"
2523

Src/FTCTextEntryFormattingConfigFactory.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ NS_ASSUME_NONNULL_BEGIN
99

1010
@interface FTCTextEntryFormattingConfigFactory : NSObject
1111

12-
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithFormat:(NSString *)format
13-
maskChar:(unichar)maskChar
14-
maskCharsCount:(NSUInteger)maskCharsCount;
12+
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithFormat:(NSString *)format NS_SWIFT_NAME( mobilePhoneConfig(with:) );
13+
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask
14+
maskChar:(unichar)maskChar NS_SWIFT_NAME( mobilePhoneConfig(with:maskChar:) );
1515

16-
+ (FTCTextEntryFormattingConfig *)moneyConfigWithCurrency:(nullable NSString *)currency onlyIntegral:(BOOL)onlyIntegral;
16+
+ (FTCTextEntryFormattingConfig *)moneyConfigWithCurrency:(nullable NSString *)currency
17+
onlyIntegral:(BOOL)onlyIntegral NS_SWIFT_NAME( moneyConfig(with:onlyIntegral:) );
1718

1819
- (instancetype)init NS_UNAVAILABLE;
1920

Src/FTCTextEntryFormattingConfigFactory.m

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@
1818
@implementation FTCTextEntryFormattingConfigFactory
1919

2020
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithFormat:(NSString *)format
21-
maskChar:(unichar)maskChar
22-
maskCharsCount:(NSUInteger)maskCharsCount
2321
{
2422
__auto_type maskConfig = [[FTCMaskFormatterGenericConfig alloc] initWithFormat:format];
25-
maskConfig.maskCharacter = maskChar;
2623

2724
__auto_type maskFormatter = [[FTCMaskFormatter alloc] initWithConfig:maskConfig];
28-
__auto_type inputFilter = [[FTCDigitsValueFilter alloc] initWithMaxLength:maskCharsCount];
25+
__auto_type inputFilter = [[FTCDigitsValueFilter alloc] initWithMaxLength:maskConfig.countMaskCharacters];
2926

3027
__auto_type formattingConfig = [[FTCTextEntryFormattingConfig alloc] init];
3128

@@ -37,6 +34,12 @@ + (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithFormat:(NSString *)format
3734
return formattingConfig;
3835
}
3936

37+
+ (FTCTextEntryFormattingConfig *)mobilePhoneConfigWithMask:(NSString *)mask
38+
maskChar:(unichar)maskChar
39+
{
40+
return [self mobilePhoneConfigWithFormat:[NSString stringWithFormat:@"%c%@", maskChar, mask]];
41+
}
42+
4043
+ (FTCTextEntryFormattingConfig *)moneyConfigWithCurrency:(nullable NSString *)currency onlyIntegral:(BOOL)onlyIntegral
4144
{
4245
__auto_type formattingConfig = [[FTCTextEntryFormattingConfig alloc] init];
@@ -64,4 +67,4 @@ - (instancetype)init
6467
return nil;
6568
}
6669

67-
@end
70+
@end

0 commit comments

Comments
 (0)