-- Converts tabs to spaces
function detab(text)
local tab_width = 4
local function rep(match)
local spaces = -match:len()
print("match:"..match)
while spaces<1 do spaces = spaces + tab_width end
print("Found "..spaces.." spaces")
return match .. string.rep(" ", spaces)
end
text = text:gsub("([^\n]-)\t", rep)
return text
end
str=' thisisa string'
--thiis is a string
print("length: "..str:len())
print(detab(str))
print(str:gsub("\t"," "))
markdown.lua의 코드 조각을 사용하여 탭을 공백으로 변환합니다 (이름에서 알 수 있듯이).
내가 알아 낸 점은 문자열을 검색하여 탭을 찾아 일치하는 부분 문자열을 'rep'
함수에 전달할 때까지 문자열을 검색한다는 것입니다. 더 이상 일치가 없을 때까지이 작업을 반복합니다.
루프는 while 루프에서 특히 rep 함수가 수행하는 작업을 파악하려고합니다.
왜 루프가 1
에 멈 춥니 까?
왜 카운트 업합니까?.
현저하게, 문자열의 공백 수를 계산합니다. 정확히 얼마나 수수께끼입니까?
출력을 마지막으로 gsub
대체 출력과 비교하면 차이점을 발견 할 수 있습니다.
Detab은 gsub
대체하지 않는 동안 문자 정렬을 유지 관리합니다. 그 이유는 무엇입니까?
보너스 질문. Scite에서 공백을 켜면 't'
이전의 탭이 세 번째 's'
이전 탭보다 긴 것을 알 수 있습니다. 왜 다른가요?루아에서이 detab 함수는 어떻게 작동합니까?
'로컬 스페이스 = tab_width - #match % tab_width' –