[ID CC2023] ошибка указателя

  • Автор темы Автор темы Sergy
  • Дата начала Дата начала

Sergy

Топикстартер
10 лет на форуме
Сообщения
35
Реакции
10
Прошу прощения за глупый вопрос. Есть книга с размеченным указателем, при генерации вылезает сообщение:
1681125496092.png


причем я знаю что достаточно переключить или переименовать, какую-то установку с кирилицы на латиницу и все заработает. Пару месяцев назад все получалось, но заболел ковидом и понимаю что стал полным идиотом и все забыл… теперь тыкаюсь, но в упор не помню как я это делал. Кто-нибудь может подсказать?
 
Навскидку это такая же проблема, как была у меня шесть лет назад.
Вот такой скрипт вроде как находил проблемные символы в записях.
Деталей, конечно, уже не помню. Давно это было, и такой ошибки больше не возникало.

Код:
//FindProblemCharInIndex.jsx

// © Михаил Иванюшин, 2017   |   m.ivanyushin@gmail.com   |   adobeindesign.ru

programTitul = "Поиск проблемных символов в индексном указателе";
var aboutScript = "При подготовке индексного указателя в записях могут быть ошибки. К сожалению, сообщение о наличии ошибки крайне невнятно:\n[ Не удалось создать указатель.\nОдна или несколько записей указателя содержат недопустимые символы.\nУдалите недопустимые символы из записей указателя. ]\n\nКакие конкретно записи? Какие в них недопустимые символы?\nТакой информации нет. Проблемы клиентов Adobe не волнуют.\nИ ты остаёшься в полном неведении, что, где и как в этой вёрстке искать.\nВ этот момент мои слова «Вёрстка должна быть в кайф» звучат, наверное, издевательски.\n\nЧтобы не чувствовать себя беспомощным в этой ситуации, и получать удовольствие от работы с текстом, придуман этот скрипт.\nОн просматривает все записи индексного указателя и проверяет по очереди каждый символ:\n= это скобка\n= это строчная/прописная английская/русская буква\n= это дефис, точка, пробел\nЕсли символ прошел проверку, программа перейдет к проверке следующего.\nЕсли нет, будут запомнены полная строка указателя, и часть её до первого знака, не прошедшего проверку.\nПосле просмотра всех строк индексного указателя будет выведена информация по всем проблемным строкам.\n\nСимволы, которые считаются допустимыми в строке указателя, собраны в 48-й строке этой программы.\nЭто редактируемый текст, и можно добавить туда буквы с умляутами, аксантами, минус, плюс, тире, двоеточие и другие знаки.\n\nЧтобы скрипт после запуска начал работу, курсор должен быть в тексте. Если выделить текст, в котором есть знак вопроса, будет выведена эта справка о программе.\n\nВопросы, предложения, идеи? Пишите: m.ivanyushin@gmail.com\n";
var ProgressBar = function(title) { // ProgressBar
     var w = new Window('palette', title, {x:0, y:0, width:700, height:52},{closeButton: false}),     
          pb = w.add('progressbar', {x:20, y:12, width:660, height:12});
          w.center();
     this.reset = function(maxValue) {
          pb.value = 0;
          pb.maxvalue = maxValue;
          pb.visible = maxValue;
          w.show();
          w.update();
      }
     this.hit = function() {pb.value += 1; w.update();}
     this.close = function() {w.close();}
} // ProgressBar
var mySel = app.selection[0];
if (mySel == undefined || (mySel.constructor.name != "InsertionPoint" && (mySel.hasOwnProperty("pointSize") && mySel.contents.match(/\?/) == "?"))) { //  == "?"
    alert(aboutScript,programTitul);
    exit();
    } //  == "?"
if (mySel == undefined || mySel.constructor.name != "InsertionPoint") {
    alert("Курсор должен быть в тексте.\nДля получения справки о программе выделите текст, где есть знак вопроса и запустите скрипт.",programTitul);
    exit();
    }
var myStory = mySel.parentStory;
if (!myStory.parent.indexes[0].isValid) {
    alert("В этом документе нет индексного указателя.",programTitul);
    exit();
    }   
var myTopics = myStory.parent.indexes[0].topics;
var tL = myTopics.length;
var rightChars = [];
var wholeLine = [];
var shortLine = [];
var pBar = new ProgressBar(programTitul);
pBar.reset(tL);
for (i = 0; i < tL; i++, pBar.hit()) { // i++
   var tmpName  =  myTopics[i].name;
   var nameLength = tmpName.length;
   while (rightChars.length > 0) rightChars.shift();
    for (n = 0; n < nameLength; n++) { // n++
        var nameChar = tmpName[n];
        if (nameChar.match(/[\(\)\[\]-a-zA-Zа-яА-Я0123456789. ]/) != null) { //  != null     
            rightChars.push(nameChar);
            continue;
            } //  != null
        else { // == null
            var lineChars = rightChars.join("");
            wholeLine.push(tmpName);
            shortLine.push(lineChars); 
            break;
            } // == null 
        } // n++
    } // i++
pBar.close();
if (wholeLine.length == 0) alert("В индексном указателе проблемные символы не найдены.",programTitul);
else {
    var mess = "";
    for (r = 0; r < wholeLine.length; r++) mess += "Полная запись в указателе: " + wholeLine[r] +"\nЧасть этой записи, прошедшая проверку: " + shortLine[r] + "\n-----------\n";
    alert(mess,programTitul);
    }
