<?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;
}
?>