blob: afc29f57cc3c9fa37a61cc01e87fde41fa0283e3 [file] [log] [blame]
-- @atlcompiler atl2006
-- ******************************************************************************
-- Copyright (c) 2006 INRIA.
-- All rights reserved. This program and the accompanying materials
-- are made available under the terms of the Eclipse Public License v2.0
-- which accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v20.html
--
-- Contributors:
-- INRIA - Initial implementation
--
-- ******************************************************************************
--@name Table2HTML
--@version 1.0
--@domains Table, HTML
--@authors Eric Vepa (eric.vepa <at> gmail.com)
--@date 2006/08/04
--@description This transformation is used to transform generic tables into HTML model with tables.
module Table2HTML; -- Module Template
create OUT : HTML from IN : Table;
--@begin helper roundValue
--@comments for String with a Real content (a dot exists), returns the String with only one decimal after the dot
helper context Table!Cell def : roundValue() : String =
let point : Integer = self.content->indexOf('.') in
if point > 0
then self.content->substring(1,point+2)
else self.content
endif;
--@end helper roundValue
--@begin entrypoint rule HTML
--@comments only one HTML tag is created with one BODY tag
entrypoint rule HTML() {
to
h:HTML!HTML (
head <- head,
body <- body
),
head:HTML!HEAD (
headElements <- title
),
title:HTML!TITLE (
value <- 'Generated Table(s)'
),
body:HTML!BODY (
bodyElements <- Table!Table.allInstances()
->sortedBy(table|table.rows->first().cells->at(2).content)
->collect(table | thisModule.Table2TABLE(table))
)
}
--@end entrypoint rule HTML
--@begin lazy rule Table2TABLE
--@comments HTML TABLE are added in the BODY of the only HTML tag
lazy rule Table2TABLE {
from
tab:Table!Table
to
table:HTML!TABLE (
border <- '1',
trs <- firstRow,
trs <- tab.rows->subSequence(2,tab.rows->size())->collect(row | thisModule.Row2TR(row))
),
firstRow:HTML!TR (
tds <- tab.rows->first().cells->collect(cell | thisModule.Cell2TH(cell))
)
}
--@end lazy rule Table2TABLE
--@begin lazy rule Cell2TH
lazy rule Cell2TH {
from
cell:Table!Cell
to
th:HTML!TH (
value <- cell.roundValue()
)
}
--@end lazy rule Cell2TH
--@begin lazy rule Row2TR
lazy rule Row2TR {
from
row:Table!Row
to
tr:HTML!TR (
tds <- row.cells->collect(cell | thisModule.Cell2TD(cell))
)
}
--@end lazy rule Row2TR
--@begin lazy rule Cell2TD
lazy rule Cell2TD {
from
cell:Table!Cell
to
td:HTML!TD (
value <- cell.roundValue()
)
}
--@end lazy rule Cell2TD