class Md2site::Env

環境クラス

Attributes

absolutepath_root[R]

@return [String] プロジェクトルートディレクトリの絶対パス

absolutepath_root_settingfile[R]

@return [String] サイト固有設定ファイルの絶対パス

alias_htmlfile_index[R]

@return [Integer] エイリアスHTMLファイル名のインデックス

category_target[R]

ターゲット名引きカテゴリ・ターゲットストラクトハッシュ

@return [Hash] ターゲット名をキーとして、カテゴリ・ターゲットストラクトを値とするハッシュ

commands[R]

ターゲットコマンド名引きコマンドストラクトハッシュ

@return [Hash] ターゲットコマンド名をキー、コマンドストラクトを値とするハッシュ

conf_hs[R]

構成ハッシュ

@return [Hash] 構成ファイルの変数名をキー、変数の値を値とするハッシュ

htmlfile_index[R]

@return [Integer] HTMLファイル名のインデックス

Public Class Methods

new(conf_path, mes, verbose) click to toggle source

初期化

@param conf_path [String] 構成ファイルのパス @param mes [Messagex] Messagexクラスのインスタンス @param verbose [Boolean] FileUtilsクラスのメソッドのverbose引数に与える値

# File lib/md2site/env.rb, line 37
def initialize(conf_path, mes, verbose)
  @mes = mes
  @verbose = verbose
  register_exit_codes

  @envcheck = EnvCheck.new(mes, conf_path)

  # カテゴリ・ターゲットストラクト定義
  #
  # カテゴリに含まれるターゲットとサブターゲットを関連付ける
  # カテゴリはターゲットをまとめるのが役割である。。
  # ターゲット名は全カテゴリにおいて一意でなければならない。
  @category_target_struct = Struct.new(:target, :misc, :subTargets, :subTargetsByHtmlfile)

  # ターゲットストラクト定義
  #
  # ターゲットはサブターゲットをまとめるのが役割である。
  # サブターゲットは1個のHTMLを生成するのが役割である。
  # ターゲットストラクト定義はターゲット向けのものとサブターゲット向けのものとの両方を含んでいて、
  # ターゲット、サブターゲットのどちらに対しても用いる。
  #
  @target_struct = Struct.new(:name, :dir, :dataDir, :workDir, :materialDir, :htmldir, :htmlfile, :mdfile, :filedir, :except, :command, :aliashtmldir, :aliashtmlfile, :templates)

  # templateストラクト定義
  #
  # YAML形式ファイルまたはMakrdown型式ファイルから、Markdown形式ファイルを生成するために必要な情報を持つ
  @template_struct = Struct.new(:datafname, :templatefname, :outputfname, :macroname, :kind, :src_subtarget_name)

  # ファイルディレクトリストラクト定義
  #
  # Makrdown型式ファイルから、HTML形式ファイルを生成するために必要な情報を持つ
  @filedir_struct = Struct.new(:html_output, :html_input, :partAhtml, :partChtml, :input_md, :output_md, :root_output_md, :data_dir)

  # コマンドストラクト定義
  #
  # ターゲットコマンド名、サブターゲットコマンド名からターゲット、サブターゲットを得るための情報を持つ
  @command_struct = Struct.new(:target, :subtargets)

  # ターゲットコマンド名引きコマンドストラクトハッシュ
  @commands = {}

  # ターゲット名引きカテゴリ・ターゲットストラクトハッシュ
  @category_target = {}

  # 構成ファイル中の変数名をキー都市、変数値を値とする構成ハッシュ
  @conf_hs = {}

  @envcheck.check_conf_path
  @absolutepath_root = File.dirname(File.dirname(File.absolute_path(conf_path)))
  @conf_hs["ABSOLUTE_PATH_ROOT"] = @absolutepath_root
  setup_from_conf(conf_path, @conf_hs)

  check_conf_hs_for_attribute
  check_conf_hs_and_set
  check_conf_hs

  setup_category(@sitefile_path)
  setup_config
