[첫화면으로]"UseModWiki소스수정/반영된사용자의견archive01" 페이지의 변경 내역

마지막으로 [b]


현재 버전 . . . . (수정) 2007-1-8 12:19 pm 수정한 사람: Raymundo
2 번째 수정본 . . . . 2003-3-10 9:09 pm 수정한 사람: Raymundo
 

변경사항 (가장 최근의 "일반적인 수정"부터) (소소한 수정)

-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 태그부터 직접 입력을 할 수 있으니 그게 그거이기도 하고요.

-148,7 +148,7
== # [[Bab2]] - Footer 관련 버그 수정 ==
흑...거의 다 쳤는데 익스창이 죽어버리다니..ㅜㅡ
근영님 wiki.pl 소스중에서 아래함수를 수정해주어야 합니다. 
{{{perl
{{{#!vim perl
sub GetMinimumFooter {
my $result = '';  ##추가

-169,7 +169,7
}}}
<mysign([[Bab2]],2002-11-21 8:40 pm)>
: 역시, 코드를 공개하면 이렇게 좋은 피드백이 날아오는 법이로군요. ^_^; 지적하신 부분 수정했습니다. 그리고 위에서 if 문 안에 있는 $q-&gt;end_html 쪽은 삭제해야겠습니다. /body /html 태그가 두 번 들어가게 됩니다. FooterNote 의 내용과 섞이는 문제는 FooterNote 쪽에 align=right 인 이미지가 있을 경우 그런 것 같습니다. FooterNote 를
{{{perl
{{{#!vim perl
$FooterNote="<p align='right'><img src='이미지경로'></p>";
}}}
: 와 같이 하면 섞이지 않을 겁니다. 좋은 지적 감사합니다~ <mysign([[Raymundo]],2002-11-21 9:29 pm)>

-191,7 +191,7
crypt함수를 사용해 봤습니다. 쫌 뒤져봤는데 crypt함수 그냥 쓰는건 좋지 않다고 해서(OS 의존적이랬던가..ㅡ.ㅡa) MD5랑 SHA 까지 해봤는데 인터프리터가 모듈이 없다고 발광을 하네요. 그래서 그냥 crypt 함수 썼습니다.
"salt"를 자기가 원하는 키로 집어넣으시면 되겠습니다. '''기존 회원 데이터는 쓸모없어집니다.'''
:
{{{perl
{{{#!vim perl
## 사용자암호 수정
sub DoUpdatePrefs {
my ($username, $password);

-237,7 +237,7
....
}}}
:
{{{perl
{{{#!vim perl
## 관리자암호 수정
sub UserIsAdmin {
my (@pwlist, $userPassword);

-293,7 +293,7
#로긴/로그아웃꽁수
{{{perl
{{{#!vim perl
sub GetGotoBar {
....(중간생략)
# if (($UserID eq "113") || ($UserID eq "112")) {

-343,7 +343,7
}}}
#아이디 길이제한 : 위와 같이 했을경우 아이디의 길이가 0, 즉 이름이 없는(NULL인) 아이디가 만들어질 경우 난감해집니다. 지양님 위키의 Userdata 디렉에 아마도 '.db' 화일이 있을것입니다. 본인이 장난쳤습니다. 죄송합니다..-_-;
{{{perl
{{{#!vim perl
어차피 3글자 이하는 잘 쓰지 않는다는 생각에 저는 영문 4글자 이상으로 아이디 제한을 둬서 쓰고 있습니다.
sub DoUpdatePrefs {

-369,7 +369,7
# } elsif (length($username) > 50) {  # Too long  <-- 이것을
} elsif (length($username) > 50 || length($username) <4) {  # Too long  <-- 이렇게 해도 됩니다.
}}}
{{{perl
{{{#!vim perl
sub dologin {
(중간생략)...
$success = 1;

-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)>
----
[[위키위키분류]]