Commit ca39228 for mammothjs

commit ca39228d7235ce0d498d47819a1779b62ceeaa54
Author: Michael Williamson <mike@zwobble.org>
Date:   Fri Sep 18 10:50:23 2026 +0100

    Distinguish context from options in document-to-html

diff --git a/lib/document-to-html.js b/lib/document-to-html.js
index 9e85c8e..0cd5a8f 100644
--- a/lib/document-to-html.js
+++ b/lib/document-to-html.js
@@ -80,27 +80,27 @@ function DocumentConversion(options, comments) {
         });
     }

-    function convertElements(elements, messages, options) {
+    function convertElements(elements, messages, context) {
         return flatMap(elements, function(element) {
-            return elementToHtml(element, messages, options);
+            return elementToHtml(element, messages, context);
         });
     }

-    function elementToHtml(element, messages, options) {
-        if (!options) {
-            throw new Error("options not set");
+    function elementToHtml(element, messages, context) {
+        if (!context) {
+            throw new Error("context not set");
         }
         var handler = elementConverters[element.type];
         if (handler) {
-            return handler(element, messages, options);
+            return handler(element, messages, context);
         } else {
             return [];
         }
     }

-    function convertParagraph(element, messages, options) {
+    function convertParagraph(element, messages, context) {
         return htmlPathForParagraph(element, messages).wrap(function() {
-            var content = convertElements(element.children, messages, options);
+            var content = convertElements(element.children, messages, context);
             if (ignoreEmptyParagraphs) {
                 return content;
             } else {
@@ -122,9 +122,9 @@ function DocumentConversion(options, comments) {
         }
     }

-    function convertRun(run, messages, options) {
+    function convertRun(run, messages, context) {
         var nodes = function() {
-            return convertElements(run.children, messages, options);
+            return convertElements(run.children, messages, context);
         };
         var paths = [];
         if (run.highlight !== null) {
@@ -232,13 +232,13 @@ function DocumentConversion(options, comments) {
         htmlPaths.element("table", {}, {fresh: true})
     ]);

-    function convertTable(element, messages, options) {
+    function convertTable(element, messages, context) {
         return findHtmlPath(element, defaultTablePath).wrap(function() {
-            return convertTableChildren(element, messages, options);
+            return convertTableChildren(element, messages, context);
         });
     }

-    function convertTableChildren(element, messages, options) {
+    function convertTableChildren(element, messages, context) {
         var bodyIndex = _.findIndex(element.children, function(child) {
             return !child.type === documents.types.tableRow || !child.isHeader;
         });
@@ -250,18 +250,18 @@ function DocumentConversion(options, comments) {
             children = convertElements(
                 element.children,
                 messages,
-                _.extend({}, options, {isTableHeader: false})
+                _.extend({}, context, {isTableHeader: false})
             );
         } else {
             var headRows = convertElements(
                 element.children.slice(0, bodyIndex),
                 messages,
-                _.extend({}, options, {isTableHeader: true})
+                _.extend({}, context, {isTableHeader: true})
             );
             var bodyRows = convertElements(
                 element.children.slice(bodyIndex),
                 messages,
-                _.extend({}, options, {isTableHeader: false})
+                _.extend({}, context, {isTableHeader: false})
             );
             children = [
                 Html.freshElement("thead", {}, headRows),
@@ -271,16 +271,16 @@ function DocumentConversion(options, comments) {
         return [Html.forceWrite].concat(children);
     }

-    function convertTableRow(element, messages, options) {
-        var children = convertElements(element.children, messages, options);
+    function convertTableRow(element, messages, context) {
+        var children = convertElements(element.children, messages, context);
         return [
             Html.freshElement("tr", {}, [Html.forceWrite].concat(children))
         ];
     }

-    function convertTableCell(element, messages, options) {
-        var tagName = options.isTableHeader ? "th" : "td";
-        var children = convertElements(element.children, messages, options);
+    function convertTableCell(element, messages, context) {
+        var tagName = context.isTableHeader ? "th" : "td";
+        var children = convertElements(element.children, messages, context);
         var attributes = {};
         if (element.colSpan !== 1) {
             attributes.colspan = element.colSpan.toString();
@@ -294,7 +294,7 @@ function DocumentConversion(options, comments) {
         ];
     }

-    function convertCommentReference(reference, messages, options) {
+    function convertCommentReference(reference, messages, context) {
         return findHtmlPath(reference, htmlPaths.ignore).wrap(function() {
             var comment = comments[reference.commentId];
             var count = referencedComments.length + 1;
@@ -310,12 +310,12 @@ function DocumentConversion(options, comments) {
         });
     }

-    function convertComment(referencedComment, messages, options) {
+    function convertComment(referencedComment, messages, context) {
         // TODO: remove duplication with note references

         var label = referencedComment.label;
         var comment = referencedComment.comment;
-        var body = convertElements(comment.body, messages, options).concat([
+        var body = convertElements(comment.body, messages, context).concat([
             Html.nonFreshElement("p", {}, [
                 Html.text(" "),
                 Html.freshElement("a", {"href": "#" + referenceHtmlId("comment", comment.commentId)}, [
@@ -334,7 +334,7 @@ function DocumentConversion(options, comments) {
         ];
     }

-    function convertBreak(element, messages, options) {
+    function convertBreak(element, messages, context) {
         return htmlPathForBreak(element).wrap(function() {
             return [];
         });
@@ -352,35 +352,35 @@ function DocumentConversion(options, comments) {
     }

     var elementConverters = {
-        "document": function(document, messages, options) {
-            var children = convertElements(document.children, messages, options);
+        "document": function(document, messages, context) {
+            var children = convertElements(document.children, messages, context);
             var notes = noteReferences.map(function(noteReference) {
                 return document.notes.resolve(noteReference);
             });
-            var notesNodes = convertElements(notes, messages, options);
+            var notesNodes = convertElements(notes, messages, context);
             return children.concat([
                 Html.freshElement("ol", {}, notesNodes),
                 Html.freshElement("dl", {}, flatMap(referencedComments, function(referencedComment) {
-                    return convertComment(referencedComment, messages, options);
+                    return convertComment(referencedComment, messages, context);
                 }))
             ]);
         },
         "paragraph": convertParagraph,
         "run": convertRun,
-        "text": function(element, messages, options) {
+        "text": function(element, messages, context) {
             return [Html.text(element.value)];
         },
-        "tab": function(element, messages, options) {
+        "tab": function(element, messages, context) {
             return [Html.text("\t")];
         },
-        "hyperlink": function(element, messages, options) {
+        "hyperlink": function(element, messages, context) {
             var href = element.anchor ? "#" + htmlId(element.anchor) : element.href;
             var attributes = {href: href};
             if (element.targetFrame != null) {
                 attributes.target = element.targetFrame;
             }

-            var children = convertElements(element.children, messages, options);
+            var children = convertElements(element.children, messages, context);
             return [Html.nonFreshElement("a", attributes, children)];
         },
         "checkbox": function(element) {
@@ -390,13 +390,13 @@ function DocumentConversion(options, comments) {
             }
             return [Html.freshElement("input", attributes)];
         },
-        "bookmarkStart": function(element, messages, options) {
+        "bookmarkStart": function(element, messages, context) {
             var anchor = Html.freshElement("a", {
                 id: htmlId(element.name)
             }, [Html.forceWrite]);
             return [anchor];
         },
-        "noteReference": function(element, messages, options) {
+        "noteReference": function(element, messages, context) {
             noteReferences.push(element);
             var anchor = Html.freshElement("a", {
                 href: "#" + noteHtmlId(element),
@@ -405,8 +405,8 @@ function DocumentConversion(options, comments) {

             return [Html.freshElement("sup", {}, [anchor])];
         },
-        "note": function(element, messages, options) {
-            var children = convertElements(element.body, messages, options);
+        "note": function(element, messages, context) {
+            var children = convertElements(element.body, messages, context);
             var backLink = Html.elementWithTag(htmlPaths.element("p", {}, {fresh: false}), [
                 Html.text(" "),
                 Html.freshElement("a", {href: "#" + noteRefHtmlId(element)}, [Html.text("↑")])
@@ -431,13 +431,13 @@ function DocumentConversion(options, comments) {
 var deferredId = 1;

 function deferredConversion(func) {
-    return function(element, messages, options) {
+    return function(element, messages, context) {
         return [
             {
                 type: "deferred",
                 id: deferredId++,
                 value: function() {
-                    return func(element, messages, options);
+                    return func(element, messages, context);
                 }
             }
         ];