-99,9 +99,9 |
: 글쎄요.. 그러면 애초부터 매크로를 mysign(네임,시간) 으로 지정한 것과 동일한 건가요? (제가 제대로 이해를 한건지..) 그럴 경우 예전에 했던 서명을 나중에 수정해 버릴 수 있기 때문에 옳지 않다고 생각합니다. 그걸 막으려면, 편집창에서는 mysign 으로, 내부적으로는 mysign(네임,시간) 으로, 출력할때는 div 어쩌고... 로 변환되어야 하는데.. 그래도 여전히 기존의 mysign 과 나중의 mysign 을 어찌 구분하느냐 하는 문제가 남고.. 음.. 암튼 복잡할 것 같네요. ^^ |
:: 제가 말씀드린 방식을 택하면 편집할 때 바로 mysign(네임,시간) 처럼 써도 마찬가지 결과가 나오겠죠. 하지만, 일단 아이디나 시간이 자동으로 들어가는 것 자체가 장점이 될 수 있을 겁니다. 매번 아이디와 시간을 입력해야 한다면 아무도 안쓰겠지요. 그리고 지금 처리하신 방식에서도 누군가가 고치자고 마음만 먹으면 고칠 수 있는건 마찬가지입니다. 그건 위키의 특성상 당연한 일이죠(제가 위의 제 mysign 결과로 나온 태그의 시간 부분을 수정할 수도 있지요). 하지만 제가 제안한 방식으로 하면 편집할 때 "이 부분은 매크로 처리가 되는 부분이다." 라고 사용자가 알 수 있고, "화면에 출력되는 양식은 화면에 출력할 때 결정할 수 있게 해주는게 좋다." 라고 하는 생각에 근거를 두고 있습니다. |
|
: 비슷한 맥락으로, syntax highlighting 역시, 지금처럼 매번 출력할 때 처리하는 게 아니라, 입력 직후에 code2html 을 불러서 html 출력을 얻어낸 후에 사용자 데이타를 그렇게 바꿔버린다면 훨씬 빨라지겠죠. 그렇지만 그 페이지를 다시 수정하기로 들어간다면.. 게다가 바로 그 {{{perl }}} 로 둘러쌓인 부분을 수정하려 한다면... 그래서 차마 도입하지 못하고 있습니다.. 음.. 출력시 변환되는 {{{ }}} 와 입력직후 치환되는 {{{ }}} 를 별도로 만들까요.. 아아.. 일이 일을 부르는.. ^^; |
: 비슷한 맥락으로, syntax highlighting 역시, 지금처럼 매번 출력할 때 처리하는 게 아니라, 입력 직후에 code2html 을 불러서 html 출력을 얻어낸 후에 사용자 데이타를 그렇게 바꿔버린다면 훨씬 빨라지겠죠. 그렇지만 그 페이지를 다시 수정하기로 들어간다면.. 게다가 바로 그 {{{#!vim perl }}} 로 둘러쌓인 부분을 수정하려 한다면... 그래서 차마 도입하지 못하고 있습니다.. 음.. 출력시 변환되는 {{{ }}} 와 입력직후 치환되는 {{{ }}} 를 별도로 만들까요.. 아아.. 일이 일을 부르는.. ^^; |
|
:: 위에서 말씀드렸듯이, 제 생각은 사용자가 입력한 내용을 마음대로 바꾸자는게 아니라, 사용자가 입력한 내용을 최소한으로 건드리고(이건 할 수 없고요), 위키에서는 출력할 때의 포맷만 결정해주자는 거지요. mysign의 경우는 뭔가 데이터를 저장해둬야 하는데 그 방법이 미리 태그까지 결정한 채로 저장하는게 아니라, 최소한의 정보만 붙여서 저장하고, 출력할 때 실제 태그를 적용하자는 겁니다. 지금 raymundo님이 구현하신 방법대로 하면 mysign은 저장할 때 포맷이 결정되고, {{{perl }}} 은 출력할 때 포맷이 결정되는겁니다. 제 생각에는 그게 불합리하다는 것이지요. 좀더 생각을 해봐야 할 문제 같습니다. |
:: 위에서 말씀드렸듯이, 제 생각은 사용자가 입력한 내용을 마음대로 바꾸자는게 아니라, 사용자가 입력한 내용을 최소한으로 건드리고(이건 할 수 없고요), 위키에서는 출력할 때의 포맷만 결정해주자는 거지요. mysign의 경우는 뭔가 데이터를 저장해둬야 하는데 그 방법이 미리 태그까지 결정한 채로 저장하는게 아니라, 최소한의 정보만 붙여서 저장하고, 출력할 때 실제 태그를 적용하자는 겁니다. 지금 raymundo님이 구현하신 방법대로 하면 mysign은 저장할 때 포맷이 결정되고, {{{#!vim perl }}} 은 출력할 때 포맷이 결정되는겁니다. 제 생각에는 그게 불합리하다는 것이지요. 좀더 생각을 해봐야 할 문제 같습니다. |
|
::: 아아.. 무슨 말씀인지 알겠습니다. :-) 아까는 이해를 잘 못하고 있었거든요. ^^ 말씀하신 내용이 상당히 합당하다고 생각됩니다. 정리하면, 사용자 입장에서는 mysign 이라고 해도 되고, mysign(이름,시간) 이라고 명시적으로 넣을 수도 있게 되고, (그렇지만 편한 쪽을 택할테니 mysign 쪽을 택하겠군요). 입력시 변환은 최소화하여서 mysign -> mysign(이름,시간) 까지만 변환을 하고, mysign(이름,시간)을 최종적으로 div 어쩌고로 변환하는 것은 출력시 변환 과정에 넣자..는 말씀이시로군요. 그리고 어차피 서명의 성격 운운하더라도, 맘만 먹으면 div 태그부터 직접 입력을 할 수 있으니 그게 그거이기도 하고요. |
|
-402,5 +402,50 |
|
: 음... 전 WikiX 의 방식이 링크가 눈에 띄지 않는다고 생각해서 덜 선호하는 편입니다만... config 에서 결정할 수 있게 하면 되겠네요. 방금 슬쩍 만져봤는데... 학교 가서 조금 더 손을 보면 될 것 같습니다. <mysign([[Raymundo]],2002-11-28 9:00 am)> |
|
== # 매크로 처리 시점의 문제 == |
|
[[Bab2]] 님이 발견한 문제를 살펴보다가 깨달은 것인데, 모든 매크로가 문제를 안고 있습니다. |
{{{ |
(줄앞에 공백이 하나 이상)<매크로> |
}}} |
위와 같이 작성할 경우, 일단 매크로가 동작하여 출력물로 치환된 후에, 저 줄 앞에 공백 때문에 치환된 결과의 첫번째 라인만 다시 pre 태그가 붙어 버립니다. 캘린더의 경우 제가 html 출력물이 보기 좋으라고 주요 태그마다 \n 으로 줄바꿈을 시켜놨더니만, 결과적으로 다음과 같이 된 거죠. |
{{{ |
(공백)<calendar()> |
요것이 변환되어 |
<pre> |
(공백이그대로남아있음)<table> |
</pre> |
<tr> |
... |
</table> |
}}} |
즉 첫번째 table 태그만 pre 로 둘러쌓이는 겁니다. 이 문제는 모든 매크로에 동일하게 적용됩니다. |
|
문제의 원인은, 매크로를 부르는 |
{{{ |
$_ = &MacroSubst($_); # Luke added |
}}} |
이 라인은 CommonMarkup 함수 안에 있습니다. 그런데 제가 {{{ }}} 태그를 만들기 위해서, WikiToHTML 함수내에서 CommonMarkup 과 WikiLinesToHtml 함수의 순서를 바꾸었습니다. 그래서 매크로 치환 이후에 WikiLinesToHTML 이 불리면서 저 pre 치환을 이뤄버립니다. |
|
매크로를 부르는 라인은 Luke 님이 넣은 것 같네요. 저 주석문을 보니... Luke 님의 K3 에서는 WikiLinesToHtml 이 먼저 불리고 그 다음에 CommonMarkup 이 불리게 되어 있기 때문에 그 때는 이런 문제는 없었을 겁니다. (하지만 직관적으로 봤을때 전체 마크업이 먼저고 라인 마크업이 나중에 오는 게 합당하다고 생각합니다. 또한 오리지날 UseModWiki 소스에서도 CommonMarkup 이 먼저 불리게 되어 있습니다) |
|
그렇다면 문제의 해결을 위해서는... 저 MacroSubst 호출 루틴을 CommonMarkup 함수 내가 아니라, WikiLinesToHTML 에 넣던가, 아니면 한 단계 위로 빼내어 두 함수를 차례대로 부르는 WikiToHTML 에 넣는 것을 생각해볼 수 있겠는데, 이게 어떤 부작용을 만들지 상상조차 되지 않는터라... ^^; 테스트하는데 시간이 좀 걸리겠습니다. 다른 분들도 소스를 들여다보며 같이 고민 좀 해주시면 고맙겠죠. :-) <mysign([[Raymundo]],2002-11-22 11:06 pm)> |
|
음.. 상위 단계인 WikiToHTML 로 뺐더니만, 이번에는 nowiki 태그 안에 매크로가 있을 경우 기존에는 그대로 출력되던 것이 이제는 죄다 매크로 변환이 되어 버리는군요. 딜레마에 빠지네.. 어찌하나.. <mysign([[Raymundo]],2002-11-22 11:52 pm)> |
:macrosubst()를 commonmarkup의 끝, 그니깐 '''if ($dolines) { }'''안에 넣으니 일단 표안에도 잘 들어가지고, 다른 매크로도 대충 잘 되네요. MacroFullSearch와 MacroTitleSearch 만 해결되면 크게 무리없이 쓸 수 있을거 같습니다. (둘중 하나를 없애버리는게 가장 좋은 해결책이지만서두..ㅡㅡ;) |
:: 전혀 문제를 해결하지 못하던데요. :-) 여전히 공백 뒤 매크로에 pre 태그를 붙여 버리고 있네요. 캘린더 같은 경우는 제가 아예 \n 을 전혀 출력하지 않도록 했습니다. 그래서 아까는 pre table /pre /table 순으로 붙었던 것을 이제는 pre table /table /pre 순으로 붙기 때문에 별 문제가 없이 보이는 것 뿐입니다. 음... 고민해 봤는데, 그냥 놔두는 것이 좋겠습니다. 건드릴 수록 긁어 부스럼 만드는 느낌이군요. 기존에 손을 대었던 매크로들에 다시 손을 대어서, \n 출력을 다 없앴습니다. 사용자가 일부로 매크로 앞에 공백을 두었을 경우는 pre 가 붙게 되겠지만, pre 가 붙어도 매크로 출력 전체에 적용될테니, 상관없을듯 합니다. <mysign([[Raymundo]],2002-11-23 7:36 am)> |
|
:: 그리고 MacroFullSeach 와 MacroTitleSearch 의 경우 두 가지를 한 줄에 같이 적으면 먼저 적은 쪽에서 뒤부분을 통채로 인자로 인식해버리는 것은 큰 문제가 아닐 듯 한데요. 그 문제를 해결하려면 정규표현식을 (.*) 대신 ([^)]*) 또는 ([^>]*) 정도로 적어주면 되겠지만, 그러면 검색에서 괄호나 부등호는 검색할 수 없게됩니다. |
<mysign([[Raymundo]],2002-11-23 7:24 am)> |
|
:검색폼에서 괄호를 써도 에러나네요, 이건 문서화일 때문에 그런거 같은데.. 좀더 찾아봐야될듯... 그리고 서치매크로에서의 괄호는 막아버렸습니다..흐흐~ (흑..ㅜㅡ) |
<mysign([[Bab2]],2002-11-23 12:56 am)> |
|
:: 근본적으로... UseModWiki 소스자체가, 검색 기능을 상당히 단순하게 구현해 놓고 있어서 그렇겠지요. 검색폼이나 fullsearch 등의 매크로의 인자로 들어간 문자열을 고스란히 Perl 의 "=~ /패턴/" 구문의 패턴 자리에 넣어버리니까요. 검색폼에 들어간 문자열이 Perl 의 정규표현식 문법에 맞지 않으면 에러가 나는거고, 이것은 뭐 어찌할 도리가 없는 듯 하네요. CGI 가 에러가 나는 것을 막으려면 WikiX 처럼 별도의 검색 명령어를 처리하는 루틴을 두어야 하겠습니다만, 그렇게까지 복잡한 검색을 할 일이 있을런지... 대신 말을 바꾸면 홈페이지 내 검색에 정규표현식을 사용할 수 있다는 것이니 잘 쓰면 큰 효과를 내겠지요. |
|
:: 이미 알고 계시다면 실례가 되겠지만... "(a)" 를 검색하시려면 검색창에는 "\(a\)" 라고 쓰셔야 합니다. :-) <mysign([[Raymundo]],2002-11-23 12:09 pm)> |
|
"아무리 봐도 대책없음. 매크로를 사용하는 사용자가 주의해야 함. 매크로를 만드는 경우 출력에 newline 이 들어가지 않도록 주의해야 함" 으로 결론짓고 [[/반영된사용자의견]]으로 이동. <mysign([[Raymundo]],2002-12-3 1:31 am)> |
|
---- |
[[위키위키분류]] |