Fossil

Changes On Branch markdown-header-ids
Login

Changes On Branch markdown-header-ids

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch markdown-header-ids Excluding Merge-Ins

This is equivalent to a diff from b0188ce122 to a190fae4a2

2026-01-13
19:52
Tag labels in Markdown with IDs that are compatible with GitHub. ... (check-in: f9ead7530c user: drh tags: trunk)
19:51
Update the change log. ... (Closed-Leaf check-in: a190fae4a2 user: drh tags: markdown-header-ids)
19:50
A more precise implementation of "slugify". ... (check-in: 8c9810e693 user: drh tags: markdown-header-ids)
2026-01-12
19:51
Avoid unsigned integer overflow in the delta_apply() function when handed a maliciously malformed input. ... (check-in: e417a5070b user: drh tags: trunk)
18:55
Attempt to add IDs to headers in markdown, the same way that GitHub does. Needs additional testing to confirm that unusual characters in headers are handled reasonably. ... (check-in: 21cbb8c467 user: drh tags: markdown-header-ids)
2026-01-11
17:04
Modify the accordion panel style to hide only vertical overflow and keep the box shadows of selected and current timeline entries visible in the context section of /info pages. Set the CSS property to `clip' instead of `hidden' to disallow any vertical scrolling (for example, by tabbing through hyperlinks), although this is probably not relevant for accordion panels. ... (check-in: b0188ce122 user: florian tags: trunk)
2026-01-10
11:52
Do not try to use "notepad" as a text editor on non-windows systems. ... (check-in: 9b263d87c1 user: drh tags: trunk)

Changes to src/markdown_html.c.
214
215
216
217
218
219
220


221
222
223
224
225
226
227





































228


229
230

231
232
233
234
235
236
237
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266

267
268
269
270
271
272
273
274
275
276
277
278







+
+







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+


+







static void html_header(
  struct Blob *ob,
  struct Blob *text,
  int level,
  void *opaque
){
  struct Blob *title = ((MarkdownToHtml*)opaque)->output_title;
  char *z = 0;
  int i,j;
  /* The first header at the beginning of a text is considered as
   * a title and not output. */
  if( blob_size(ob)<=PROLOG_SIZE && title!=0 && blob_size(title)==0 ){
    blob_appendb(title, text);
    return;
  }
  INTER_BLOCK(ob);
  z = fossil_strdup(blob_buffer(text));
  if( z==0 ){
    j = 0;
  }else{
    /*
    ** The GitHub "slugify" algorithm converts the text of a markdown header
    ** into a ID for that header.  The algorithm is:
    **
    **   1.  ASCII alphanumerics -> convert to lower case
    **   2.  Spaces, hyphens, underscores -> convert to '-'
    **   3.  Non-ASCII -> preserve as-is
    **   4.  Other punctuation -> remove
    **   5.  Multiple consecutive dashes -> collapse to one
    **   6.  Leading and trailing dashes -> remove
    **   7.  Markup <...> and &...; -> remove
    **
    ** This implementation does the conversion in-place.
    */
    for(i=j=0; z[i]; i++){
      if( fossil_isalnum(z[i]) ){
        z[j++] = fossil_tolower(z[i]);
      }else if( fossil_isspace(z[i]) || z[i]=='-' || z[i]=='_' ){
        if( j>0 && z[j-1]!='-' ) z[j++] = '-';
      }else if( z[i]=='<' ){
        do{ i++; }while( z[i]!=0 && z[i]!='>' );
      }else if( z[i]=='&' ){
        do{ i++; }while( z[i]!=0 && z[i]!=';' );
      }else if( (z[i]&0x80)!=0 ){
        z[j++] = z[i];
      }
    }
    if( j>0 && z[j-1]=='-' ) j--;
    z[j] = 0;
  }
  if( j>0 ){
    blob_appendf(ob, "<h%d id=\"%s\">", level, z);
  }else{
  blob_appendf(ob, "<h%d>", level);
    blob_appendf(ob, "<h%d>", level);
  }
  blob_appendb(ob, text);
  blob_appendf(ob, "</h%d>", level);
  fossil_free(z);
}

static void html_hrule(struct Blob *ob, void *opaque){
  INTER_BLOCK(ob);
  blob_append_literal(ob, "<hr>\n");
}

Changes to www/changes.wiki.
42
43
44
45
46
47
48


49
50
51
52
53
54
55
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57







+
+







       <li> New setting [/help/timeline-mark-leaves|timeline-mark-leaves] controls
            whether or not leaf check-ins are marked in the timeline.
       <li> "No-graph" timelines (using the "ng" query parameter) now show
            branch colors and bare check-in circles on the left.  The check-in
            circles appear, but no lines connecting them.
            ([/timeline?ng|example]).
       </ol>
  <li> Labels in Markdown now have IDs generated using the GitHub "slugify"
       algorithm.
  <li> The [/help/timeline|timeline command] is enhanced with the new options
       "<tt>-u|--for-user</tt>" to filter by user, and "<tt>-r</tt>" to display
       entries in chronological order.
  <li> The [/help/open|open command]'s new "<tt>--reopen REPOFILE</tt>" flag
       can be used to fix a checkout after moving its repository file.
  <li> Update internal Unicode character tables, used in regular expression
       handling, from version 13 to 17.