1)
기존에 블럭식배치를 구성하고, 표현하는 것 까지는 진행했습니다만,
그 이후(?), 이 내용들을 어떻게 더 편하게(?) 쓸 수 있을까..를 고민해오다가

.. 만들고나니 편하긴(?) 합니다만,
(만들기 이전까지는 배치에만 몇시간을 매달려있었죠.. 지금은 배치만에 걸리는 시간이 30분 이내입니다..)

.. 이걸 설명하려고 하니 또 한세월 걸리겠군요..
최적화 작업은 나중으로 미루더라도,
적어놓는 것이 우선일 것 같아 올립니다.

...

2)

<script>

// init String's Function..
(function() {

// parseInt's trail version..
  String.prototype.intParse = function() {
    return parseInt(this);
  }

// appending replace..
  String.prototype.replaceAll = function() {
    var ov = this,
        i, ar = arguments,
        arl = ar.length;
    for (i = 0; i < arl; i += 2) {
      ov = ov.replace(ar[i], ar[i + 1]);
    }
    return ov;
  }

})();

// alert('1,2,3,4,'.replaceAll(/^\s*.*\s*,\s*.*\s*,\s*.*\s*,\s*.*\s*,/, '1'));

// on click, action & for Excel and prev source's converting..

function textpharse_120918_1(iv) {
  var i, a = [],
      v = document.all ? iv.innerHTML : iv.textContent,
      c, li, sv, b = [],
      j, ov, wRateAll, wRateHalfDefault, wRateHalfDefaultMinRate = 2
     
      // block's outer size.. = width - > maximum size, height : for getting size..
      ,
      matWidth = 540,
      matHeight = 540;

  if (!v) v = iv.value;

  // div lines (no check version (as string with numeric) )
  li = 0;
  for (i = 0; i < v.length; i++) {
    switch (c = v.charCodeAt(i)) {
    case 10:
      sv = v.substring(li, ei + 1);
      if (sv.charCodeAt(0) > 32) a.push(sv);
      ei = (li = i + 1);
      break;
    case 13:
      sv = v.substring(li, ei + 1);
      if (sv.charCodeAt(0) > 32) a.push(sv);
      ei = (li = i + 1);
      break;
    case 32:
      if (li == i) li++;
      break;
    default:
      ei = i;
      break;
    }
  }
  if (li < i) {
    sv = v.substring(li, ei + 1);
    if (sv.charCodeAt(0) > 32) a.push(sv);
  } // if no ending push, push..
  c = {};
  for (i = 0; i < a.length; i++) {
    switch (i % 3) {
      //      case 0 : c.title=(a[i].substr(2, 3)).replace(/_/g, '.'); break;
      //      case 0 : c.title=(a[i].substr(1, 2)).replace(/_/g, '.'); break;
      //      case 0 : c.title=(a[i].substr(7, a[i].length-13)).replace(/_/g, '.'); break;
    case 0:
      c.title = (a[i].substr(10, a[i].length - 16)).replace(/_/g, '.');
      break;
    case 1:
      break;
    case 2:
      if (a[i].charAt(a[i].length - 1) == ')') c.nums = a[i].substring(0, a[i].length - 1) + ',';
      else
      c.nums = a[i];
      b.push(c); // b[b.length]=c;
      c = {}; // c=new Object();
      break;
    }
  }

  wRateAll = 0;

  for (i = 0; i < b.length; i++) {
    c = b[i];
    sv = c.nums;
    li = sv.indexOf(',');
    c.left = sv.substring(0, li).intParse();
    j = sv.indexOf(',', li + 1);
    c.top = sv.substring(li + 1, j).intParse();
    li = sv.indexOf(',', j + 1);
    c.width = sv.substring(j + 1, li).intParse();
    j = sv.indexOf(',', li + 1);
    c.height = sv.substring(li + 1, j).intParse();
    li = sv.indexOf(',', j + 1);
    c.owidth = sv.substring(j + 1, li).intParse();
    j = sv.indexOf(',', li + 1);
    c.oheight = sv.substring(li + 1, j).intParse();

    wRateAll += (c.wRate = c.owidth / c.oheight);
  }

  ov = // 'default : v<'+'br/><'+'br/>
  ('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);

  for (i = 0; i < b.length; i++) {
    c = b[i];
    ov += '<'+'tr><'+'td>' + c.title + '<'+'/td><'+'td>' + c.owidth + '<'+'/td><'+'td>' + c.oheight + '<'+'/td><'+'td>=b' + (i + 1) + '/c' + (i + 1) + '<'+'/td><'+'td>=d' + (i + 1) + '/1.5<'+'/td><'+'/tr>';
  }
  ov += ('<'+'tr>fff<'+'td>c<'+'/td><'+'td>e<'+'/td>').replaceAll(/f/g, '<'+'td><'+'/td>', /c/, '=sum(D1:Da)', /a/, i, /e/, '=sum(E1:Ea)', /a/, i) + '<'+'/tr>';

  ov += '<'+'/table>';

  document.getElementById('output_120918_1').innerHTML = ov;


  // after set prevalues
  (function() {

    function ppPaste(ppv) {
      var ov = '',
          i, ppvl = ppv.length;

      for (i = 0; i < ppvl; i++) {
        ov += '<'+'br/>' + (ov ? ',' : '') + 'a~b/c:d = e'.replaceAll(/a/, ppv[i].start, /b/, ppv[i].compend, /c/, ppv[i].sum, /d/, ppv[i].gabcount, /e/, ppv[i].height);
      }
      return ov;
    }

    function s2cDiv(v) {
      var ov = [],
          vl = v.length;

      for (i = 0; i < vl; i++) {
        ov[i] = v.charAt(i);
      }

      return ov;
    }

    var bta = [],
        btaU = [];

    function twinmin(min, max) {
      var p, dv, q, r, s = 0;

      if (min >= max) {
        //  document.write(('<'+'br/><'+'br/>--!! minc maxd<'+'br/><'+'br/> ').replaceAll(/c/, min, /d/, max));
        return max;
      }

      p = parseInt(Math.log(max) / Math.log(10));

      while (1) {
        dv = 1;
        for (q = p; q > 0; q--) dv *= 10;
        for (q = p; q < 0; q++) dv /= 10;

        r = parseInt(max / dv) * dv;
        if (r >= max) r -= dv;
        //  document.write('<'+'br/>pa sb re minc maxd/ '.replaceAll(/a/, p, /b/, s, /e/, r, /c/, min, /d/, max));
        if (r > min) {
          // document.write('<'+'br/>');
          return s + r;
        }

        s += r;
        min -= r;
        max -= r;

        p--;
      }

      return min;
    }

    function btrace(bv, start, end, sum) {
      var i, isum = 0,
          p, j, iput;

      for (i = start; i < end; i++) {
        isum += (bta[i] = parseInt(bv[i].wRate * (matWidth - (end - start - 1) * 2) / sum));
        btaU[i - start] = (bta[i] + 1) / bv[i].wRate;
      }

      btaU.length = end - start;
      btaU.sort();

      p = matWidth - (end - start - 1) * 2 - isum;

      for (j = p - 1; j >= 0; j--) {
        if (btaU[j] != btaU[p]) break;
      }

      // document.write((j>=0)?('*ja [j]d pb [p]e <'+'br/>').replaceAll( /a/, j, /d/, btaU[j], /b/, p, /e/, btaU[p]):('minc *pb [p]e <'+'br/>').replaceAll( /b/, p, /e/, btaU[p], /c/, (matWidth-(end-start-1)*2)/sum));
      iput = (j >= 0 ? twinmin(btaU[j], btaU[p]) : twinmin((matWidth - (end - start - 1) * 2) / sum, btaU[p]));

      return iput;
    }

    var
    d, e = [],
        pp = [],
        f, i, j, k, leftv, topv, l, m, sum, gabcount, countmax, heightsum, heightmin, heightmax, heigthv, heightvalue, goodvalue, bl = b.length,
        ov, ov2, ov3, ov4, tv, tvFinal = '',
        ovFinal = '',
        aA = s2cDiv('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
        btv;

    for (i = 1; i < bl; i++) {
      e[i] = 0;
    }

    i = 1;
    goodvalue = 10; // for getting..
    // start of while
    while (i < bl) {

      // loop getter (by dim's bit..)
      if (e[i]) {
        e[i] = 0;
        i++;
        continue;
      } else {
        e[i] = 1;
        i = 1;
      }

      // line checker
      pp[k = 0] = l = {};
      l.start = 0;

      for (j = 1; j < bl; j++) {
        if (e[j]) continue;
        l.compend = j;
        k++;
        pp[k] = l = {};
        l.start = j;
      }
      l.compend = j;
      k++;
      pp.length = k;
      // end of line checker
      sum = 0;
      gabcount = 0;
      countmax = 6;
      heightsum = 0;
      heightmin = heightmax = 0; // for check
      k = 0;

      // precheck
      for (j = 0; j < bl; j++) {
        d = b[j]; // from out's value
        if ((j) && (!e[j])) {
          if (sum < wRateHalfDefault) break; // if line's sum<(sqrt(wRateAll)/wRateHalfDefaultMinRate), stop checking..
          pp[k].sum = sum;
          pp[k].gabcount = gabcount;
          heightsum += (
          heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);

          if (!heightmin) {
            heightmin = heightv;
            heightmax = heightv;
          } else {
            if (heightv < heightmin) heightmin = heightv;
            else if (heightv > heightmax) heightmax = heightv;
          }

          k++;
          sum = d.wRate;
          gabcount = 0;
        } else {
          sum += d.wRate;
          gabcount++;
        }
      }
      pp[k].sum = sum;
      pp[k].gabcount = gabcount;
      heightsum += (
      heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);

      if (!heightmin) {
        heightmin = heightv;
        heightmax = heightv;
      } else {
        if (heightv < heightmin) heightmin = heightv;
        else if (heightv > heightmax) heightmax = heightv;
      }

      if (gabcount > countmax) countmax = gabcount;
      k++;

      //    if (j)
      if (sum < wRateHalfDefault) {
        //       ov+='!'+sum+'!'
        continue; // step to next..
      }

      // end of precheck & precompute
      heightvalue =
      Math.abs(Math.log((heightsum * matWidth + k * 2) / matHeight)) + Math.abs(Math.log(heightmin / heightmax));

      if (goodvalue == 10) {
        goodvalue = heightvalue;
        // please set value
      } else {
        if (heightvalue < goodvalue) {
          goodvalue = heightvalue;
          // please set value
        }
      }

      //sum=0;
      k = 0;
      topv = 0;
      leftv = 0;

      l = 0;

      // ov=''; // ready print..
      //
      //
      //      for (j = 0; j < bl; j++) {
      //        d = b[j]; // from out's value
      //        if (!e[j]) { // j's rate is more few than e[j]..
      //          if (j) {
      //            ov += ('(v)<'+'br/>').replace(/v/, pp[k].sum /* sum */ );
      //            k++;
      //          }
      //        }
      //        ov += d.title.substring(0, 8) + ' / '; /*      sum=(e[j]?sum:0)+d.wRate;*/
      //        //        +d.owidth+' '+d.oheight+' '+(d.owidth/d.oheight)+' / ';
      //      }
      //
      //      ov += ('(v)<'+'br/>').replace(
      //          /v/, pp[k].sum /*sum*/
      //          )
      //        + 'v / v'.replaceAll(
      //          /v/, e, /v/, ppPaste(pp)
      //          )
      //        + '<'+'br/>--- abs(log(sum))' + Math.abs(Math.log(heightsum * matWidth + k * 2)/matWidth) + ' / sum' + heightsum
      //        + '<'+'br/> : abs(log(min/max))' + Math.abs(Math.log(heightmin / heightmax)) + ' min' + heightmin + ' max' + heightmax
      //        + '<'+'br/> : value' + heightvalue + ' ' + (heightvalue == goodvalue ? '***********found**********' : '')
      //        + '<'+'br/><'+'br/>';
      // ov='<'+'table border=1><'+'tr><'+'/tr><'+'tr>';
      ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
      ov2 = ov3 = ov4 = '<'+'tr>';
      tv = '';
      m = b.length;

      btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);

      for (j = 0; j < bl; j++) {

        d = b[j];
        if (!e[j]) {
          if (j) {

            while (l < countmax) {
              ov += '<'+'td><'+'/td>';
              ov2 += '<'+'td><'+'/td>';
              ov3 += '<'+'td><'+'/td>';
              ov4 += '<'+'td><'+'/td>';
              l++;
            }

            // document.write(ppPaste(pp));
            ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
            ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
            //               /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
            ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
            ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);

            ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr>';
            ov2 = ov3 = ov4 = '<'+'tr>';

            k++; // line's count
            topv += parseInt(btv) + 2;
            btv = btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
            leftv = 0;

            l = 0; // column position reset
          }
        }

        tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
        //  +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
        /a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';

        leftv += parseInt(btv * b[j].wRate) + 2;

        ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
        ov2 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=LOOKUP(ea, $A$1:$A$b, $D$1:$D$c)', /e/, aA[l], /a/, m + 3 + k * 5, /b/, m, /c/, m);
        ov3 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=INT(ea*$bc)', /e/, aA[l], /a/, m + 4 + k * 5, /b/, aA[countmax], /c/, m + 4 + k * 5);
        ov4 += ('<'+'td>v<'+'/td>').replaceAll(/v/, (l ? '=ab+ce+2' : '0'), /a/, aA[l - 1], /b/, m + 5 + k * 5, /c/, aA[l - 1], /e/, m + 6 + k * 5);

        l++; // td's count before countmax
      }

      // btv=btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
      while (l < countmax) {
        ov += '<'+'td><'+'/td>';
        ov2 += '<'+'td><'+'/td>';
        ov3 += '<'+'td><'+'/td>';
        ov4 += '<'+'td><'+'/td>';
        l++;
      }

      ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
      ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
      //        /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
      ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
      ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);

      ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr><'+'tr><'+'td colspan=' + (countmax + 3) + '>&nbsp;<'+'/td><'+'/tr><'+'/table>';

      if (heightvalue == goodvalue) {
        tvFinal = tv;
        ovFinal = ov;
      }

    }
    // end of while
    document.getElementById('output2_120918_1').innerHTML = ovFinal;
    document.getElementById('output3_120918_1').innerText = tvFinal;

    m = document.selection.createRange();
    m.moveToElementText(document.getElementById('selectArea_120918_1'));
    if (l > 0) if (confirm('select?')) m.select();
    //  if (prompt('select?')) m.select();
  })();
  // end of second function action
}
</script>
<textarea onclick=textpharse_120918_1(this); >'_2012-05-25-17.41.48.jpg',
'_2012-05-25-17.41.48.jpg documents...',
0, 0, 134, 100, 1019, 768,
'_2012-05-26-18.57.34.jpg',
'_2012-05-26-18.57.34.jpg documents...',
135, 0, 134, 100, 992, 768,
'_2012-05-26-19.24.59.jpg',
'_2012-05-26-19.24.59.jpg documents...',
270, 0, 134, 100, 1013, 768,
'_2012-05-26-19.30.57.jpg',
'_2012-05-26-19.30.57.jpg documents...',
405, 0, 134, 100, 1013, 768,
'_2012-05-26-19.33.35.jpg',
'_2012-05-26-19.33.35.jpg documents...',
0, 101, 179, 134, 1024, 768,
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg',
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg documents...',
180, 101, 179, 134, 1368, 2000,
'_2012-05-26-22.25.58.jpg',
'_2012-05-26-22.25.58.jpg documents...',
360, 101, 179, 134, 1011, 768,
'_2012-05-26-22.40.02.jpg',
'_2012-05-26-22.40.02.jpg documents...',
0, 236, 179, 134, 1002, 768,
'_2012-05-26-22.43.21.jpg',
'_2012-05-26-22.43.21.jpg documents...',
180, 236, 179, 134, 1024, 768,
'_2012-05-26-23.54.52.jpg',
'_2012-05-26-23.54.52.jpg documents...',
360, 236, 179, 134, 982, 768)
</textarea>

