. 정렬

문장이란 엔터(\r\n)로 끊어진 문자의 배열이다. 문장의 처음부터 엔터를 만날 때까지가 물리적인 한 줄이 되는데 텍스트 포맷에서 한 줄의 길이는 원칙적으로 제한이 없다. 보통 수십 개의 문자들이 한 줄에 들어가지만 수백, 수천 개의 문자가 한 줄에 있을 수도 있다. 줄의 길이는 무한대로 길어질 수 있는데 비해 편집기의 폭은 제한이 있어 긴 줄을 한꺼번에 다 보여주지 못한다. 그래서 보통 수평 스크롤바를 사용하여 문장의 숨겨진 뒷부분으로 이동할 수 있도록 한다. 메모장에 다음 두 줄의 텍스트를 입력해보자.

 

윈도우 : 프로그램이 출력 결과를 내 보내고 사용자로부터 입력을 받아들이는 화면상의 사각영역.

A rectangular area of the screen where the application displays output and receives input from the user.

 

메모장의 폭을 줄이면 이 문장이 한눈에 다 보이지 않게 되며 수평으로 스크롤바가 나타날 것이다. 이 스크롤바를 사용하면 문장의 오른쪽으로 이동할 수 있으며 가려져 있는 나머지 부분을 보거나 편집할 수 있다. 또는 커서이동키로 직접 가려진 곳으로 이동할 수도 있다.

자동개행 기능(WordWrap)이란 엔터로 끊어져 있지 않더라도 편집기의 오른쪽 끝에서 다음 줄로 자동으로 넘겨주는 기능이다. 그래서 긴 줄은 여러 줄에 걸쳐서 출력된다. 사용자의 입장에서 볼 때 숨겨진 텍스트를 보기 위해 스크롤을 할 필요가 없어지므로 무척 편리하지만 프로그램의 입장에서 볼 때 구현은 꽤 까다로운 편이다. 왜 까다로운가 하면 문서의 원래 모양과는 다른 방법으로 화면에 출력해야 하기 때문이다. 즉 순리를 어기는 기능이기 때문에 까다로울 수밖에 없다.

하지만 이 기능은 꼭 필요한 유용한 기능이기 때문에 대부분의 편집기들이 지원하고 있다. 다만 비주얼 C++ 6.0의 편집기 같은 일부 프로그래밍 전용 편집기들은 자동개행을 지원하지 않는데 소스 코드는 읽기 위한 문장이 아닌데다가 물리적인 형식대로 충실하게 보여주는 것이 더 중요하기 때문이다. 메모장도 자동개행 기능을 제공한다. 서식/자동 줄바꿈 메뉴를 선택하면 자동개행 기능이 실행되며 편집기의 폭에 맞게 문장을 끊어서 보여줄 것이다.

첫 번째 줄 끝의 보내고라는 단어는 자만 윗줄에 있고 내고는 다음 줄로 내려가 있다. 자는 편집기의 폭에 맞게 들어가지만 자는 더 이상 오른쪽에 공간이 없기 때문이다. 자동개행 기능은 개념적으로 오른쪽 끝에 들어가지 않는 글자를 아래줄로 내려주는 것으로 간단히 정리할 수 있지만 사실은 이보다 조금 더 복잡하다.

한글은 오른쪽 끝에서 무조건 자르지만 영문자는 글자 단위로 자르지 않고 단어 단위로 자른다. 세 번째 줄의 screen은 편집기의 오른쪽 끝보다 안쪽에 있지만 다음 단어인 where는 아랫줄로 내려가 있다. screen의 오른쪽에는 wh정도는 들어갈만한 공간이 있지만 이 두 글자를 윗줄에 포함시키지 않고 where 단어를 통째로 밑으로 내려 놓았다.

즉 메모장은, 한글은 음절 단위로 끊지만 영문은 단어 단위로 끊는다. 왜냐하면 한글과는 달리 영문은 단어를 잘라버리면 가독성이 심하게 떨어지고 보기에도 좋지 않기 때문이다. 자동개행에는 또 다양한 예외가 존재한다. 다음 그림을 보자.

 

두 줄의 영문 텍스트가 입력되어 있는데 윗줄은 N O사이에 공백이 있으며 두 단어로 구성되어 있다. 아래줄은 공백이 전혀 없으며 줄 전체가 한 단어이다. 이 상태에서 메모장의 폭을 조금 줄여보면 오른쪽 그림과 같이 자동개행된다. 윗줄은 N O사이에서 자동개행되는데 OPQRSTUVWXYZ라는 단어가 N이후의 여백에 들어가지 않기 때문이다. 그래서 단어를 통째로 잘라 아래줄로 내린다.

그러나 아랫줄은 좀 다르다. T U사이에 공백이 없는데도 이 위치에서 개행되었다. 왜냐하면 전체가 한 단어이기 때문에 자르고 싶어도 자를 위치를 찾을 수 없기 때문이다. T이전의 앞쪽으로 아무리 가 봐도 단어를 자를만한 공백이 발견되지 않는다. 이런 경우는 영문이라도 불가피하게 단어 단위로 자르지 못하고 글자 단위로 잘라야 한다.

메모장에서는 직접 확인할 수 없지만 다른 윈도우의 차일드로 생성되는 에디트 컨트롤에는 다음과 같은 경우도 있다. 편집기의 폭이 심하게 좁아 한 줄에 한 글자도 넣을 수 없다고 하자. 이때는 자동개행의 모든 규칙을 무시하고 무조건 한 줄에 최소한 한글자(또는 일정 개수)는 강제로 넣어 줘야 한다. 그렇지 않으면 문서의 길이는 무한대가 될 것이고 아무것도 보이지 않게 된다.

문장을 자르고 글자를 배치하는 이런 기술을 정렬(Align)이라고 한다. Align을 일반적으로 정렬이라고 번역하는데 자료를 크기순으로 나열하는 Sort와는 번역은 같지만 다른 용어이다. 앞에서 보다시피 정렬 규칙은 나름대로 복잡하고 예외 사항이 많아 상당한 고급 기술에 속한다. 워드프로세서는 오른쪽 끝에서 문장을 자르는 것뿐만 아니라 좌우, 중앙, 양쪽, 균등 정렬 등의 기능이 있으며 수직으로 문자열을 정렬하기도 한다. 뿐만 아니라 줄 처음과 끝에 올 수 없는 문자를 금지하는 금칙 처리도 해야 되고 글자만 정렬하는 것이 아니라 도표나 틀도 같이 정렬해야 하기 때문에 정말 복잡하다.

다행히 텍스트 편집기는 문서의 포맷을 중요시하지 않고 내용을 더 중요시하기 때문에 워드프로세서 수준의 정렬까지는 구현할 필요가 없다. 그저 오른쪽 끝에서 문장을 제대로 잘 잘라내기만 하면 된다.