Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Existe-t-il un moyen d'insérer un lien hypertexte dans une zone de texte ou une zone d'édition de texte ?Je sais que vous pouvez le faire dans une table JMP avec le type de colonne expression et que vous pouvez créer une boîte de boutons dans une fenêtre qui agit comme un lien hypertexte.Je connais également la syntaxe de balisage << pour les zones de texte, mais cela vous permet uniquement de mettre en gras, souligné et italique.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Approche très cool @ih
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Combinaison @Byron_JMP Avec l'idée de Web Browser Box avec votre chaîne regex, vous pouvez enregistrer un fichier HTML formaté avec des liens intégrés et l'afficher dans votre fenêtre.Du coup, vous avez beaucoup de contrôle sur le formatage du texte ; vous pouvez même permettre aux utilisateurs d'ajouter éventuellement un nom convivial à la syntaxe des liens comme [Site Web JMP] http://www.jmp.com , similaire à certaines syntaxes de balisage.

Names Default To Here( 1 );
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"[A Link]http://www.reference.md/files/D010/mD010489.html As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *http://www.ncbi.nlm.nih.gov/pubmed/12530994";
t = text;
//wrap links in a string with <A href="https://community.jmp.com/" target="_blank"> tags
findlinks = function({t, recct=0}, {url_regex, rgxmatch = {}, rtn=""},
recct++;
if(recct > 100,
throw("Recursion to deep: " || char(recct) || " levels. Still need to parse: '" || t || "'"));
url_regex = "^(.*?)(\!\[(.+)\])?((https?://){0,}(\w+\.){2,}\w+/?(\w+/?){0,}(\.\w+){0,1}/?)(\b.*)$";
rgxmatch = Regex Match(t, url_regex);
if( N Items(rgxmatch) == 0,
rtn = t, //No link
if( N Items(rgxmatch) == 10, //found a link
rtn = rgxmatch[2] ||
"</A><A href="" || rgxmatch[5] || "" target="_blank" rel="nofollow noopener noreferrer">" || if(is missing(rgxmatch[4]), rgxmatch[5], rgxmatch[4] ) || "</A>" ||
findlinks(rgxmatch[10], recct),
throw("Error matching regex in: '" || t || "'")
)
);
return(rtn)
);
//Create a simple html page from a block of text, save it to the temp files, and return the filename
texttohtmlfile = function({t},
Save text file("$TEMP/Temp HTML file.html", "" || findlinks(t) || "")
);
//Make a temp html file
fn = texttohtmlfile(text);
//Simple window to display html file, deletes the temp file when it closes
w = New Window("Example",wb = Web Browser Box());
w << On Close( Delete File( fn ) );
wb << Set Size(1000, 200);
wb << Set Auto Stretching( 1, 1 );
wb << Set Max Size( 1000, 1000 );
//Show the html file in the window
wb << Navigate( fn );Notez le malheureux slash bang dans l'expression de correspondance regex car "\[" commence une section "caractère échappé".
Modifié pour ajouter une capture d'écran et encore pour corriger une faute de frappe.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Merci pour cette suggestion Marc.Cependant, je ne veux pas que mes utilisateurs soient obligés d'intégrer des balises pour les URL.Mon patron a proposé une expression régulière qui fonctionne plutôt bien :
// Sample text
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"http://www.reference.md/files/D010/mD010489.html As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *http://www.ncbi.nlm.nih.gov/pubmed/12530994";
url_regex = "\b(https?://){0,}(\w+\.){2,}\w+/?(\w+/?){0,}(\.\w+){0,1}/?\b";
text_list = {};
link_list = {};
keep_going = 1;
istart = 1;
text_len = length(text);
i = 0;
while(keep_going,
new_text = substr(text, istart);
link_text = regex(new_text, url_regex);
if (!is missing(link_text),
// then
i++;
start_pos = contains(text, link_text, istart);
text_list[i] = substr(text, istart, (start_pos - istart - 1));
link_list[i] = link_text;
istart = start_pos + length(link_text);
,
// else no link found
i++;
text_list[i] = new_text;
keep_going = 0;
);
);
tb = {};
lb = {};
nt = nitems(text_list);
nw = new window("Test link",
vb = vlistbox(
)
);
for(i = 1, i <= nt, i++,
tb[i] = text box(text_list[i], << set width(400));
vb << append(tb[i]);
if (i < nt,
one_button = evalinsert("\[lb[i] = button box("^link_list[i]^", web("^link_list[i]^"), << underline style(1) )]\");
eval(parse(one_button));
vb << append(lb[i]);
);
);
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Voir la fonction Regex(). Cela pourrait être utile. L'expression régulière serait assez simple.
Names Default to Here( 1 );
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"<L>http://www.reference.md/files/D010/mD010489.html</L> As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *<L>http://www.ncbi.nlm.nih.gov/pubmed/12530994</L>";
Regex( text,
"<L>(.+?)</L>",
"\1"
);
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Merci pour vos commentaires et suggestions jusqu'à présent.Je n'ai pas le luxe de savoir où se trouvent les URL dans les commentaires des utilisateurs.
Voici un exemple de résultat :

Voici un exemple de code.J'ai facilité la tâche en utilisant les "marqueurs" d'URL et .J'ai joué avec la localisation des URL en utilisant des expressions régulières pour éviter d'avoir à utiliser ces marqueurs.Si quelqu'un a une bonne expression régulière pour trouver des URL, faites-le-moi savoir.J'ai des succès variés avec ce que j'ai trouvé sur le net jusqu'à présent.
// link markup example
text = "Periarthritis is defined as: Inflammation of the tissues around a joint. " ||
"<L>http://www.reference.md/files/D010/mD010489.html</L> As arthralgia, myalgia, tendonitis " ||
"and other musculoskeletal issues are listed events, periarthritis can be considered listed as well.
Comment: no good sentinel case — not a new signal; one case also reported somnolence and " ||
"another case reported “yawny” which could mean sleepy *<L>http://www.ncbi.nlm.nih.gov/pubmed/12530994</L>";
text_list = {};
link_list = {};
keep_going = 1;
istart = 1;
linkstart = "<L>";
linkend = "</L>";
text_len = length(text);
i = 0;
while(keep_going,
start_pos = contains(text, linkstart, istart);
if (start_pos,
end_pos = contains(text, linkend, istart);
if (end_pos,
i++;
text_list[i] = substr(text, istart, (start_pos - istart));
link_list[i] = substr(text, start_pos + 3, (end_pos - start_pos - 3));
istart = istart + end_pos - istart + 4;
);
);
if (!start_pos,
i++;
text_list[i] = substr(text, istart);
keep_going = 0;
);
);
tb = {};
lb = {};
nt = nitems(text_list);
nw = new window("Test link",
vb = vlistbox(
)
);
for(i = 1, i <= nt, i++,
tb[i] = text box(text_list[i], << set width(400));
vb << append(tb[i]);
if (i < nt,
one_button = evalinsert("\[lb[i] = button box("^link_list[i]^", web("^link_list[i]^"), << underline style(1) )]\");
eval(parse(one_button));
vb << append(lb[i]);
);
);
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Oh et faites de la mousebox (textBox) une fonction ou une expression qui peut être utilisée plusieurs fois, où seul le texte, le lien trouvé, change.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Cette solution nécessite un petit quelque chose en plus, quelque chose : une WrapListBox et une MouseBox.
Names Default To Here( 1 );
New Window( "WrapListBox",
Wrap List Box(
TextBox("This is a long comment to be followed by a link "),
MouseBox(TextBox(" <U>http://www.jmp.com</U> ",<<FONT color="">");
web(lnk);
(this<<CHILD></CHILD></FONT>
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Vous pouvez utiliser une expression régulière pour correspondre au modèle de lien hypertexte.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Je pense qu'il pourrait être possible d'analyser le contenu de la zone de texte pour un lien HTML (rechercher des modèles commençant par "//:http"), puis d'ajouter une zone de bouton à la zone de texte, avec le lien dedans, pour chaque modèle qui est analysé.
Mais cela va être assez complexe. Ce serait tellement mieux si les liens étaient reconnus dans le texte et cliquables.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Si vous acceptez que la boîte entière soit le lien, vous pouvez utiliser une boîte à boutons :
New Window( "Example",
Text box("Text Block 1"),
Button box( "http://www.jmp.com/", Web( "http://www.jmp.com/" ), Underline Style( 1 ) )
)Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Merci Byron, c'est un script sympa.Mais ce n'est pas ce que je cherchais.Plus précisément, je souhaite intégrer un lien dans une zone de texte et le rendre cliquable.Mes utilisateurs saisissent des commentaires qui peuvent être longs et contenir des liens de référence.Je travaille sur une approche où j'analyse les liens et affiche:
Bloc de texte1 (dans une zone de texte)
Lien1 (sous forme de lien cliquable)
Bloc de texte2 (dans une zone de texte)
Lien2 (sous forme de lien cliquable)
Bloc de texte3
etc.
Ce sera probablement acceptable pour les utilisateurs.
Re : Liens hypertextes dans une zone de texte ou une zone d'édition de texte ?Je soupçonne que vous cherchez quelque chose de plus sophistiqué que ça, mais...
Names Default To Here( 1 );
New Window( "Example",
hlistbox("1",
wb = Web Browser Box(),
bb=Button Box( "Take Me to JMP",
wb << Navigate( "http://www.jmp.com" );
wb << Set Auto Stretching( 1, 1 );
wb << Set Max Size( 1000, 1000 );
)));