1119 |
1119 |
1120 |pos byte1| |
1120 |pos byte1| |
1121 |
1121 |
1122 pos := stream position. |
1122 pos := stream position. |
1123 stream atEnd ifTrue:[^ nil]. |
1123 stream atEnd ifTrue:[^ nil]. |
1124 byte1 := stream peek. |
1124 byte1 := stream peek asInteger. |
1125 "/ EF-BB-BF -> utf8 |
1125 "/ EF-BB-BF -> utf8 |
1126 byte1 == 16rEF ifTrue:[ |
1126 byte1 == 16rEF ifTrue:[ |
1127 stream next. |
1127 stream next. |
1128 stream peek == 16rBB ifTrue:[ |
1128 stream peek asInteger == 16rBB ifTrue:[ |
1129 stream next. |
1129 stream next. |
1130 stream next == 16rBF ifTrue:[ |
1130 stream next asInteger == 16rBF ifTrue:[ |
1131 ^ #utf8 |
1131 ^ #utf8 |
1132 ] |
1132 ] |
1133 ]. |
1133 ]. |
1134 stream position:pos. ^nil |
1134 stream position:pos. ^nil |
1135 ]. |
1135 ]. |
1136 "00-00-FE-FF big endian utf32" |
1136 "00-00-FE-FF big endian utf32" |
1137 byte1 == 16r00 ifTrue:[ |
1137 byte1 == 16r00 ifTrue:[ |
1138 stream next. |
1138 stream next. |
1139 stream peek == 16r00 ifTrue:[ |
1139 stream peek asInteger == 16r00 ifTrue:[ |
1140 stream next. |
1140 stream next. |
1141 stream peek == 16rFE ifTrue:[ |
1141 stream peek asInteger == 16rFE ifTrue:[ |
1142 stream next. |
1142 stream next. |
1143 stream next == 16rFF ifTrue:[ |
1143 stream next asInteger == 16rFF ifTrue:[ |
1144 ^ #utf32be |
1144 ^ #utf32be |
1145 ] |
1145 ] |
1146 ] |
1146 ] |
1147 ]. |
1147 ]. |
1148 stream position:pos. ^nil |
1148 stream position:pos. ^nil |
1149 ]. |
1149 ]. |
1150 |
1150 |
1151 "FF-FE little endian utf16 or utf32" |
1151 "FF-FE little endian utf16 or utf32" |
1152 byte1 == 16rFF ifTrue:[ |
1152 byte1 == 16rFF ifTrue:[ |
1153 stream next. |
1153 stream next. |
1154 stream peek == 16rFE ifTrue:[ |
1154 stream peek asInteger == 16rFE ifTrue:[ |
1155 stream next. |
1155 stream next. |
1156 stream peek == 0 ifTrue:[ |
1156 stream peek asInteger == 0 ifTrue:[ |
1157 stream next. |
1157 stream next. |
1158 stream next == 0 ifTrue:[ |
1158 stream next asInteger == 0 ifTrue:[ |
1159 "FF-FE-00-00 little endian utf32" |
1159 "FF-FE-00-00 little endian utf32" |
1160 ^ #utf32le. |
1160 ^ #utf32le. |
1161 ]. |
1161 ]. |
1162 stream skip:-2 |
1162 stream skip:-2 |
1163 ]. |
1163 ]. |