Найти адреса сайта и преобразовать в гиперссылки.

  • Автор темы Автор темы Dorm
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Воот!.
Этого я от вас и добивался столько времени!
Попробуйте взять кусок кода
Код:
for(i=0; i<found.length; i++)
    {
        var report = report+found[i].contents+"\n";
       
        var source = doc.hyperlinkTextSources.add(found[i]);  
        var dest=doc.hyperlinkURLDestinations.add(found[i].contents);
           
        doc.hyperlinks.add(source,dest, {visible:false, name:found[i].contents+"("+(i+1)+")"});
   
    }
и заменить на
Код:
for(i=0; i<found.length; i++)
try    {
        var report = report+found[i].contents+"\n";
       
        var source = doc.hyperlinkTextSources.add(found[i]);  
        var dest=doc.hyperlinkURLDestinations.add(found[i].contents);
           
        doc.hyperlinks.add(source,dest, {visible:false, name:found[i].contents+"("+(i+1)+")"});
   
    } catch ( err) {};

1. Отчет говорит, что создал 4 сноски, по факту 3 (без https).
2. По прежнему обрезает ссылку
Код:
http://vip-basa.fvds.ru/%D0%9F%D1%80%D0%B8%D0%BA%D0%B0%D0%B7+%D0%9C%D0%9E+%D0%A0%D0%A4+%E2%84%96+250%D0%B4%D1%81%D0%BF.html.
 

Вложения

  • Без имени-2.jpg
    Без имени-2.jpg
    141.4 КБ · Просм.: 809
Отчет говорит, что создал 4 сноски, по факту 3 (без https).
Почему по факту три? И по факту у вас 4, https скрипт съел нормально. Почему то не воспринял ссылку vip-basa.fvds.ru - это да
 
Потому что там нет www.
Да нет www ни при чем
Он снова отъел подстроку %D0%9F... видимо чтото в запросе все таки не так
Впрочем, если топикстартер в одном скрипте меняет одно а в другом другое, то можно запутаться уже нам, что именно внесено а что нет ;)
 
Он снова отъел подстроку %D0%9F... видимо чтото в запросе все таки не так
Вот странно. На одном компьютере у меня 21-я строка с изменениями
Код:
app.findGrepPreferences.findWhat = 'https?\\:\\/\\/([\\w\\-\\?\\=\\&]+([\\.\\/]?[\\%\\+]?)+)+';
отрабатывает нормально, на другом - отрезает.

При том, что просто греп-поиск в Индизайне такие гиперссылки ловит:
Код:
https?\:\/\/([\w\-\?\=\&]+([\.\/]?[\%\+]?)+)+
 
Если судить по коду из #36 у него эта строка закомментирована '%)'
 
Ок. я уже логическую нить потерял. Скиньте сюда версию скрипта единую для всех и я буду ее тестить и в нее вносить правки...
 
Скиньте сюда версию скрипта единую для всех и я буду ее тестить и в нее вносить правки...
Возьмите версию леонида и внесите в нее это - после этого отпишитесь что получится
 
В моей версии пока не всё отрабатывается нормально - я ещё продолжаю думать насчёт греп-замен.
 
Вот скрипт :
Код:
#target Indesign
// --- Assumptions --- //
//https://forums.adobe.com/message/3187356
// One document open
// Hyperlinks not necessarily labeled by character style
// You want all hyperlinks to be live
// Typesetter sometimes inserts a space or return in middle of URL to force a line break
// Space or return comes before period or slash per style manual
var doc=app.activeDocument;
// Compress stray www .'s
fn_grepChange (doc, "www(\\s|\\n)\\.", "www.", "hyper");
// Normalize to http://
fn_grepChange (doc, "(http\\:\\/\\/)?(www\\.([\\w\\-\\?\\=\\&]+[\\.\\/]?)+)", "http://$2", "hyper");
// Remove ( space or return ) before ( period or slash )
fn_grepChange (doc, "(https?\\:\\/\\/([\\w\\-\\?\\=\\&]+[\\.\\/]?)+)(\\s|\\n)(\\.|\\/)", "$1$4", "hyper");
// ---- Main ---- //
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
app.findChangeGrepOptions.includeFootnotes = true;
// Regardless of character styles, find hyperlinks
app.findGrepPreferences.findWhat = 'https?\\:\\/\\/([\\w\\-\\?\\=\\&]+([\\.\\/]?[\\%\\+]?)+)+';
var found = app.findGrep();
var report = "found and activated "+String(found.length)+" links\n";
// make hyperlinks
for(i=0; i<found.length; i++)
try    {
        var report = report+found[i].contents+"\n";
        
        var source = doc.hyperlinkTextSources.add(found[i]);   
        var dest=doc.hyperlinkURLDestinations.add(found[i].contents);
            
        doc.hyperlinks.add(source,dest, {visible:false, name:found[i].contents+"("+(i+1)+")"});
    
    } catch ( err) {};