<div id=selectArea_120918_1>
<div id=output_120918_1></div>
<div id=output2_120918_1></div>
</div>
<hr/>
output<br/><textarea id=output3_120918_1 onclick=this.select(); ></textarea>



...

3)


output



...

4) 
부분부분 설명하자면,

**
  String.prototype.intParse = function() { .. }
  String.prototype.replaceAll = function() { .. } 

String 에 prototype 선언해서, .. trail 타입으로 적용하도록 했습니다.

**
function textpharse_120918_1(iv) { .. } 

클릭하면 작동(?) 시작합니다. 
.. 사실 외부(textarea onclick=.. )에서 부르는 함수는 요거 하나밖에 없어요. 

**
      // block's outer size.. = width - > maximum size, height : for getting size..
      ,matWidth = 540,matHeight = 540;

표준규격(?)으로 정해놓은 크기입니다. 
요걸 어떻게든 편하게 표현할 수 있도록 하는 게 문제겠군요.. 
(아직 object 형식으로 표현하는 것은 생각지 않고 있습니다..) 

**
  if (!v) v = iv.value;

chrome 용으로 임시 추가한 내용입니다. 
chrome 에서는 textarea 의 값이 .innerText 가 아니라 .value 더라구요. 
.. IE8 에서 속도문제(-.-..)때문에 작동 못할 땐 chrome 이라도 빌려(?)야하니까요.. 

