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