File: transformer/object-into-document/source.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: TmDoc#10
  module: Transformer
  module: ObjectIntoDocument#12
  module: Source#14
has properties
function: transform_sources / 3 #18
function: transform / 3 #40

Code

   1  # $Id: source.rb,v 1.8 2012/04/17 02:49:40 machan Exp $
   2 
   3  require 'tmdoc/tmstd'
   4  require 'tmdoc/constant'
   5  require 'tmdoc/model/object'
   6  require 'tmdoc/model/document'
   7  require 'tmdoc/transformer/object-into-document/node'
   8 
   9 
  10  module TmDoc
  11 
  12  module Transformer::ObjectIntoDocument
  13 
  14  module Source
  15 
  16  module_function
  17 
  18      def transform_sources(mo_files, mo_toplevel_module, mo_object_class)
  19          ASSERT.kind_of mo_files,            MOP::Files
  20          ASSERT.kind_of mo_toplevel_module,  MOLN::ToplevelModule
  21          ASSERT.kind_of mo_object_class,     MOLN::Object
  22 
  23          LOG::Progress.log "\tSources"
  24 
  25          return nil if mo_files.empty?
  26 
  27          md_sources = mo_files.sort.map { |mo_file|
  28              ASSERT.kind_of mo_file, MOP::File
  29 
  30              LOG::Progress.log "\t\t%s", mo_file.name
  31 
  32              transform mo_file, mo_toplevel_module, mo_object_class
  33          }
  34          return nil if md_sources.empty?
  35 
  36          MDS::SeqOfSource.new md_sources
  37      end
  38 
  39 
  40      def transform(mo_file, mo_toplevel_module, mo_object_class)
  41          ASSERT.kind_of mo_file,             MOP::File
  42          ASSERT.kind_of mo_toplevel_module,  MOLN::ToplevelModule
  43          ASSERT.kind_of mo_object_class,     MOLN::Object
  44 
  45          name = mo_file.name
  46 
  47          md_toplevel_module_node =
  48              Node.transform_module_structure_node(
  49                  mo_toplevel_module, nil, mo_file
  50              ) { |mo_module|
  51                  ASSERT.kind_of mo_module, MOLA::GenericModule
  52 
  53                  mo_module.has_any_module_in_the_source? name
  54              }
  55 
  56          md_object_class_node =
  57              Node.transform_class_hierarchy_node(
  58                  mo_object_class, nil, mo_file
  59              ) { |mo_class|
  60                  ASSERT.kind_of mo_class, MOLN::Class
  61 
  62                  mo_class.has_any_subclass_in_the_source? name
  63              }
  64 
  65          map_of_line_num_to_links =
  66              mo_file.map_of_line_num_to_logical_subjects.map {
  67                  |line_num, mo_subjects|
  68 
  69                  md_links = MDL::SeqOfLinkToLogical.new(
  70                      mo_subjects.sort.map { |mo_subject|
  71                          case mo_subject
  72                          when MOLA::GenericModule
  73                              Link.transform_link_to_module mo_subject
  74                          when MOLA::Property
  75                              Link.transform_link_to_property mo_subject
  76                          else
  77                              ASSERT.abort(
  78                                  "Unknown sunject: %s", mo_subject.to_s
  79                              )
  80                          end
  81                      }
  82                  )
  83 
  84                  [line_num, md_links]
  85              }.inject(MDL::MapOfLineNumToLinks.new) { |map, pair|
  86                  ASSERT.tuple_of pair, [Integer, MDL::SeqOfLinkToLogical]
  87                  line_num, md_links = pair
  88 
  89                  map.update line_num, md_links
  90              }
  91 
  92 
  93          MDS::Source.new(
  94              name,
  95 
  96              if md_toplevel_module_node.below_module_nodes.empty?
  97                  nil
  98              else
  99                  md_toplevel_module_node
 100              end,
 101 
 102              if md_object_class_node.subclass_nodes.empty?
 103                  nil
 104              else
 105                  md_object_class_node
 106              end,
 107 
 108              map_of_line_num_to_links
 109          )
 110      end
 111  end
 112 
 113  end # TmDoc::Transformer::ObjectIntoDocument
 114 
 115  end # TmDoc