#P1592. Postscript

Postscript

本题没有可用的提交语言。

描述

时间是1976年,一家刚刚起步的小公司发明了第一台(尽管还很粗糙)激光PostScript打印机。他们聘请你编写该PostScript打印机设备驱动程序的1.0版本。由于业内一些唱反调的人认为PostScript打印机不会有市场,所以1.0版本功能非常有限(只有两种字体)。

设备驱动程序会读取一系列命令,这些命令描述了输出页面上文本字符的位置(图形功能将在2.0版本中实现)。每个页面是一个60×6060 \times 60的字符网格。每个网格位置只能包含以下字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ .*

上述字母字符和空格构成了第一种字体(C1)的字符集。星号(*)是创建放大版Courier字体(C5)的基础字符。每个C5字符定义在一个55(行)×6\times 6(列)的网格中,网格中只包含星号(*)或句点(.)。C5字体的字符如下:

.***.. ****.. .****. ****.. *****. *****. .****. *...*. *****. 
*...*. *...*. *...*. *...*. *..... *..... *..... *...*. ..*... 
*****. ****.. *..... *...*. ***... ***... *..**. *****. ..*... 
*...*. *...*. *..... *...*. *..... *..... *...*. *...*. ..*... 
*...*. ****.. .****. ****.. *****. *..... .***.. *...*. *****. 
A B C D E F G H I 

..***. *...*. *..... *...*. *...*. .***.. ****.. .***.. ****.. 
...*.. *..*.. *..... **.**. **..*. *...*. *...*. *...*. *...*. 
...*.. ***... *..... *.*.*. *.*.*. *...*. ****.. *...*. ****.. 
*..*.. *..*.. *..... *...*. *..**. *...*. *..... *..**. *..*.. 
.**... *...*. *****. *...*. *...*. .***.. *..... .****. *...*. 
J K L M N O P Q R 

.****. *****. *...*. *...*. *...*. *...*. *...*. *****. ...... 
*..... *.*.*. *...*. *...*. *...*. .*.*.. .*.*.. ...*.. ...... 
.***.. ..*... *...*. .*.*.. *.*.*. ..*... ..*... ..*... ...... 
....*. ..*... *...*. .*.*.. **.**. .*.*.. ..*... .*.... ...... 
****.. .***.. .***.. ..*... *...*. *...*. ..*... *****. ...... 
S T U V W X Y Z blank

注意,每个字符的第六列只包含句点,这是为了在字符串中定义自然的间距。

你的设备驱动程序要从输入流中读取格式化命令,并将C1和C5字体的字符格式化到一个60×6060 \times 60的网格上,该网格最初每个位置都包含句点(即一张空白纸)。每个格式化命令可能会改变任何单元格位置的内容,并且可能会覆盖单元格位置。注意,两种字体中的空格以及C5字体中为空(包含句点)的单元格位置不会覆盖单元格的现有内容。命令也可能导致格式化内容超出页面的任一侧或底部,这种超出部分将被简单截断。格式化过程会一直持续,直到遇到页面结束命令。

输入流由一系列行组成,每行恰好包含一个命令及其参数。每个命令从第1列开始,以句点开头,后面跟着0到4个参数。设备驱动程序可能的输入命令如下:

所有命令都从输入行的第1列开始,参数(如果有)之间至少用一个空格分隔。每个命令的参数数量与上述表格规定的完全一致(输入的范围/值会符合要求,不会有多余或缺失的参数)。

  • .P(放置)命令:将字体为F的字符串放置在页面上,字符串的左上角位于位置(R, C),字符串的第一个字符放在该位置,然后水平向右继续排列。
  • .L(左对齐)命令:将字体为F的字符串放置在页面上,字符串的左上角位于位置(R, 1),字符串的第一个字符放在该位置,然后水平向右继续排列。
  • .R(右对齐)命令:将字体为F的字符串放置在页面上,字符串的右上角位于位置(R, 60),字符串的最后一个字符放在该位置,然后水平向左继续排列。
  • .C(居中)命令:将字体为F的字符串在页面上水平居中放置,字符串的第一行位于第R行。如果在网格上无法精确居中(即字符串在水平方向上占用的单元格数量为奇数),则字符串应在第31列两侧均匀居中。
  • .EOP命令:表示页面结束。该命令会让你的程序输出/刷新其内部缓冲区,并开始用下一行输入格式化一个新的空白页面。可以保证.EOP是输入的最后一行/命令。

