Ответ от Apache
На первый взгляд, это похоже на незначительный недосмотр в реализации переноса строки Unicode в FOP. Это не принимает во внимание возможность того, что данной кодовой точке не присвоен «класс» в контексте переноса строки. знак равно
U + 1F7E не появляется в файле
http://www.unicode.org/Public/UNIDATA/LineBreak.txt,, который используется в качестве основы для генерации этих массивов в LineBreakUtils.java)
С другой стороны, очевидно, можно было бы поставить вопрос, почему вам так отчаянно нужно иметь неназначенную кодовую точку в выходных данных. Вы абсолютно уверены, что вам это нужно? Если да, то можете ли вы уточнить точную причину? (т.е. для чего именно используется эта неназначенная кодовая точка?)
Самое простое «исправление» выглядит примерно так:
Индекс: src / java / org / apache / fop / text / linebreak / LineBreakStatus.java
--- src / java / org / apache / fop / text / linebreak / LineBreakStatus.java (редакция
1054383)
+++ src / java / org / apache / fop / text / linebreak / LineBreakStatus.java (работает
копия)
@@ -87,6 +87,7 @@
/* Initial conversions */
switch (currentClass) {
+ case 0: // Неназначенная кодовая точка: считать AL?
case LineBreakUtils.LINE_BREAK_PROPERTY_AI:
case LineBreakUtils.LINE_BREAK_PROPERTY_SG:
case LineBreakUtils.LINE_BREAK_PROPERTY_XX:
Для этого нужно назначить класс 'AL' или 'Alphabetic' любой кодовой точке, которой Unicode не присвоен класс. Это означает, что оно будет рассматриваться как обычное письмо.
Причина, по которой я задаю вопрос, уверены ли вы, что знаете, что делаете, заключается в том, что это может оказаться нежелательным. Возможно, рассматриваемый персонаж нужно рассматривать как пробел, а не как букву.
Unicode не определяет U + 1F7E, кроме как «зарезервированный» символ, поэтому имеет смысл, что Unicode не может сказать, что должно произойти с этим символом в контексте переноса строки ...
Тем не менее, в этом случае сбой FOP также является ошибкой, поэтому ошибка определенно подлинная.