numfmt-xform.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const _ = require('../../../utils/under-dash');
  2. const defaultNumFormats = require('../../defaultnumformats');
  3. const BaseXform = require('../base-xform');
  4. function hashDefaultFormats() {
  5. const hash = {};
  6. _.each(defaultNumFormats, (dnf, id) => {
  7. if (dnf.f) {
  8. hash[dnf.f] = parseInt(id, 10);
  9. }
  10. // at some point, add the other cultures here...
  11. });
  12. return hash;
  13. }
  14. const defaultFmtHash = hashDefaultFormats();
  15. // NumFmt encapsulates translation between number format and xlsx
  16. class NumFmtXform extends BaseXform {
  17. constructor(id, formatCode) {
  18. super();
  19. this.id = id;
  20. this.formatCode = formatCode;
  21. }
  22. get tag() {
  23. return 'numFmt';
  24. }
  25. render(xmlStream, model) {
  26. xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});
  27. }
  28. parseOpen(node) {
  29. switch (node.name) {
  30. case 'numFmt':
  31. this.model = {
  32. id: parseInt(node.attributes.numFmtId, 10),
  33. formatCode: node.attributes.formatCode.replace(/[\\](.)/g, '$1'),
  34. };
  35. return true;
  36. default:
  37. return false;
  38. }
  39. }
  40. parseText() {}
  41. parseClose() {
  42. return false;
  43. }
  44. }
  45. NumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {
  46. return defaultFmtHash[formatCode];
  47. };
  48. NumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {
  49. return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;
  50. };
  51. module.exports = NumFmtXform;