1 # $Id: transformer.rb,v 1.14 2012/01/22 14:17:24 machan Exp $
2
3 require 'tmdoc/tmstd'
4 require 'tmdoc/constant'
5 require 'tmdoc/model/document'
6 require 'tmdoc/model/docbook'
7 require 'tmdoc/transformer/document-into-docbook/overview'
8 require 'tmdoc/transformer/document-into-docbook/module'
9 require 'tmdoc/transformer/document-into-docbook/source'
10 require 'tmdoc/transformer/document-into-docbook/node'
11 require 'tmdoc/transformer/document-into-docbook/link'
12 require 'tmdoc/transformer/localizable-string'
13
14
15 module TmDoc
16
17 module Transformer::DocumentIntoDocBook
18
19 module_function
20
21 def transform(
22 md_store, env, book_title, source_dir_name, tab_width, show_code
23 )
24 ASSERT.kind_of md_store, MD::Store
25 ASSERT.kind_of env, ENV::Environment
26 ASSERT.kind_of book_title, String
27 ASSERT.kind_of source_dir_name, String
28 ASSERT.kind_of tab_width, Integer
29 ASSERT.boolean show_code
30
31 md_overview = md_store.an_overview
32 md_unknown_modules = md_store.unknown_modules
33 md_builtin_modules = md_store.builtin_modules
34 md_user_modules = md_store.user_modules
35 md_sources = md_store.sources
36
37 transforms = [
38 if md_overview
39 [
40 lambda { |title|
41 Overview.transform(
42 md_overview,
43 title,
44 Id::DIV_OVERVIEW,
45 show_code
46 )
47 },
48
49 TLS::DIV_OVERVIEW
50 ]
51 else
52 nil
53 end,
54
55 if md_unknown_modules
56 [
57 lambda { |title|
58 Module.transform_modules(
59 md_unknown_modules,
60 title,
61 Id::DIV_UNKNOWN_M_AND_C,
62 show_code
63 )
64 },
65
66 TLS::DIV_UNKNOWN_M_AND_C
67 ]
68 else
69 nil
70 end,
71
72 if md_builtin_modules
73 [
74 lambda { |title|
75 Module.transform_modules(
76 md_builtin_modules,
77 title,
78 Id::DIV_BUILTIN_M_AND_C,
79 show_code
80 )
81 },
82
83 TLS::DIV_BUILTIN_M_AND_C
84 ]
85 else
86 nil
87 end,
88
89 if md_user_modules
90 [
91 lambda { |title|
92 Module.transform_modules(
93 md_user_modules,
94 title,
95 Id::DIV_USER_M_AND_C,
96 show_code
97 )
98 },
99
100 TLS::DIV_USER_M_AND_C
101 ]
102 else
103 nil
104 end,
105
106 if md_sources
107 [
108 lambda { |title|
109 Source.transform_sources(
110 md_sources,
111 env,
112 title,
113 Id::DIV_SOURCES,
114 source_dir_name,
115 tab_width,
116 show_code
117 )
118 },
119
120 TLS::DIV_SOURCES
121 ]
122 else
123 nil
124 end
125 ].compact
126
127 mb_documents =
128 unless transforms.empty?
129 mb_array_of_document = transforms.map { |transform|
130 ASSERT.tuple_of transform, [Proc, String]
131 fun, title = transform
132
133 LOG::Progress.log "\t%s", title
134
135 fun.call(title)
136 }.compact
137
138 unless mb_array_of_document.empty?
139 MBD::SeqOfDocument.new mb_array_of_document
140 else
141 MBD::EMPTY_SEQ_OF_DOCUMENT
142 end
143 else
144 MBD::EMPTY_SEQ_OF_DOCUMENT
145 end
146
147 mb_home = MBD::Node.new(
148 Id::HOME,
149 DBOOK.book {
150 [
151 DBOOK.book_info {
152 [
153 DBOOK.title(book_title),
154
155 DBOOK.pub_date(Time.now.strftime('%Y-%m-%d'))
156 ]
157 }
158 ] + mb_documents.map { |mb_document|
159 ASSERT.kind_of mb_document, MBD::Abstract
160
161 DBOOK.include(mb_document.name, OUTPUT_FILE_SUFFIX)
162 } + [
163 DBOOK.index(:id => Id::INDEX)
164 ]
165 },
166 mb_documents
167 )
168
169 Link.reset_cache!
170 DBOOK.reset_cache!
171
172 MB::Store.new mb_home
173 end
174 end
175
176 end