end

Public Instance Methods

check_conf_hs() click to toggle source

構成ファイルから変換したハッシュに有効な値が指定されているか調べる(無効であればexitする)

@return [void]

# File lib/md2site/env.rb, line 148
def check_conf_hs
  @sitefile_path = @envcheck.check_conf_hs(@conf_hs, @absolutepath_root, @root_output_dir)
end
check_conf_hs_and_set() click to toggle source

構成ファイルから変換したハッシュに指定されている値が有効であれば、インスタンス変数で参照できるようにする(無効であればexitする)

@return [void]

# File lib/md2site/env.rb, line 156
def check_conf_hs_and_set # rubocop:disable Metrics/MethodLength
  @category_conf_prefix, @root_output_dir, @src_dir, @data_dir, @work_dir, @material_dir, @target_command_index, @subtarget_command_index, @key_index, @htmlfile_index, @alias_htmlfile_index = @envcheck.check_conf_hs_and_set(@conf_hs)
end
check_conf_hs_for_attribute() click to toggle source

Envクラスのattributeとして有効な値が構成ファイル中に指定されているか調べる(無効であればexitする)

@return [void]

# File lib/md2site/env.rb, line 140
def check_conf_hs_for_attribute
  @absolute_path_root_conf, @absolutepath_root_settingfile = @envcheck.check_conf_hs_for_attribute(@conf_hs)
end
check_site_tsv_and_category_conf(category_target_struct, obj) click to toggle source

サイト構成ファイルとカテゴリ構成ファイルの検査(異常があればデバッグ用エラーメッセージ出力)

@param category_target_struct [Struct] 検査対象のカテゴリ・ターゲットストラクト @param obj [Hash] カテゴリ構成設定ファイル(YAML形式)を変換したハッシュ @return [void]

# File lib/md2site/env.rb, line 454
def check_site_tsv_and_category_conf(category_target_struct, obj)
  category_subtarget_names = category_target_struct.subTargets.keys
  target_conf_subtarget_names = obj.keys

  ctkeys = category_subtarget_names - target_conf_subtarget_names
  unless ctkeys.empty?
    puts "target name=#{category_target_struct.target.name} category_only=#{ctkeys}"
  end
  tckeys = target_conf_subtarget_names - category_subtarget_names
  unless tckeys.empty?
    puts "target name=#{category_target_struct.target.name} site_only=#{tckeys}"
  end
  puts "==============" unless ctkeys.empty? || tckeys.empty?
end
expand_variable(value, hash, subhs={}) click to toggle source

変数展開 イコールの右辺にある変数名をhash,subhsのどちらかに含まれる、該当変数名をキーとしたハッシュの値に置き換える

@param value [String] 展開元の変数の値 @param hash [Hash] 置換用ハッシュ @param subhs [Hash] 第2置換用ハッシュ @return [String] 展開された変数の値

# File lib/md2site/env.rb, line 231
def expand_variable(value, hash, subhs={})
  @mes.output_debug("value=#{value}")
  if (m = /(\${([^}]+)})/.match(value))
    pattern = m[1]
    var_name = m[2]
    @mes.output_debug("var_name=#{var_name}")
    expand = hash[var_name]
    expand ||= subhs[var_name]
    @mes.output_debug("expand=#{expand}")
    expand ||= ENV[var_name]
    if expand
      value[pattern] = expand
      expand_variable(value, hash, subhs) if value.index("$")
    end
  end
  value
end
get_filepath(path) click to toggle source

パスを絶対パスに変換

@param path [String,nil] nilでなければ引数pathの絶対パス @return [String] 絶対パス

# File lib/md2site/env.rb, line 546
def get_filepath(path)
  if path
    @mes.output_debug("0 path=#{path}")
    if File.exist?(path)
      abs_path = File.expand_path(path)
      @mes.output_debug("1 absPath=#{abs_path}")
    else
      abs_path = nil
    end
  else
    abs_path = nil
    @mes.output_debug("4 absPath=#{abs_path}")
  end
  abs_path
