knu project
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

/*************************************************************************************************
* 프로그램명 : 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();
}
}