|
85 | 85 |
|
86 | 86 | this.filever = 0; |
87 | 87 | this.datastr = ""; |
88 | | - if (filetype === pzl.FILE_PBOX_XML) { |
89 | | - this.xmldoc = new DOMParser().parseFromString( |
90 | | - '<?xml version="1.0" encoding="utf-8" ?><puzzle />', |
91 | | - "text/xml" |
92 | | - ); |
93 | | - var puzzlenode = this.xmldoc.querySelector("puzzle"); |
94 | | - puzzlenode.appendChild(this.createXMLNode("board")); |
95 | | - puzzlenode.appendChild(this.createXMLNode("answer")); |
96 | | - } |
97 | 88 |
|
98 | 89 | // メイン処理 |
99 | 90 | switch (filetype) { |
|
104 | 95 | } |
105 | 96 | break; |
106 | 97 |
|
107 | | - case pzl.FILE_PBOX: |
108 | | - this.kanpenSave(); |
109 | | - break; |
110 | | - |
111 | | - case pzl.FILE_PBOX_XML: |
112 | | - this.kanpenSaveXML(); |
113 | | - break; |
114 | | - |
115 | 98 | default: |
116 | 99 | throw Error("invalid filetype"); |
117 | 100 | } |
|
120 | 103 | pzl.filever = this.filever; |
121 | 104 | pzl.cols = bd.cols; |
122 | 105 | pzl.rows = bd.rows; |
123 | | - if (filetype !== pzl.FILE_PBOX_XML) { |
124 | | - pzl.body = this.datastr; |
125 | | - } else { |
126 | | - pzl.body = this.xmldoc; |
127 | | - } |
| 106 | + pzl.body = this.datastr; |
128 | 107 | pzl.metadata.update(puzzle.metadata); |
129 | 108 | if (option.history && filetype === pzl.FILE_PZPR) { |
130 | 109 | pzl.history = puzzle.opemgr.encodeHistory({ time: !!option.time }); |
|
139 | 118 | decodeData: throwNoImplementation, |
140 | 119 | encodeData: throwNoImplementation, |
141 | 120 | kanpenOpen: throwNoImplementation, |
142 | | - kanpenSave: throwNoImplementation, |
143 | 121 | kanpenOpenXML: throwNoImplementation, |
144 | | - kanpenSaveXML: throwNoImplementation, |
145 | 122 |
|
146 | 123 | //--------------------------------------------------------------------------- |
147 | 124 | // fio.decodeTrial() 仮置きデータを復旧する |
|
447 | 424 | // fio.decodeCellXMLBoard() 配列で、個別文字列から個別セルの設定を行う (XML board用) |
448 | 425 | // fio.decodeCellXMLBrow() 配列で、個別文字列から個別セルの設定を行う (XML board用) |
449 | 426 | // fio.decodeCellXMLArow() 配列で、個別文字列から個別セルの設定を行う (XML answer用) |
450 | | - // fio.encodeCellXMLBoard() 個別セルデータから個別文字列の設定を行う (XML board用) |
451 | | - // fio.encodeCellXMLBrow() 個別セルデータから個別文字列の設定を行う (XML board用) |
452 | | - // fio.encodeCellXMLArow() 個別セルデータから個別文字列の設定を行う (XML answer用) |
453 | | - // fio.createXMLNode() 指定されたattributeを持つXMLのノードを作成する |
454 | 427 | //--------------------------------------------------------------------------- |
455 | 428 | decodeCellXMLBoard: function(func) { |
456 | 429 | var nodes = this.xmldoc.querySelectorAll("board number"); |
|
465 | 438 | } |
466 | 439 | } |
467 | 440 | }, |
468 | | - encodeCellXMLBoard: function(func) { |
469 | | - var boardnode = this.xmldoc.querySelector("board"); |
470 | | - var bd = this.board; |
471 | | - for (var i = 0; i < bd.cell.length; i++) { |
472 | | - var cell = bd.cell[i], |
473 | | - val = func(cell); |
474 | | - if (val !== null) { |
475 | | - boardnode.appendChild( |
476 | | - this.createXMLNode("number", { |
477 | | - r: ((cell.by / 2) | 0) + 1, |
478 | | - c: ((cell.bx / 2) | 0) + 1, |
479 | | - n: val |
480 | | - }) |
481 | | - ); |
482 | | - } |
483 | | - } |
484 | | - }, |
485 | 441 |
|
486 | 442 | PBOX_ADJUST: 0, |
487 | 443 | decodeCellXMLBrow: function(func) { |
488 | 444 | this.decodeCellXMLrow_com(func, "board", "brow"); |
489 | 445 | }, |
490 | | - encodeCellXMLBrow: function(func) { |
491 | | - this.encodeCellXMLrow_com(func, "board", "brow"); |
492 | | - }, |
493 | 446 | decodeCellXMLArow: function(func) { |
494 | 447 | this.decodeCellXMLrow_com(func, "answer", "arow"); |
495 | 448 | }, |
496 | | - encodeCellXMLArow: function(func) { |
497 | | - this.encodeCellXMLrow_com(func, "answer", "arow"); |
498 | | - }, |
499 | 449 | decodeCellXMLrow_com: function(func, parentnodename, targetnodename) { |
500 | 450 | var rownodes = this.xmldoc.querySelectorAll( |
501 | 451 | parentnodename + " " + targetnodename |
|
522 | 472 | } |
523 | 473 | } |
524 | 474 | } |
525 | | - }, |
526 | | - encodeCellXMLrow_com: function(func, parentnodename, targetnodename) { |
527 | | - var boardnode = this.xmldoc.querySelector(parentnodename); |
528 | | - var ADJ = this.PBOX_ADJUST; |
529 | | - var bd = this.board; |
530 | | - for (var by = 1 - ADJ; by <= bd.maxby; by += 2) { |
531 | | - var rownode = this.createXMLNode(targetnodename, { |
532 | | - row: (((by + ADJ) / 2) | 0) + 1 |
533 | | - }); |
534 | | - for (var bx = 1 - ADJ; bx <= bd.maxbx; bx += 2) { |
535 | | - var piece = bd.getobj(bx, by), |
536 | | - nodename = func(piece), |
537 | | - node; |
538 | | - if (nodename.match(/n(\d\d+)/) || nodename.match(/n(\-\d+)/)) { |
539 | | - node = this.createXMLNode("n", { v: RegExp.$1 }); |
540 | | - } else if (nodename === "n0") { |
541 | | - node = this.createXMLNode("z"); |
542 | | - } else { |
543 | | - node = this.createXMLNode(nodename); |
544 | | - } |
545 | | - rownode.appendChild(node); |
546 | | - } |
547 | | - boardnode.appendChild(rownode); |
548 | | - } |
549 | | - }, |
550 | | - |
551 | | - createXMLNode: function(name, attrs) { |
552 | | - var node = this.xmldoc.createElement(name); |
553 | | - if (!!attrs) { |
554 | | - for (var i in attrs) { |
555 | | - node.setAttribute(i, attrs[i]); |
556 | | - } |
557 | | - } |
558 | | - return node; |
559 | 475 | } |
560 | 476 | } |
561 | 477 | }); |
|
0 commit comments