end
get_sub_target(target_name, subtarget_name) click to toggle source

ターゲット名、サブターゲット名を指定してサブターゲットストラクト得る

@param target_name [String] ターゲット名 @param subtarget_name [String] サブターゲット名 @return [Struct] 指定されたサブターゲットストラクト

# File lib/md2site/env.rb, line 183
def get_sub_target(target_name, subtarget_name)
  @category_target[target_name].subTargets[subtarget_name]
end
get_subtarget_by_htmlfile(target_name, htmlfpath) click to toggle source

ターゲット名と出力HTMLファイルから、サブターゲットストラクトを得る

@param target_name [String] ターゲット名 @param htmlfpath [String] 出力HTMLファイルへのパス @return [Struct] 指定されたサブターゲットストラクト

# File lib/md2site/env.rb, line 193
def get_subtarget_by_htmlfile(target_name, htmlfpath)
  @category_target[target_name].subTargetsByHtmlfile[htmlfpath]
end
get_subtarget_commands(target_command) click to toggle source

指定ターゲットに属する全サブターゲットコマンド名を得る

@param target_command [String] ターゲットコマンド名 @return [Array<Struct>] 指定ターゲットに属する全サブターゲットコマンド名の配列

# File lib/md2site/env.rb, line 165
def get_subtarget_commands(target_command)
  if @commands[target_command]
    if @commands[target_command][:subtargets]
      @commands[target_command][:subtargets].keys
    else
      []
    end
  else
    []
  end
end
get_target_and_subtarget(target_command, subtarget_command) click to toggle source

ターゲットコマンド名とサブターゲットコマンド名から、サブターゲットストラクトを得る

@param target_command [String] ターゲットコマンド名 @param subtarget_command [String] サブターゲットコマンド名 @return [Array] 第0要素 ターゲットストラクト、第1要素 サブターゲットストラクト

# File lib/md2site/env.rb, line 203
def get_target_and_subtarget(target_command, subtarget_command)
  current_target = nil
  current_subtarget = nil
  @mes.output_info("Env.get_target_and_subtarget")
  @mes.output_info("target_command=#{target_command}")
  @mes.output_info("subtarget_command=#{subtarget_command}")
  if @commands[target_command]
    current_target = @commands[target_command][:target]
    if @commands[target_command][:subtargets]
      current_subtarget = @commands[target_command][:subtargets][subtarget_command]
    else
      @mes.output_info("@commands[target_command][:subtargets]")
    end
  else
    @mes.output_info("@commands[target_command]=nil")
    @mes.output_error("Not specified legal target command 1")
    exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_LEGAL_TARGET_COMMAND"))
  end
  [current_target, current_subtarget]
end
make_anchor_tag(subtarget) click to toggle source

HTMLのアンカータグを生成

@param subtarget [Struct] サブターゲットストラクト @return [String] HTMLのアンカータグ

