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

Статус
Закрыто для дальнейших ответов.

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Тьфу, точно, characterStyles, конечно же!
 

Dorm

Топикстартер
10 лет на форуме
Сообщения
574
Реакции
1
Код:
https://en.wikisource.org/wiki/Constitution_of_Ukraine_2004
 

Dorm

Топикстартер
10 лет на форуме
Сообщения
574
Реакции
1
Потестил на большом документе.
Необходимо более точно указать что брать в ссылку (отбрасывать знак препинания в конце).
Например, сноска
Код:
http://www.memorial.krsk.ru/DOKUMENT/USSR/440511.htm.
Должна быть без точки в конце, иначе ссылка не работает
Код:
http://www.memorial.krsk.ru/DOKUMENT/USSR/440511.htm

Предложение может не только точкой заканчиваться...
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Лень заморачиваться с грепом, проще перед строкой
Код:
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);
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Лень заморачиваться с грепом, проще перед строкой поставить
Тогда точки исчезают и из текста, а там они должны остаться. Задача - выделить текст будущей гиперссылки без точки в конце, а не удалить её.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Тогда вместо
Код:
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);
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213

Не по теме:
Прямо в учебник -- пример группового программирования со всеми проблемами 'rake'
 
  • Спасибо
Реакции: LeonidB

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
Код:
try{
var cshyp = doc.characterStyles.add({name:"hyper"});
alert("Создан символьный стиль hyper");
}
catch (e){
var cshyp = doc.characterStyles.item("hyper");
}
Как раз пишу краткую заметку о том, как обходиться без try..catch при написании скриптов. И, главное, зачем.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Не, точки в конце всё равно пропадают.
Где - в самом документе? Чертовски странно
Без наличия индизайна попробуем постучать по шине:
Код:
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);
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
А вот когда вы пишете интересные грепы для выкусывания адресов, то в принципе учитываете то, что в URL не бывает пробелов? Вам это никак не облегчит задачу, нет?
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
И мало того, после отработки скрипта и исчезновения точек индизайн вылетает без какого-либо сообщения
Если это так, то буддистская логика адобовских программистов снова ставит меня в тупик.
Это что ж, получается, что гиперссылка из выделенного участка текста может указывать только на содержимое этого участка и никуда больше? А при попытке изменить указатель хоть на один символ индизайн от такой наглости делает себе сепуку? 'hmmm''otbline'
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Это что ж, получается, что гиперссылка из выделенного участка текста может указывать только на содержимое этого участка и никуда больше?

А если немного по-другому:
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, уже делать гиперссылками?

Но я, к сожалению, это осилить уже не могу, поскольку далее грепа мои познания в область скриптописания не простираются... :(
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851

LeonidB

Их бин
10 лет на форуме
Сообщения
2 469
Реакции
1 528
Вот тут то и есть главная заковырка - это действие, кажущееся простым, на самом деле, нетривиально, если вообще возможно *(
Странно как-то. В VBA это было возможно, я часто использовал в вордовских макросах:

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