Grand Sorcerer
Posts: 7,094
Karma: 92190113
Join Date: Nov 2011
Location: Charlottesville, VA
Device: Kindles
|
Quote:
Originally Posted by jcsalomon
Is the Ion format doing the effective equivalent of inlining CSS?
|
KFX conversion flattens CSS and places some properties in with the data content and collects others into styles. Information that isn't relevant to how the content is rendered is discarded. The end result bears little resemblance to the original HTML/CSS.
Quote:
Originally Posted by jcsalomon
In a GitHub project-not-to-be-mentioned-here, I see someone’s been able to unpack a KFX file into Amazon’s Ion format, but I have not yet seen what such an unpacking looks like.
|
I have been paying attention to that also. It seems that progress has been made on the removal of KFX DRM.
The conversion of non-DRM KFX content to a readable format has been possible for a while. Amazon published documentation for Ion along with reference implementations in various programming languages. For example, here is the first chapter from the sample you posted converted to KFX by Previewer 3 and then converted to readable Ion text format:
Spoiler:
Code:
storyline:: r5H_7jrET6avxAzBN02vWw29:: {
story_name: r5H_7jrET6avxAzBN02vWw29,
content_list: [
{
id: 12,
style: r5H_7jrET6avxAzBN02vWw41,
type: text,
content_list: [
{
id: 13,
style: r5H_7jrET6avxAzBN02vWw31,
type: text,
content: "Chapter One:\nThe First Chapter",
},
{
id: 14,
style: r5H_7jrET6avxAzBN02vWw33,
'yj.first_line_style': {
'yj.first_line_style_type': {
'yj.number_of_lines': 1,
},
style_name: r5H_7jrET6avxAzBN02vWw34,
},
type: text,
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ut diam vel massa ornare venenatis id id orci. Donec vel suscipit lacus. Aliquam erat volutpat. Sed gravida at lectus ut eleifend. Integer lacus felis, vehicula ac placerat at, ultricies sed massa. Mauris non ligula ut nisi pretium eleifend non sit amet ex. In rutrum est vel nibh ultrices varius.",
},
{
id: 15,
style: r5H_7jrET6avxAzBN02vWw36,
type: text,
content: "Nulla cursus ac quam bibendum porta. Morbi viverra, sem non venenatis porttitor, justo quam egestas magna, quis efficitur nisl mauris non orci. Vestibulum at justo eros. Cras porttitor vel arcu sed fermentum. Maecenas gravida, purus aliquam commodo aliquet, nibh dolor pharetra lorem, nec aliquam erat orci sed neque. Quisque pulvinar sollicitudin suscipit. Integer non ante vitae felis laoreet efficitur sed id sem. Duis consectetur viverra urna, at placerat ex imperdiet eu. Nulla venenatis elementum est quis ullamcorper. Nam vel malesuada tellus, ac dictum leo. Donec pellentesque ullamcorper nibh, vitae vulputate nulla dapibus non. Vestibulum volutpat, nisi non pretium facilisis, tortor lorem consequat velit, sit amet interdum est felis vehicula orci.",
},
{
id: 16,
style: r5H_7jrET6avxAzBN02vWw36,
type: text,
content: "Nullam laoreet purus ligula, ac porta nulla tristique quis. Sed a ante nec diam scelerisque fringilla sed et sapien. Proin viverra condimentum nisi ullamcorper dignissim. Cras vel velit id nunc laoreet lobortis. Integer turpis velit, dignissim in nibh ac, sodales finibus metus. Nunc rhoncus eget est ut auctor. Maecenas at pharetra mauris, et suscipit magna. Phasellus hendrerit id dui porta porttitor. Quisque sapien lectus, fringilla et elit mattis, efficitur sollicitudin mauris. Integer ultricies orci vitae nulla hendrerit, at eleifend mi blandit. Integer tincidunt urna eu erat interdum, a iaculis ante rhoncus. Morbi ac gravida velit. Pellentesque et pellentesque tellus, at malesuada lectus. Aliquam hendrerit, tortor eu efficitur scelerisque, ligula purus pellentesque nulla, nec sagittis metus leo nec sem.",
},
{
id: 17,
style: r5H_7jrET6avxAzBN02vWw36,
type: text,
content: "Mauris auctor urna non tristique bibendum. Integer quis turpis lacus. Aenean ultricies nisl risus, laoreet malesuada justo imperdiet eget. Duis porta risus elit, consequat porttitor purus euismod ut. Maecenas euismod lorem eu volutpat vulputate. Proin et massa sed leo vestibulum eleifend. Nam sit amet justo rutrum, porttitor magna in, sagittis quam.",
},
{
id: 18,
style: r5H_7jrET6avxAzBN02vWw36,
type: text,
content: "Nam cursus sem et urna pulvinar, vehicula vehicula lectus mattis. Aenean euismod turpis sapien, vitae tempus dui suscipit vitae. Fusce nec risus vel tortor facilisis suscipit id ut leo. Donec ut velit mi. Ut quis tempus erat. Maecenas sit amet aliquet urna, eget ullamcorper enim. Duis eget augue turpis. Aliquam leo risus, bibendum a aliquet sit amet, varius sit amet nisi. Praesent tincidunt ex a dui rhoncus, non tristique metus mollis. Sed non hendrerit ligula.",
},
],
},
],
}
style:: r5H_7jrET6avxAzBN02vWw31:: {
letterspacing: {
value: 0.1,
unit: em,
},
font_size: {
value: 2.,
unit: rem,
},
margin_bottom: {
value: 0.416667,
unit: lh,
},
text_alignment: center,
text_indent: {
value: 0.,
unit: em,
},
line_height: {
value: 1.,
unit: lh,
},
font_family: "rm ginger",
style_name: r5H_7jrET6avxAzBN02vWw31,
font_weight: normal,
}
style:: r5H_7jrET6avxAzBN02vWw33:: {
font_size: {
value: 1.,
unit: rem,
},
line_height: {
value: 1.,
unit: lh,
},
text_alignment: justify,
font_family: "default",
text_indent: {
value: 0.,
unit: em,
},
style_name: r5H_7jrET6avxAzBN02vWw33,
}
style:: r5H_7jrET6avxAzBN02vWw34:: {
style_name: r5H_7jrET6avxAzBN02vWw34,
font_weight: bold,
glyph_transform: small_caps,
}
style:: r5H_7jrET6avxAzBN02vWw36:: {
font_size: {
value: 1.,
unit: rem,
},
line_height: {
value: 1.,
unit: lh,
},
text_alignment: justify,
font_family: "default",
text_indent: {
value: 2.,
unit: em,
},
style_name: r5H_7jrET6avxAzBN02vWw36,
}
style:: r5H_7jrET6avxAzBN02vWw41:: {
font_size: {
value: 1.,
unit: rem,
},
line_height: {
value: 1.,
unit: lh,
},
text_indent: {
value: 0.,
unit: em,
},
style_name: r5H_7jrET6avxAzBN02vWw41,
min_height: {
value: 100.,
unit: percent,
},
margin_top: {
value: 0.833333,
unit: lh,
},
}
|