Как ввести новые спецификаторы формата в существующий документ Rtf - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь расширить функциональность синтаксического анализатора макросов, который использует RTF. (пользовательская перегрузка VB. NET RichTextBox) Анализатор создает заголовок для RTF и вводит коды формата построчно. Это может обрабатывать только однострочные выражения, я хочу иметь возможность анализировать многострочные выражения. Для этого я создал функцию, которая запускается после первого парсера и разбирает многострочные операторы.

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке прочитать существующий текст из RichTextBox (RichTextBox.Rtf), он возвращает упрощенную версию ранее введенного RichText, которая больше не содержит весь заголовок, только использованные биты.

Когда я тогда пытаюсь заменить некоторые строки новыми кодами формата, которые должны быть распознаны, происходит сбой.

Затем я попытался вложить другой заголовок, но он совсем не работает.

Это RTF без моего многострочного анализа, как это было раньше.

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset1 MS Reference Sans Serif;}{\f1\fnil\fcharset1 MS Reference Sans Serif;}{\f2\fnil\fcharset1 MS Reference Sans Serif;}{\f3\fnil\fcharset1 MS Reference Sans Serif;}{\f4\fnil\fcharset1 MS Reference Sans Serif;}{\f5\fnil\fcharset1 MS Reference Sans Serif;}{\f6\fnil\fcharset1 MS Reference Sans Serif;}{\f7\fnil\fcharset1 MS Reference Sans Serif;}{\f8\fnil\fcharset1 MS Reference Sans Serif;}{\f9\fnil\fcharset1 MS Reference Sans Serif;}{\f10\fnil\fcharset1 MS Reference Sans Serif;}{\f11\fnil\fcharset1 MS Reference Sans Serif;}{\f12\fnil\fcharset1 MS Reference Sans Serif;}}{\colortbl ;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red255\green255\blue255;\red70\green130\blue180;\red255\green255\blue255;\red220\green20\blue60;\red255\green255\blue255;\red165\green42\blue42;\red255\green255\blue255;\red128\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red184\green134\blue11;\red255\green255\blue255;\red47\green79\blue79;\red255\green255\blue255;\red255\green0\blue0;\red255\green255\blue255;\red138\green43\blue226;\red255\green255\blue255;\red147\green112\blue219;}\viewkind4\uc1\pard\lang1031\fs16 \f0\cb1\cf2\b\i0\ulnone  
f6\cb13\cf14\b\i0\ulnone ! MultiMess7 macro header. Please fill in information and uncomment lines:\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone !-------------------------------------------------------------------------------------\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! >>> Please set user and technology <<< \f0\cb1\cf2\b\i0\ulnone \par
\f1\cb3\cf4\b\i0\ulnone SET\f0\cb1\cf2\b\i0\ulnone  \f9\cb19\cf20\b\i0\ulnone user\f0\cb1\cf2\b\i0\ulnone =\par
\f1\cb3\cf4\b\i0\ulnone SET\f0\cb1\cf2\b\i0\ulnone  \f9\cb19\cf20\b\i0\ulnone technology\f0\cb1\cf2\b\i0\ulnone =\par
\f6\cb13\cf14\b\i0\ulnone !-------------------------------------------------------------------------------------\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET lot=@LOT\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET wafer=@WAFER\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET slot=@SLOT\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET diex=@DIEX\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET diey=@DIEY\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET xy=DIE_x$diex&y$diey\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET temp=@TEMP\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET path=G:\\04_Auftraege\\\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SET file=$technology&_$lot&_$wafer&_$xy&\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone !---------------------------------------------------------------\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! PICTURE File=$path&\\$file&\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone ! SAVE_DATA File=$path&\\$file&.DAT\f0\cb1\cf2\b\i0\ulnone \par
\f6\cb13\cf14\b\i0\ulnone !---------------------------------------------------------------\f0\cb1\cf2\b\i0\ulnone \par
\par
}

и при назначении RichTextBox.Rtf превращается в это:

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil MS Reference Sans Serif;}}
{\colortbl ;\red0\green128\blue0;\red0\green0\blue0;\red0\green0\blue255;\red47\green79\blue79;}
\viewkind4\uc1\pard\cf1\lang1031\b\f0\fs16 ! MultiMess7 macro header. Please fill in information and uncomment lines:\cf2\par
\cf1 !-------------------------------------------------------------------------------------\cf2\par
\cf1 ! >>> Please set user and technology <<< \cf2\par
\cf3 SET\cf2  \cf4 user\cf2 =\par
\cf3 SET\cf2  \cf4 technology\cf2 =\par
\cf1 !-------------------------------------------------------------------------------------\cf2\par
\cf1 ! SET lot=@LOT\cf2\par
\cf1 ! SET wafer=@WAFER\cf2\par
\cf1 ! SET slot=@SLOT\cf2\par
\cf1 ! SET diex=@DIEX\cf2\par
\cf1 ! SET diey=@DIEY\cf2\par
\cf1 ! SET xy=DIE_x$diex&y$diey\cf2\par
\cf1 ! SET temp=@TEMP\cf2\par
\cf1 ! SET path=G:\\04_Auftraege\\\cf2\par
\cf1 ! SET file=$technology&_$lot&_$wafer&_$xy&\cf2\par
\cf1 !---------------------------------------------------------------\cf2\par
\cf1 ! PICTURE File=$path&\\$file&\cf2\par
\cf1 ! SAVE_DATA File=$path&\\$file&.DAT\cf2\par
\cf1 !---------------------------------------------------------------\cf2\par
\par
}