**
  // div lines (no check version (as string with numeric) ) 
.. 

샘플.. 내용을 읽으실 수 있다면 아시겠지만, 
내용물의 구분을 LineFeed, CarriageReturn 등으로 하고 있습니다. ( .push(..) )

SPace 도 있긴 합니다만, 그건 마지막 글자 체크한다고 넣어둔 거라고 알고있습니다. 

**
  c = {};
.. 

각 항목의 .title .nums ..을 저장하는 곳입니다. 
, 'image src'
, 'image document'
, position let, position top, position width, position height, original width, original height [,oPL, oPT, oPW, oPH] ..
요런 순서라서요.. 

.title 에 들어가는 값에 가공한 흔적(?)이 있는데요,
그건 상황에 따라 값을 넣으면 될거라 생각됩니다.
(요것도 어떻게는 일반화 시켜야할 항목입니다.. 사진기마다 저장하는 파일명, 파일형식이 다 달라서요..)

**
  wRateAll = 0;
.. 

.title 에 이어서, .left .top .width .height .owidth .oheight .. 를 저장하는 곳입니다. 

wRateAll 은 전체값들의 세로대비 가로비율이죠. 가로로 나열한 후 최적화시킬 거라서요..

세로로 길쭉한 것도 포함해보고 싶었습니다만,
.. 아직 적용할 방법을 찾지 못해서요..