# File lib/md2site/env.rb, line 575
def make_anchor_tag(subtarget)
  %Q(<li><a href="#{subtarget.htmlfile}">#{subtarget.htmlfile}}</a></li>)
end
make_html_first() click to toggle source

HTMLの先頭部分の作成

@return [String] HTMLの先頭部分

# File lib/md2site/env.rb, line 583
    def make_html_first
      <<~_HTML_HEAD
        <html>
        <head>
        </head>
        <body>
        <ul>
      _HTML_HEAD
    end
make_html_last() click to toggle source

HTMLの末尾部分の作成

@return [String] HTMLの末尾部分

# File lib/md2site/env.rb, line 597
    def make_html_last
      <<~_HTML_BODY_TAIL
        </ul>
        </body>
        </html>
      _HTML_BODY_TAIL
    end
make_template_struct(line, subtarget) click to toggle source

templateストラクトの作成

@param line [String] サブコンポーネント指定 @param subtarget [Struct] サブターゲットストラクト @return [Strunct] templateストラクト

# File lib/md2site/env.rb, line 475
def make_template_struct(line, subtarget)
  name, template, misc = line.split(",")
  macroname = name
  name_x = name.dup
  name_x[OUTPUT_DIR] = "" if name_x.index(OUTPUT_DIR)

  outputfname = File.join(subtarget.workDir, %Q(#{name_x}.md))

  src_subtarget_name = nil
  if template == INCLUDE_INDICATOR
    kind = :INCLUDE
    datafname = File.join(misc, %Q(#{name_x}.md))
    src_subtarget_name = name
  else
    kind = :NORMAL
    datafname = File.join(subtarget.dataDir, %Q(#{name_x}.yml))
  end
  @template_struct.new(datafname, template, outputfname, macroname, kind, src_subtarget_name)
end
make_zindex_html() click to toggle source

リンクの一覧のHTMLファイル作成

@return [void]

# File lib/md2site/env.rb, line 609
def make_zindex_html
  fname = File.join(@absolutepath_root, @root_output_dir, ZINDEX_HTML_FILE)
  @mes.exc_file_write(fname) do
    f = File.open(fname, "w")
    f.puts(make_html_first)
    anchors = @commands.map {|_, command_sturct| command_sturct[:subtargets].map {|_, subtarget| make_anchor_tag(subtarget) } }
    f.puts(anchors.flatten.join("\n"))
    f.puts(make_html_last)
    f.close
  end
end
make_zlist() click to toggle source

makeサブコマンドの指定可能なターゲットコマンド名とサブターゲットコマンド名のオプション指定の組み合わせを返す

@return [String] makeサブコマンドの指定可能なターゲットコマンド名とサブターゲットコマンド名のオプション指定の組み合わせ

# File lib/md2site/env.rb, line 566
def make_zlist
  @commands.map {|t_name, command_struct| command_struct[:subtargets].map {|_, s_hash| %Q(-t #{t_name} -s #{s_hash['command']}) } }.flatten
end
normalize_alias_htmlpath(array) click to toggle source

エイリアス指定をディレクトリ指定と、ファイル名指定に分解する

@param array [Array] カテゴリ別設定ファイルでのサブコンポーネント指定のフィールドの配列 @return [Array] 第0要素:エイリアスディレクトリ指定、第1要素:エイリアスファイル名指定

# File lib/md2site/env.rb, line 281
def normalize_alias_htmlpath(array)
  if array.size >= (@alias_htmlfile_index + 1)
    alias_htmlfname = array[@alias_htmlfile_index]
    alias_dir = File.dirname(alias_htmlfname)
    alias_basename = File.basename(alias_htmlfname, ".html")
    if alias_dir == "."
      alias_html_dir = ""
    end
    alias_htmlfname_x = [alias_basename, "html"].join(".")
  else
    alias_html_dir = ""
    alias_htmlfname_x = ""
  end

  [alias_html_dir, alias_htmlfname_x]
end
normalize_htmlpath(htmlfname) click to toggle source

HTMLファイル名指定からディレクトリ指定と、ファイル名指定、サブターゲット名、Makrdownファイル名を得る

@param htmlfname [String] HTMLファイル名指定 @return [Array] 第0要素:サブターゲット名、第1要素:HTMLファイル名指定、第2要素:HTMLディレクトリ指定、第3要素:Markdownファイル名指定

# File lib/md2site/env.rb, line 303
def normalize_htmlpath(htmlfname)
  dir = File.dirname(htmlfname)
  basename = File.basename(htmlfname)
  basename_no_ext = File.basename(htmlfname, ".html")
  if dir == "."
    subtarget_name = basename_no_ext
    htmldir = ""
  else
    subtarget_name = File.join(dir, basename_no_ext)
    htmldir = dir
  end
  htmlfname_x = basename
  mdfname = [basename_no_ext, "md"].join(".")

  [subtarget_name, htmlfname_x, htmldir, mdfname]
end
register_exit_codes() click to toggle source

終了ステータスの登録

@return [void]

# File lib/md2site/env.rb, line 101
def register_exit_codes # rubocop:disable Metrics/MethodLength
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_CONFFILE")
  @mes.add_exitcode("EXIT_CODE_NOT_SPECIFIED_CONFFILE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ABSOLUTE_PATH_ROOT_CONF")
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_ROOTCONFFILE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_DEFAULT_TABLE_TEMPLATE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ABSOLUTE_PATH_ROOT_SETTINGFILE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ABSOLUTE_PATH_SITE_FILE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_TEPLATE_DIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_CONF_DIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_SRC_DIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_URL")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ROOT_TEMPLATE_FUNCTIONS_VARIABLE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ABSOLUTE_PATH_STATUS_FILE")
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_SITEFILEPATH")
  @mes.add_exitcode("EXIT_CODE_CANNOT_MAKE_ABSOLUTE_PATH_ROOT")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_TARGET_COMMAND_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_SUBTARGET_COMMAND_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_KEY_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_HTMLFILE_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ALIAS_HTMLFILE_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ABSOLUTE_PATH_ROOT")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_CATEGORY_CONF_PREFIX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_ROOTOUTPUTDIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_ROOTOUTPUTDIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_READ_CONFFNAME")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_DATA_DIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_WORK_DIR")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_MATERIAL_DIR")
  @mes.add_exitcode("EXIT_CODE_INVALID_INDEX")
  @mes.add_exitcode("EXIT_CODE_CANNOT_GET_TARGET")
  @mes.add_exitcode("EXIT_CODE_CANNOT_FIND_TARGETCONFYAMLPATH")
  @mes.add_exitcode("EXIT_CODE_NOT_SPECIFIED_LEGAL_TARGET_COMMAND")
end
setup_category(file_path) click to toggle source

サイト構成ファイルからターゲット名引きカテゴリ・ターゲットストラクトハッシュの設定(無効な指定があればexitする)

@param file_path [String] サイト構成ファイルへのパス @return [void]

# File lib/md2site/env.rb, line 421
def setup_category(file_path)
  @mes.exc_file_gets(file_path) do
    f = File.open(file_path)
    while (l = f.gets)
      l.chomp!
      next if /^#/.match?(l)
      next if l.strip.empty?
      array = l.split("\t")
      size = array.size
      if @target_command_index >= size
        @mes.output_fatal("Invalid targetCommandIndex(=#{@target_command_index})")
        exit(@mes.ec("EXIT_CODE_INVALID_INDEX"))
      end
      if @subtarget_command_index >= size
        @mes.output_fatal("Invalid subTargetCommandIndex(=#{@subtarget_command_index})")
        exit(@mes.ec("EXIT_CODE_INVALID_INDEX"))
      end
      if @htmlfile_index >= size
        @mes.output_fatal("Invalid htmlfileIndex(=#{@htmlfile_index})")
        exit(@mes.ec("EXIT_CODE_INVALID_INDEX"))
      end
      setup_category_oneline(array, file_path)
    end
    f.close
  end
end
setup_category_oneline(fields, file_path) click to toggle source

カテゴリ別設定ファイル内の1つのサブコンポーネント指定でのターゲット名引きカテゴリ・ターゲットストラクトハッシュ、

ターゲットコマンド名引きコマンドストラクトハッシュの設定

@param fields [Array] サイト固有設定ファイルでのサブカテゴリ指定のフィールドの配列 @param file_path [String] カテゴリ別設定ファイルへのパス @return [void]

# File lib/md2site/env.rb, line 402
def setup_category_oneline(fields, file_path)
  target_command = fields[@target_command_index]
  subtarget_command = fields[@subtarget_command_index]
  target_name = fields[@key_index]
  if target_name.strip.empty?
    @mes.output_fatal("Cannot get target from #{file_path}")
    exit(@mes.ec("EXIT_CODE_CANNOT_GET_TARGET"))
  end

  stds, subtarget, htmlfname = setup_category_oneline_sub(fields, target_name, target_command, subtarget_command)

  setup_category_oneline_x(target_command, subtarget_command, stds, target_name, subtarget, htmlfname)
end
setup_category_oneline_sub(fields, target_name, target_command, subtarget_command) click to toggle source

サブコンポーネント指定のフィールドの値からサブターゲットストラクト生成

@param fields [Array] カテゴリ別設定ファイルでのサブコンポーネント指定のフィールドの配列 @param target_name [String] ターゲット名 @param target_command [String] ターゲットコマンド名 @param subtarget_command [String] サブターゲットコマンド名 @return [Array] 第0要素: サブターゲットストラクト 第1要素: サブターゲット名 第2要素: HTMLファイル名

# File lib/md2site/env.rb, line 359
def setup_category_oneline_sub(fields, target_name, target_command, subtarget_command)
  if fields.size >= (@htmlfile_index + 1)
    htmlfname = fields[@htmlfile_index]
  else
    htmlfname = nil
  end
  alias_htmldir, alias_htmlfname_x = normalize_alias_htmlpath(fields)

  @mes.output_debug("htmlfname=#{htmlfname}")
  @mes.output_debug("alias_htmlfname_x=#{alias_htmlfname_x}")

  misc = fields
  target_dir = File.join(@src_dir, target_name)

  unless @category_target[target_name]
    tds = @target_struct.new(target_name, target_dir, nil, nil, nil, nil, nil, nil, nil, nil, target_command, nil, nil, [])
    @category_target[target_name] = @category_target_struct.new(tds, misc, {}, {})
  end
  unless @commands[target_command]
    @commands[target_command] ||= @command_struct.new(@category_target[target_name].target, {})
  end
  except = htmlfname.index("/") ? true : false

  subtarget_name, htmlfname_x, htmldir, mdfname = normalize_htmlpath(htmlfname)
  subtarget_name_x = subtarget_name.dup

  subtarget_dir = File.join(target_dir, subtarget_name_x)

  subtarget_data_dir = File.join(subtarget_dir, @data_dir)
  subtarget_work_dir = File.join(subtarget_dir, @work_dir)
  subtarget_material_dir = File.join(subtarget_dir, @material_dir)

  stds = @target_struct.new(subtarget_name, subtarget_dir, subtarget_data_dir, subtarget_work_dir, subtarget_material_dir, htmldir, htmlfname_x, mdfname, nil, except, subtarget_command, alias_htmldir, alias_htmlfname_x, [])
  [stds, subtarget_name, htmlfname]
end
setup_category_oneline_x(target_command, subtarget_command, stds, target, subtarget, htmlfname) click to toggle source

ターゲット名引きカテゴリ・ターゲットストラクトハッシュ、ターゲットコマンド名引きコマンドストラクトハッシュの設定

(適切なコマンド名でなければexitする)

@param target_command [String] ターゲットコマンド名 @param subtarget_command [String] サブターゲットコマンド名 @param stds [String] サブターゲットストラクト @param target [String] ターゲット名 @param subtarget [String] サブターゲット名 @param htmlfname [String] HTMLファイル名 @return [void]

# File lib/md2site/env.rb, line 331
def setup_category_oneline_x(target_command, subtarget_command, stds, target, subtarget, htmlfname)
  # ターゲット名引きカテゴリ・ターゲットストラクトハッシュに、ターゲット名、サブターゲット名に対応するサブターゲットストラクトを設定
  @category_target[target].subTargets[subtarget] = stds
  # ターゲット名引きカテゴリ・ターゲットハッシュに、ターゲット名、HTMLファイル名に対応するサブターゲットストラクトを設定
  @category_target[target].subTargetsByHtmlfile[htmlfname] = stds

  # ターゲットコマンド名引きコマンドストラクトハッシュに、ターゲットコマンド名、サブターゲットコマンド名に対応するサブターゲットストラクトを設定
  if @commands[target_command]
    if @commands[target_command][:subtargets]
      @commands[target_command][:subtargets][subtarget_command] = stds
    else
      @mes.output_error("Not specified legal target command 2")
      exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_LEGAL_TARGET_COMMAND"))
    end
  else
    @mes.output_error("Not specified legal target command 3")
    exit(@mes.ec("EXIT_CODE_NOT_SPECIFIED_LEGAL_TARGET_COMMAND"))
  end
end
setup_config() click to toggle source

全カテゴリに対して、対応するカテゴリ別設定ファイルの内容を反映する

@return [void]

# File lib/md2site/env.rb, line 526
def setup_config
  @category_target.each do |name, category_target_struct|
    target = name
    targetconf_yamlfile = %Q(#{@category_conf_prefix}#{target}.yml)
    targetconf_yamlpath = File.join(@absolute_path_root_conf, targetconf_yamlfile)
    unless File.exist?(targetconf_yamlpath)
      @mes.output_error("Can't find targetconf_yamlpath(=#{targetconf_yamlpath})")
      exit(@mes.ec("EXIT_CODE_CANNOT_FIND_TARGETCONFYAMLPATH"))
    end
    obj = Filex::Filex.check_and_load_yamlfile(targetconf_yamlpath, @mes)
    next unless obj
    setup_target_config(category_target_struct, obj)
  end
end
setup_from_conf(conf_fname, hash, subhs={}) click to toggle source

構成ファイルを(変数展開しつつ)ハッシュに変換する

@param conf_fname [String] 構成ファイル名 @param hash [Hash] ハッシュ(構成ファイルの内容が追加される) @param subhs [Hash] 第2ハッシュ @return [void]

# File lib/md2site/env.rb, line 256
def setup_from_conf(conf_fname, hash, subhs={})
  @mes.exc_file_gets(conf_fname) do
    File.open(conf_fname) do |f|
      while (l = f.gets)
        l = l.chomp
        next if /^\s*#/ =~ l
        next if /^\s*$/ =~ l
        if (m = /\s*([^=]+)=([^=]+)\s*$/.match(l))
          hash[m[1]] ||= m[2]
        end
      end
    end
  end

  keys = hash.keys
  keys.each do |key|
    hash[key] = expand_variable(hash[key], hash, subhs)
  end
end
setup_target_config(category_target_struct, obj) click to toggle source

カテゴリ構成ファイルの内容をカテゴリ・ターゲットストラクトに反映する

@param category_target_struct [Struct] カテゴリ・ターゲットストラクト @param obj [Hash] カテゴリ構成ファイル(YAML形式)を変換したハッシュ @return [void]

# File lib/md2site/env.rb, line 501
def setup_target_config(category_target_struct, obj)
  check_site_tsv_and_category_conf(category_target_struct, obj)

  category_target_struct.subTargets.each do |_k, subtarget|
    subtarget.filedir = @filedir_struct.new(File.join(@root_output_dir, subtarget.htmldir, subtarget.htmlfile).to_s,
                                            File.join(subtarget.materialDir, subtarget.htmlfile).to_s,
                                            File.join(subtarget.materialDir, "0.html").to_s,
                                            File.join(subtarget.materialDir, "2.html").to_s,
                                            File.join(subtarget.dataDir, subtarget.mdfile).to_s,
                                            File.join(subtarget.workDir, subtarget.mdfile).to_s,
                                            File.join(@root_output_dir, subtarget.htmldir, subtarget.mdfile).to_s,
                                            subtarget.dataDir.to_s)
    subtarget_name = subtarget.name
    next unless obj && obj[subtarget_name]

    obj[subtarget_name].each do |line|
      subtarget.templates << make_template_struct(line, subtarget)
    end
  end
end