forked from sheetjs/sheetjs
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function parse_xlmeta_xml(data, name, opts) {
 | 
						|
  var out = { Types: [], Cell: [], Value: [] };
 | 
						|
  if (!data)
 | 
						|
    return out;
 | 
						|
  var pass = false;
 | 
						|
  var metatype = 2;
 | 
						|
  var lastmeta;
 | 
						|
  data.replace(tagregex, function(x) {
 | 
						|
    var y = parsexmltag(x);
 | 
						|
    switch (strip_ns(y[0])) {
 | 
						|
      case "<?xml":
 | 
						|
        break;
 | 
						|
      case "<metadata":
 | 
						|
      case "</metadata>":
 | 
						|
        break;
 | 
						|
      case "<metadataTypes":
 | 
						|
      case "</metadataTypes>":
 | 
						|
        break;
 | 
						|
      case "<metadataType":
 | 
						|
        out.Types.push({ name: y.name });
 | 
						|
        break;
 | 
						|
      case "</metadataType>":
 | 
						|
        break;
 | 
						|
      case "<futureMetadata":
 | 
						|
        for (var j = 0; j < out.Types.length; ++j)
 | 
						|
          if (out.Types[j].name == y.name)
 | 
						|
            lastmeta = out.Types[j];
 | 
						|
        break;
 | 
						|
      case "</futureMetadata>":
 | 
						|
        break;
 | 
						|
      case "<bk>":
 | 
						|
        break;
 | 
						|
      case "</bk>":
 | 
						|
        break;
 | 
						|
      case "<rc":
 | 
						|
        if (metatype == 1)
 | 
						|
          out.Cell.push({ type: out.Types[y.t - 1].name, index: +y.v });
 | 
						|
        else if (metatype == 0)
 | 
						|
          out.Value.push({ type: out.Types[y.t - 1].name, index: +y.v });
 | 
						|
        break;
 | 
						|
      case "</rc>":
 | 
						|
        break;
 | 
						|
      case "<cellMetadata":
 | 
						|
        metatype = 1;
 | 
						|
        break;
 | 
						|
      case "</cellMetadata>":
 | 
						|
        metatype = 2;
 | 
						|
        break;
 | 
						|
      case "<valueMetadata":
 | 
						|
        metatype = 0;
 | 
						|
        break;
 | 
						|
      case "</valueMetadata>":
 | 
						|
        metatype = 2;
 | 
						|
        break;
 | 
						|
      case "<extLst":
 | 
						|
      case "<extLst>":
 | 
						|
      case "</extLst>":
 | 
						|
      case "<extLst/>":
 | 
						|
        break;
 | 
						|
      case "<ext":
 | 
						|
        pass = true;
 | 
						|
        break;
 | 
						|
      case "</ext>":
 | 
						|
        pass = false;
 | 
						|
        break;
 | 
						|
      case "<rvb":
 | 
						|
        if (!lastmeta)
 | 
						|
          break;
 | 
						|
        if (!lastmeta.offsets)
 | 
						|
          lastmeta.offsets = [];
 | 
						|
        lastmeta.offsets.push(+y.i);
 | 
						|
        break;
 | 
						|
      default:
 | 
						|
        if (!pass && (opts == null ? void 0 : opts.WTF))
 | 
						|
          throw new Error("unrecognized " + y[0] + " in metadata");
 | 
						|
    }
 | 
						|
    return x;
 | 
						|
  });
 | 
						|
  return out;
 | 
						|
}
 | 
						|
function write_xlmeta_xml() {
 | 
						|
  var o = [XML_HEADER];
 | 
						|
  o.push('<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">\n  <metadataTypes count="1">\n    <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>\n  </metadataTypes>\n  <futureMetadata name="XLDAPR" count="1">\n    <bk>\n      <extLst>\n        <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">\n          <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>\n        </ext>\n      </extLst>\n    </bk>\n  </futureMetadata>\n  <cellMetadata count="1">\n    <bk>\n      <rc t="1" v="0"/>\n    </bk>\n  </cellMetadata>\n</metadata>');
 | 
						|
  return o.join("");
 | 
						|
}
 |