// If exporting to PDF set include hyperlinks to true
PDFExportPreset.includeHyperlinks = true;
// To export to html, choose File-->Export for Dreamweaver
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
alert ( report );
function fn_grepChange (myDocument, regexFind, regexChange, cStyle) {
    // purpose: execute a grep change, otherwise known as a regex s///;
    //Initialize.
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    //Set the find options.
    app.findChangeGrepOptions.includeFootnotes = true;
    app.findChangeGrepOptions.includeHiddenLayers = false;
    app.findChangeGrepOptions.includeLockedLayersForFind = false;
    app.findChangeGrepOptions.includeLockedStoriesForFind = false;
    app.findChangeGrepOptions.includeMasterPages = false;
    //Search and change
    app.findGrepPreferences.findWhat = regexFind;
    app.changeGrepPreferences.changeTo = regexChange;
    app.changeGrepPreferences.appliedCharacterStyle= cStyle;
    myDocument.changeGrep();
  
    //Clear the find/change preferences.
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    }

// --- end of script --- //

Результаты на фото:
1. Как и говорил: в отчете 4 ссылки, в панели 3
2. Ссылку 2 взял не полность (хоть она и с ошибкой.)
 

Вложения

  • Без имени-1.jpg
    Без имени-1.jpg
    169.4 КБ · Просм.: 457
  • Без имени-2.jpg
    Без имени-2.jpg
    109.3 КБ · Просм.: 829
В моей версии пока не всё отрабатывается нормально - я ещё продолжаю думать насчёт греп-замен.

Уфф... Вот такое соорудил на базе скрипта от azz с исправлениями от _MBK_:

Код:
#target Indesign
// --- Assumptions --- //
//https://forums.adobe.com/message/3187356
// One document open
// Hyperlinks not necessarily labeled by character style
// You want all hyperlinks to be live
// Typesetter sometimes inserts a space or return in middle of URL to force a line break
// Space or return comes before period or slash per style manual
var doc=app.activeDocument;
// Compress stray www .'s
fn_grepChange (doc, "www(\\s|\\n)\\.", "www.", "hyper");
// Normalize to http://
fn_grepChange (doc, "(?<!\\/\\/)(www\\.([\\w\\-\\?\\=\\&]+([\\.\\/]?[\\%\\+]?)+)+)", "http://$0", "hyper");
fn_grepChange (doc, "(https?\\:\\/\\/)((www\\.)?([\\w\\-\\?\\=\\&]+([\\.\\/]?[\\%\\+]?)+)+)", "$1$2", "hyper");
// Remove ( space or return ) before ( period or slash )
fn_grepChange (doc, "(https?\\:\\/\\/([\\w\\-\\?\\=\\&]+[\\.\\/]?)+)(\\s|\\n)(\\.|\\/)", "$1$4", "hyper");
// ---- Main ---- //
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
app.findChangeGrepOptions.includeFootnotes = true;
// Regardless of character styles, find hyperlinks
app.findGrepPreferences.findWhat = 'https?\\:\\/\\/([\\w\\-\\?\\=\\&]+([\\.\\/]?[\\%\\+]?)+)+';
var found = app.findGrep();
var report = "found and activated "+String(found.length)+" links\n";
// make hyperlinks
for(i=0; i<found.length; i++)
try    {
        var report = report+found[i].contents+"\n";
       
        var source = doc.hyperlinkTextSources.add(found[i]);  
        var dest=doc.hyperlinkURLDestinations.add(found[i].contents);
           
        doc.hyperlinks.add(source,dest, {visible:false, name:found[i].contents+"("+(i+1)+")"});
   
    } catch ( err) {};
// If exporting to PDF set include hyperlinks to true
PDFExportPreset.includeHyperlinks = true;
// To export to html, choose File-->Export for Dreamweaver
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
alert ( report );
function fn_grepChange (myDocument, regexFind, regexChange, cStyle) {
    // purpose: execute a grep change, otherwise known as a regex s///;
    //Initialize.
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    //Set the find options.
    app.findChangeGrepOptions.includeFootnotes = true;
    app.findChangeGrepOptions.includeHiddenLayers = false;
    app.findChangeGrepOptions.includeLockedLayersForFind = false;
    app.findChangeGrepOptions.includeLockedStoriesForFind = false;
    app.findChangeGrepOptions.includeMasterPages = false;
    //Search and change
    app.findGrepPreferences.findWhat = regexFind;
    app.changeGrepPreferences.changeTo = regexChange;
    app.changeGrepPreferences.appliedCharacterStyle= cStyle;
    myDocument.changeGrep();
 
    //Clear the find/change preferences.
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    }

// --- end of script --- //
 
@_MBK_, а можно ли к этому скрипту прикрутить проверку на существование символьного стиля hyper - и если такого стиля не существует, то чтобы скрипт его создал (можно по запросу, чтобы юзер был в курсе того, что будет создан такой стиль, который потом можно будет отредактировать)? А то если в документе символьного стиля hyper нет, то вылезет ошибка.
 
Код:
try{
var cshyp = doc.characterStyles.add({name:"hyper"});
alert("Создан символьный стиль hyper");
}
catch (e){
var cshyp = doc.characterStyles.item("hyper");
}
 
  • Спасибо
Реакции: _MBK_ и LeonidB
@Eugenyus, вот спасибо! Это работает.
 
Статус
Закрыто для дальнейших ответов.