exit();
 
Навскидку это такая же проблема, как была у меня шесть лет назад.
Вот такой скрипт вроде как находил проблемные символы в записях.
Деталей, конечно, уже не помню. Давно это было, и такой ошибки больше не возникало.

Код:
//FindProblemCharInIndex.jsx

// © Михаил Иванюшин, 2017   |   m.ivanyushin@gmail.com   |   adobeindesign.ru

programTitul = "Поиск проблемных символов в индексном указателе";
var aboutScript = "При подготовке индексного указателя в записях могут быть ошибки. К сожалению, сообщение о наличии ошибки крайне невнятно:\n[ Не удалось создать указатель.\nОдна или несколько записей указателя содержат недопустимые символы.\nУдалите недопустимые символы из записей указателя. ]\n\nКакие конкретно записи? Какие в них недопустимые символы?\nТакой информации нет. Проблемы клиентов Adobe не волнуют.\nИ ты остаёшься в полном неведении, что, где и как в этой вёрстке искать.\nВ этот момент мои слова «Вёрстка должна быть в кайф» звучат, наверное, издевательски.\n\nЧтобы не чувствовать себя беспомощным в этой ситуации, и получать удовольствие от работы с текстом, придуман этот скрипт.\nОн просматривает все записи индексного указателя и проверяет по очереди каждый символ:\n= это скобка\n= это строчная/прописная английская/русская буква\n= это дефис, точка, пробел\nЕсли символ прошел проверку, программа перейдет к проверке следующего.\nЕсли нет, будут запомнены полная строка указателя, и часть её до первого знака, не прошедшего проверку.\nПосле просмотра всех строк индексного указателя будет выведена информация по всем проблемным строкам.\n\nСимволы, которые считаются допустимыми в строке указателя, собраны в 48-й строке этой программы.\nЭто редактируемый текст, и можно добавить туда буквы с умляутами, аксантами, минус, плюс, тире, двоеточие и другие знаки.\n\nЧтобы скрипт после запуска начал работу, курсор должен быть в тексте. Если выделить текст, в котором есть знак вопроса, будет выведена эта справка о программе.\n\nВопросы, предложения, идеи? Пишите: m.ivanyushin@gmail.com\n";
var ProgressBar = function(title) { // ProgressBar
     var w = new Window('palette', title, {x:0, y:0, width:700, height:52},{closeButton: false}),    
          pb = w.add('progressbar', {x:20, y:12, width:660, height:12});
          w.center();
     this.reset = function(maxValue) {
          pb.value = 0;
          pb.maxvalue = maxValue;
          pb.visible = maxValue;
          w.show();
          w.update();
      }
     this.hit = function() {pb.value += 1; w.update();}
     this.close = function() {w.close();}
} // ProgressBar
var mySel = app.selection[0];
if (mySel == undefined || (mySel.constructor.name != "InsertionPoint" && (mySel.hasOwnProperty("pointSize") && mySel.contents.match(/\?/) == "?"))) { //  == "?"
    alert(aboutScript,programTitul);
    exit();
    } //  == "?"
if (mySel == undefined || mySel.constructor.name != "InsertionPoint") {
    alert("Курсор должен быть в тексте.\nДля получения справки о программе выделите текст, где есть знак вопроса и запустите скрипт.",programTitul);
    exit();
    }
var myStory = mySel.parentStory;
if (!myStory.parent.indexes[0].isValid) {
    alert("В этом документе нет индексного указателя.",programTitul);
    exit();
    }  
var myTopics = myStory.parent.indexes[0].topics;
var tL = myTopics.length;
var rightChars = [];
var wholeLine = [];
var shortLine = [];
var pBar = new ProgressBar(programTitul);
pBar.reset(tL);
for (i = 0; i < tL; i++, pBar.hit()) { // i++
   var tmpName  =  myTopics[i].name;
   var nameLength = tmpName.length;
   while (rightChars.length > 0) rightChars.shift();
    for (n = 0; n < nameLength; n++) { // n++
        var nameChar = tmpName[n];
        if (nameChar.match(/[\(\)\[\]-a-zA-Zа-яА-Я0123456789. ]/) != null) { //  != null    
            rightChars.push(nameChar);
            continue;
            } //  != null
        else { // == null
            var lineChars = rightChars.join("");
            wholeLine.push(tmpName);
            shortLine.push(lineChars);
            break;
            } // == null
        } // n++
    } // i++
pBar.close();
if (wholeLine.length == 0) alert("В индексном указателе проблемные символы не найдены.",programTitul);
else {
    var mess = "";
    for (r = 0; r < wholeLine.length; r++) mess += "Полная запись в указателе: " + wholeLine[r] +"\nЧасть этой записи, прошедшая проверку: " + shortLine[r] + "\n-----------\n";
    alert(mess,programTitul);
    }
exit();
Сработало, спасибо
 
Прежде всего это обычные длинные тире (Alt+0151), а также символы Em, En.
При пролистывании Указателя такие символы показываются как спецсимволы в формате
^литера
 
  • Спасибо
Реакции: Sergy