参数1表示命令中要使用的字体。参数2表示文本要放置的行(R)。如果字体是C5,则文本将放置在第R行到第R + 4行。参数3(如果有)表示字符串最左边的位置。参数4是一个长度最多为60的有效(大写字母或空格)字符组成的字符串,用|分隔。

输入

程序的输入将由一系列命令及其参数组成(每行恰好一个)。你要从一张“空白”纸开始,读取输入文件进行格式化和换页,直到文件结束。

输出

每次遇到.EOP命令时,你要输出代表当前页面格式的60×6060 \times 60网格。为了向评委表明页面结束,在每个输出页面后面要跟一个空行、一行60个连字符(-)和另一个空行。

输入数据1

.C C5 3 |ACM| 
.C C1 10 |SOUTH CENTRAL REGION PROBLEM FOUR SAMPLE OUTPUT| 
.C C5 20 |OVERFLOW CENTERED LARGE FONT| 
.C C5 30 |CENTERED| 
.P C1 33 11 |LINE THAT OVERWRITES THROUGH CENTERED| 
.L C1 40 |SMALL FONT LINE IS LEFT JUSTIFIED ON ROW FORTY| 
.R C5 50 |RIGHT| 
.P C5 57 10 |BOTTOM AND RIGHT TRUNCATION| 
.EOP

输出数据1

............................................................ 
............................................................ 
......................***...****.*...*...................... 
.....................*...*.*...*.**.**...................... 
.....................*****.*.....*.*.*...................... 
.....................*...*.*.....*...*...................... 
.....................*...*..****.*...*...................... 
............................................................ 
............................................................ 
.......SOUTH.CENTRAL.REGION.PROBLEM.FOUR.SAMPLE.OUTPUT...... 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
.****.*****.*...*.*****.*****.****..*****.****........*..... 
*...*.*.....**..*.*.*.*.*.....*...*.*.....*...*.......*..... 
*.....***...*.*.*...*...***...****..***...*...*.......*..... 
*.....*.....*..**...*...*.....*..*..*.....*...*.......*..... 
.****.*****.*...*..***..*****.*...*.*****.****........*****. 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
.......****.*****.*...*.*****.*****.****..*****.****........ 
......*...*.*.....**..*.*.*.*.*.....*...*.*.....*...*....... 
......*.....***...*.*.*...*...***...****..***...*...*....... 
......*...LINE.THAT.OVERWRITES*THROUGH.CENTERED.*...*....... 
.......****.*****.*...*..***..*****.*...*.*****.****........ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
SMALL.FONT.LINE.IS.LEFT.JUSTIFIED.ON.ROW.FORTY.............. 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
............................................................ 
..............................****..*****..****.*...*.*****. 
..............................*...*...*...*.....*...*.*.*.*. 
..............................****....*...*..**.*****...*... 
..............................*..*....*...*...*.*...*...*... 
..............................*...*.*****..***..*...*..***.. 
............................................................ 
............................................................ 
.........****...***..*****.*****..***..*...*........***..*.. 
.........*...*.*...*.*.*.*.*.*.*.*...*.**.**.......*...*.**. 
.........****..*...*...*.....*...*...*.*.*.*.......*****.*.* 
.........*...*.*...*...*.....*...*...*.*...*.......*...*.*..

------------------------------------------------------------

来源

美国中南部1995年