1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-12-22 13:00:08 +00:00

consistent css class names

This commit is contained in:
Lu Wang 2013-02-28 02:11:34 +08:00
parent 857a83fd13
commit eb0a1ef8a3
9 changed files with 97 additions and 87 deletions

View File

@ -141,6 +141,11 @@ endif()
configure_file (${CMAKE_SOURCE_DIR}/src/pdf2htmlEX-config.h.in ${CMAKE_SOURCE_DIR}/src/pdf2htmlEX-config.h) configure_file (${CMAKE_SOURCE_DIR}/src/pdf2htmlEX-config.h.in ${CMAKE_SOURCE_DIR}/src/pdf2htmlEX-config.h)
configure_file (${CMAKE_SOURCE_DIR}/pdf2htmlEX.1.in ${CMAKE_SOURCE_DIR}/pdf2htmlEX.1) configure_file (${CMAKE_SOURCE_DIR}/pdf2htmlEX.1.in ${CMAKE_SOURCE_DIR}/pdf2htmlEX.1)
include(${CMAKE_SOURCE_DIR}/src/css_class_names.cmakelists.txt)
configure_file (${CMAKE_SOURCE_DIR}/src/util/css_const.h.in ${CMAKE_SOURCE_DIR}/src/util/css_const.h)
configure_file (${CMAKE_SOURCE_DIR}/share/base.css.in ${CMAKE_SOURCE_DIR}/share/base.css)
configure_file (${CMAKE_SOURCE_DIR}/share/pdf2htmlEX.js.in ${CMAKE_SOURCE_DIR}/share/pdf2htmlEX.js)
add_executable(pdf2htmlEX add_executable(pdf2htmlEX
src/Param.h src/Param.h
src/pdf2htmlEX-config.h src/pdf2htmlEX-config.h
@ -167,6 +172,7 @@ add_executable(pdf2htmlEX
src/util/base64stream.cc src/util/base64stream.cc
src/util/const.h src/util/const.h
src/util/const.cc src/util/const.cc
src/util/css_const.h
src/util/encoding.h src/util/encoding.h
src/util/encoding.cc src/util/encoding.cc
src/util/ffw.h src/util/ffw.h

View File

@ -77,14 +77,14 @@
* The followings are base classes, which are meant to be override by PDF specific classes * The followings are base classes, which are meant to be override by PDF specific classes
* So do not increase the specificity (e.g. ".d" -> "#pdf-main .d") * So do not increase the specificity (e.g. ".d" -> "#pdf-main .d")
*/ */
.d { /* page decoration */ .@CSS_PAGE_DECORATION_CN@ { /* page decoration */
position:relative; position:relative;
margin: 13px auto; margin: 13px auto;
border-width: 0; border-width: 0;
box-shadow: 1px 1px 3px 1px #333; box-shadow: 1px 1px 3px 1px #333;
overflow: hidden; overflow: hidden;
} }
.p { /* page */ .@CSS_PAGE_FRAME_CN@ { /* page */
position:absolute; position:absolute;
top:0; top:0;
left:0; left:0;
@ -95,7 +95,7 @@
margin:0; margin:0;
border-width:0; /* required by pdf2htmlEX.js for page visibility test */ border-width:0; /* required by pdf2htmlEX.js for page visibility test */
} }
.b { /* content of a page */ .@CSS_PAGE_CONTENT_BOX_CN@ { /* content of a page */
position:absolute; position:absolute;
border-width:0; border-width:0;
top:0; top:0;
@ -110,11 +110,11 @@
-webkit-transform-origin:0% 0%; -webkit-transform-origin:0% 0%;
-o-transform-origin:0% 0%; -o-transform-origin:0% 0%;
} }
.b.opened { /* used by pdf2htmlEX.js, to show/hide pages */ .@CSS_PAGE_CONTENT_BOX_CN@.opened { /* used by pdf2htmlEX.js, to show/hide pages */
display:block; display:block;
} }
@media print { @media print {
.d { .@CSS_PAGE_DECORATION_CN@ {
margin:0; margin:0;
box-shadow:none; box-shadow:none;
page-break-after:always; page-break-after:always;
@ -122,15 +122,15 @@
} }
@-moz-document url-prefix() { @-moz-document url-prefix() {
/* fix page truncation for FireFox */ /* fix page truncation for FireFox */
.d { .@CSS_PAGE_DECORATION_CN@ {
overflow:visible; overflow:visible;
border:1px solid #FFFFFF; border:1px solid #FFFFFF;
} }
.p {overflow:visible;} .@CSS_PAGE_FRAME_CN@ {overflow:visible;}
.b {overflow:visible;} .@CSS_PAGE_CONTENT_BOX_CN@ {overflow:visible;}
} }
} }
.l { /* text line */ .@CSS_LINE_CN@ { /* text line */
position:absolute; position:absolute;
white-space:pre; white-space:pre;
font-size:1px; font-size:1px;
@ -146,7 +146,7 @@ span { /* text blocks within a line */
/* _<id> for spaces may need display:inline, which will override this */ /* _<id> for spaces may need display:inline, which will override this */
display:inline-block; display:inline-block;
} }
._ { /* text shift */ .@CSS_WHITESPACE_CN@ { /* text shift */
color:transparent; color:transparent;
z-index:-1; z-index:-1;
} }
@ -156,13 +156,13 @@ span { /* text blocks within a line */
::-moz-selection{ ::-moz-selection{
background: rgba(127,255,255,1); background: rgba(127,255,255,1);
} }
.j { /* info for Javascript */ .@CSS_PAGE_DATA_CN@ { /* info for Javascript */
display:none; display:none;
} }
.a { /* annotation links */ .@CSS_LINE_CN@ { /* annotation links */
} }
/* transparent color - WebKit */ /* transparent color - WebKit */
.Cd { /* css drawing */ .@CSS_CSS_DRAW_CN@ { /* css drawing */
position:absolute; position:absolute;
transform-origin:0% 100%; transform-origin:0% 100%;
-ms-transform-origin:0% 100%; -ms-transform-origin:0% 100%;

View File

@ -10,6 +10,15 @@
*/ */
var pdf2htmlEX = (function(){ var pdf2htmlEX = (function(){
var CSS_CLASS_NAMES = {
page_frame : '@CSS_PAGE_FRAME_CN@',
page_decoration : '@CSS_PAGE_DECORATION_CN@',
page_content_box : '@CSS_PAGE_CONTENT_BOX_CN@',
page_data : '@CSS_PAGE_DATA_CN@',
link : '@CSS_LINE_CN@',
__dummy__ : 'no comma'
};
var pdf2htmlEX = new Object(); var pdf2htmlEX = new Object();
var EPS = 1e-6; var EPS = 1e-6;
@ -33,7 +42,7 @@ var pdf2htmlEX = (function(){
this.p = $(page); this.p = $(page);
this.n = parseInt(this.p.attr('data-page-no'), 16); this.n = parseInt(this.p.attr('data-page-no'), 16);
this.b = $('.b', this.p); this.b = $('.'+CSS_CLASS_NAMES['page_decoration'], this.p);
/* /*
* scale ratios * scale ratios
@ -44,7 +53,7 @@ var pdf2htmlEX = (function(){
*/ */
this.default_r = this.set_r = this.cur_r = this.p.height() / this.b.height(); this.default_r = this.set_r = this.cur_r = this.p.height() / this.b.height();
this.data = JSON.parse($($('.j', this.p)[0]).attr('data-data')); this.data = JSON.parse($($('.'+CSS_CLASS_NAMES['page_data'], this.p)[0]).attr('data-data'));
this.ctm = this.data.ctm; this.ctm = this.data.ctm;
this.ictm = invert(this.ctm); this.ictm = invert(this.ctm);
@ -123,7 +132,7 @@ var pdf2htmlEX = (function(){
} }
var new_pages = new Array(); var new_pages = new Array();
var pl= $('.p', this.container); var pl= $('.'+CSS_CLASS_NAMES['page_frame'], this.container);
/* don't use for(..in..) */ /* don't use for(..in..) */
for(var i = 0, l = pl.length; i < l; ++i) { for(var i = 0, l = pl.length; i < l; ++i) {
var p = new Page(pl[i], this.container); var p = new Page(pl[i], this.container);
@ -137,15 +146,13 @@ var pdf2htmlEX = (function(){
//this.zoom_fixer(); //this.zoom_fixer();
// used by outline/annot_link etc // used by outline/annot_link etc
// note that one is for the class 'a' and the other is for the tag 'a' $([this.container, this.outline]).on('click', '.'+CSS_CLASS_NAMES['link'], this, this.link_handler);
this.container.on('click', '.a', this, this.link_handler);
this.outline.on('click', 'a', this, this.link_handler);
this.render(); this.render();
}, },
pre_hide_pages : function() { pre_hide_pages : function() {
/* pages might have not been loaded yet, so add a CSS rule */ /* pages might have not been loaded yet, so add a CSS rule */
var s = '@media screen{.b{display:none;}}'; var s = '@media screen{.'+CSS_CLASS_NAMES['page_content_box']+'{display:none;}}';
var n = document.createElement('style'); var n = document.createElement('style');
n.type = 'text/css'; n.type = 'text/css';
if (n.styleSheet) { if (n.styleSheet) {
@ -236,7 +243,7 @@ var pdf2htmlEX = (function(){
get_containing_page : function(obj) { get_containing_page : function(obj) {
/* get the page obj containing obj */ /* get the page obj containing obj */
var p = obj.closest('.p')[0]; var p = obj.closest('.'+CSS_CLASS_NAMES['page_frame'])[0];
return p && this.pages[(new Page(p)).n]; return p && this.pages[(new Page(p)).n];
}, },

View File

@ -13,7 +13,7 @@
#include "util/namespace.h" #include "util/namespace.h"
#include "util/unicode.h" #include "util/unicode.h"
#include "util/math.h" #include "util/math.h"
#include "util/CSSClassNames.h" #include "util/css_const.h"
#include "util/encoding.h" #include "util/encoding.h"
namespace pdf2htmlEX { namespace pdf2htmlEX {

View File

@ -23,7 +23,7 @@
#include "util/base64stream.h" #include "util/base64stream.h"
#include "util/math.h" #include "util/math.h"
#include "util/path.h" #include "util/path.h"
#include "util/CSSClassNames.h" #include "util/css_const.h"
namespace pdf2htmlEX { namespace pdf2htmlEX {

View File

@ -15,6 +15,7 @@
#include "HTMLRenderer.h" #include "HTMLRenderer.h"
#include "util/namespace.h" #include "util/namespace.h"
#include "util/encoding.h" #include "util/encoding.h"
#include "util/css_const.h"
namespace pdf2htmlEX { namespace pdf2htmlEX {
@ -35,7 +36,7 @@ void HTMLRenderer::process_outline_items(GooList * items)
string dest = get_linkaction_str(item->getAction(), detail); string dest = get_linkaction_str(item->getAction(), detail);
// we don't care dest is empty or not. // we don't care dest is empty or not.
f_outline.fs << "<li>" << "<a href=\""; f_outline.fs << "<li>" << "<a class=\"" << CSS::LINK_CN << "\" href=\"";
outputURL(f_outline.fs, dest); outputURL(f_outline.fs, dest);
f_outline.fs << "\""; f_outline.fs << "\"";

View File

@ -1,62 +0,0 @@
/*
* CSSClassNames.h
*
* Copyright (C) 2013 Lu Wang <coolwanglu@gmail.com>
*/
#ifndef CSSCLASSNAMES_H__
#define CSSCLASSNAMES_H__
/*
* should be consistent with base.css and pdf2htmlEX.js
*/
namespace pdf2htmlEX {
namespace CSS {
// usually the class name is XXX_CN or XXX_CN<hex id>
// sometimes we need a special one, e.g. transparent color, where the id is -1
const char * const INVALID_ID = "_";
// work around strings
// TODO: since we have this string, should this file be named as general "css.h" ?
const char * const WEBKIT_ONLY = "@media screen and (-webkit-min-device-pixel-ratio:0)";
const char * const PRINT_ONLY = "@media print";
// TODO: better names, remove collission (i.e LINE_CN vs LETTER_SPACE_CN)
const char * const LINE_CN = "l";
const char * const TRANSFORM_MATRIX_CN = "t";
// page_decoration is for shadow etc
// page_frame cannot have margin or border-width, pdf2htmlEX.js will use it to determine the coordinates
// page_content holds everything inside the page, could be hidden to speed up rendering
// page_data holds data for pdf2htmlEX.js
const char * const PAGE_DECORATION_CN = "d";
const char * const PAGE_FRAME_CN = "p";
const char * const PAGE_CONTENT_BOX_CN = "b";
const char * const PAGE_DATA_CN = "j";
const char * const FONT_NAME_CN = "f";
const char * const FONT_SIZE_CN = "s";
const char * const FILL_COLOR_CN = "c";
const char * const STROKE_COLOR_CN = "C";
const char * const LETTER_SPACE_CN = "l";
const char * const WORD_SPACE_CN = "w";
const char * const RISE_CN = "r";
const char * const WHITESPACE_CN = "_";
const char * const LEFT_CN = "L";
const char * const HEIGHT_CN = "h";
const char * const WIDTH_CN = "W";
const char * const BOTTOM_CN = "B";
const char * const CSS_DRAW_CN = "Cd";
const char * const LINK_CN = "a";
}
}
#endif //CSSCLASSNAMES_H__

View File

@ -14,7 +14,7 @@
#include <unordered_map> #include <unordered_map>
#include "util/math.h" #include "util/math.h"
#include "util/CSSClassNames.h" #include "util/css_const.h"
namespace pdf2htmlEX { namespace pdf2htmlEX {

58
src/util/css_const.h.in Normal file
View File

@ -0,0 +1,58 @@
/*
* css_const.h
*
* Copyright (C) 2013 Lu Wang <coolwanglu@gmail.com>
*/
#ifndef CSS_CONST_H__
#define CSS_CONST_H__
/*
* should be consistent with base.css and pdf2htmlEX.js
*/
namespace pdf2htmlEX {
namespace CSS {
// work around strings
const char * const WEBKIT_ONLY = "@media screen and (-webkit-min-device-pixel-ratio:0)";
const char * const PRINT_ONLY = "@media print";
// usually the class name is XXX_CN or XXX_CN<hex id>
// sometimes we need a special one, e.g. transparent color, where the id is -1
const char * const INVALID_ID = "@CSS_INVALID_ID";
const char * const LINE_CN = "@CSS_LINE_CN@";
const char * const TRANSFORM_MATRIX_CN = "@CSS_TRANSFORM_MATRIX_CN@";
// page_decoration is for shadow etc
// page_frame cannot have margin or border-width, pdf2htmlEX.js will use it to determine the coordinates
// page_content holds everything inside the page, could be hidden to speed up rendering
// page_data holds data for pdf2htmlEX.js
const char * const PAGE_DECORATION_CN = "@CSS_PAGE_DECORATION_CN@";
const char * const PAGE_FRAME_CN = "@CSS_PAGE_FRAME_CN@";
const char * const PAGE_CONTENT_BOX_CN = "@CSS_PAGE_CONTENT_BOX_CN@";
const char * const PAGE_DATA_CN = "@CSS_PAGE_DATA_CN@";
const char * const FONT_NAME_CN = "@CSS_FONT_NAME_CN@";
const char * const FONT_SIZE_CN = "@CSS_FONT_SIZE_CN@";
const char * const FILL_COLOR_CN = "@CSS_FILL_COLOR_CN@";
const char * const STROKE_COLOR_CN = "@CSS_STROKE_COLOR_CN@";
const char * const LETTER_SPACE_CN = "@CSS_LETTER_SPACE_CN@";
const char * const WORD_SPACE_CN = "@CSS_WORD_SPACE_CN@";
const char * const RISE_CN = "@CSS_RISE_CN@";
const char * const WHITESPACE_CN = "@CSS_WHITESPACE_CN@";
const char * const LEFT_CN = "@CSS_LEFT_CN@";
const char * const HEIGHT_CN = "@CSS_HEIGHT_CN@";
const char * const WIDTH_CN = "@CSS_WIDTH_CN@";
const char * const BOTTOM_CN = "@CSS_BOTTTOM_CN@";
const char * const CSS_DRAW_CN = "@CSS_CSS_DRAW_CN@";
const char * const LINK_CN = "@CSS_LINE_CN@";
}
}
#endif //CSS_CONST_H__