Violet's Devblog
메신저봇R v0.6.15a 패치노트 본문
에디터
- 따옴표 자동추가 알고리즘 개선: 커서 뒤에 알파벳, 숫자, 한글이 있으면 자동추가하지 않음, 커서 이전에 아직 닫히지 않은 문자열 리터럴이 있으면 자동추가하지 않음
아래는 직접 짠 문자열 닫힘 체크 함수인데, 검증해주시면 사랑해 드립니다(?)
str
: 탐색 대상 소스코드, start
: 탐색 시작 인덱스, isDoubleQuot
: 큰따옴표인지 작은따옴표인지
fun isQuotClosed(str: String, start: Int, isDoubleQuot: Boolean): Boolean{
var cursor = start
val quot = if(isDoubleQuot)'"' else '\''
var count = 0
var commentStarted = false
while(cursor>=0){
if(str[cursor] == '/' && cursor>=1 && str[cursor-1] == '*') {
if (count % 2 == 0) { // 지금까지 찾은 문자열이 모두 닫혀 있을 때
commentStarted = true // 역방향으로 탐색 중 블럭 주석의 끝을 만나면, 이건 진짜 주석의 끝인거임
}
}
if(!commentStarted){ // 주석의 시작을 만나기 전까진 패스
if(str[cursor] == quot){
// 인접한 이스케이프 문자를 셉니다
var cursor2 = cursor - 1
var backslashCount = 0
while (cursor2 >= 0) {
if (str[cursor2] == '\\') backslashCount++
else break
cursor2--
}
if(backslashCount%2==0){ // 인접한 이스케이프 문자가 0개거나 짝수개면 이스케이프 되지 않은 '진짜' 따옴표
count++
}
cursor = cursor2 + 1
} else if(str[cursor] == '\n'){
if(count%2==0) return true // 이전 줄 탐색하기 전에 이번 줄의 따옴표가 짝이 맞으면 (닫혀 있으면) 패스
if(cursor==0) break
if(str[cursor-1] != '\\') break // 따옴표 열고 \ 입력 후 개행했을때는 예외
}
} else {
if(str[cursor] == '*' && cursor>=1 && str[cursor-1] == '/') { // 주석의 시작을 만남
commentStarted = false
}
}
cursor--
}
if(commentStarted) return false
return count%2==0
}
'Android > 메신저봇' 카테고리의 다른 글
메신저봇R v0.6.17a 패치노트 (0) | 2020.03.11 |
---|---|
메신저봇R v0.6.16a 패치노트 (0) | 2020.03.10 |
메신저봇R v0.6.14a 패치노트 (0) | 2020.03.09 |
메신저봇R v0.6.13a 패치노트 (0) | 2020.03.09 |
메신저봇R v0.6.12a 패치노트 (0) | 2020.03.08 |
Comments