@@ -59,8 +59,8 @@ def pascal_objc(s):
59
59
"""
60
60
Convert pascal_case -> PascalCase
61
61
62
- Objective C uses pascal case, but there are e exceptions that it uppercases
63
- the entire segment: url, http, and https.
62
+ Objective C uses pascal case, but there are exceptions that it uppercases.
63
+ For example, it will uppercase the words " url", " http" , and " https" .
64
64
65
65
https://github.com/protocolbuffers/protobuf/blob/54176b26a9be6c9903b375596b778f51f5947921/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc#L91
66
66
@@ -78,14 +78,50 @@ def pascal_objc(s):
78
78
s = s .replace ("-" , "_" )
79
79
80
80
segments = []
81
- for segment in s .split ("_" ):
81
+ current = ""
82
+ last_char_was_number = False
83
+ last_char_was_lower = False
84
+ last_char_was_upper = False
85
+ for char in s .elems ():
86
+ if char .isdigit ():
87
+ if last_char_was_number :
88
+ segments .append (current )
89
+ current = ""
90
+ current += char
91
+ last_char_was_number = True
92
+ last_char_was_lower = False
93
+ last_char_was_upper = False
94
+ elif char .islower ():
95
+ if not last_char_was_lower and not last_char_was_upper :
96
+ segments .append (current )
97
+ current = ""
98
+ current += char
99
+ last_char_was_number = False
100
+ last_char_was_lower = True
101
+ last_char_was_upper = False
102
+ elif char .isupper ():
103
+ if not last_char_was_upper :
104
+ segments .append (current )
105
+ current = ""
106
+ current += char .lower ()
107
+ last_char_was_number = False
108
+ last_char_was_lower = False
109
+ last_char_was_upper = True
110
+ else :
111
+ last_char_was_number = False
112
+ last_char_was_lower = False
113
+ last_char_was_upper = False
114
+ segments .append (current )
115
+
116
+ new_segments = []
117
+ for segment in segments :
82
118
repl = _objc_upper_segments .get (segment )
83
119
if repl :
84
120
segment = repl
85
121
else :
86
122
segment = capitalize (segment )
87
- segments .append (segment )
88
- return "" .join (segments )
123
+ new_segments .append (segment )
124
+ return "" .join (new_segments )
89
125
90
126
def pascal_case (s ):
91
127
"""
0 commit comments