Ogólne#
TextDecoder#
W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w interfejsie TextDecoder.
Pojęcia#
Obiekt implementujący interfejs TextDecoder jest skojarzony z kodowaniemTD # (kodowanie), dekoderemTD # (dekoder), strumieniemTD # (strumień), flagą ignorowania BOM # (początkowo nieustawioną), flagą widzianego BOM # (początkowo nieustawioną), trybem błędu TD # (tryb błędu) [początkowo "replacement
"] oraz flagą braku wyczyszczenia # (początkowo nieustawioną).
Algorytmy#
serialize stream
Algorytm serializacji strumienia # (serialize stream) w dekoderze tekstowym textDecoder pobiera strumień stream i wykonuje następujące kroki:
- Niech output będzie pustym łańcuchem znakowym.
Dopóki (while) prawda:
- Niech token będzie wynikiem odczytu ze stream.
Jeśli kodowanieTD w textDecoder jest jednym z UTF-8, UTF-16BE i UTF-16LE oraz flaga ignorowania BOM i flaga widzianego BOM w textDecoder jest nieustawiona, to wykonaj poniższe podkroki:
- Jeśli token jest wartością
U+FEFF
, to ustaw flagę widzianego BOM w textDecoder. - W przeciwnym razie, jeśli token nie jest końcem strumienia, to ustaw flagę widzianego BOM w textDecoder i niech token następuje po output.
- W przeciwnym razie zwróć output.
- Jeśli token jest wartością
- W przeciwnym razie, jeśli token nie jest końcem strumienia, to niech token następuje po output.
- W przeciwnym razie zwróć output.
Powyższy algorytm celowo różni się w obszarze przechwytywania BOM względem algorytmu dekodowania stosowanego przez resztę platformy, aby dać użytkownikowi większą kontrolę (szczegóły).