삽질하는플머

'SynEdit'에 해당되는 글 1건

  1. Delphi web script 갖고 놀기 4

Delphi web script 갖고 놀기

탐구생활/Delphi
DWScript 

개발자의 블로그는 여기

지원하는 델파이 최소버전이 2009이다. 터보델파이 이후로는 무거워서 손이 잘 안가게 되는데... 아무튼 핑계김에 미루어두었던 XE2 설치. 
 




업데이트 3까지 진행하고 환경설정을 익숙하게 맞추어준다. 




SynEdit SVN 설치. 

 
DWScript 개발자의 블로그에는 작년 12월 26일 크리스마스 선물로 SynEdit SVN에 패치를 올렸다는 글이 있다. 
http://delphitools.info/2011/12/26/christmas-present-for-synedit-users/ 

하이라이팅 속도가 많이 빨라졌다고 하고 무엇보다 DWScript의 예제가 이 버전을 기준으로 하니 이걸로 내려받아 설치하자. 

svn co https://synedit.svn.sourceforge.net/svnroot/synedit/SynEdit SynEdit



세상일이 다 그렇듯, 단박에 설치되는 법이 없다. 델파이의 컴파일러는 안시파일의 코드페이지를 시스템의 설정에 따라 판단하는 희안한 행동을 하기 때문에, 코드 내에서 유니코드를 사용한 경우 일일이 BOM을 붙여 UTF-8 임을 알려주어야 한다. SynEdit.pas, SynEditHighlighter.pas, SynEditSearch.pas, SynHighlighterJava.pas, SynHighlighterXML.pas 가 그러한데... 이렇게 해도 CASE문에서 이유없는 중복에러가 발생한다. 자세한 건 XE2에 좀 더 익숙해지면 알아보도록 하고, 일단 설치만 되도록 패치를 만들어 보았다. 




DWScript 테스트

dwscript-2.2 를 받아 압축을 푼다. XE용 패키지가 있으니 그대로 사용한다. 
데모를 살펴보니 Hello 라는 예제가 보인다. 열어보자. 

var s : String = ''Hello World!';
ShowMessage(s);



위와 같은 파스칼 스크립트를 입력받고 실행시키는 예제이다. 실행시키면 "Hello World!" 라고 찍힌 메시지박스가 나타난다. 재미있군. 
이제 오늘의 하이라이트! pas2js 를 갖고 놀아 보자.
 
http://delphitools.info/2011/09/28/taming-the-flock-with-object-pascal/ 

본문 내 링크에서 demo.zip 을 내려받아 압축을 푼다. JSCodeGenDemo.dproj 를 열고 컴파일하면 짜잔~~



이 프로그램은 인디의 idHTTPServer 를 사용해 독립 웹서버로 동작한다. <%pas2js ... %> 태그 사이에 파스칼 스크립트로 코드를 적어주면 이 부분을 자바스크립트로 변환해 클라이언트로 내려주게 된다. 과감하게 Run 버튼을 눌러보자. 



웹브라우저가 열리며 마우스 이동과 클릭에 반응하는 멋진 canvas 화면이 나타난다. 웹페이지의 소스보기를 하면 파스칼 스크립트가 자바스크립트로 변환되어 전송된 것을 볼 수 있다. 물론 브라우저를 띄우지 않아도 Compile 버튼을 눌러 변환된 자바스크립트를 얻을 수 있다. 

파스칼 스크립트 내 "asm .. end" 구문은 조금 별난 개념으로, 자바스크립트를 직접 호출하는데 사용된다.
간단한 예를 들어보자. 메시지 창을 띄우는 ShowMessage() 함수를 DWScript로 구현한다면 다음과 같이 할 수 있다. 

<%pas2js

procedure ShowMessage(msg: String);
begin
  asm
    alert(msg);
  end;
end;

ShowMessage('테스트야 테스트');
%>



위 내용은 다음과 같이 변환된다. 

function ShowMessage(msg) {
    alert(msg);
  };
ShowMessage("테스트야 테스트");



파스칼에서 외부 링크된 함수를 불러오는 것 처럼, external 구문을 써서 자바스크립트의 alert 함수를 직접 사용할 수도 있다. 

<%pas2js

procedure alert(msg: Variant); external;

alert('테스트야 테스트');
%>



변환된 내용은 다음과 같다. 

alert("테스트야 테스트");



이 외에도 문자열을 나타내는 따옴표를 쌍따옴표와 섞어 사용할 수 있는 등 델파이의 문법과는 약간씩 달라 헷갈리기는 하지만, 파스칼로 건드리는 HTML5 코딩이라는 점 만으로도 충분히 갖고 놀아볼만한 가치가 있다고 생각된다. 

아래 화면은 Delphitools.info 의 또 다른 예제를 위의 변환기로 컴파일해 이 블로그의 HTML편집기능으로 직접 써넣은 것이다. 
HTML5를 지원하는 최신 브라우저에서 무리없이 동작할 것이다. 실로 아름답지 않은가... (아이폰에서도 동작은 하는데 많이 느림...)