make/scripts/pandoc-html-manpage-filter.js
author ihse
Mon, 03 Dec 2018 18:33:11 +0100
branchihse-manpages-branch
changeset 57051 d8697832a650
child 53228 e7738fd1c974
permissions -rw-r--r--
Add html filter script from Jon.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57051
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     1
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     2
// Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     3
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     4
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     5
// This code is free software; you can redistribute it and/or modify it
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     6
// under the terms of the GNU General Public License version 2 only, as
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     7
// published by the Free Software Foundation.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     8
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
     9
// This code is distributed in the hope that it will be useful, but WITHOUT
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    10
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    11
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    12
// version 2 for more details (a copy is included in the LICENSE file that
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    13
// accompanied this code).
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    14
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    15
// You should have received a copy of the GNU General Public License version
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    16
// 2 along with this work; if not, write to the Free Software Foundation,
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    17
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    18
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    19
// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    20
// or visit www.oracle.com if you need additional information or have any
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    21
// questions.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    22
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    23
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    24
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    25
// Traverse a tree of pandoc format objects, calling callback on each
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    26
// element, and replacing it if callback returns a new object.
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    27
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    28
// Inspired by the walk method in
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    29
// https://github.com/jgm/pandocfilters/blob/master/pandocfilters.py
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    30
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    31
function traverse(obj, callback) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    32
    if (Array.isArray(obj)) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    33
        var processed_array = [];
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    34
        obj.forEach(function(elem) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    35
            if (elem === Object(elem) && elem.t) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    36
                var replacement = callback(elem.t, elem.c || []);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    37
                if (!replacement) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    38
                    // no replacement object returned, use original
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    39
                    processed_array.push(traverse(elem, callback));
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    40
                } else if (Array.isArray(replacement)) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    41
                    // array of objects returned, splice all elements into array
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    42
                    replacement.forEach(function(repl_elem) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    43
                        processed_array.push(traverse(repl_elem, callback));
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    44
                    })
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    45
                } else {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    46
                    // replacement object given, traverse it
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    47
                    processed_array.push(traverse(replacement, callback));
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    48
                }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    49
            } else {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    50
                processed_array.push(traverse(elem, callback));
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    51
            }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    52
        })
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    53
        return processed_array;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    54
    } else if (obj === Object(obj)) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    55
        if (obj.t) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    56
            var replacement = callback(obj.t, obj.c || []);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    57
            if (replacement) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    58
                return replacement;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    59
            }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    60
        }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    61
        var processed_obj = {};
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    62
        Object.keys(obj).forEach(function(key) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    63
            processed_obj[key] = traverse(obj[key], callback);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    64
        })
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    65
        return processed_obj;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    66
    } else {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    67
        return obj;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    68
    }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    69
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    70
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    71
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    72
// Helper constructors to create pandoc format objects
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    73
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    74
function Space() {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    75
    return { 't': 'Space' };
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    76
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    77
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    78
function Str(value) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    79
    return { 't': 'Str', 'c': value };
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    80
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    81
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    82
function MetaInlines(value) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    83
    return { 't': 'MetaInlines', 'c': value };
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    84
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    85
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    86
function change_title(type, value) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    87
    if (type === 'MetaInlines') {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    88
        if (value[0].t === 'Str') {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    89
            var match = value[0].c.match(/^([A-Z]+)\([0-9]+\)$/);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    90
            if (match) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    91
                return MetaInlines([
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    92
                        Str("The"), Space(),
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    93
			Str(match[1].toLowerCase()),
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    94
			Space(), Str("Command")
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    95
		    ]);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    96
            }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    97
        }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    98
    }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
    99
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   100
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   101
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   102
// Main function
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   103
//
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   104
function main() {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   105
    var input = "";
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   106
    while (line = readLine()) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   107
        input = input.concat(line);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   108
    }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   109
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   110
    var json = JSON.parse(input);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   111
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   112
    var meta = json.meta;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   113
    if (meta) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   114
        meta.date = undefined;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   115
        var title = meta.title;
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   116
        if (meta.title) {
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   117
            meta.title = traverse(meta.title, change_title);
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   118
        }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   119
    }
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   120
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   121
    print(JSON.stringify(json));
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   122
}
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   123
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   124
// ... and execute it
d8697832a650 Add html filter script from Jon.
ihse
parents:
diff changeset
   125
main();