CharacterEncoder.st
changeset 24012 16660cbe8bf2
parent 24002 ac83f90e549c
child 24474 e08f13d39b3f
equal deleted inserted replaced
24011:c7b1d5bd2166 24012:16660cbe8bf2
  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             ].
  1167     ].
  1167     ].
  1168 
  1168 
  1169     "FE-FF big endian utf16"
  1169     "FE-FF big endian utf16"
  1170     byte1 == 16rFE ifTrue:[
  1170     byte1 == 16rFE ifTrue:[
  1171         stream next.
  1171         stream next.
  1172         stream next == 16rFF ifTrue:[
  1172         stream next asInteger == 16rFF ifTrue:[
  1173             ^ #utf16be
  1173             ^ #utf16be
  1174         ].
  1174         ].
  1175     ].
  1175     ].
  1176     stream position:pos.
  1176     stream position:pos.
  1177     ^ nil
  1177     ^ nil