<?php // (2023.12.15, 차재복, Cha Jae Bok, cjbword@gmailcom) 
// 용어해설 본문 출력 루틴
function body_text ($no, $abbr, $imgfilename, $dbi) {
	// 쿼리
	$embed_qry = "SELECT * from embed where no=$no";
	$embed_result = mysqli_query($dbi, $embed_qry);
		if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
	while ($embed_matched = mysqli_fetch_assoc($embed_result)) {
		$embed_arr[] = $embed_matched;
	}
	// 삽입 그림 또는 링크 또는 코드 또는 수식(MathJax) 교체, 번호 볼드체 적용, 끝하단에 추가 이미지 파일 보이기
	$abbr = str_embed_display($abbr,$embed_arr,$imgfilename);
	// 실제 mathjax 적용
	if ( ($left_bk=strpos($abbr,'[#')) and ($right_bk=strpos($abbr,'#]',$left_bk)) ) { 
		include_once "../base_utils/mathjax_config.php";
//		$abbr = mathjax_div_wrap($abbr);
		include_once "../base_utils/common_utils.php";
		$abbr = pair_delimiter($abbr,'[#','#]',array("<div style='display:inline-block;'>","</div>"));
	}
	if ( ($left_in=strpos($abbr,'{#')) and ($right_in=strpos($abbr,'#}',$left_in)) ) {
		include_once "../base_utils/mathjax_config.php";
	}
	echo $abbr;
}
// 용어해설 본문 출력 루틴
function body_text_return ($no, $abbr, $imgfilename, $dbi) {
	// 쿼리
	$embed_qry = "SELECT * from embed where no=$no";
	$embed_result = mysqli_query($dbi, $embed_qry);
		if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
	while ($embed_matched = mysqli_fetch_assoc($embed_result)) {
		$embed_arr[] = $embed_matched;
	}
	// 삽입 그림 또는 링크 또는 코드 또는 수식(MathJax) 교체, 번호 볼드체 적용, 끝하단에 추가 이미지 파일 보이기
	$abbr = str_embed_display($abbr,$embed_arr,$imgfilename);
	// 실제 mathjax 적용
	if ( ($left_bk=strpos($abbr,'[#')) and ($right_bk=strpos($abbr,'#]',$left_bk)) ) { 
		include_once "../base_utils/common_utils.php";
		$abbr = pair_delimiter($abbr,'[#','#]',array("<div style='display:inline-block;'>","</div>"));
	}
	return $abbr;
}
// 삽입 그림 또는 링크 또는 코드 또는 수식(MathJax) 교체, 번호 볼드체 적용, 끝하단에 추가 이미지 파일 보이기
function str_embed_display($abbr, $embed_arr, $imgfilename='', $bold_flag=true) {
	if (!empty($embed_arr) && count($embed_arr)>0) {
		foreach($embed_arr as $embeded) {
			// 해당 embed 가리키는 스트링 
			$searched="{[(".$embeded['in_no'].")]}";
			// 이미지
			if ( $embeded['type'] == 'g' ) {
				$replaced="<img src='/img_data/".$embeded['origin']."' border=0>";
			// 링크
			} elseif ( $embeded['type'] == 'l' ) {
				$url = parse_url($embeded['origin']);
				$url = ( !empty($url['scheme']) ? $embeded['origin'] : "http://".$embeded['origin'] );
				$replaced = "<a href='".$url."' target=new>".$embeded['text']."</a>";
			// 코드
			} elseif ( $embeded['type'] == 'c' ) {
				// 1 줄 이상 이면,
				if (substr_count($embeded['code'],chr(13).chr(10)) >0) {
					$replaced = "<pre style='display:inline-block; background-color:#eee; padding:2px 12px; font-family:Arial;'>";
                        $replaced .= htmlspecialchars($embeded['code'],ENT_QUOTES,'UTF-8',false);
                    $replaced .= "</pre>";
				// 1 줄 미만 이면,
				} else {
					$replaced = "<quote style=' margin-top:0; margin-bottom:0; padding:0; background-color:#eee;'>";
                        $replaced .= "<code style='font-family:Arial;letter-spacing:.1rem;'>";
                            $replaced .= htmlspecialchars($embeded['code'],ENT_QUOTES,'UTF-8',false);
                        $replaced .= "</code>";
                    $replaced .= "</quote>";
				}
			// mathjax
			} elseif ( $embeded['type'] == 'm' ) {
				$replaced = $embeded['code'];
			}
			$abbr = str_replace($searched,$replaced,$abbr);
		}
	}
	// 각 번호 라인에 볼드체 적용 
    if($bold_flag) $abbr = num_title_bold_v2($abbr);
	// `abbr_view.php` => `view.php` : 이전 작성 스크립트와의 호환성 고려
	$abbr = str_replace('abbr_view.php','view.php',$abbr);
	// 만일, 관련 이미지 소스 화일 있으면 하단에 보여주기
	if (! empty($imgfilename)) {
		$abbr = $abbr . "\n\r";
		$abbr = $abbr . "<img src='img_data/".$imgfilename."' border=0 >";
		$abbr = $abbr . "\n\r";
		$abbr = $abbr . "<br>";
	}
	return $abbr;
}
// 각 넘버링 볼드체 적용 루틴 
function num_title_bold_v1($abbr) {
	$remain = $abbr;
	for ($i=1; $i<=12; $i++) {
		if ($i==1) {
			$pos_1 = strpos($remain,"1. ");
		} else {
			$pos_1 = strpos($remain,"\r\n$i. ");
		}
		if ( $pos_1 === false ) break;
		$pos_2 = strpos($remain,"\r\n",$pos_1+1);
		$sub_str = substr($remain,$pos_1,$pos_2-$pos_1);
		$remain = str_replace($sub_str,"<b>".$sub_str."</b>",$remain);
	}
	return $remain;
}
// 각 넘버링 볼드체 적용 루틴 ver.2
function num_title_bold_v2($abbr) {
	// 정규 표현 패턴 : (^)=>최초, (\d+\. )=>(숫자.공백) 뒤에, (.+)=>임의 문자(`문자`,`숫자`,`_`,`@`,`쉼표(,)`,`따옴표(')`,`공백 문자(단,줄바꿈 제외)`)가 옴
	// $1,$2 (첫째,둘째 그룹화 변수)를 강조태그로 감싸줌 
	// /m : 매 줄 단위로 독립적으로 살펴봄
	$abbr = str_replace("\r\n","\n",$abbr); // 윈도우즈에서, \r이 문제를 일으킴
	$abbr = preg_replace("/^(\d+\. )(.+)/m","<b>$1$2</b>",$abbr);
	return $abbr;
}
?>