1/** 2* Common JavaScript Library 3* 4* @Author : choe byungkook(sinbiweb) 5* @Update : 2018-05-31 6* @Email : [email protected] 7* @Description : Common Javascript Library 8*/ 9(function(){ 10 String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g, "");} //Trim 11 String.prototype.stripspace = function() { return this.replace(/ /g, ""); } //공백ì ê±° 12 String.prototype.getExt = function() { //íì¼ íì¥ì 구í기 13 var ext = this.substring(this.lastIndexOf(".") + 1, this.length); 14 return ext; 15 }; 16})(window); 17 18var CHandler = { 19 // íììì´ë ì í¨ì± ê²ì¬ // 20 chkUserID : function(obj) 21 { 22 if($.type(obj) === "string") 23 var id = obj; 24 else if($.type(obj) === "object") 25 var id = obj.val(); 26 27 var patten = /^[a-z]{1}[a-zA-Z0-9_-]{3,11}$/; //ì문ì문ìë¡ ììíë 4~12ì리ì ì문(ë,ì), ì«ì, _ ë§ íì©í¨. 28 if(!patten.test(id)) 29 return false; 30 else 31 return true; 32 }, 33 // ì´ë©ì¼ ì í¨ì± ê²ì¬ // 34 chkEmail : function(email) 35 { 36 if(email.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) 37 return true; 38 else 39 return false; 40 }, 41 // password check // 42 chkPassword : function(pw) 43 { 44 if(!/^[a-zA-Z0-9_!@#$%^&*()+=\/]{6,12}$/.test(pw) || pw.indexOf(' ') > -1) 45 { 46 //alert('ë¹ë°ë²í¸ë ì«ìì ì문ì ì¡°í©ì¼ë¡ 6~12ì리를 ì¬ì©í´ì¼ í©ëë¤.'); 47 return "111"; 48 } 49 50 var chk_num = pw.search(/[0-9]/g); 51 var chk_eng = pw.search(/[a-z]/ig); 52 53 if(chk_num < 0 || chk_eng < 0) 54 { 55 //alert('ë¹ë°ë²í¸ë ì«ìì ì문ì를 í¼ì©íì¬ì¼ í©ëë¤.'); 56 return "222"; 57 } 58 59 if(/(\w)\1\1\1/.test(pw)) 60 { 61 //alert('ë¹ë°ë²í¸ì ê°ì 문ì를 4ë² ì´ì ì¬ì©íì¤ ì ììµëë¤.'); 62 return "333"; 63 } 64 return "000"; 65 }, 66 // password confirm --- true or false // 67 validatePassword : function(pw) 68 { 69 if(pw.length < 1) 70 return false; 71 else if(this.chkPassword(pw) == "000") 72 return true; 73 else 74 return false; 75 }, 76 // Alphabet check // 77 chkAlphabet : function(str) 78 { 79 if(str.length < 1) return false; 80 str = str.toUpperCase(); 81 for(var i=0; i < str.length; i++) 82 { 83 if(!('A' <= str.charAt(i) && str.charAt(i) <= 'Z')) 84 return false; 85 } 86 87 return true; 88 }, 89 // íê¸ check // 90 chkHangul : function(str) 91 { 92 var patten = /[ê°-í£]/; 93 if(!patten.test(str)) 94 return false; 95 else 96 return true; 97 }, 98 // nickname check // 99 chkNickName : function(obj) 100 { 101 if($.type(obj) === "string") 102 var nic = obj; 103 else if($.type(obj) === "object") 104 var nic = obj.val(); 105 106 var patten = /^[A-Za-z0-9_ê°-í£]{3,20}$/; 107 if(!patten.test(nick)) 108 return false; 109 else 110 return true; 111 }, 112 // ip check // 113 chkIp : function($obj) 114 { 115 var ip = $obj.val(); 116 var filter = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/; 117 if(filter.test(ip) == true) 118 return true; 119 else 120 return false; 121 }, 122 // phone, mobile check 123 chkPhone : function(number) 124 { 125 var reg = /[-)(_]*/g; 126 var phone_num = String(number).replace(reg, ""); 127 if(phone_num.substring(1,2) == "2") 128 phone = phone_num.substring(0,2) + "-" + phone_num.substring(2, phone_num.length - 4) + "-" + phone_num.substring(phone_num.length - 4, phone_num.length); 129 else 130 phone = phone_num.substring(0,3) + "-" + phone_num.substring(3, phone_num.length - 4) + "-" + phone_num.substring(phone_num.length - 4, phone_num.length); 131 132 if(phone_num.substring(1,2) == "1") 133 phone = phone.trim().match(/^01[016789]{1}-[1-9]{1}[0-9]{2,3}-[0-9]{4}$/); 134 else 135 phone = phone.match(/^0[0-9]{1,2}-[1-9]{1}[0-9]{2,3}-[0-9]{4}$/); 136 137 return (phone) ? true : false; 138 }, 139 // file check // 140 chkFileType : function(obj) 141 { 142 var ext = obj.value.getExt().toLowerCase(); 143 var filetype = obj.getAttribute("filetype"); 144 145 if(filetype == "image") 146 { 147 if(ext != "gif" && ext != "jpg" && ext != "jpeg" && ext != "png") 148 { 149 alert("ì´ë¯¸ì§íì¼(gif, jpg, png)ë§ ì ë¡ë ê°ë¥í©ëë¤."); 150 obj.focus(); 151 return false; 152 } 153 }
154 else if(filetype) 155 { 156 if(ext != filetype) 157 { 158 alert(filetype+" íì¼ë§ ì ë¡ë ê°ë¥í©ëë¤."); 159 obj.focus(); 160 return false; 161 } 162 } 163 164 return true; 165 }, 166 // emoji check // 167 chkEmoji : function(str) 168 { 169 var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g; 170 171 172 if(regex.test(str)) 173 return true; // ì´ëª¨ì§(emoji) í¬í¨ë¨ 174 else 175 return false; // ì´ëª¨ì§(emoji) í¬í¨ ìë¨ 176 } 177}; 178 179var NumberHandler = { 180 chkNumber : function(number) 181 { 182 if(/(^\d+$)|(^\d+\.\d+$)/.test(number)) 183 return true; 184 else 185 return false; 186 }, 187 removePreZero : function(str) 188 { 189 var i, result; 190 if(str == "0") return str; 191 for(i=0; i < str.length; i++) 192 if(str.substr(i,1) != "0") break; 193 194 result = str.substr(i, str.length-i); 195 return result; 196 }, 197 stripChar : function(val, isDec) 198 { 199 var i; 200 var minus = "-"; 201 var number = "1234567890"+((isDec) ? "." : ""); 202 var result = ""; 203 for(i=0; i < val.length; i++) 204 { 205 chkno = val.charAt(i); 206 if(i == 0 && chkno == minus) 207 result += minus; 208 else 209 { 210 for(j=0; j < number.length; j++) 211 { 212 if(chkno == number.charAt(j)) 213 { 214 result += number.charAt(j); 215 break; 216 } 217 } 218 } 219 } 220 return result; 221 }, 222 stripComma : function(str) 223 { 224 var reg = /(,)*/g; 225 number = String(str).replace(reg, ""); 226 return number; 227 }, 228 NumberFormat : function(number) 229 { 230 var arr = new Array(); 231 number = String(number); 232 for(var i=1; i <= number.length; i++) 233 { 234 if(i%3) 235 arr[number.length-i] = number.charAt(number.length-i); 236 else 237 arr[number.length-i] = ","+number.charAt(number.length-i); 238 } 239 return arr.join('').replace(/^,/,''); 240 }, 241 // ììì ë°ì¬ë¦¼(number:ìì, cnt:ì릿ì) // 242 decimalRound : function(number, cnt) 243 { 244 if(!cnt) 245 return Math.round(number); 246 else if(cnt > 0) 247 { 248 for(var i=0; i < cnt; i++) 249 number = number * 10; 250 251 number = Math.round(number); 252 var avg = 1; 253 for(var i=0; i < cnt; i++) 254 avg = avg * 10; 255 256 number = number / avg; 257 return number; 258 } 259 else 260 { 261 for(var i=0; i < cnt*(-1); i++) 262 number = number / 10; 263 264 number = Math.round(number); 265 for(var i=0; i < cnt*(-1); i++) 266 number = number * 10; 267 268 return number; 269 } 270 }, 271 // ììì ì¬ë¦¼ (number:ìì, cnt:ì릿ì) // 272 decimalCeil : function(number, cnt) 273 { 274 if(!cnt) 275 return Math.ceil(number); 276 else if(cnt > 0) 277 { 278 for(var i=0; i < cnt; i++) 279 number = number * 10; 280 281 number = Math.ceil(number); 282 avg = 1; 283 for(var i=0; i < cnt; i++) 284 avg = avg * 10; 285 286 number = number / avg; 287 return number; 288 } 289 else 290 { 291 for(var i=0; i < cnt*(-1); i++) 292 number = number / 10; 293 294 number = Math.ceil(number); 295 for(var i=0; i < cnt*(-1); i++) 296 number = number * 10; 297 298 return number; 299 } 300 }, 301 decimalFloor : function(number) 302 { 303 var val = String(number); 304 var exval = val.split("."); 305 306 return exval[0]; 307 }, 308 // ììì ìë ì number_format 309 decimalNumerFormat : function(number) 310 { 311 var val = String(number); 312 var tmp = val.split("."); 313 if(tmp[0].length > 3) 314 { 315 var arNum = new Array(); 316 tmp[0] = String(tmp[0]); 317 for(var i=1; i <= tmp[0].length; i++) 318 { 319 if(i%3) 320 arNum[tmp[0].length-i] = tmp[0].charAt(tmp[0].length-i); 321 else 322 arNum[tmp[0].length-i] = "," + tmp[0].charAt(tmp[0].length-i); 323 } 324 325 if(tmp[1]) 326 return arNum.join("").replace(/^,/,'') + "." + tmp[1]; 327 else 328 return arNum.join("").replace(/^,/,''); 329 } 330 else 331 return number; 332 }, 333 // ë¨ì ì ì¬ (number:ì, unit:ë¨ì) // 334 digitCut : function(number, unit) 335 { 336 //unit = unit * 1000 337 unit = Math.pow(10, unit); 338 //alert(unit); 339 number = Math.floor(number/unit) * unit; 340 return number; 341 }, 342 toCurrency : function(obj) 343 { 344 if(obj.disabled) return false;
345 var num = obj.value.stripspace(); 346 if(num == "") return false; 347 if(!this.chkNumber(this.stripChar(num))) 348 { 349 num = this.stripChar(num, false); 350 obj.blur(); 351 obj.focus(); 352 } 353 num = this.stripChar(this.stripComma(num), false); 354 num = this.removePreZero(num); 355 obj.value = this.NumberFormat(num); 356 } 357}; 358 359var FHandler = { 360 FormChk : function(form) 361 { 362 var ele, expstr, chkval, ele_type, ele_val; 363 for(var i=0; i < form.elements.length; i++) 364 { 365 ele = form.elements[i]; 366 expstr = ele.getAttribute("exp"); 367 chkval = ele.getAttribute("chkval"); 368 ele_type = ele.type.toLowerCase(); 369 ele_val = ele.value; 370 371 if(expstr != null && expstr != "") 372 { 373 switch(ele_type) 374 { 375 case "hidden" : 376 if(ele_val.replace(/^\s*/,'').replace(/\s*$/, '') == "") 377 { 378 alert(expstr); 379 return false; 380 break; 381 } 382 break; 383 case "text" : case "password" : case "textarea" : 384 if(ele_val.replace(/^\s*/,'').replace(/\s*$/, '') == "" && ele.disabled == false) 385 { 386 alert(expstr + " ì ë ¥í´ ì£¼ì¸ì."); 387 ele.focus(); 388 return false; 389 break; 390 } 391 break; 392 case "select-one" : 393 if(ele_val == "" && ele.disabled == false) 394 { 395 alert(expstr + " ì íí´ ì£¼ì¸ì."); 396 ele.focus(); 397 return false; 398 break; 399 } 400 break; 401 case "radio" : 402 if($(":radio[name='"+ele.name+"']:checked").length < 1) 403 { 404 alert(expstr + " ì íí´ ì£¼ì¸ì."); 405 $(":radio[name='"+ele.name+"']").eq(0).focus(); 406 return false; 407 break; 408 } 409 break; 410 case "file" : 411 if(ele_val == "" && ele.disabled == false) 412 { 413 alert(expstr + " ì íí´ ì£¼ì¸ì."); 414 ele.focus(); 415 return false; 416 break; 417 } 418 else if(ele_val != "" && ele.getAttribute("filetype")) 419 { 420 if(!CHandler.chkFileType(ele)) 421 { 422 return false; 423 break; 424 } 425 } 426 break; 427 case "emoji" : 428 if(CHandler.chkEmoji(ele_val)) 429 { 430 alert("ì´ëª¨ì§(emoji)ë ì¬ì©íì¤ì ììµëë¤."); 431 ele.value = ""; 432 ele.focus(); 433 return false; 434 break; 435 } 436 break; 437 } 438 } 439 440 if(chkval != null && ele_val.length > 0) 441 { 442 switch(chkval) 443 { 444 case "id" : 445 if(!CHandler.chkUserID(ele_val)) 446 { 447 alert("ìì´ëíìì´ ë§ì§ ììµëë¤."); 448 ele.value = ""; 449 ele.focus(); 450 return false; 451 break; 452 } 453 break; 454 case "email" : 455 if(!CHandler.chkEmail(ele_val)) 456 { 457 alert("ë©ì¼íìì´ ë§ì§ ììµëë¤."); 458 ele.value = ""; 459 ele.focus(); 460 return false; 461 break; 462 } 463 break; 464 case "password" : 465 var result = CHandler.chkPassword(ele_val); 466 if(result != "000") 467 { 468 if(result == "111") 469 alert("ë¹ë°ë²í¸ë ì문,ì«ì를 í¬í¨í 6~12ì리를 ì¬ì©í´ì¼ í©ëë¤."); 470 else if(result == "222") 471 alert("ë¹ë°ë²í¸ë ì«ìì ì문ì를 í¼ì©íì ì¼ í©ëë¤."); 472 else if(result == "333") 473 alert("ë¹ë°ë²í¸ì ê°ì 문ì를 4ë²ì´ì ì¬ì©íì¤ì ììµëë¤."); 474 475 ele.value = ""; 476 ele.focus(); 477 return false; 478 break; 479 } 480 break; 481 case "pass_confirm" : 482 if(form.pass.value != ele_val) 483 { 484 alert("ë¹ë°ë²í¸ê° ì¼ì¹íì§ ììµëë¤."); 485 ele.value = ""; 486 ele.focus(); 487 return false; 488 break; 489 } 490 break; 491 case "alphabet" : 492 if(!CHandler.chkAlphabet(ele_val)) 493 { 494 alert("ìíë²³ì¼ë¡ë§ ì ë ¥í´ ì£¼ì¸ì."); 495 ele.value = ""; 496 ele.focus(); 497 return false; 498 break; 499 } 500 break; 501 case "number" : 502 if(!NumberHandler.chkNumber(ele_val)) 503 { 504 alert("ì«ìë¡ë§ ì ë ¥í´ ì£¼ì¸ì."); 505 ele.value = ""; 506 ele.focus(); 507 return false; 508 break; 509 } 510 break; 511 case "hangul" : 512 if(!CHandler.chkHangul(ele_val)) 513 { 514 alert("íê¸ë§ ì ë ¥ ê°ë¥í©ëë¤."); 515 ele.value = ""; 516 ele.focus(); 517 return false;
518 break; 519 } 520 break; 521 case "nick" : 522 if(!CHandler.chkNickName(ele_val)) 523 { 524 alert("ëë¤ì íìì´ ë§ì§ ììµëë¤."); 525 ele.value = ""; 526 ele.focus(); 527 return false; 528 break; 529 } 530 break; 531 case "phone" : 532 if(!CHandler.chkPhone(ele_val)) 533 { 534 alert("ì°ë½ì² íìì´ ë§ì§ ììµëë¤."); 535 ele.value = ""; 536 ele.focus(); 537 return false; 538 break; 539 } 540 break; 541 case "emoji" : 542 if(CHandler.chkEmoji(ele_val)) 543 { 544 alert("ì´ëª¨í°ì½ ë° ì´ëª¨ì§(emoji)ë ì¬ì©íì¤ì ììµëë¤."); 545 ele.value = ""; 546 ele.focus(); 547 return false; 548 break; 549 } 550 break; 551 } 552 } 553 } 554 555 if(typeof(myeditor) == "object") myeditor.outputBodyHTML(); 556 if(typeof(myeditor1) == "object") myeditor1.outputBodyHTML(); 557 if(typeof(myeditor2) == "object") myeditor2.outputBodyHTML(); 558 if(typeof(myeditor3) == "object") myeditor3.outputBodyHTML(); 559 if(typeof(myeditor4) == "object") myeditor4.outputBodyHTML(); 560 if(typeof(myeditor5) == "object") myeditor5.outputBodyHTML(); 561 if(typeof(myeditor6) == "object") myeditor6.outputBodyHTML(); 562 if(typeof(myeditor7) == "object") myeditor7.outputBodyHTML(); 563 return true; 564 } 565}; 566 567/** 568* íì í¨ì ì ì¸ 569*/ 570var Popup = { 571 open : function(url, name, opt) 572 { 573 var win = window.open(url, name, opt); 574 win.focus(); 575 }, 576 open2 : function(url, name, w, h, scroll) 577 { 578 var win = window.open(url, name, "width="+w+",height="+h+",scrollbars="+scroll); 579 }, 580 // full window popup // 581 open_f : function(url, name) 582 { 583 var w = screen.availWidth; 584 var h = screen.availHeight; 585 586 var win = window.open(url, name, "width="+w+", height="+h+", left=0, top=0, toolbar=no, nenubar=no, scrollbars=yes, resizable=no"); 587 } 588}; 589 590/** 591* ê³µíµí¨ì ì ì¸ 592*/ 593var Common = { 594 // toggle : block, none // 595 setToggle : function(id, mode) 596 { 597 if(mode) 598 $("#"+id).css("display", mode); 599 else 600 $("#"+id).css("display",(($("#"+id).css("display") != "none") ? "none" : "block")); 601 }, 602 // object disabled // 603 setDisabled : function($obj, bool) 604 { 605 if(bool) 606 { 607 if($obj.attr("type") == "checkbox") 608 $obj.prop("checked", false); 609 610 $obj.attr("disabled", true); 611 if($obj.attr("type") != "button") 612 $obj.css("backgroundColor", "#f1f1f1"); 613 } 614 else 615 { 616 $obj.attr("disabled", false); 617 if($obj.attr("type") != "button") 618 $obj.css("backgroundColor", "#ffffff"); 619 } 620 }, 621 /** 622 * hidden add 623 * @params : obj : form, name : hidden input ëª , val : ê° 624 */ 625 addHidden : function(obj, name, val) 626 { 627 var input = document.createElement("input"); 628 input.type = "hidden"; 629 input.name = name; 630 input.value = val; 631 632 obj.appendChild(input); 633 }, 634 /** 635 * select option all remove 636 * @params : object 637 */ 638 removeAllselectbox : function(obj) 639 { 640 for(var i=obj.length-1; i >= 0; i--) 641 Common.removeSelectList(obj, i); 642 }, 643 /** 644 * select option one remove 645 */ 646 removeSelectList : function(obj, i) 647 { 648 obj.remove(i); 649 }, 650 /** 651 * set cookie 652 * @params : cname(ì¿ í¤ëª ), cvalue(ê°), expiredays(기ê°) 653 */ 654 _setCookie : function(cname, cvalue, expiredays) 655 { 656 var cdate = new Date(); 657 cdate.setDate(cdate.getDate() + Number(expiredays)); 658 document.cookie = cname + "=" + escape(cvalue) + "; path=/; expires=" + cdate.toGMTString() + ";" 659 }, 660 /** 661 * get cookie 662 * @params : cname -> ì¿ í¤ëª 663 */ 664 _getCookie : function(cname) 665 { 666 var nameOfCookie = name + "="; 667 var x = 0; 668 while(x <= document.cookie.length) 669 { 670 var y = (x + nameOfCookie.length); 671 if(document.cookie.substring(x,y) == nameOfCookie) 672 { 673 if((endOfCookie = document.cookie.indexOf(";", y)) == -1) 674 endOfCookie = document.cookie.length; 675 676 return unescape(document.cookie.substring(y, endOfCookie)); 677 } 678 x = document.cookie.indexOf(" ", x) + 1; 679 if(x == 0) break; 680 } 681 return ""; 682 }, 683 _chgToggle : function(id, mode) 684 { 685 if(mode) 686 $("#"+id).css("display", $mode); 687 else 688 $("#"+id).css("display", (($("#"+id).css("display") != "none") ? "none" : "block")); 689 }, 690 _all_checked : function(el, bool) 691 { 692 $(":checkbox[name='"+el+"']:enabled").prop("checked", bool); 693 }, 694 _checked_all : function(obj, el) { 695 if(obj.checked == true) 696 $(":checkbox[name='"+el+"']:enabled").prop("checked", true); 697 else 698 $(":checkbox[name='"+el+"']:enabled").prop("checked", false); 699 }, 700 is_checked : function(el, msg) 701 { 702 if(!el) return; 703 704 if($(":checkbox[name='"+el+"']:checked").size() > 0) 705 return true; 706 else 707 { 708 msg = (msg) ? msg : "ì íë íëª©ì´ ììµëë¤."; 709 alert(msg); 710 $(":checkbox[name='"+el+"']").eq(0).focus(); 711 return false;
712 } 713 }, 714 set_date : function(s, e) 715 { 716 $(":text[name='sday']").val(s); 717 $(":text[name='eday']").val(e); 718 }, 719 win_resize : function(w, h) 720 { 721 var clintAgent = navigator.userAgent; 722 723 if(h == "") h = $("div#pwrap").prop("offsetHeight"); 724 if(clintAgent.indexOf("MSIE") != -1) 725 window.resizeBy(w - $("body").prop("clientWidth"), h - $("body").prop("clientHeight")); 726 else 727 window.resizeBy(w - window.innerWidth, h - $("body").prop("clientHeight")); 728 }, 729 _add_bookmark : function(url, tit) 730 { 731 var browser = navigator.userAgent.toLowerCase(); 732 if(window.sidebar) 733 window.sidebar.addPanel(tit, url, ""); 734 else if(window.external) 735 { 736 //IE 737 if(browser.indexOf("chrome") == -1) 738 window.external.AddFavorite(url, tit); 739 else 740 alert("CTRL + D ëë Command + D를 ëë¬ ì¦ê²¨ì°¾ê¸°ì ì¶ê°í´ì£¼ì¸ì."); 741 } 742 else if(window.opera && window.print) 743 return true; 744 else if(browser.indexOf("konqueror") != -1) 745 alert("CTRL + B를 ëë¬ ì¦ê²¨ì°¾ê¸°ì ì¶ê°í´ì£¼ì¸ì."); 746 else if(browser.indexOf("webkit") != -1) 747 alert("CTRL + B ëë Command + B를 ëë¬ ì¦ê²¨ì°¾ê¸°ì ì¶ê°í´ì£¼ì¸ì."); 748 else 749 alert("ì¬ì©íê³ ê³ìë ë¸ë¼ì°ì ììë ì´ ë²í¼ì¼ë¡ ì¦ê²¨ì°¾ê¸°ë¥¼ ì¶ê° í ì ììµëë¤."); 750 } 751};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.