Stream.st
branchjv
changeset 21387 e3865533e6a6
parent 21242 19fabe339f8b
parent 21321 6d9d1c27a9ce
child 21784 d58698c455c1
equal deleted inserted replaced
21331:1c4f9355fba3 21387:e3865533e6a6
  2523      b1 b2 b3 b4 b5|
  2523      b1 b2 b3 b4 b5|
  2524 
  2524 
  2525     codePoint := aCharacter codePoint.
  2525     codePoint := aCharacter codePoint.
  2526 
  2526 
  2527     codePoint <= 16r7F ifTrue:[
  2527     codePoint <= 16r7F ifTrue:[
       
  2528         "/ 7 bits - 1 byte    
  2528         self nextPut:aCharacter.
  2529         self nextPut:aCharacter.
  2529         ^ self.
  2530         ^ self.
  2530     ].
  2531     ].
  2531 
  2532     codePoint <= 16r7FF ifTrue:[
  2532     b1 := Character codePoint:((codePoint bitAnd:16r3F) bitOr:2r10000000).
  2533         "/ 11 bits - 2 byte sequence 5+6   
  2533     v := codePoint bitShift:-6.
  2534         self 
  2534     v <= 16r1F ifTrue:[
  2535             nextPut:(Character value:(((codePoint bitShift:-6) bitAnd:16r1F) bitOr:16rC0));
  2535         self nextPut:(Character value:(v bitOr:2r11000000)).
  2536             nextPut:(Character value:((codePoint bitAnd:16r3F) bitOr:16r80)).
  2536         self nextPut:b1.
       
  2537         ^ self.
  2537         ^ self.
  2538     ].
  2538     ].
  2539     b2 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
  2539     codePoint <= 16rFFFF ifTrue:[
  2540     v := v bitShift:-6.
  2540         "/ 16 bits - 3 byte sequence 4+6+6  
  2541     v <= 16r0F ifTrue:[
  2541         self 
  2542         self nextPut:(Character value:(v bitOr:2r11100000)).
  2542             nextPut:(Character value:(((codePoint bitShift:-12) bitAnd:16r0F) bitOr:16rE0));
  2543         self nextPut:b2; nextPut:b1.
  2543             nextPut:(Character value:(((codePoint bitShift:-6) bitAnd:16r3F) bitOr:16r80));
       
  2544             nextPut:(Character value:((codePoint bitAnd:16r3F) bitOr:16r80)).
  2544         ^ self.
  2545         ^ self.
  2545     ].
  2546     ].
  2546     b3 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
  2547     codePoint <= 16r1FFFFF ifTrue:[
  2547     v := v bitShift:-6.
  2548         "/ 21 bits - 4 byte sequence 3+6+6+6  
  2548     v <= 16r07 ifTrue:[
  2549         self 
  2549         self nextPut:(Character value:(v bitOr:2r11110000)).
  2550             nextPut:(Character value:(((codePoint bitShift:-18) bitAnd:16r07) bitOr:16rF0));
  2550         self nextPut:b3; nextPut:b2; nextPut:b1.
  2551             nextPut:(Character value:(((codePoint bitShift:-12) bitAnd:16r3F) bitOr:16r80));
       
  2552             nextPut:(Character value:(((codePoint bitShift:-6) bitAnd:16r3F) bitOr:16r80));
       
  2553             nextPut:(Character value:((codePoint bitAnd:16r3F) bitOr:16r80)).
  2551         ^ self.
  2554         ^ self.
  2552     ].
  2555     ].
  2553     b4 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
  2556     codePoint <= 16r1FFFFF ifTrue:[
  2554     v := v bitShift:-6.
  2557         "/ 26 bits - 5 byte sequence 2+6+6+6+6  
  2555     v <= 16r03 ifTrue:[
  2558         self 
  2556         self nextPut:(Character value:(v bitOr:2r11111000)).
  2559             nextPut:(Character value:(((codePoint bitShift:-24) bitAnd:16r03) bitOr:16rF8));
  2557         self nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
  2560             nextPut:(Character value:(((codePoint bitShift:-18) bitAnd:16r3F) bitOr:16r80));
       
  2561             nextPut:(Character value:(((codePoint bitShift:-12) bitAnd:16r3F) bitOr:16r80));
       
  2562             nextPut:(Character value:(((codePoint bitShift:-6) bitAnd:16r3F) bitOr:16r80));
       
  2563             nextPut:(Character value:((codePoint bitAnd:16r3F) bitOr:16r80)).
  2558         ^ self.
  2564         ^ self.
  2559     ].
  2565     ].
  2560     b5 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
  2566     codePoint <= 16r3FFFFFF ifTrue:[
  2561     v := v bitShift:-6.
  2567         "/ 31 bits - 6 byte sequence 1+6+6+6+6+6  
  2562     v <= 16r01 ifTrue:[
  2568         self 
  2563         self nextPut:(Character value:(v bitOr:2r11111100)).
  2569             nextPut:(Character value:(((codePoint bitShift:-30) bitAnd:16r01) bitOr:16rFC));
  2564         self nextPut:b5; nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
  2570             nextPut:(Character value:(((codePoint bitShift:-24) bitAnd:16r3F) bitOr:16r80));
       
  2571             nextPut:(Character value:(((codePoint bitShift:-18) bitAnd:16r3F) bitOr:16r80));
       
  2572             nextPut:(Character value:(((codePoint bitShift:-12) bitAnd:16r3F) bitOr:16r80));
       
  2573             nextPut:(Character value:(((codePoint bitShift:-6) bitAnd:16r3F) bitOr:16r80));
       
  2574             nextPut:(Character value:((codePoint bitAnd:16r3F) bitOr:16r80)).
  2565         ^ self.
  2575         ^ self.
  2566     ].
  2576     ].
       
  2577 
       
  2578 "/    b1 := Character codePoint:((codePoint bitAnd:16r3F) bitOr:2r10000000).
       
  2579 "/    v := codePoint bitShift:-6.
       
  2580 "/    v <= 16r1F ifTrue:[
       
  2581 "/        self nextPut:(Character value:(v bitOr:2r11000000)).
       
  2582 "/        self nextPut:b1.
       
  2583 "/        ^ self.
       
  2584 "/    ].
       
  2585 "/    b2 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
       
  2586 "/    v := v bitShift:-6.
       
  2587 "/    v <= 16r0F ifTrue:[
       
  2588 "/        self nextPut:(Character value:(v bitOr:2r11100000)).
       
  2589 "/        self nextPut:b2; nextPut:b1.
       
  2590 "/        ^ self.
       
  2591 "/    ].
       
  2592 "/    b3 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
       
  2593 "/    v := v bitShift:-6.
       
  2594 "/    v <= 16r07 ifTrue:[
       
  2595 "/        self nextPut:(Character value:(v bitOr:2r11110000)).
       
  2596 "/        self nextPut:b3; nextPut:b2; nextPut:b1.
       
  2597 "/        ^ self.
       
  2598 "/    ].
       
  2599 "/    b4 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
       
  2600 "/    v := v bitShift:-6.
       
  2601 "/    v <= 16r03 ifTrue:[
       
  2602 "/        self nextPut:(Character value:(v bitOr:2r11111000)).
       
  2603 "/        self nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
       
  2604 "/        ^ self.
       
  2605 "/    ].
       
  2606 "/    b5 := Character codePoint:((v bitAnd:16r3F) bitOr:2r10000000).
       
  2607 "/    v := v bitShift:-6.
       
  2608 "/    v <= 16r01 ifTrue:[
       
  2609 "/        self nextPut:(Character value:(v bitOr:2r11111100)).
       
  2610 "/        self nextPut:b5; nextPut:b4; nextPut:b3; nextPut:b2; nextPut:b1.
       
  2611 "/        ^ self.
       
  2612 "/    ].
  2567 
  2613 
  2568     EncodingError raiseWith:aCharacter errorString:'codePoint > 31bit in #nextPutUtf8:'.
  2614     EncodingError raiseWith:aCharacter errorString:'codePoint > 31bit in #nextPutUtf8:'.
  2569 
  2615 
  2570     "
  2616     "
  2571       (String streamContents:[:s|
  2617       (String streamContents:[:s|