void generatePipeElmShortcodeNames(final ScanResult scanResult) {
        final String dictContent = scanResult.getClassesImplementing(Element.class.getName())
                .parallelStream()
                .map(GeneratePipelineElementsDoc::mapClassInfo)
                .filter(Objects::nonNull)
                .filter(elementInfo ->
                        !Category.INTERNAL.equals(elementInfo.category)
                                || SourceElement.class.equals(elementInfo.clazz))
                .sequential()
                .sorted(Comparator.comparing(ElementInfo::type))
                .map(elementInfo -> {
                    final String template = "\"{}\" \"{}\"";
                    return LogUtil.message(template, elementInfo.type, elementInfo.iconFilename);
                })
                .collect(Collectors.joining("\n"));

        final String dictDefinition = "{{ $element_map := dict\n" + dictContent + "\n}}";

        final Path file = StroomDocsUtil.resolveStroomDocsFile(PIPE_ELM_SHORT_CODE_SUB_PATH);

        final boolean didReplace = StroomDocsUtil.replaceGeneratedContent(file, dictDefinition);

        if (didReplace) {
            LOGGER.info("Replaced generated content in file: {}", file);
        } else {
            LOGGER.info("No change made to file: {}", file);
        }
    }
This will modify the content of the file
{@code [this repo]/../stroom-docs/layouts/shortcodes/pipe-elm.html}
stroom-app/src/test/java/stroom/app/docs/GeneratePipelineElementsDoc.java