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

  • Автор темы Автор темы Dorm
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Тьфу, точно, characterStyles, конечно же!
 
Код:
https://en.wikisource.org/wiki/Constitution_of_Ukraine_2004
 
Потестил на большом документе.
Необходимо более точно указать что брать в ссылку (отбрасывать знак препинания в конце).
Например, сноска
Код:
http://www.memorial.krsk.ru/DOKUMENT/USSR/440511.htm.
Должна быть без точки в конце, иначе ссылка не работает
Код:
http://www.memorial.krsk.ru/DOKUMENT/USSR/440511.htm

Предложение может не только точкой заканчиваться...
 
Последнее редактирование:
Лень заморачиваться с грепом, проще перед строкой
Код:
var source = doc.hyperlinkTextSources.add(found[i]);
поставить
Код:
var a=found[i].contents;
found[i].contents=(a.substr(a.length-1,1)=="."?a.substr(0,a.length-1):a);
 
Лень заморачиваться с грепом, проще перед строкой поставить
Тогда точки исчезают и из текста, а там они должны остаться. Задача - выделить текст будущей гиперссылки без точки в конце, а не удалить её.
 
Тогда вместо
Код:
var dest=doc.hyperlinkURLDestinations.add(found[i].contents);
Код:
var a=found[i].contents;
a=(a.substr(a.length-1,1)=="."?a.substr(0,a.length-1):a);
var dest=doc.hyperlinkURLDestinations.add(a);
 

Не по теме:
Прямо в учебник -- пример группового программирования со всеми проблемами 'rake'
 
  • Спасибо
Реакции: LeonidB
Код:
try{
var cshyp = doc.characterStyles.add({name:"hyper"});
alert("Создан символьный стиль hyper");
}
catch (e){
var cshyp = doc.characterStyles.item("hyper");
}
Как раз пишу краткую заметку о том, как обходиться без try..catch при написании скриптов. И, главное, зачем.
 
Не, точки в конце всё равно пропадают.
Где - в самом документе? Чертовски странно
Без наличия индизайна попробуем постучать по шине:
Код:
var a=found[i].contents;
var b=(a.substr(a.length-1,1)=="."?a.substr(0,a.length-1):a);
var dest=doc.hyperlinkURLDestinations.add(b);
 
А вот когда вы пишете интересные грепы для выкусывания адресов, то в принципе учитываете то, что в URL не бывает пробелов? Вам это никак не облегчит задачу, нет?
 
И мало того, после отработки скрипта и исчезновения точек индизайн вылетает без какого-либо сообщения
Если это так, то буддистская логика адобовских программистов снова ставит меня в тупик.
Это что ж, получается, что гиперссылка из выделенного участка текста может указывать только на содержимое этого участка и никуда больше? А при попытке изменить указатель хоть на один символ индизайн от такой наглости делает себе сепуку? 'hmmm''otbline'
 
Это что ж, получается, что гиперссылка из выделенного участка текста может указывать только на содержимое этого участка и никуда больше?

А если немного по-другому:
1) вначале не присваивать стиль hyper, просто сделать замены-исправления:
Код:
// Normalize to http://
fn_grepChange (doc, "(?<!\\/\\/)(www\\.([\\w\\-\\?\\=\\&]+([\\.\\/\\%\\+])*)+)", "http://$0");
// Remove ( space or return ) before ( period or slash )
fn_grepChange (doc, "(https?\\:\\/\\/([\\w\\-\\?\\=\\&]+[\\.\\/]?)+)(\\s|\\n)(\\.|\\/)", "$1$4");

А потом:
2) найти все адреса с http (https):
Код:
app.findGrepPreferences.findWhat = 'https?\\:\\/\\/([\\w\\-\\?\\=\\&]+([\\.\\/\\%\\+])*)+';

3) проверить, не оканчивается ли найденное точкой (сразу сделать это грепом у меня не получается, поскольку точки могут быть внутри адреса);
4) если не оканчивается, то и хорошо;
5) а если оканчивается, то изменить найденное на 1 знак влево, исключив из него последнюю точку;
6) присвоить найденному стиль hyper;

и только после этого
7) всё, что в документе выделено стилем hyper, уже делать гиперссылками?

Но я, к сожалению, это осилить уже не могу, поскольку далее грепа мои познания в область скриптописания не простираются... :(
 
Вот тут то и есть главная заковырка - это действие, кажущееся простым, на самом деле, нетривиально, если вообще возможно *(
Странно как-то. В VBA это было возможно, я часто использовал в вордовских макросах:

Код:
If Selection.Characters.Last = Chr(13) Then
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
 
Статус
Закрыто для дальнейших ответов.