**
  ov = // 'default : v<'+'br/><'+'br/>
  ('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);

본격적으로 값 입력하기 시작입니다. 
.. 사실은 저 땐 <table> 요것만 들어가죠. 
v 값을 넣어둔 것은, 나중에 테스트용으로 사용하지않을까..싶어서에요. 

**
  for (i = 0; i < b.length; i++) {
    c = b[i];
.. 

각 사진들의 값들을 Excel 에 index 형식으로 올리는 곳입니다. 
요 아래 보시면 아시겠지만, '=sum(D1:Da)'.replace(/a/, i) 같은 부분은
사진 전체 갯수에 맞춰 몇번째줄까지 합을 계산하라는 Excel 계산식이니까요. 

Excel 로 보고, 계산이 안맞다(?) 싶으면, 부분부분부터 수정하려고 남겨놨던겁니다. 
.. 물론, 요 덕을 잘 보고 있습니다 ㅜ.ㅜ.. (버그가 있다는 얘기죠..) 

**
  document.getElementById('output_120918_1').innerHTML = ov;

그래서, 집계된 내용은 첫번째 출력물로 보냅니다. 
Excel 용 index 죠. 

**
  // after set prevalues
  (function() {
.. 

본격적으로 시작하는 내용입니다. 
이 이후에는 사각틀의 위치분석도 할겁니다. 

**
    function ppPaste(ppv) { .. } 

중간중간 함수체크용으로 냅뒀습니다. 
어디에서 어느 값이 어떻게 변하는지 체크할 필요가 있더라구요. 

**
    function s2cDiv(v) { .. } 

EXCEL 줄 말고 칸의 string 표시용으로 남겨놨습니다. 
string 의 charAt() 기능을 써도 됩니다만, 
그래도 array[0]='A'..형식이 빠를 것 같아서요.. 
1회용(?) 변환함수이긴 한데, 의미상으로 남겨놨다..는게 맞겠네요.

**
    function twinmin(min, max) { .. } 

min 값보다 크고, max 값에 가까운
글자상으로 최대한 작은 숫자를 찾으려고 한거죠. 

btrace 에서 출력값 마무리할 때 씁니다.

**
    function btrace(bv, start, end, sum) { .. } 

줄별(?)로 계산해보는 단계입니다.
표시될 사진 번호범위를 정해서, 대략값을 잡고 (보통, 이 값은 최대가로크기보다 작습니다..) 

대략값에서 몇번재 커진 값인지, 그리고 그 범위를 찾아
최적값을 출력하는거죠. 
( .sort() 가 왜 있었는지 이제야 이해가 되는군요.. ) 

물론, 정확도(같은 두께의 값이 나타날 확률..)에서 문제가 있긴 합니다만, 
.sort() 의 속도만 받아준다면, 크게 문제가 안되겠..다는 생각으로 만들어둔겁니다. 

**
      // loop getter (by dim's bit..) 
.. 

loop 도는 동안, 정의될 블록나누기 지점 변환과정입니다. 
일종의 카운터이긴 한데요, .. 2진화 시켜놨더니, 느리긴 느라더라구요. 
최소갯수의 법칙..을 미리 만들어둘 수 없는게 좀 문제긴 했군요.. 

1이면 다음줄 연장, 0이면 그 곳에서 끊긴다는 내용입니다.

**
      // line checker 
.. 

돌 때마다 object 를 만들어 line 을 표시하는군요.. 

같은 범위일 때..라는 조건을 넣는다면
다시쓰는 방법으로 최적화될 수 있을텐데..라는 아쉬움이 있습니다. 

**
      // precheck 
.. 

본격적으로 계산하기 전에 준비운동(?)한다는 내용인데요.. 

규격(?)이 생각과 너무 차이나면 건너띄고 (.. 처리시간 줄인다고 넣은 코드네요..)
그렇지 않다면 하던 준비 마저 한다는 내용이네요. 

** 
..
        if (heightvalue < goodvalue) { .. } 
.. 

최적화율을 체크하는 곳입니다. 
이후 공정은 냅두더라도, 기록 준비시작하는 곳이죠. 

**
      ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
.. 

기록 시작입니다. 

** 
      btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);

최적화 높이 받아서 

**
        if (!e[j]) {
..
            ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
.. 

끊는 위치이면 남은 공간 채워넣고 마무리하도록 하고,

** 
        tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
        //  +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
        /a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';

excel 쪽 말고, 원본변환용으로 준비도 하고 

**
        ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
.. 

줄별 칸도 준비하고..해서 

**
      if (heightvalue == goodvalue) { .. } 

값이 맞으면(?) 적용 최우선순위 맞춰놓고 

**
    document.getElementById('output2_120918_1').innerHTML = ovFinal;
    document.getElementById('output3_120918_1').innerText = tvFinal;

excel 용 한부(?), 원본변환용 한부 적용시킨 후 

**
    m = document.selection.createRange();
    m.moveToElementText(document.getElementById('selectArea_120918_1'));
    if (l > 0) if (confirm('select?')) m.select();
.. 

excel 용 한부 복사범위 잡겠느냐고 질문 던져(?)서, 
되면 복사범위를 잡습니다.

...

5)
위에 적어놓은

써먹은 범위 다시쓰기라든지,
세로 길쭉하게 적용 가능하게 한다든지..
아직 replace 를 적용하지 못한 부분을 적용해본다든지..같은
좀 복잡(?)한 숙제들이 남아있습니다만,

= =;.. 글쎄요.. 언제쯤 다시 재개할지는 모르겠네요.

easyBow killofki@.

Posted by killofki
,