@@ -461,7 +461,7 @@ static bool md_parseinlinelink(parser *p, void *out, size_t block_start) {
461461 return true;
462462}
463463
464- static bool help_createalias (const char * base , size_t label_start , size_t label_len , size_t target_start , size_t target_len , int topic_index );
464+ static bool help_createalias (const char * base , size_t label_start , size_t label_len , size_t paren_start , size_t paren_len , int topic_index );
465465
466466/** Case-insensitive comparison of substring (s, n) with literal (lit, lit_len). */
467467static bool help_casencmp (const char * s , size_t n , const char * lit , size_t lit_len ) {
@@ -508,7 +508,7 @@ bool md_parselink(parser *p, void *out) {
508508 }
509509
510510 // Normal reference link: create alias/link block
511- help_createalias (base , label_start , label_len , target_start , target_len , ctx -> current_topic_index );
511+ help_createalias (base , label_start , label_len , paren_start , paren_len , ctx -> current_topic_index );
512512 md_push_link (p , ctx , block_start , label_start , label_len , target_start , target_len );
513513 return true;
514514}
@@ -843,21 +843,15 @@ static void md_push_link(parser *p, md_parseout *out, size_t block_start, size_t
843843 * Help topic aliases
844844 * ********************************************************************** */
845845
846- /** Create an alias from a tag link definition. Inserts alias -> topic index into s_names. */
847- static bool help_createalias (const char * base , size_t label_start , size_t label_len , size_t target_start , size_t target_len , int topic_index ) {
846+ /** Create an alias from a tag link definition. Inserts alias -> topic index into s_names.
847+ * Alias text is the parenthesized part from the URL (e.g. [tagvar]: # (var) -> "var"). Requires paren_len > 0. */
848+ static bool help_createalias (const char * base , size_t label_start , size_t label_len , size_t paren_start , size_t paren_len , int topic_index ) {
848849 if (topic_index < 0 || (unsigned int ) topic_index >= s_topics .count ) return false;
849850 if (label_len < 3 || !help_casencmp (base + label_start , 3 , "tag" , 3 )) return false;
850- const char * target = base + target_start , * open = NULL , * close = NULL ;
851- for (const char * p = target ; p < target + target_len && !close ; p ++ ) {
852- if (!open && * p == '(' ) open = p + 1 ;
853- else if (open && * p == ')' ) { close = p ; break ; }
854- }
855- if (!open || !close || close == open ) return false;
856- size_t len = (size_t )(close - open );
857- if (len > MORPHO_MAX_HELPQUERY_LENGTH ) return false;
858- char alias_buf [len + 1 ];
859- help_lowercase_into (open , len , alias_buf );
860- return !MORPHO_ISNIL (help_nameindex_add (alias_buf , len , topic_index ));
851+ if (paren_len == 0 || paren_len > MORPHO_MAX_HELPQUERY_LENGTH ) return false;
852+ char alias_buf [paren_len + 1 ];
853+ help_lowercase_into (base + paren_start , paren_len , alias_buf );
854+ return !MORPHO_ISNIL (help_nameindex_add (alias_buf , paren_len , topic_index ));
861855}
862856
863857/* **********************************************************************
0 commit comments