Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: ProcessMarkdown.gmk   Sprache: Shell

# Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

ifeq (,$(_MAKEBASE_GMK))
  $(error You must include MakeBase.gmk prior to including ProcessMarkdown.gmk)
endif

include TextFileProcessing.gmk

# Helper function for SetupProcessMarkdown
# $1: The $1 from SetupProcessMarkdown
# $2: The name of the current source file, relative to the dir given in $3
# $3: The directory of the current source file
define ProcessMarkdown
  $1_$2_OUTPUT_FILE := $$($1_DEST)/$$(basename $2)$$($1_FILE_EXT)
  $1_$2_TARGET_DIR := $$(dir $$($1_$2_OUTPUT_FILE))
  $1_$2_INPUT_FILE := $3/$2
  $1_$2_MARKER := $$(subst /,_,$1_$2)

  ifneq ($$($1_REPLACEMENTS), )
    $1_$2_PANDOC_INPUT := $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER)_pre.tmp

    $$(eval $$(call SetupTextFileProcessing, $1_$2_PREPROCESSED, \
        SOURCE_FILES := $$($1_$2_INPUT_FILE), \
        OUTPUT_FILE := $$($1_$2_PANDOC_INPUT), \
        REPLACEMENTS := $$($1_REPLACEMENTS), \
    ))
  else
    $1_$2_PANDOC_INPUT := $$($1_$2_INPUT_FILE)
  endif

  ifneq ($$($1_POST_PROCESS), )
    $1_$2_PANDOC_OUTPUT := $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER)_post.tmp
  else
    $1_$2_PANDOC_OUTPUT := $$($1_$2_OUTPUT_FILE)
  endif

  ifneq ($$($1_CSS), )
    ifneq ($$(findstring https:/, $$($1_CSS)), )
      $1_$2_CSS_OPTION := --css '$$($1_CSS)'
    else
      $1_$2_CSS := $$(strip $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR)))
      $1_$2_CSS_OPTION := --css '$$($1_$2_CSS)'
    endif
  endif

  # This does not need to be included in VARDEPS since it's from the actual
  # source file. Only run the shell if the recipe gets executed below.
  $1_$2_OPTIONS_FROM_SRC = \
      $$(shell $$(GREP) _pandoc-options_: $3/$2 | $$(CUT) -d : -f 2-)

  ifneq ($$($1_FILTER), )
    $1_$2_OPTIONS := --filter $$($1_FILTER)
  endif

  $1_$2_VARDEPS := $$($1_OPTIONS) $$($1_$2_OPTIONS) $$($1_CSS) \
      $$($1_REPLACEMENTS) $$($1_POST_PROCESS)
  $1_$2_VARDEPS_FILE := $$(call DependOnVariable, $1_$2_VARDEPS, \
      $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER).vardeps)

  $$($1_$2_PANDOC_OUTPUT): $$($1_$2_PANDOC_INPUT) $$($1_$2_VARDEPS_FILE) $$($1_EXTRA_DEPS)
 $$(call LogInfo, Converting $2 to $$($1_FORMAT))
 $$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$(dir $$($1_$2_PANDOC_OUTPUT)))
 $$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \
     $$(PANDOC) $$($1_OPTIONS) -f $$(PANDOC_MARKDOWN_FLAG) \
     -t $$($1_FORMAT) --standalone \
     $$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS_FROM_SRC) $$($1_$2_OPTIONS) \
     '$$($1_$2_PANDOC_INPUT)' -o '$$($1_$2_PANDOC_OUTPUT)')
        ifneq ($$(findstring $$(LOG_LEVEL), debug trace),)
   TOO_LONG_LINES=`$$(GREP) -E -e '^.{80}.+$$$$' $$<` || true ; \
   if [ "x$$$$TOO_LONG_LINES" != x ]; then \
     $$(ECHO"Warning: Unsuitable markdown in $$<:" ; \
     $$(ECHO"The following lines are longer than 80 characters:" ; \
     $$(GREP) -E -n -e '^.{80}.+$$$$' $$< || true ; \
   fi
        endif

  # If we have no post processing, PANDOC_OUTPUT is set to OUTPUT_FILE. Otherwise
  # PANDOC_OUTPUT is a temporary file, and we must now create the real OUTPUT_FILE.
  ifneq ($$($1_POST_PROCESS), )
    $$($1_$2_OUTPUT_FILE): $$($1_$2_PANDOC_OUTPUT)
 $$(call LogInfo, Post-processing markdown file $2)
 $$(call MakeDir, $$(SUPPORT_OUTPUTDIR)/markdown $$($1_$2_TARGET_DIR))
 $$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER)_post, \
     ( $$($1_POST_PROCESS) $$($1_$2_PANDOC_OUTPUT) > $$($1_$2_OUTPUT_FILE) ) )
  endif

  $1 += $$($1_$2_OUTPUT_FILE)
endef

################################################################################
# Setup make rules for converting a markdown file to html.
#
# Parameter 1 is the name of the rule. This name is used as variable prefix,
# and the targets generated are listed in a variable by that name.
#
# Remaining parameters are named arguments. These include:
#   DEST     : Destination root dir
#   FILES    : List of files to copy with absolute paths, or path relative to SRC.
#   SRC      : Source root dir; if given keep input files hierarchy relative to
#              SRC in DEST, otherwise flatten structure into DEST.
#   FORMAT   : The target format (defaults to html5)
#   FILE_EXT : The file extension to replace .md with (defaults to .html)
#   OPTIONS  : Additional options to pandoc
#   EXTRA_DEPS : Additional dependencies to add to each pandoc call
#   FILTER   : Optional pandoc filter command
#   POST_PROCESS : Optional command-line to post-process generated markdown
#   REPLACEMENTS : Text replacements to perform on input file before processing
#
SetupProcessMarkdown = $(NamedParamsMacroTemplate)
define SetupProcessMarkdownBody
  ifeq ($$($1_FILES), )
    $$(error FILES is missing in SetupProcessMarkdown $1)
  endif

  ifeq ($$($1_DEST), )
    $$(error DEST is missing in SetupProcessMarkdown $1)
  endif

  # If no target format is specified, default to html5.
  ifeq ($$($1_FORMAT), )
    $1_FORMAT := html5
  endif

  ifeq ($$($1_FORMAT), man)
    # If no file extension is specified, default to '.1'.
    ifeq ($$($1_FILE_EXT), )
      $1_FILE_EXT := .1
    endif
  else ifeq ($$($1_FORMAT), html5)
    ifeq ($$($1_FILE_EXT), )
      $1_FILE_EXT := .html
    endif
  else ifeq ($$($1_FORMAT), html)
    ifeq ($$($1_FILE_EXT), )
      $1_FILE_EXT := .html
    endif
  endif

  # Remove any trailing slash
  $1_DEST := $$(patsubst %/,%,$$($1_DEST))

  ifeq ($$($1_SRC), )
    # No SRC given, assume we're flattening all files into output dir.
    $$(foreach f, $$($1_FILES), \
      $$(eval $$(call ProcessMarkdown,$1,$$(notdir $$f),$$(patsubst %/,%,$$(dir $$f)))) \
    )
  else
    # Remove any trailing slash
    $1_SRC := $$(patsubst %/,%,$$($1_SRC))

    $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \
      $$(eval $$(call ProcessMarkdown,$1,$$f,$$($1_SRC))) \
    )
  endif
endef

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik