QR8bitByte.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import QRMode from "./QRMode.js";
  2. export default class QR8bitByte {
  3. mode = QRMode.MODE_8BIT_BYTE;
  4. data = null;
  5. parsedData = [];
  6. constructor(data) {
  7. this.data = data;
  8. for (var i = 0, l = this.data.length; i < l; i++) {
  9. var byteArray = [];
  10. var code = this.data.charCodeAt(i);
  11. if (code > 0x10000) {
  12. byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
  13. byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
  14. byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
  15. byteArray[3] = 0x80 | (code & 0x3F);
  16. } else if (code > 0x800) {
  17. byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
  18. byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
  19. byteArray[2] = 0x80 | (code & 0x3F);
  20. } else if (code > 0x80) {
  21. byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
  22. byteArray[1] = 0x80 | (code & 0x3F);
  23. } else {
  24. byteArray[0] = code;
  25. }
  26. this.parsedData.push(byteArray);
  27. }
  28. this.parsedData = Array.prototype.concat.apply([], this.parsedData);
  29. if (this.parsedData.length != this.data.length) {
  30. this.parsedData.unshift(191);
  31. this.parsedData.unshift(187);
  32. this.parsedData.unshift(239);
  33. }
  34. }
  35. getLength(buffer) {
  36. return this.parsedData.length;
  37. }
  38. write(buffer) {
  39. for (var i = 0, l = this.parsedData.length; i < l; i++) {
  40. buffer.put(this.parsedData[i], 8);
  41. }
  42. }
  43. }