, когда я затем пытаюсь добавить

\f3\cb7\cf8\b\i0\ulnone $U2\f12\cb25\cf26\b\i0\ulnone  = \f12\cb25\cf26\b\i0\ulnone math.log(\f5\cb11\cf12\b\i0\ulnone §U_SMU1\f12\cb25\cf26\b\i0\ulnone *\f8\cb17\cf18\b\i0\ulnone 2\f12\cb25\cf26\b\i0\ulnone )\par
\f3\cb7\cf8\b\i0\ulnone $U3\f12\cb25\cf26\b\i0\ulnone  = \f12\cb25\cf26\b\i0\ulnone math.sin(\f5\cb11\cf12\b\i0\ulnone §U_SMU1\f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone var = \f12\cb25\cf26\b\i0\ulnone math.cos(\f3\cb7\cf8\b\i0\ulnone $U3\f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone hello(\f9\cb19\cf20\b\i0\ulnone 'hi' \f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone import \f12\cb25\cf26\b\i0\ulnone time\par
\par
}

, он отображается как черный текст, который является значением по умолчанию.

Могу ли я добавить новые спецификаторы формата без внешнего сохранения RTF? Старый синтаксический анализатор работает только с фрагментами одновременно, и моей новой функции нужен весь текст, для чего я затем использую RichTextBox.Text.

1 Ответ

0 голосов
/ 17 января 2020

Я решил это. Вы можете добавить дополнительный форматированный текст с новым заголовком в существующее через свойство SelectedRtf RichTextBox.

myRTB.SelectedRtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset1 MS Reference Sans Serif;}{\f1\fnil\fcharset1 MS Reference Sans Serif;}{\f2\fnil\fcharset1 MS Reference Sans Serif;}{\f3\fnil\fcharset1 MS Reference Sans Serif;}{\f4\fnil\fcharset1 MS Reference Sans Serif;}{\f5\fnil\fcharset1 MS Reference Sans Serif;}{\f6\fnil\fcharset1 MS Reference Sans Serif;}{\f7\fnil\fcharset1 MS Reference Sans Serif;}{\f8\fnil\fcharset1 MS Reference Sans Serif;}{\f9\fnil\fcharset1 MS Reference Sans Serif;}{\f10\fnil\fcharset1 MS Reference Sans Serif;}{\f11\fnil\fcharset1 MS Reference Sans Serif;}{\f12\fnil\fcharset1 MS Reference Sans Serif;}}{\colortbl ;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red0\green0\blue255;\red255\green255\blue255;\red70\green130\blue180;\red255\green255\blue255;\red220\green20\blue60;\red255\green255\blue255;\red165\green42\blue42;\red255\green255\blue255;\red128\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red255\green255\blue255;\red0\green0\blue0;\red255\green255\blue255;\red184\green134\blue11;\red255\green255\blue255;\red47\green79\blue79;\red255\green255\blue255;\red255\green0\blue0;\red255\green255\blue255;\red138\green43\blue226;\red255\green255\blue255;\red147\green112\blue219;}\viewkind4\uc1\pard\lang1031\fs16 \f0\cb1\cf2\b\i0\ulnone 
\f3\cb7\cf8\b\i0\ulnone $U2\f12\cb25\cf26\b\i0\ulnone  = \f12\cb25\cf26\b\i0\ulnone math.log(\f5\cb11\cf12\b\i0\ulnone §U_SMU1\f12\cb25\cf26\b\i0\ulnone *\f8\cb17\cf18\b\i0\ulnone 2\f12\cb25\cf26\b\i0\ulnone )\par
\f3\cb7\cf8\b\i0\ulnone $U3\f12\cb25\cf26\b\i0\ulnone  = \f12\cb25\cf26\b\i0\ulnone math.sin(\f5\cb11\cf12\b\i0\ulnone §U_SMU1\f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone var = \f12\cb25\cf26\b\i0\ulnone math.cos(\f3\cb7\cf8\b\i0\ulnone $U3\f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone hello(\f9\cb19\cf20\b\i0\ulnone 'hi' \f12\cb25\cf26\b\i0\ulnone \f12\cb25\cf26\b\i0\ulnone )\par
\f12\cb25\cf26\b\i0\ulnone import \f12\cb25\cf26\b\i0\ulnone time\par
\par
}"
...