You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.7 KiB
187 lines
5.7 KiB
/************************************************************************************************* |
|
* 프로그램명 : MTableAnalysis.java 프로그램설명 : 집계문서 등록시 표의 각각의 셀을 분석해줌 작성자 : 강원중 작성일 : 2003.12.03 변경일 : 2004.09.16 |
|
**************************************************************************************************/ |
|
package kr.co.kihyun.moumi.doc.table; |
|
|
|
import kr.co.kihyun.moumi.doc.table.item.MItem; |
|
import kr.co.kihyun.text.html.Html; |
|
|
|
public class MTableAnalysis { |
|
|
|
/** |
|
* 0. 나누는 기준 동적표가 기준임 1. 보기 titleForm 추출 => <html>~ |
|
* <table> |
|
* <tr> |
|
* <td>~ (문서 양식의 title의 마지막) ~</td> |
|
* </tr> |
|
* 까지 2. 보기 dataForm 추출 => (문서 양식의 data가 시작되는 첫번째 |
|
* <tr> |
|
* <td>~~</td> |
|
* </tr> |
|
* 까지 3. 보기 tailForm 추출 => 마지막 |
|
* </table> |
|
* ~~ </html> ㄲ지 |
|
**/ |
|
|
|
/**************** 표 타이틀 폼 ***************/ |
|
StringBuilder titleFormBuf = new StringBuilder(); |
|
StringBuilder dataFormBuf = new StringBuilder(); |
|
StringBuilder tailFormBuf = new StringBuilder(); |
|
|
|
public MTableAnalysis() { |
|
} |
|
|
|
public MTableAnalysis(String form, int[] itemTypeList) { |
|
analysis(form, itemTypeList); |
|
} |
|
|
|
// 등적표 입력 TR에 title이 들어와도 됨 |
|
public void analysis(String form, final int[] itemTypeList) { |
|
|
|
if (form == null) |
|
return; |
|
|
|
int stTBIndex = 0; |
|
int edTBIndex = 0; |
|
int stTRIndex = 0; |
|
int edTRIndex = 0; |
|
int stTDIndex = 0; |
|
String edTB = "</table>"; |
|
String stTR = "<tr"; |
|
String edTR = "</tr>"; |
|
String stTD = "<td"; |
|
int tdIndex = 0; |
|
int itemAllCount = itemTypeList.length - 1; // 배열의 index가 0부터 시작하기 때문에... |
|
|
|
boolean isTitle = true; |
|
stTRIndex = form.indexOf(stTR, stTBIndex); |
|
if (stTRIndex == -1) |
|
return; |
|
edTRIndex = form.indexOf(edTR, stTRIndex); |
|
if (edTRIndex == -1) |
|
return; |
|
titleFormBuf.append(form.substring(0, stTRIndex)); |
|
|
|
while (stTRIndex != -1) { |
|
isTitle = true; |
|
stTDIndex = form.indexOf(stTD, stTRIndex); |
|
while (stTDIndex != -1 && stTDIndex < edTRIndex && tdIndex <= itemAllCount) { |
|
if (itemTypeList[tdIndex] > MItem.TITLE) |
|
isTitle = false; |
|
stTDIndex = form.indexOf(stTD, stTDIndex + stTD.length()); |
|
tdIndex++; |
|
} |
|
|
|
if (isTitle) { |
|
// titleFormBuf.append(titleBGColorInsert(form.substring(stTRIndex, edTRIndex+edTR.length()))); |
|
titleFormBuf.append(form.substring(stTRIndex, edTRIndex + edTR.length())); |
|
} else { |
|
dataFormBuf.append(form.substring(stTRIndex, edTRIndex + edTR.length())); |
|
} |
|
stTRIndex = form.indexOf(stTR, edTRIndex); |
|
if (stTRIndex == -1) |
|
break; |
|
edTRIndex = form.indexOf(edTR, stTRIndex); |
|
if (edTRIndex == -1) |
|
break; |
|
} |
|
edTBIndex = form.lastIndexOf(edTB); |
|
if (edTBIndex == -1) |
|
return; |
|
tailFormBuf.append(form.substring(edTBIndex, form.length())); |
|
} |
|
|
|
// title의 <tr></tr> 사이의 <td></td>에 BGColor을 집어 넣어주는 옵션 |
|
public String titleBGColorInsert(String rowStr) { |
|
return titleBGColorInsert(rowStr, Html.titleBGColor); |
|
} |
|
|
|
public String titleBGColorInsert(String rowStr, String bgcolor) { |
|
if (rowStr == null) |
|
return null; |
|
StringBuffer rowBuf = new StringBuffer(); |
|
int stTDIndex = 0; |
|
int edTDIndex = 0; |
|
|
|
while (true) { |
|
stTDIndex = rowStr.indexOf("<td"); |
|
if (stTDIndex == -1) |
|
break; |
|
edTDIndex = rowStr.indexOf(">", stTDIndex + 1); |
|
if (edTDIndex == -1) |
|
break; |
|
/****/ |
|
rowBuf.append(rowStr.substring(0, edTDIndex) + " bgcolor='" + bgcolor + "' align=center>"); |
|
rowStr = rowStr.substring(edTDIndex + 1, rowStr.length()); |
|
/****/ |
|
/*** |
|
* rowBuf.append(rowStr.substring(0, edTDIndex)+ ">"); rowStr = rowStr.substring(edTDIndex+1, |
|
* rowStr.length()); |
|
***/ |
|
} |
|
rowBuf.append(rowStr); |
|
return rowBuf.toString(); |
|
} |
|
|
|
// 동적인 표에서 data입력 라인에 title이 들어오면 안됨 |
|
public void analysis2(String form, int[] itemTypeList) { |
|
|
|
if (form == null) |
|
return; |
|
|
|
int stTDIndex; |
|
int edTDIndex; |
|
int stTRIndex; |
|
int edTRIndex; |
|
int itemAllCount = itemTypeList.length - 1; // 0부터 시작한 index의 마지막 값을 위해 -1를 적용함 |
|
|
|
for (int i = 0; i <= itemAllCount; i++) { |
|
stTDIndex = form.indexOf("<td"); |
|
if (stTDIndex == -1) |
|
break; |
|
edTDIndex = form.indexOf(">", stTDIndex + 1); |
|
if (edTDIndex == -1) |
|
break; |
|
|
|
if (itemTypeList[i] == MItem.TITLE) { // 타이틀일때 |
|
titleFormBuf.append(form.substring(0, edTDIndex)); |
|
titleFormBuf.append(" bgcolor='"); |
|
titleFormBuf.append(Html.titleBGColor); |
|
titleFormBuf.append("' align=center>"); |
|
} else if (itemTypeList[i] > MItem.TITLE) { // 타이틀일때 |
|
if (i > 0 && itemTypeList[i - 1] == MItem.TITLE) { |
|
stTRIndex = form.indexOf("<tr"); |
|
if (stTRIndex == -1) |
|
break; |
|
titleFormBuf.append(form.substring(0, stTRIndex)); // 출력되는 값들이 생성되는 곳 |
|
dataFormBuf.append(form.substring(stTRIndex, edTDIndex + 1)); // 출력되는 값들이 생성되는 곳 |
|
} else { |
|
if (i == itemAllCount) { |
|
edTRIndex = form.lastIndexOf("</tr>"); |
|
dataFormBuf.append(form.substring(0, edTRIndex + 5)); |
|
tailFormBuf.append(form.substring(edTRIndex + 5, form.length())); |
|
} else { |
|
dataFormBuf.append(form.substring(0, edTDIndex + 1)); // 출력되는 값들이 생성되는 곳 |
|
} |
|
} |
|
} |
|
|
|
form = form.substring(edTDIndex + 1, form.length()); |
|
} |
|
} |
|
|
|
// data가 입력되는 cell들(form) |
|
public String getTitleForm() { |
|
return titleFormBuf.toString(); |
|
} |
|
|
|
// data가 입력되는 cell들(form) |
|
public String getDataForm() { |
|
return dataFormBuf.toString(); |
|
} |
|
|
|
// 마지막 </table>의 끝부터 마지막 </html>까지 |
|
public String getTailForm() { |
|
return tailFormBuf.toString(); |
|
} |
|
}
|
|
|