THE COMMIT OF ALL COMMITS
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# os generated files
|
||||
Thumbs.db
|
||||
.DS_Store
|
||||
|
||||
config.php
|
16
.htaccess
Normal file
@ -0,0 +1,16 @@
|
||||
Options -indexes
|
||||
|
||||
#AddType application/x-httpd-php5 .pdf
|
||||
|
||||
RewriteEngine on
|
||||
RewriteRule ^login/?$ login.php
|
||||
RewriteRule ^logout/?$ logout.php
|
||||
RewriteRule ^sms/?$ sms.php
|
||||
RewriteRule ^print.pdf print.php
|
||||
RewriteRule ^shuffle/?$ index.php?shuffle
|
||||
RewriteRule ^shuffle/confirmed/?$ index.php?shuffle&confirmed
|
||||
RewriteRule ^clear/?$ index.php?clear
|
||||
RewriteRule ^clear/confirmed/?$ index.php?clear&confirmed
|
||||
RewriteRule ^add/?$ add.php
|
||||
RewriteRule ^spoon/([^/.]+)/?$ index.php?spoon=$1
|
||||
RewriteRule ^revive/([^/.]+)/?$ index.php?revive=$1
|
87
add.php
Normal file
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
include('config.php');
|
||||
include('db_connect.php');
|
||||
include('functions.php');
|
||||
|
||||
if($_POST) {
|
||||
$order = getHighestOrderNum() + 1;
|
||||
for($i = 0; $i < $_POST['num']; $i++) {
|
||||
if($_POST['first-' . $i] != "") {
|
||||
if(!$_POST['staff-' . $i]) $_POST['staff-' . $i] = 0;
|
||||
mysql_query('INSERT INTO spooners (first, last, order_num, staff) VALUES ("' . mysql_real_escape_string($_POST['first-' . $i]) . '", "' . mysql_real_escape_string($_POST['last-' . $i]) . '", ' . $order . ', ' . mysql_real_escape_string($_POST['staff-' . $i]) . ')') or die(mysql_error());
|
||||
$order++;
|
||||
}
|
||||
}
|
||||
header("Location:" . $site_url . "/");
|
||||
} else if(!isset($_GET['num']) || $_GET['num'] <= 0) {
|
||||
header("Location:" . $site_url . "/");
|
||||
}
|
||||
|
||||
$page = "Add Spooners";
|
||||
include('header.php');
|
||||
|
||||
?>
|
||||
|
||||
<style>
|
||||
td, th {
|
||||
line-height: 30px !important;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
button.btn, a.btn {
|
||||
font-size: 15px !important;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<h4>Adding <?php echo $_GET['num'] ?> spooner<?php if($_GET['num'] > 1) echo 's' ?></h4>
|
||||
|
||||
<small><strong>Note:</strong> You do not have to fill every row, and you can always add more spooners later if you run out.</small>
|
||||
|
||||
<hr>
|
||||
|
||||
<form action="<?php echo $site_url ?>/add.php" method="POST">
|
||||
<input type="hidden" name="num" value="<?php echo $_GET['num'] ?>">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="span1"> </th>
|
||||
<th class="span3"><strong>First name</strong></th>
|
||||
<th class="span3"><strong>Last name</strong></th>
|
||||
<th class="span5"><strong>Staff?</strong> <small>(Last name optional if staff.)</small></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
for($i = 0; $i < $_GET['num']; $i++) {
|
||||
?>
|
||||
<tr>
|
||||
<td style="text-align:right;">
|
||||
<?php echo $i + 1; ?>.
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="first-<?php echo $i ?>" placeholder="First name">
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="last-<?php echo $i ?>" placeholder="Last name">
|
||||
</td>
|
||||
<td>
|
||||
<input type="checkbox" name="staff-<?php echo $i ?>" value="1" tabindex="-1">
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="align-right">
|
||||
<button type="submit" class="btn btn-large btn-success"> Do it! » </button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<?php include('footer.php') ?>
|
1109
assets/css/bootstrap-responsive.css
vendored
Normal file
6167
assets/css/bootstrap.css
vendored
Normal file
BIN
assets/ico/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/ico/favicon.png
Normal file
After Width: | Height: | Size: 742 B |
BIN
assets/img/glyphicons-halflings-white.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
assets/img/glyphicons-halflings.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
assets/img/id.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
assets/img/paulblart.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
assets/img/sms-screenshot.jpg
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
assets/img/thatsallfolks.gif
Normal file
After Width: | Height: | Size: 187 KiB |
99
assets/js/bootstrap-alert.js
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
/* ==========================================================
|
||||
* bootstrap-alert.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
||||
* ==========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* ALERT CLASS DEFINITION
|
||||
* ====================== */
|
||||
|
||||
var dismiss = '[data-dismiss="alert"]'
|
||||
, Alert = function (el) {
|
||||
$(el).on('click', dismiss, this.close)
|
||||
}
|
||||
|
||||
Alert.prototype.close = function (e) {
|
||||
var $this = $(this)
|
||||
, selector = $this.attr('data-target')
|
||||
, $parent
|
||||
|
||||
if (!selector) {
|
||||
selector = $this.attr('href')
|
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
}
|
||||
|
||||
$parent = $(selector)
|
||||
|
||||
e && e.preventDefault()
|
||||
|
||||
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
|
||||
|
||||
$parent.trigger(e = $.Event('close'))
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$parent.removeClass('in')
|
||||
|
||||
function removeElement() {
|
||||
$parent
|
||||
.trigger('closed')
|
||||
.remove()
|
||||
}
|
||||
|
||||
$.support.transition && $parent.hasClass('fade') ?
|
||||
$parent.on($.support.transition.end, removeElement) :
|
||||
removeElement()
|
||||
}
|
||||
|
||||
|
||||
/* ALERT PLUGIN DEFINITION
|
||||
* ======================= */
|
||||
|
||||
var old = $.fn.alert
|
||||
|
||||
$.fn.alert = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('alert')
|
||||
if (!data) $this.data('alert', (data = new Alert(this)))
|
||||
if (typeof option == 'string') data[option].call($this)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.alert.Constructor = Alert
|
||||
|
||||
|
||||
/* ALERT NO CONFLICT
|
||||
* ================= */
|
||||
|
||||
$.fn.alert.noConflict = function () {
|
||||
$.fn.alert = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* ALERT DATA-API
|
||||
* ============== */
|
||||
|
||||
$(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
|
||||
|
||||
}(window.jQuery);
|
105
assets/js/bootstrap-button.js
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
/* ============================================================
|
||||
* bootstrap-button.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#buttons
|
||||
* ============================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ============================================================ */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* BUTTON PUBLIC CLASS DEFINITION
|
||||
* ============================== */
|
||||
|
||||
var Button = function (element, options) {
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, $.fn.button.defaults, options)
|
||||
}
|
||||
|
||||
Button.prototype.setState = function (state) {
|
||||
var d = 'disabled'
|
||||
, $el = this.$element
|
||||
, data = $el.data()
|
||||
, val = $el.is('input') ? 'val' : 'html'
|
||||
|
||||
state = state + 'Text'
|
||||
data.resetText || $el.data('resetText', $el[val]())
|
||||
|
||||
$el[val](data[state] || this.options[state])
|
||||
|
||||
// push to event loop to allow forms to submit
|
||||
setTimeout(function () {
|
||||
state == 'loadingText' ?
|
||||
$el.addClass(d).attr(d, d) :
|
||||
$el.removeClass(d).removeAttr(d)
|
||||
}, 0)
|
||||
}
|
||||
|
||||
Button.prototype.toggle = function () {
|
||||
var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
|
||||
|
||||
$parent && $parent
|
||||
.find('.active')
|
||||
.removeClass('active')
|
||||
|
||||
this.$element.toggleClass('active')
|
||||
}
|
||||
|
||||
|
||||
/* BUTTON PLUGIN DEFINITION
|
||||
* ======================== */
|
||||
|
||||
var old = $.fn.button
|
||||
|
||||
$.fn.button = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('button')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('button', (data = new Button(this, options)))
|
||||
if (option == 'toggle') data.toggle()
|
||||
else if (option) data.setState(option)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.button.defaults = {
|
||||
loadingText: 'loading...'
|
||||
}
|
||||
|
||||
$.fn.button.Constructor = Button
|
||||
|
||||
|
||||
/* BUTTON NO CONFLICT
|
||||
* ================== */
|
||||
|
||||
$.fn.button.noConflict = function () {
|
||||
$.fn.button = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* BUTTON DATA-API
|
||||
* =============== */
|
||||
|
||||
$(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
|
||||
var $btn = $(e.target)
|
||||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
||||
$btn.button('toggle')
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
207
assets/js/bootstrap-carousel.js
vendored
Normal file
@ -0,0 +1,207 @@
|
||||
/* ==========================================================
|
||||
* bootstrap-carousel.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#carousel
|
||||
* ==========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* CAROUSEL CLASS DEFINITION
|
||||
* ========================= */
|
||||
|
||||
var Carousel = function (element, options) {
|
||||
this.$element = $(element)
|
||||
this.$indicators = this.$element.find('.carousel-indicators')
|
||||
this.options = options
|
||||
this.options.pause == 'hover' && this.$element
|
||||
.on('mouseenter', $.proxy(this.pause, this))
|
||||
.on('mouseleave', $.proxy(this.cycle, this))
|
||||
}
|
||||
|
||||
Carousel.prototype = {
|
||||
|
||||
cycle: function (e) {
|
||||
if (!e) this.paused = false
|
||||
if (this.interval) clearInterval(this.interval);
|
||||
this.options.interval
|
||||
&& !this.paused
|
||||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
||||
return this
|
||||
}
|
||||
|
||||
, getActiveIndex: function () {
|
||||
this.$active = this.$element.find('.item.active')
|
||||
this.$items = this.$active.parent().children()
|
||||
return this.$items.index(this.$active)
|
||||
}
|
||||
|
||||
, to: function (pos) {
|
||||
var activeIndex = this.getActiveIndex()
|
||||
, that = this
|
||||
|
||||
if (pos > (this.$items.length - 1) || pos < 0) return
|
||||
|
||||
if (this.sliding) {
|
||||
return this.$element.one('slid', function () {
|
||||
that.to(pos)
|
||||
})
|
||||
}
|
||||
|
||||
if (activeIndex == pos) {
|
||||
return this.pause().cycle()
|
||||
}
|
||||
|
||||
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
|
||||
}
|
||||
|
||||
, pause: function (e) {
|
||||
if (!e) this.paused = true
|
||||
if (this.$element.find('.next, .prev').length && $.support.transition.end) {
|
||||
this.$element.trigger($.support.transition.end)
|
||||
this.cycle(true)
|
||||
}
|
||||
clearInterval(this.interval)
|
||||
this.interval = null
|
||||
return this
|
||||
}
|
||||
|
||||
, next: function () {
|
||||
if (this.sliding) return
|
||||
return this.slide('next')
|
||||
}
|
||||
|
||||
, prev: function () {
|
||||
if (this.sliding) return
|
||||
return this.slide('prev')
|
||||
}
|
||||
|
||||
, slide: function (type, next) {
|
||||
var $active = this.$element.find('.item.active')
|
||||
, $next = next || $active[type]()
|
||||
, isCycling = this.interval
|
||||
, direction = type == 'next' ? 'left' : 'right'
|
||||
, fallback = type == 'next' ? 'first' : 'last'
|
||||
, that = this
|
||||
, e
|
||||
|
||||
this.sliding = true
|
||||
|
||||
isCycling && this.pause()
|
||||
|
||||
$next = $next.length ? $next : this.$element.find('.item')[fallback]()
|
||||
|
||||
e = $.Event('slide', {
|
||||
relatedTarget: $next[0]
|
||||
, direction: direction
|
||||
})
|
||||
|
||||
if ($next.hasClass('active')) return
|
||||
|
||||
if (this.$indicators.length) {
|
||||
this.$indicators.find('.active').removeClass('active')
|
||||
this.$element.one('slid', function () {
|
||||
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
|
||||
$nextIndicator && $nextIndicator.addClass('active')
|
||||
})
|
||||
}
|
||||
|
||||
if ($.support.transition && this.$element.hasClass('slide')) {
|
||||
this.$element.trigger(e)
|
||||
if (e.isDefaultPrevented()) return
|
||||
$next.addClass(type)
|
||||
$next[0].offsetWidth // force reflow
|
||||
$active.addClass(direction)
|
||||
$next.addClass(direction)
|
||||
this.$element.one($.support.transition.end, function () {
|
||||
$next.removeClass([type, direction].join(' ')).addClass('active')
|
||||
$active.removeClass(['active', direction].join(' '))
|
||||
that.sliding = false
|
||||
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
||||
})
|
||||
} else {
|
||||
this.$element.trigger(e)
|
||||
if (e.isDefaultPrevented()) return
|
||||
$active.removeClass('active')
|
||||
$next.addClass('active')
|
||||
this.sliding = false
|
||||
this.$element.trigger('slid')
|
||||
}
|
||||
|
||||
isCycling && this.cycle()
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* CAROUSEL PLUGIN DEFINITION
|
||||
* ========================== */
|
||||
|
||||
var old = $.fn.carousel
|
||||
|
||||
$.fn.carousel = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('carousel')
|
||||
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
|
||||
, action = typeof option == 'string' ? option : options.slide
|
||||
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
|
||||
if (typeof option == 'number') data.to(option)
|
||||
else if (action) data[action]()
|
||||
else if (options.interval) data.pause().cycle()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.carousel.defaults = {
|
||||
interval: 5000
|
||||
, pause: 'hover'
|
||||
}
|
||||
|
||||
$.fn.carousel.Constructor = Carousel
|
||||
|
||||
|
||||
/* CAROUSEL NO CONFLICT
|
||||
* ==================== */
|
||||
|
||||
$.fn.carousel.noConflict = function () {
|
||||
$.fn.carousel = old
|
||||
return this
|
||||
}
|
||||
|
||||
/* CAROUSEL DATA-API
|
||||
* ================= */
|
||||
|
||||
$(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
||||
var $this = $(this), href
|
||||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||
, options = $.extend({}, $target.data(), $this.data())
|
||||
, slideIndex
|
||||
|
||||
$target.carousel(options)
|
||||
|
||||
if (slideIndex = $this.attr('data-slide-to')) {
|
||||
$target.data('carousel').pause().to(slideIndex).cycle()
|
||||
}
|
||||
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
167
assets/js/bootstrap-collapse.js
vendored
Normal file
@ -0,0 +1,167 @@
|
||||
/* =============================================================
|
||||
* bootstrap-collapse.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#collapse
|
||||
* =============================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ============================================================ */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* COLLAPSE PUBLIC CLASS DEFINITION
|
||||
* ================================ */
|
||||
|
||||
var Collapse = function (element, options) {
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, $.fn.collapse.defaults, options)
|
||||
|
||||
if (this.options.parent) {
|
||||
this.$parent = $(this.options.parent)
|
||||
}
|
||||
|
||||
this.options.toggle && this.toggle()
|
||||
}
|
||||
|
||||
Collapse.prototype = {
|
||||
|
||||
constructor: Collapse
|
||||
|
||||
, dimension: function () {
|
||||
var hasWidth = this.$element.hasClass('width')
|
||||
return hasWidth ? 'width' : 'height'
|
||||
}
|
||||
|
||||
, show: function () {
|
||||
var dimension
|
||||
, scroll
|
||||
, actives
|
||||
, hasData
|
||||
|
||||
if (this.transitioning || this.$element.hasClass('in')) return
|
||||
|
||||
dimension = this.dimension()
|
||||
scroll = $.camelCase(['scroll', dimension].join('-'))
|
||||
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
|
||||
|
||||
if (actives && actives.length) {
|
||||
hasData = actives.data('collapse')
|
||||
if (hasData && hasData.transitioning) return
|
||||
actives.collapse('hide')
|
||||
hasData || actives.data('collapse', null)
|
||||
}
|
||||
|
||||
this.$element[dimension](0)
|
||||
this.transition('addClass', $.Event('show'), 'shown')
|
||||
$.support.transition && this.$element[dimension](this.$element[0][scroll])
|
||||
}
|
||||
|
||||
, hide: function () {
|
||||
var dimension
|
||||
if (this.transitioning || !this.$element.hasClass('in')) return
|
||||
dimension = this.dimension()
|
||||
this.reset(this.$element[dimension]())
|
||||
this.transition('removeClass', $.Event('hide'), 'hidden')
|
||||
this.$element[dimension](0)
|
||||
}
|
||||
|
||||
, reset: function (size) {
|
||||
var dimension = this.dimension()
|
||||
|
||||
this.$element
|
||||
.removeClass('collapse')
|
||||
[dimension](size || 'auto')
|
||||
[0].offsetWidth
|
||||
|
||||
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
, transition: function (method, startEvent, completeEvent) {
|
||||
var that = this
|
||||
, complete = function () {
|
||||
if (startEvent.type == 'show') that.reset()
|
||||
that.transitioning = 0
|
||||
that.$element.trigger(completeEvent)
|
||||
}
|
||||
|
||||
this.$element.trigger(startEvent)
|
||||
|
||||
if (startEvent.isDefaultPrevented()) return
|
||||
|
||||
this.transitioning = 1
|
||||
|
||||
this.$element[method]('in')
|
||||
|
||||
$.support.transition && this.$element.hasClass('collapse') ?
|
||||
this.$element.one($.support.transition.end, complete) :
|
||||
complete()
|
||||
}
|
||||
|
||||
, toggle: function () {
|
||||
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* COLLAPSE PLUGIN DEFINITION
|
||||
* ========================== */
|
||||
|
||||
var old = $.fn.collapse
|
||||
|
||||
$.fn.collapse = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('collapse')
|
||||
, options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
|
||||
if (!data) $this.data('collapse', (data = new Collapse(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.collapse.defaults = {
|
||||
toggle: true
|
||||
}
|
||||
|
||||
$.fn.collapse.Constructor = Collapse
|
||||
|
||||
|
||||
/* COLLAPSE NO CONFLICT
|
||||
* ==================== */
|
||||
|
||||
$.fn.collapse.noConflict = function () {
|
||||
$.fn.collapse = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* COLLAPSE DATA-API
|
||||
* ================= */
|
||||
|
||||
$(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
||||
var $this = $(this), href
|
||||
, target = $this.attr('data-target')
|
||||
|| e.preventDefault()
|
||||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
||||
, option = $(target).data('collapse') ? 'toggle' : $this.data()
|
||||
$this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
|
||||
$(target).collapse(option)
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
169
assets/js/bootstrap-dropdown.js
vendored
Normal file
@ -0,0 +1,169 @@
|
||||
/* ============================================================
|
||||
* bootstrap-dropdown.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
|
||||
* ============================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ============================================================ */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* DROPDOWN CLASS DEFINITION
|
||||
* ========================= */
|
||||
|
||||
var toggle = '[data-toggle=dropdown]'
|
||||
, Dropdown = function (element) {
|
||||
var $el = $(element).on('click.dropdown.data-api', this.toggle)
|
||||
$('html').on('click.dropdown.data-api', function () {
|
||||
$el.parent().removeClass('open')
|
||||
})
|
||||
}
|
||||
|
||||
Dropdown.prototype = {
|
||||
|
||||
constructor: Dropdown
|
||||
|
||||
, toggle: function (e) {
|
||||
var $this = $(this)
|
||||
, $parent
|
||||
, isActive
|
||||
|
||||
if ($this.is('.disabled, :disabled')) return
|
||||
|
||||
$parent = getParent($this)
|
||||
|
||||
isActive = $parent.hasClass('open')
|
||||
|
||||
clearMenus()
|
||||
|
||||
if (!isActive) {
|
||||
if ('ontouchstart' in document.documentElement) {
|
||||
// if mobile we we use a backdrop because click events don't delegate
|
||||
$('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
|
||||
}
|
||||
$parent.toggleClass('open')
|
||||
}
|
||||
|
||||
$this.focus()
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
, keydown: function (e) {
|
||||
var $this
|
||||
, $items
|
||||
, $active
|
||||
, $parent
|
||||
, isActive
|
||||
, index
|
||||
|
||||
if (!/(38|40|27)/.test(e.keyCode)) return
|
||||
|
||||
$this = $(this)
|
||||
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
|
||||
if ($this.is('.disabled, :disabled')) return
|
||||
|
||||
$parent = getParent($this)
|
||||
|
||||
isActive = $parent.hasClass('open')
|
||||
|
||||
if (!isActive || (isActive && e.keyCode == 27)) {
|
||||
if (e.which == 27) $parent.find(toggle).focus()
|
||||
return $this.click()
|
||||
}
|
||||
|
||||
$items = $('[role=menu] li:not(.divider):visible a', $parent)
|
||||
|
||||
if (!$items.length) return
|
||||
|
||||
index = $items.index($items.filter(':focus'))
|
||||
|
||||
if (e.keyCode == 38 && index > 0) index-- // up
|
||||
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
||||
if (!~index) index = 0
|
||||
|
||||
$items
|
||||
.eq(index)
|
||||
.focus()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function clearMenus() {
|
||||
$('.dropdown-backdrop').remove()
|
||||
$(toggle).each(function () {
|
||||
getParent($(this)).removeClass('open')
|
||||
})
|
||||
}
|
||||
|
||||
function getParent($this) {
|
||||
var selector = $this.attr('data-target')
|
||||
, $parent
|
||||
|
||||
if (!selector) {
|
||||
selector = $this.attr('href')
|
||||
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
}
|
||||
|
||||
$parent = selector && $(selector)
|
||||
|
||||
if (!$parent || !$parent.length) $parent = $this.parent()
|
||||
|
||||
return $parent
|
||||
}
|
||||
|
||||
|
||||
/* DROPDOWN PLUGIN DEFINITION
|
||||
* ========================== */
|
||||
|
||||
var old = $.fn.dropdown
|
||||
|
||||
$.fn.dropdown = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('dropdown')
|
||||
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
|
||||
if (typeof option == 'string') data[option].call($this)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.dropdown.Constructor = Dropdown
|
||||
|
||||
|
||||
/* DROPDOWN NO CONFLICT
|
||||
* ==================== */
|
||||
|
||||
$.fn.dropdown.noConflict = function () {
|
||||
$.fn.dropdown = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* APPLY TO STANDARD DROPDOWN ELEMENTS
|
||||
* =================================== */
|
||||
|
||||
$(document)
|
||||
.on('click.dropdown.data-api', clearMenus)
|
||||
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
||||
.on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
|
||||
.on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
|
||||
|
||||
}(window.jQuery);
|
247
assets/js/bootstrap-modal.js
vendored
Normal file
@ -0,0 +1,247 @@
|
||||
/* =========================================================
|
||||
* bootstrap-modal.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#modals
|
||||
* =========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================= */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* MODAL CLASS DEFINITION
|
||||
* ====================== */
|
||||
|
||||
var Modal = function (element, options) {
|
||||
this.options = options
|
||||
this.$element = $(element)
|
||||
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
|
||||
this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
|
||||
}
|
||||
|
||||
Modal.prototype = {
|
||||
|
||||
constructor: Modal
|
||||
|
||||
, toggle: function () {
|
||||
return this[!this.isShown ? 'show' : 'hide']()
|
||||
}
|
||||
|
||||
, show: function () {
|
||||
var that = this
|
||||
, e = $.Event('show')
|
||||
|
||||
this.$element.trigger(e)
|
||||
|
||||
if (this.isShown || e.isDefaultPrevented()) return
|
||||
|
||||
this.isShown = true
|
||||
|
||||
this.escape()
|
||||
|
||||
this.backdrop(function () {
|
||||
var transition = $.support.transition && that.$element.hasClass('fade')
|
||||
|
||||
if (!that.$element.parent().length) {
|
||||
that.$element.appendTo(document.body) //don't move modals dom position
|
||||
}
|
||||
|
||||
that.$element.show()
|
||||
|
||||
if (transition) {
|
||||
that.$element[0].offsetWidth // force reflow
|
||||
}
|
||||
|
||||
that.$element
|
||||
.addClass('in')
|
||||
.attr('aria-hidden', false)
|
||||
|
||||
that.enforceFocus()
|
||||
|
||||
transition ?
|
||||
that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
|
||||
that.$element.focus().trigger('shown')
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
, hide: function (e) {
|
||||
e && e.preventDefault()
|
||||
|
||||
var that = this
|
||||
|
||||
e = $.Event('hide')
|
||||
|
||||
this.$element.trigger(e)
|
||||
|
||||
if (!this.isShown || e.isDefaultPrevented()) return
|
||||
|
||||
this.isShown = false
|
||||
|
||||
this.escape()
|
||||
|
||||
$(document).off('focusin.modal')
|
||||
|
||||
this.$element
|
||||
.removeClass('in')
|
||||
.attr('aria-hidden', true)
|
||||
|
||||
$.support.transition && this.$element.hasClass('fade') ?
|
||||
this.hideWithTransition() :
|
||||
this.hideModal()
|
||||
}
|
||||
|
||||
, enforceFocus: function () {
|
||||
var that = this
|
||||
$(document).on('focusin.modal', function (e) {
|
||||
if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
|
||||
that.$element.focus()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
, escape: function () {
|
||||
var that = this
|
||||
if (this.isShown && this.options.keyboard) {
|
||||
this.$element.on('keyup.dismiss.modal', function ( e ) {
|
||||
e.which == 27 && that.hide()
|
||||
})
|
||||
} else if (!this.isShown) {
|
||||
this.$element.off('keyup.dismiss.modal')
|
||||
}
|
||||
}
|
||||
|
||||
, hideWithTransition: function () {
|
||||
var that = this
|
||||
, timeout = setTimeout(function () {
|
||||
that.$element.off($.support.transition.end)
|
||||
that.hideModal()
|
||||
}, 500)
|
||||
|
||||
this.$element.one($.support.transition.end, function () {
|
||||
clearTimeout(timeout)
|
||||
that.hideModal()
|
||||
})
|
||||
}
|
||||
|
||||
, hideModal: function () {
|
||||
var that = this
|
||||
this.$element.hide()
|
||||
this.backdrop(function () {
|
||||
that.removeBackdrop()
|
||||
that.$element.trigger('hidden')
|
||||
})
|
||||
}
|
||||
|
||||
, removeBackdrop: function () {
|
||||
this.$backdrop && this.$backdrop.remove()
|
||||
this.$backdrop = null
|
||||
}
|
||||
|
||||
, backdrop: function (callback) {
|
||||
var that = this
|
||||
, animate = this.$element.hasClass('fade') ? 'fade' : ''
|
||||
|
||||
if (this.isShown && this.options.backdrop) {
|
||||
var doAnimate = $.support.transition && animate
|
||||
|
||||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
||||
.appendTo(document.body)
|
||||
|
||||
this.$backdrop.click(
|
||||
this.options.backdrop == 'static' ?
|
||||
$.proxy(this.$element[0].focus, this.$element[0])
|
||||
: $.proxy(this.hide, this)
|
||||
)
|
||||
|
||||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
||||
|
||||
this.$backdrop.addClass('in')
|
||||
|
||||
if (!callback) return
|
||||
|
||||
doAnimate ?
|
||||
this.$backdrop.one($.support.transition.end, callback) :
|
||||
callback()
|
||||
|
||||
} else if (!this.isShown && this.$backdrop) {
|
||||
this.$backdrop.removeClass('in')
|
||||
|
||||
$.support.transition && this.$element.hasClass('fade')?
|
||||
this.$backdrop.one($.support.transition.end, callback) :
|
||||
callback()
|
||||
|
||||
} else if (callback) {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* MODAL PLUGIN DEFINITION
|
||||
* ======================= */
|
||||
|
||||
var old = $.fn.modal
|
||||
|
||||
$.fn.modal = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('modal')
|
||||
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
|
||||
if (!data) $this.data('modal', (data = new Modal(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
else if (options.show) data.show()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.modal.defaults = {
|
||||
backdrop: true
|
||||
, keyboard: true
|
||||
, show: true
|
||||
}
|
||||
|
||||
$.fn.modal.Constructor = Modal
|
||||
|
||||
|
||||
/* MODAL NO CONFLICT
|
||||
* ================= */
|
||||
|
||||
$.fn.modal.noConflict = function () {
|
||||
$.fn.modal = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* MODAL DATA-API
|
||||
* ============== */
|
||||
|
||||
$(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
|
||||
var $this = $(this)
|
||||
, href = $this.attr('href')
|
||||
, $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
|
||||
, option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
|
||||
|
||||
e.preventDefault()
|
||||
|
||||
$target
|
||||
.modal(option)
|
||||
.one('hide', function () {
|
||||
$this.focus()
|
||||
})
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
114
assets/js/bootstrap-popover.js
vendored
Normal file
@ -0,0 +1,114 @@
|
||||
/* ===========================================================
|
||||
* bootstrap-popover.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#popovers
|
||||
* ===========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* =========================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* POPOVER PUBLIC CLASS DEFINITION
|
||||
* =============================== */
|
||||
|
||||
var Popover = function (element, options) {
|
||||
this.init('popover', element, options)
|
||||
}
|
||||
|
||||
|
||||
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
|
||||
========================================== */
|
||||
|
||||
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
|
||||
|
||||
constructor: Popover
|
||||
|
||||
, setContent: function () {
|
||||
var $tip = this.tip()
|
||||
, title = this.getTitle()
|
||||
, content = this.getContent()
|
||||
|
||||
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
||||
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
|
||||
|
||||
$tip.removeClass('fade top bottom left right in')
|
||||
}
|
||||
|
||||
, hasContent: function () {
|
||||
return this.getTitle() || this.getContent()
|
||||
}
|
||||
|
||||
, getContent: function () {
|
||||
var content
|
||||
, $e = this.$element
|
||||
, o = this.options
|
||||
|
||||
content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
||||
|| $e.attr('data-content')
|
||||
|
||||
return content
|
||||
}
|
||||
|
||||
, tip: function () {
|
||||
if (!this.$tip) {
|
||||
this.$tip = $(this.options.template)
|
||||
}
|
||||
return this.$tip
|
||||
}
|
||||
|
||||
, destroy: function () {
|
||||
this.hide().$element.off('.' + this.type).removeData(this.type)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
/* POPOVER PLUGIN DEFINITION
|
||||
* ======================= */
|
||||
|
||||
var old = $.fn.popover
|
||||
|
||||
$.fn.popover = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('popover')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('popover', (data = new Popover(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.popover.Constructor = Popover
|
||||
|
||||
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
|
||||
placement: 'right'
|
||||
, trigger: 'click'
|
||||
, content: ''
|
||||
, template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
||||
})
|
||||
|
||||
|
||||
/* POPOVER NO CONFLICT
|
||||
* =================== */
|
||||
|
||||
$.fn.popover.noConflict = function () {
|
||||
$.fn.popover = old
|
||||
return this
|
||||
}
|
||||
|
||||
}(window.jQuery);
|
162
assets/js/bootstrap-scrollspy.js
vendored
Normal file
@ -0,0 +1,162 @@
|
||||
/* =============================================================
|
||||
* bootstrap-scrollspy.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
|
||||
* =============================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ============================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* SCROLLSPY CLASS DEFINITION
|
||||
* ========================== */
|
||||
|
||||
function ScrollSpy(element, options) {
|
||||
var process = $.proxy(this.process, this)
|
||||
, $element = $(element).is('body') ? $(window) : $(element)
|
||||
, href
|
||||
this.options = $.extend({}, $.fn.scrollspy.defaults, options)
|
||||
this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
|
||||
this.selector = (this.options.target
|
||||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
||||
|| '') + ' .nav li > a'
|
||||
this.$body = $('body')
|
||||
this.refresh()
|
||||
this.process()
|
||||
}
|
||||
|
||||
ScrollSpy.prototype = {
|
||||
|
||||
constructor: ScrollSpy
|
||||
|
||||
, refresh: function () {
|
||||
var self = this
|
||||
, $targets
|
||||
|
||||
this.offsets = $([])
|
||||
this.targets = $([])
|
||||
|
||||
$targets = this.$body
|
||||
.find(this.selector)
|
||||
.map(function () {
|
||||
var $el = $(this)
|
||||
, href = $el.data('target') || $el.attr('href')
|
||||
, $href = /^#\w/.test(href) && $(href)
|
||||
return ( $href
|
||||
&& $href.length
|
||||
&& [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
|
||||
})
|
||||
.sort(function (a, b) { return a[0] - b[0] })
|
||||
.each(function () {
|
||||
self.offsets.push(this[0])
|
||||
self.targets.push(this[1])
|
||||
})
|
||||
}
|
||||
|
||||
, process: function () {
|
||||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
||||
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
||||
, maxScroll = scrollHeight - this.$scrollElement.height()
|
||||
, offsets = this.offsets
|
||||
, targets = this.targets
|
||||
, activeTarget = this.activeTarget
|
||||
, i
|
||||
|
||||
if (scrollTop >= maxScroll) {
|
||||
return activeTarget != (i = targets.last()[0])
|
||||
&& this.activate ( i )
|
||||
}
|
||||
|
||||
for (i = offsets.length; i--;) {
|
||||
activeTarget != targets[i]
|
||||
&& scrollTop >= offsets[i]
|
||||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
||||
&& this.activate( targets[i] )
|
||||
}
|
||||
}
|
||||
|
||||
, activate: function (target) {
|
||||
var active
|
||||
, selector
|
||||
|
||||
this.activeTarget = target
|
||||
|
||||
$(this.selector)
|
||||
.parent('.active')
|
||||
.removeClass('active')
|
||||
|
||||
selector = this.selector
|
||||
+ '[data-target="' + target + '"],'
|
||||
+ this.selector + '[href="' + target + '"]'
|
||||
|
||||
active = $(selector)
|
||||
.parent('li')
|
||||
.addClass('active')
|
||||
|
||||
if (active.parent('.dropdown-menu').length) {
|
||||
active = active.closest('li.dropdown').addClass('active')
|
||||
}
|
||||
|
||||
active.trigger('activate')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* SCROLLSPY PLUGIN DEFINITION
|
||||
* =========================== */
|
||||
|
||||
var old = $.fn.scrollspy
|
||||
|
||||
$.fn.scrollspy = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('scrollspy')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.scrollspy.Constructor = ScrollSpy
|
||||
|
||||
$.fn.scrollspy.defaults = {
|
||||
offset: 10
|
||||
}
|
||||
|
||||
|
||||
/* SCROLLSPY NO CONFLICT
|
||||
* ===================== */
|
||||
|
||||
$.fn.scrollspy.noConflict = function () {
|
||||
$.fn.scrollspy = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* SCROLLSPY DATA-API
|
||||
* ================== */
|
||||
|
||||
$(window).on('load', function () {
|
||||
$('[data-spy="scroll"]').each(function () {
|
||||
var $spy = $(this)
|
||||
$spy.scrollspy($spy.data())
|
||||
})
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
144
assets/js/bootstrap-tab.js
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
/* ========================================================
|
||||
* bootstrap-tab.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#tabs
|
||||
* ========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ======================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TAB CLASS DEFINITION
|
||||
* ==================== */
|
||||
|
||||
var Tab = function (element) {
|
||||
this.element = $(element)
|
||||
}
|
||||
|
||||
Tab.prototype = {
|
||||
|
||||
constructor: Tab
|
||||
|
||||
, show: function () {
|
||||
var $this = this.element
|
||||
, $ul = $this.closest('ul:not(.dropdown-menu)')
|
||||
, selector = $this.attr('data-target')
|
||||
, previous
|
||||
, $target
|
||||
, e
|
||||
|
||||
if (!selector) {
|
||||
selector = $this.attr('href')
|
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
}
|
||||
|
||||
if ( $this.parent('li').hasClass('active') ) return
|
||||
|
||||
previous = $ul.find('.active:last a')[0]
|
||||
|
||||
e = $.Event('show', {
|
||||
relatedTarget: previous
|
||||
})
|
||||
|
||||
$this.trigger(e)
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$target = $(selector)
|
||||
|
||||
this.activate($this.parent('li'), $ul)
|
||||
this.activate($target, $target.parent(), function () {
|
||||
$this.trigger({
|
||||
type: 'shown'
|
||||
, relatedTarget: previous
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
, activate: function ( element, container, callback) {
|
||||
var $active = container.find('> .active')
|
||||
, transition = callback
|
||||
&& $.support.transition
|
||||
&& $active.hasClass('fade')
|
||||
|
||||
function next() {
|
||||
$active
|
||||
.removeClass('active')
|
||||
.find('> .dropdown-menu > .active')
|
||||
.removeClass('active')
|
||||
|
||||
element.addClass('active')
|
||||
|
||||
if (transition) {
|
||||
element[0].offsetWidth // reflow for transition
|
||||
element.addClass('in')
|
||||
} else {
|
||||
element.removeClass('fade')
|
||||
}
|
||||
|
||||
if ( element.parent('.dropdown-menu') ) {
|
||||
element.closest('li.dropdown').addClass('active')
|
||||
}
|
||||
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
transition ?
|
||||
$active.one($.support.transition.end, next) :
|
||||
next()
|
||||
|
||||
$active.removeClass('in')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* TAB PLUGIN DEFINITION
|
||||
* ===================== */
|
||||
|
||||
var old = $.fn.tab
|
||||
|
||||
$.fn.tab = function ( option ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('tab')
|
||||
if (!data) $this.data('tab', (data = new Tab(this)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.tab.Constructor = Tab
|
||||
|
||||
|
||||
/* TAB NO CONFLICT
|
||||
* =============== */
|
||||
|
||||
$.fn.tab.noConflict = function () {
|
||||
$.fn.tab = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* TAB DATA-API
|
||||
* ============ */
|
||||
|
||||
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
||||
e.preventDefault()
|
||||
$(this).tab('show')
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
361
assets/js/bootstrap-tooltip.js
vendored
Normal file
@ -0,0 +1,361 @@
|
||||
/* ===========================================================
|
||||
* bootstrap-tooltip.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#tooltips
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ===========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TOOLTIP PUBLIC CLASS DEFINITION
|
||||
* =============================== */
|
||||
|
||||
var Tooltip = function (element, options) {
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.prototype = {
|
||||
|
||||
constructor: Tooltip
|
||||
|
||||
, init: function (type, element, options) {
|
||||
var eventIn
|
||||
, eventOut
|
||||
, triggers
|
||||
, trigger
|
||||
, i
|
||||
|
||||
this.type = type
|
||||
this.$element = $(element)
|
||||
this.options = this.getOptions(options)
|
||||
this.enabled = true
|
||||
|
||||
triggers = this.options.trigger.split(' ')
|
||||
|
||||
for (i = triggers.length; i--;) {
|
||||
trigger = triggers[i]
|
||||
if (trigger == 'click') {
|
||||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
||||
} else if (trigger != 'manual') {
|
||||
eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
|
||||
eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
|
||||
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
||||
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
||||
}
|
||||
}
|
||||
|
||||
this.options.selector ?
|
||||
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||
this.fixTitle()
|
||||
}
|
||||
|
||||
, getOptions: function (options) {
|
||||
options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
|
||||
|
||||
if (options.delay && typeof options.delay == 'number') {
|
||||
options.delay = {
|
||||
show: options.delay
|
||||
, hide: options.delay
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
, enter: function (e) {
|
||||
var defaults = $.fn[this.type].defaults
|
||||
, options = {}
|
||||
, self
|
||||
|
||||
this._options && $.each(this._options, function (key, value) {
|
||||
if (defaults[key] != value) options[key] = value
|
||||
}, this)
|
||||
|
||||
self = $(e.currentTarget)[this.type](options).data(this.type)
|
||||
|
||||
if (!self.options.delay || !self.options.delay.show) return self.show()
|
||||
|
||||
clearTimeout(this.timeout)
|
||||
self.hoverState = 'in'
|
||||
this.timeout = setTimeout(function() {
|
||||
if (self.hoverState == 'in') self.show()
|
||||
}, self.options.delay.show)
|
||||
}
|
||||
|
||||
, leave: function (e) {
|
||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
||||
|
||||
if (this.timeout) clearTimeout(this.timeout)
|
||||
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
||||
|
||||
self.hoverState = 'out'
|
||||
this.timeout = setTimeout(function() {
|
||||
if (self.hoverState == 'out') self.hide()
|
||||
}, self.options.delay.hide)
|
||||
}
|
||||
|
||||
, show: function () {
|
||||
var $tip
|
||||
, pos
|
||||
, actualWidth
|
||||
, actualHeight
|
||||
, placement
|
||||
, tp
|
||||
, e = $.Event('show')
|
||||
|
||||
if (this.hasContent() && this.enabled) {
|
||||
this.$element.trigger(e)
|
||||
if (e.isDefaultPrevented()) return
|
||||
$tip = this.tip()
|
||||
this.setContent()
|
||||
|
||||
if (this.options.animation) {
|
||||
$tip.addClass('fade')
|
||||
}
|
||||
|
||||
placement = typeof this.options.placement == 'function' ?
|
||||
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||
this.options.placement
|
||||
|
||||
$tip
|
||||
.detach()
|
||||
.css({ top: 0, left: 0, display: 'block' })
|
||||
|
||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||
|
||||
pos = this.getPosition()
|
||||
|
||||
actualWidth = $tip[0].offsetWidth
|
||||
actualHeight = $tip[0].offsetHeight
|
||||
|
||||
switch (placement) {
|
||||
case 'bottom':
|
||||
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||
break
|
||||
case 'top':
|
||||
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||
break
|
||||
case 'left':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
|
||||
break
|
||||
case 'right':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
|
||||
break
|
||||
}
|
||||
|
||||
this.applyPlacement(tp, placement)
|
||||
this.$element.trigger('shown')
|
||||
}
|
||||
}
|
||||
|
||||
, applyPlacement: function(offset, placement){
|
||||
var $tip = this.tip()
|
||||
, width = $tip[0].offsetWidth
|
||||
, height = $tip[0].offsetHeight
|
||||
, actualWidth
|
||||
, actualHeight
|
||||
, delta
|
||||
, replace
|
||||
|
||||
$tip
|
||||
.offset(offset)
|
||||
.addClass(placement)
|
||||
.addClass('in')
|
||||
|
||||
actualWidth = $tip[0].offsetWidth
|
||||
actualHeight = $tip[0].offsetHeight
|
||||
|
||||
if (placement == 'top' && actualHeight != height) {
|
||||
offset.top = offset.top + height - actualHeight
|
||||
replace = true
|
||||
}
|
||||
|
||||
if (placement == 'bottom' || placement == 'top') {
|
||||
delta = 0
|
||||
|
||||
if (offset.left < 0){
|
||||
delta = offset.left * -2
|
||||
offset.left = 0
|
||||
$tip.offset(offset)
|
||||
actualWidth = $tip[0].offsetWidth
|
||||
actualHeight = $tip[0].offsetHeight
|
||||
}
|
||||
|
||||
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
|
||||
} else {
|
||||
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
||||
}
|
||||
|
||||
if (replace) $tip.offset(offset)
|
||||
}
|
||||
|
||||
, replaceArrow: function(delta, dimension, position){
|
||||
this
|
||||
.arrow()
|
||||
.css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
|
||||
}
|
||||
|
||||
, setContent: function () {
|
||||
var $tip = this.tip()
|
||||
, title = this.getTitle()
|
||||
|
||||
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
||||
$tip.removeClass('fade in top bottom left right')
|
||||
}
|
||||
|
||||
, hide: function () {
|
||||
var that = this
|
||||
, $tip = this.tip()
|
||||
, e = $.Event('hide')
|
||||
|
||||
this.$element.trigger(e)
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$tip.removeClass('in')
|
||||
|
||||
function removeWithAnimation() {
|
||||
var timeout = setTimeout(function () {
|
||||
$tip.off($.support.transition.end).detach()
|
||||
}, 500)
|
||||
|
||||
$tip.one($.support.transition.end, function () {
|
||||
clearTimeout(timeout)
|
||||
$tip.detach()
|
||||
})
|
||||
}
|
||||
|
||||
$.support.transition && this.$tip.hasClass('fade') ?
|
||||
removeWithAnimation() :
|
||||
$tip.detach()
|
||||
|
||||
this.$element.trigger('hidden')
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
, fixTitle: function () {
|
||||
var $e = this.$element
|
||||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
||||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||
}
|
||||
}
|
||||
|
||||
, hasContent: function () {
|
||||
return this.getTitle()
|
||||
}
|
||||
|
||||
, getPosition: function () {
|
||||
var el = this.$element[0]
|
||||
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
|
||||
width: el.offsetWidth
|
||||
, height: el.offsetHeight
|
||||
}, this.$element.offset())
|
||||
}
|
||||
|
||||
, getTitle: function () {
|
||||
var title
|
||||
, $e = this.$element
|
||||
, o = this.options
|
||||
|
||||
title = $e.attr('data-original-title')
|
||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||
|
||||
return title
|
||||
}
|
||||
|
||||
, tip: function () {
|
||||
return this.$tip = this.$tip || $(this.options.template)
|
||||
}
|
||||
|
||||
, arrow: function(){
|
||||
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
|
||||
}
|
||||
|
||||
, validate: function () {
|
||||
if (!this.$element[0].parentNode) {
|
||||
this.hide()
|
||||
this.$element = null
|
||||
this.options = null
|
||||
}
|
||||
}
|
||||
|
||||
, enable: function () {
|
||||
this.enabled = true
|
||||
}
|
||||
|
||||
, disable: function () {
|
||||
this.enabled = false
|
||||
}
|
||||
|
||||
, toggleEnabled: function () {
|
||||
this.enabled = !this.enabled
|
||||
}
|
||||
|
||||
, toggle: function (e) {
|
||||
var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
|
||||
self.tip().hasClass('in') ? self.hide() : self.show()
|
||||
}
|
||||
|
||||
, destroy: function () {
|
||||
this.hide().$element.off('.' + this.type).removeData(this.type)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* TOOLTIP PLUGIN DEFINITION
|
||||
* ========================= */
|
||||
|
||||
var old = $.fn.tooltip
|
||||
|
||||
$.fn.tooltip = function ( option ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('tooltip')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.tooltip.Constructor = Tooltip
|
||||
|
||||
$.fn.tooltip.defaults = {
|
||||
animation: true
|
||||
, placement: 'top'
|
||||
, selector: false
|
||||
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
|
||||
, trigger: 'hover focus'
|
||||
, title: ''
|
||||
, delay: 0
|
||||
, html: false
|
||||
, container: false
|
||||
}
|
||||
|
||||
|
||||
/* TOOLTIP NO CONFLICT
|
||||
* =================== */
|
||||
|
||||
$.fn.tooltip.noConflict = function () {
|
||||
$.fn.tooltip = old
|
||||
return this
|
||||
}
|
||||
|
||||
}(window.jQuery);
|
60
assets/js/bootstrap-transition.js
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
/* ===================================================
|
||||
* bootstrap-transition.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#transitions
|
||||
* ===================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ========================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
|
||||
* ======================================================= */
|
||||
|
||||
$(function () {
|
||||
|
||||
$.support.transition = (function () {
|
||||
|
||||
var transitionEnd = (function () {
|
||||
|
||||
var el = document.createElement('bootstrap')
|
||||
, transEndEventNames = {
|
||||
'WebkitTransition' : 'webkitTransitionEnd'
|
||||
, 'MozTransition' : 'transitionend'
|
||||
, 'OTransition' : 'oTransitionEnd otransitionend'
|
||||
, 'transition' : 'transitionend'
|
||||
}
|
||||
, name
|
||||
|
||||
for (name in transEndEventNames){
|
||||
if (el.style[name] !== undefined) {
|
||||
return transEndEventNames[name]
|
||||
}
|
||||
}
|
||||
|
||||
}())
|
||||
|
||||
return transitionEnd && {
|
||||
end: transitionEnd
|
||||
}
|
||||
|
||||
})()
|
||||
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
335
assets/js/bootstrap-typeahead.js
vendored
Normal file
@ -0,0 +1,335 @@
|
||||
/* =============================================================
|
||||
* bootstrap-typeahead.js v2.3.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#typeahead
|
||||
* =============================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ============================================================ */
|
||||
|
||||
|
||||
!function($){
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TYPEAHEAD PUBLIC CLASS DEFINITION
|
||||
* ================================= */
|
||||
|
||||
var Typeahead = function (element, options) {
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, $.fn.typeahead.defaults, options)
|
||||
this.matcher = this.options.matcher || this.matcher
|
||||
this.sorter = this.options.sorter || this.sorter
|
||||
this.highlighter = this.options.highlighter || this.highlighter
|
||||
this.updater = this.options.updater || this.updater
|
||||
this.source = this.options.source
|
||||
this.$menu = $(this.options.menu)
|
||||
this.shown = false
|
||||
this.listen()
|
||||
}
|
||||
|
||||
Typeahead.prototype = {
|
||||
|
||||
constructor: Typeahead
|
||||
|
||||
, select: function () {
|
||||
var val = this.$menu.find('.active').attr('data-value')
|
||||
this.$element
|
||||
.val(this.updater(val))
|
||||
.change()
|
||||
return this.hide()
|
||||
}
|
||||
|
||||
, updater: function (item) {
|
||||
return item
|
||||
}
|
||||
|
||||
, show: function () {
|
||||
var pos = $.extend({}, this.$element.position(), {
|
||||
height: this.$element[0].offsetHeight
|
||||
})
|
||||
|
||||
this.$menu
|
||||
.insertAfter(this.$element)
|
||||
.css({
|
||||
top: pos.top + pos.height
|
||||
, left: pos.left
|
||||
})
|
||||
.show()
|
||||
|
||||
this.shown = true
|
||||
return this
|
||||
}
|
||||
|
||||
, hide: function () {
|
||||
this.$menu.hide()
|
||||
this.shown = false
|
||||
return this
|
||||
}
|
||||
|
||||
, lookup: function (event) {
|
||||
var items
|
||||
|
||||
this.query = this.$element.val()
|
||||
|
||||
if (!this.query || this.query.length < this.options.minLength) {
|
||||
return this.shown ? this.hide() : this
|
||||
}
|
||||
|
||||
items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
|
||||
|
||||
return items ? this.process(items) : this
|
||||
}
|
||||
|
||||
, process: function (items) {
|
||||
var that = this
|
||||
|
||||
items = $.grep(items, function (item) {
|
||||
return that.matcher(item)
|
||||
})
|
||||
|
||||
items = this.sorter(items)
|
||||
|
||||
if (!items.length) {
|
||||
return this.shown ? this.hide() : this
|
||||
}
|
||||
|
||||
return this.render(items.slice(0, this.options.items)).show()
|
||||
}
|
||||
|
||||
, matcher: function (item) {
|
||||
return ~item.toLowerCase().indexOf(this.query.toLowerCase())
|
||||
}
|
||||
|
||||
, sorter: function (items) {
|
||||
var beginswith = []
|
||||
, caseSensitive = []
|
||||
, caseInsensitive = []
|
||||
, item
|
||||
|
||||
while (item = items.shift()) {
|
||||
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
|
||||
else if (~item.indexOf(this.query)) caseSensitive.push(item)
|
||||
else caseInsensitive.push(item)
|
||||
}
|
||||
|
||||
return beginswith.concat(caseSensitive, caseInsensitive)
|
||||
}
|
||||
|
||||
, highlighter: function (item) {
|
||||
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
|
||||
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
|
||||
return '<strong>' + match + '</strong>'
|
||||
})
|
||||
}
|
||||
|
||||
, render: function (items) {
|
||||
var that = this
|
||||
|
||||
items = $(items).map(function (i, item) {
|
||||
i = $(that.options.item).attr('data-value', item)
|
||||
i.find('a').html(that.highlighter(item))
|
||||
return i[0]
|
||||
})
|
||||
|
||||
items.first().addClass('active')
|
||||
this.$menu.html(items)
|
||||
return this
|
||||
}
|
||||
|
||||
, next: function (event) {
|
||||
var active = this.$menu.find('.active').removeClass('active')
|
||||
, next = active.next()
|
||||
|
||||
if (!next.length) {
|
||||
next = $(this.$menu.find('li')[0])
|
||||
}
|
||||
|
||||
next.addClass('active')
|
||||
}
|
||||
|
||||
, prev: function (event) {
|
||||
var active = this.$menu.find('.active').removeClass('active')
|
||||
, prev = active.prev()
|
||||
|
||||
if (!prev.length) {
|
||||
prev = this.$menu.find('li').last()
|
||||
}
|
||||
|
||||
prev.addClass('active')
|
||||
}
|
||||
|
||||
, listen: function () {
|
||||
this.$element
|
||||
.on('focus', $.proxy(this.focus, this))
|
||||
.on('blur', $.proxy(this.blur, this))
|
||||
.on('keypress', $.proxy(this.keypress, this))
|
||||
.on('keyup', $.proxy(this.keyup, this))
|
||||
|
||||
if (this.eventSupported('keydown')) {
|
||||
this.$element.on('keydown', $.proxy(this.keydown, this))
|
||||
}
|
||||
|
||||
this.$menu
|
||||
.on('click', $.proxy(this.click, this))
|
||||
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
|
||||
.on('mouseleave', 'li', $.proxy(this.mouseleave, this))
|
||||
}
|
||||
|
||||
, eventSupported: function(eventName) {
|
||||
var isSupported = eventName in this.$element
|
||||
if (!isSupported) {
|
||||
this.$element.setAttribute(eventName, 'return;')
|
||||
isSupported = typeof this.$element[eventName] === 'function'
|
||||
}
|
||||
return isSupported
|
||||
}
|
||||
|
||||
, move: function (e) {
|
||||
if (!this.shown) return
|
||||
|
||||
switch(e.keyCode) {
|
||||
case 9: // tab
|
||||
case 13: // enter
|
||||
case 27: // escape
|
||||
e.preventDefault()
|
||||
break
|
||||
|
||||
case 38: // up arrow
|
||||
e.preventDefault()
|
||||
this.prev()
|
||||
break
|
||||
|
||||
case 40: // down arrow
|
||||
e.preventDefault()
|
||||
this.next()
|
||||
break
|
||||
}
|
||||
|
||||
e.stopPropagation()
|
||||
}
|
||||
|
||||
, keydown: function (e) {
|
||||
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
|
||||
this.move(e)
|
||||
}
|
||||
|
||||
, keypress: function (e) {
|
||||
if (this.suppressKeyPressRepeat) return
|
||||
this.move(e)
|
||||
}
|
||||
|
||||
, keyup: function (e) {
|
||||
switch(e.keyCode) {
|
||||
case 40: // down arrow
|
||||
case 38: // up arrow
|
||||
case 16: // shift
|
||||
case 17: // ctrl
|
||||
case 18: // alt
|
||||
break
|
||||
|
||||
case 9: // tab
|
||||
case 13: // enter
|
||||
if (!this.shown) return
|
||||
this.select()
|
||||
break
|
||||
|
||||
case 27: // escape
|
||||
if (!this.shown) return
|
||||
this.hide()
|
||||
break
|
||||
|
||||
default:
|
||||
this.lookup()
|
||||
}
|
||||
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}
|
||||
|
||||
, focus: function (e) {
|
||||
this.focused = true
|
||||
}
|
||||
|
||||
, blur: function (e) {
|
||||
this.focused = false
|
||||
if (!this.mousedover && this.shown) this.hide()
|
||||
}
|
||||
|
||||
, click: function (e) {
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
this.select()
|
||||
this.$element.focus()
|
||||
}
|
||||
|
||||
, mouseenter: function (e) {
|
||||
this.mousedover = true
|
||||
this.$menu.find('.active').removeClass('active')
|
||||
$(e.currentTarget).addClass('active')
|
||||
}
|
||||
|
||||
, mouseleave: function (e) {
|
||||
this.mousedover = false
|
||||
if (!this.focused && this.shown) this.hide()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* TYPEAHEAD PLUGIN DEFINITION
|
||||
* =========================== */
|
||||
|
||||
var old = $.fn.typeahead
|
||||
|
||||
$.fn.typeahead = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('typeahead')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.typeahead.defaults = {
|
||||
source: []
|
||||
, items: 8
|
||||
, menu: '<ul class="typeahead dropdown-menu"></ul>'
|
||||
, item: '<li><a href="#"></a></li>'
|
||||
, minLength: 1
|
||||
}
|
||||
|
||||
$.fn.typeahead.Constructor = Typeahead
|
||||
|
||||
|
||||
/* TYPEAHEAD NO CONFLICT
|
||||
* =================== */
|
||||
|
||||
$.fn.typeahead.noConflict = function () {
|
||||
$.fn.typeahead = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* TYPEAHEAD DATA-API
|
||||
* ================== */
|
||||
|
||||
$(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('typeahead')) return
|
||||
$this.typeahead($this.data())
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
8
assets/js/html5shiv.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/*
|
||||
HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
|
||||
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
|
||||
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
|
||||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
|
||||
for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
|
7
assets/js/jquery-ui.min.js
vendored
Normal file
5
assets/js/jquery.min.js
vendored
Normal file
14
config-sample.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
/* site config */
|
||||
$site_url = "http://spoons.scrabblerocks.com";
|
||||
$site_password = "asdf1234";
|
||||
|
||||
/* database config */
|
||||
$db_host = "loalhost";
|
||||
$db_user = "root";
|
||||
$db_pass = "lol";
|
||||
$db_name = "spoons";
|
||||
|
||||
|
||||
date_default_timezone_set("America/New_York");
|
||||
?>
|
6
db_connect.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
mysql_connect($db_host, $db_user, $db_pass);
|
||||
mysql_select_db($db_name);
|
||||
|
||||
mysql_query('SET time_zone = "America/New_York"');
|
||||
?>
|
39
db_structure.sql
Normal file
@ -0,0 +1,39 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 3.3.10.4
|
||||
-- http://www.phpmyadmin.net
|
||||
--
|
||||
-- Host: mysql.jakejarvis.dreamhosters.com
|
||||
-- Generation Time: May 19, 2013 at 08:43 AM
|
||||
-- Server version: 5.1.56
|
||||
-- PHP Version: 5.2.17
|
||||
|
||||
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
|
||||
--
|
||||
-- Database: `spoons`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `spooners`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `spooners` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`order_num` int(11) NOT NULL,
|
||||
`first` text NOT NULL,
|
||||
`last` text NOT NULL,
|
||||
`staff` int(1) NOT NULL DEFAULT '0',
|
||||
`spooned` int(1) NOT NULL DEFAULT '0',
|
||||
`time_spooned` timestamp NOT NULL DEFAULT '2013-01-01 00:00:00',
|
||||
`spooned_by` int(11) NOT NULL DEFAULT '0',
|
||||
`target_id` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
|
62
footer.php
Normal file
@ -0,0 +1,62 @@
|
||||
<!-- END PAGE CONTENT -->
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="footer">
|
||||
<div class="row">
|
||||
<div class="span4 align-left">
|
||||
<p>Made with <span style="color:#79ad36">♥</span> by <a href="http://scrabblerocks.com/" target="_blank">scribscrab</a>.</p>
|
||||
</div>
|
||||
<div class="span4 align-center">
|
||||
<a href="http://www.internaldrive.com/"><img src="<?php echo $site_url ?>/assets/img/id.png" alt="internalDrive"></a>
|
||||
</div>
|
||||
<div class="span4 align-right">
|
||||
<p><a href="#">Back to top!</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> <!-- /container -->
|
||||
|
||||
<!-- Le javascript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-transition.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-alert.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-modal.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-dropdown.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-scrollspy.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-tab.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-tooltip.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-popover.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-button.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-collapse.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-carousel.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/bootstrap-typeahead.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var _gauges = _gauges || [];
|
||||
(function() {
|
||||
var t = document.createElement('script');
|
||||
t.type = 'text/javascript';
|
||||
t.async = true;
|
||||
t.id = 'gauges-tracker';
|
||||
t.setAttribute('data-site-id', '517087f5613f5d77c300005e');
|
||||
t.src = '//secure.gaug.es/track.js';
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(t, s);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', 'UA-1563964-34', 'scrabblerocks.com');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
142
functions.php
Normal file
@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
function getNumTotalSpooners() {
|
||||
$result = mysql_query("SELECT id FROM spooners");
|
||||
return mysql_num_rows($result);
|
||||
}
|
||||
|
||||
function getNumActiveSpooners() {
|
||||
$result = mysql_query("SELECT id FROM spooners WHERE spooned = 0");
|
||||
return mysql_num_rows($result);
|
||||
}
|
||||
|
||||
function getHighestOrderNum() {
|
||||
$result = mysql_query("SELECT order_num FROM spooners WHERE spooned = 0 ORDER BY order_num DESC");
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['order_num'];
|
||||
}
|
||||
|
||||
function shuffleSpooners() {
|
||||
$random_array = range(0, getNumActiveSpooners() - 1); // create array containing numbers 0 to # of spooners remaining - 1, inclusive
|
||||
|
||||
shuffle($random_array); // shuffle said array
|
||||
|
||||
// update order of spooners based on array
|
||||
$result = mysql_query("SELECT id FROM spooners WHERE spooned = 0 ORDER BY id");
|
||||
|
||||
$i = 0;
|
||||
while($spooner = mysql_fetch_array($result)) {
|
||||
mysql_query("UPDATE spooners SET order_num = " . $random_array[$i] . " WHERE id = " . $spooner['id']);
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
function getIDByLooseName($subject) {
|
||||
$subject = trim($subject);
|
||||
$subject = strtolower($subject);
|
||||
$subject = str_replace(".", "", $subject); // remove periods
|
||||
if(substr_count($subject, " ") == 0) { // subject only contains one name
|
||||
$result = mysql_query('SELECT id FROM spooners WHERE LOWER(first) = "' . $subject . '"');
|
||||
if(mysql_num_rows($result) == 1) {
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['id']; // MATCH!
|
||||
} else if(mysql_num_rows($result) > 1) {
|
||||
return "multiple"; // more than one found
|
||||
}
|
||||
} else if(substr_count($subject, " ") == 1) { // one space, let's assume first space last
|
||||
$first = substr($subject, 0, strpos($subject, " "));
|
||||
$last = substr($subject, strpos($subject, " ") + 1);
|
||||
if(strlen($last) == 1) { // last initial
|
||||
$result = mysql_query('SELECT id FROM spooners WHERE LOWER(first) = "' . $first . '" AND LOWER(SUBSTRING(last, 1, 1)) = "' . $last . '"');
|
||||
if(mysql_num_rows($result) > 0) {
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['id']; // MATCH!
|
||||
}
|
||||
} else { // full last name
|
||||
$result = mysql_query('SELECT id FROM spooners WHERE LOWER(first) = "' . $first . '" AND LOWER(last) = "' . $last . '"');
|
||||
if(mysql_num_rows($result) > 0) {
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['id']; // MATCH!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "none";
|
||||
}
|
||||
|
||||
function getNameByID($id) {
|
||||
if($id) {
|
||||
$result = mysql_query("SELECT first, last FROM spooners WHERE id = " . $id) or die(mysql_error());
|
||||
if(mysql_num_rows($result) == 1) {
|
||||
$spooner = mysql_fetch_array($result);
|
||||
$name = $spooner['first'];
|
||||
if($spooner['last']) $name .= ' ' . $spooner['last'];
|
||||
return $name;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getFirstNameByID($id) {
|
||||
$result = mysql_query("SELECT first FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['first'];
|
||||
}
|
||||
|
||||
function getTargetByID($id) {
|
||||
$result = mysql_query("SELECT order_num FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
if($spooner['order_num'] == getHighestOrderNum()) { // if last person in the list
|
||||
$result2 = mysql_query("SELECT id FROM spooners WHERE spooned = 0 AND order_num = 0");
|
||||
$spooner2 = mysql_fetch_array($result2);
|
||||
return $spooner2['id'];
|
||||
} else {
|
||||
$result2 = mysql_query("SELECT id FROM spooners WHERE spooned = 0 AND order_num > " . $spooner['order_num'] . " ORDER BY order_num ASC LIMIT 1");
|
||||
$spooner2 = mysql_fetch_array($result2);
|
||||
return $spooner2['id'];
|
||||
}
|
||||
}
|
||||
|
||||
function getReverseTargetByID($id) { // aka get the person above the passed in person
|
||||
$result = mysql_query("SELECT order_num FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
if($spooner['order_num'] == 0) { // if first person in the list
|
||||
$result2 = mysql_query("SELECT id FROM spooners WHERE spooned = 0 AND order_num = " . getHighestOrderNum());
|
||||
$spooner2 = mysql_fetch_array($result2);
|
||||
return $spooner2['id'];
|
||||
} else {
|
||||
$result2 = mysql_query("SELECT id FROM spooners WHERE spooned = 0 AND order_num < " . $spooner['order_num'] . " ORDER BY order_num DESC LIMIT 1");
|
||||
$spooner2 = mysql_fetch_array($result2);
|
||||
return $spooner2['id'];
|
||||
}
|
||||
}
|
||||
|
||||
function checkSpoonedByID($id) {
|
||||
$result = mysql_query("SELECT spooned FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['spooned'];
|
||||
}
|
||||
|
||||
function spoonByID($id) {
|
||||
mysql_query('SET time_zone = "America/New_York"');
|
||||
mysql_query("UPDATE spooners SET spooned_by = " . getReverseTargetByID($id) . ", time_spooned = NOW(), spooned = 1, order_num = -1 WHERE id = " . $id);
|
||||
}
|
||||
|
||||
function reviveByID($id) {
|
||||
mysql_query("UPDATE spooners SET spooned = 0, order_num = " . (getHighestOrderNum() + 1) . " WHERE id = " . $id);
|
||||
}
|
||||
|
||||
function getSpoonedByIDByID($id) {
|
||||
$result = mysql_query("SELECT spooned_by FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['spooned_by'];
|
||||
}
|
||||
|
||||
function getTimeSpoonedByID($id) {
|
||||
$result = mysql_query("SELECT time_spooned FROM spooners WHERE id = " . $id);
|
||||
$spooner = mysql_fetch_array($result);
|
||||
return $spooner['time_spooned'];
|
||||
}
|
||||
|
||||
?>
|
207
header.php
Normal file
@ -0,0 +1,207 @@
|
||||
<?php
|
||||
session_start();
|
||||
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == FALSE) {
|
||||
header("Location:" . $site_url . "/login");
|
||||
}
|
||||
|
||||
include_once('config.php');
|
||||
include_once('functions.php');
|
||||
include_once('db_connect.php');
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!--
|
||||
_ _ _
|
||||
| \ | | (_)
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _ __ _ ___ _____
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` | / _` | \ \ / / _ \
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| | | (_| | |\ V / __/
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_| \__, |_| \_/ \___|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _
|
||||
| \ | |
|
||||
_ _ ___ _ _ _ _ _ __ | \| | _____ _____ _ __
|
||||
| | | |/ _ \| | | | | | | | '_ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| |_| | (_) | |_| | | |_| | |_) | | |\ | __/\ V / __/ |
|
||||
\__, |\___/ \__,_| \__,_| .__( ) \_| \_/\___| \_/ \___|_|
|
||||
__/ | | | |/
|
||||
|___/ |_|
|
||||
_ _
|
||||
| | | |
|
||||
__ _ ___ _ __ _ __ __ _ | | ___| |_ _ _ ___ _ _
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | |/ _ \ __| | | | |/ _ \| | | |
|
||||
| (_| | (_) | | | | | | | (_| | | | __/ |_ | |_| | (_) | |_| |
|
||||
\__, |\___/|_| |_|_| |_|\__,_| |_|\___|\__| \__, |\___/ \__,_|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _
|
||||
| | | \ | |
|
||||
__| | _____ ___ __ | \| | _____ _____ _ __
|
||||
/ _` |/ _ \ \ /\ / / '_ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| (_| | (_) \ V V /| | | | | |\ | __/\ V / __/ |
|
||||
\__,_|\___/ \_/\_/ |_| |_| \_| \_/\___| \_/ \___|_|
|
||||
|
||||
|
||||
|
||||
__ _ ___ _ __ _ __ __ _ _ __ _ _ _ __
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | '__| | | | '_ \
|
||||
| (_| | (_) | | | | | | | (_| | | | | |_| | | | |
|
||||
\__, |\___/|_| |_|_| |_|\__,_| |_| \__,_|_| |_|
|
||||
__/ |
|
||||
|___/
|
||||
_ _
|
||||
| | | |
|
||||
__ _ _ __ ___ _ _ _ __ __| | __ _ _ __ __| |
|
||||
/ _` | '__/ _ \| | | | '_ \ / _` | / _` | '_ \ / _` |
|
||||
| (_| | | | (_) | |_| | | | | (_| | | (_| | | | | (_| |
|
||||
\__,_|_| \___/ \__,_|_| |_|\__,_| \__,_|_| |_|\__,_|
|
||||
|
||||
|
||||
_ _
|
||||
| | | |
|
||||
__| | ___ ___ ___ _ __| |_ _ _ ___ _ _
|
||||
/ _` |/ _ \/ __|/ _ \ '__| __| | | | |/ _ \| | | |
|
||||
| (_| | __/\__ \ __/ | | |_ | |_| | (_) | |_| |
|
||||
\__,_|\___||___/\___|_| \__| \__, |\___/ \__,_|
|
||||
__/ |
|
||||
|___/
|
||||
_ _
|
||||
| \ | |
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` |
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| |
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_|
|
||||
__/ |
|
||||
|___/
|
||||
_
|
||||
| |
|
||||
_ __ ___ __ _| | _____ _ _ ___ _ _ ___ _ __ _ _
|
||||
| '_ ` _ \ / _` | |/ / _ \ | | | |/ _ \| | | | / __| '__| | | |
|
||||
| | | | | | (_| | < __/ | |_| | (_) | |_| | | (__| | | |_| |_
|
||||
|_| |_| |_|\__,_|_|\_\___| \__, |\___/ \__,_| \___|_| \__, ( )
|
||||
__/ | __/ |/
|
||||
|___/ |___/
|
||||
_ _
|
||||
| \ | |
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _ ___ __ _ _ _
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` | / __|/ _` | | | |
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| | \__ \ (_| | |_| |
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_| |___/\__,_|\__, |
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _ _
|
||||
| | | | \ | |
|
||||
__ _ ___ ___ __| | |__ _ _ ___ | \| | _____ _____ _ __
|
||||
/ _` |/ _ \ / _ \ / _` | '_ \| | | |/ _ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| (_| | (_) | (_) | (_| | |_) | |_| | __/ | |\ | __/\ V / __/ |
|
||||
\__, |\___/ \___/ \__,_|_.__/ \__, |\___| \_| \_/\___| \_/ \___|_|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _ _ _
|
||||
| | | | | | (_)
|
||||
__ _ ___ _ __ _ __ __ _ | |_ ___| | | __ _ | |_ ___
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | __/ _ \ | | / _` | | | |/ _ \
|
||||
| (_| | (_) | | | | | | | (_| | | || __/ | | | (_| | | | | __/
|
||||
\__, |\___/|_| |_|_| |_|\__,_| \__\___|_|_| \__,_| |_|_|\___|
|
||||
__/ |
|
||||
|___/
|
||||
_ _ _
|
||||
| | | | | |
|
||||
__ _ _ __ __| | | |__ _ _ _ __| |_ _ _ ___ _ _
|
||||
/ _` | '_ \ / _` | | '_ \| | | | '__| __| | | | |/ _ \| | | |
|
||||
| (_| | | | | (_| | | | | | |_| | | | |_ | |_| | (_) | |_| |
|
||||
\__,_|_| |_|\__,_| |_| |_|\__,_|_| \__| \__, |\___/ \__,_|
|
||||
__/ |
|
||||
|___/
|
||||
-->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<title><?php echo $page ?> — Spoons</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<!-- Le styles -->
|
||||
<link href="<?php echo $site_url ?>/assets/css/bootstrap.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
body {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 40px;
|
||||
font-size: 18px;
|
||||
line-height: 24px;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
a, a:hover, strong {
|
||||
color: #79ad36;
|
||||
font-weight: bold;
|
||||
}
|
||||
small {
|
||||
font-size: 14px;
|
||||
}
|
||||
.nav-pills {
|
||||
font-size:16px;
|
||||
}
|
||||
.nav-pills .active a, .nav-pills .active a:hover {
|
||||
background-color: #79ad36;
|
||||
}
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
.footer {
|
||||
font-size: 13px;
|
||||
line-height: 40px;
|
||||
}
|
||||
td {
|
||||
cursor: pointer;
|
||||
background-color: #fff;
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Pretty font -->
|
||||
<script type="text/javascript" src="http://use.typekit.com/zhe6udw.js"></script>
|
||||
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||
|
||||
<!-- Le JQuery -->
|
||||
<script src="<?php echo $site_url ?>/assets/js/jquery.min.js"></script>
|
||||
<script src="<?php echo $site_url ?>/assets/js/jquery-ui.min.js"></script>
|
||||
|
||||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="<?php echo $site_url ?>/assets/js/html5shiv.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- Fav and touch icons -->
|
||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-144-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-114-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-72-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-57-precomposed.png">
|
||||
<link rel="shortcut icon" href="<?php echo $site_url ?>/assets/ico/favicon.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="masthead">
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<?php if($page == "Home") { ?><li><a href="<?php echo $site_url ?>/sms">How do I report via SMS?</a></li><?php } ?>
|
||||
<?php if($page != "Home") { ?><li><a href="<?php echo $site_url ?>/">« Back Home</a></li><?php } ?>
|
||||
<li style="margin-left:10px;"><a href="<?php echo $site_url ?>/logout">Logout</a></li>
|
||||
</ul>
|
||||
<h2><a href="<?php echo $site_url ?>/">Spoons Web Reporting</a></h2>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- START PAGE CONTENT -->
|
234
index.php
Normal file
@ -0,0 +1,234 @@
|
||||
<?php
|
||||
$page = "Home";
|
||||
include('header.php');
|
||||
?>
|
||||
|
||||
<style>
|
||||
td, th {
|
||||
line-height: 30px !important;
|
||||
font-size: 17px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button.btn, a.btn {
|
||||
font-size: 15px !important;
|
||||
}
|
||||
|
||||
td a.btn {
|
||||
padding: 4px 0px !important;
|
||||
font-weight: normal;
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
div.row div.span2 a {
|
||||
padding: 4px 25px !important;
|
||||
width: 75px !important;
|
||||
height: 21px !important;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
}
|
||||
div.row div.span2 a i {
|
||||
margin:2px 4px 0px -8px;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0px !important;
|
||||
}
|
||||
|
||||
div.alert {
|
||||
font-size:14px;
|
||||
padding-top:20px;
|
||||
padding-bottom:20px;
|
||||
}
|
||||
div.alert a, div.alert strong {
|
||||
color: #c09853;
|
||||
}
|
||||
div.alert-error a, div.alert-error strong {
|
||||
color: #b94a48;
|
||||
}
|
||||
div.alert a.btn {
|
||||
color: #fff;
|
||||
}
|
||||
div.alert p {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<?php
|
||||
|
||||
/*********** SPOONING **********/
|
||||
if(isset($_GET['spoon'])) {
|
||||
spoonByID($_GET['spoon']);
|
||||
?>
|
||||
<div class="alert">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4><strong><?php echo getNameByID($_GET['spoon']) ?></strong> has been spooned! <?php echo getNameByID(getSpoonedByIDByID($_GET['spoon'])) ?></strong>'s new target is <?php echo getNameByID(getTargetByID(getSpoonedByIDByID($_GET['spoon']))) ?>.</h4>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
if(isset($_GET['revive'])) {
|
||||
reviveByID($_GET['revive']);
|
||||
?>
|
||||
<div class="alert">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4><strong><?php echo getNameByID($_GET['revive']) ?></strong> has been revived, but note that he or she has been added to the end of the list.</h4>
|
||||
<p>It's recommended to drag the revived spooner below a staff member so that you don't have to tell a camper that his or her target has changed for no reason.</p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/*********** SHUFFLING **********/
|
||||
if(isset($_GET['shuffle']) && !isset($_GET['confirmed'])) { ?>
|
||||
<div class="alert alert-error">
|
||||
<a type="button" class="close" data-dismiss="alert">×</a>
|
||||
<h4>Are you sure you wanna do that...?</h4>
|
||||
<p>Shuffling is permanent, and your head <strong>will</strong> roll if you do this at the wrong time. You might wanna <a href="<?php echo $site_url ?>/print.pdf">save a PDF</a> of the current order first.</p>
|
||||
<a href="<?php echo $site_url ?>/shuffle/confirmed" class="btn btn-success">Yes, I'm positive.</a>
|
||||
<a href="<?php echo $site_url ?>/" class="btn btn-warning" style="margin-left:16px;">No, please forgive me!</a>
|
||||
</div>
|
||||
<?php } else if(isset($_GET['shuffle']) && isset($_GET['confirmed'])) {
|
||||
|
||||
shuffleSpooners();
|
||||
|
||||
?>
|
||||
<div class="alert">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4>Spooners have been successfully shuffled.</h4>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
/*********** CLEARING ALL **********/
|
||||
if(isset($_GET['clear']) && !isset($_GET['confirmed'])) { ?>
|
||||
<div class="alert alert-error">
|
||||
<a type="button" class="close" data-dismiss="alert">×</a>
|
||||
<h4>Are you sure you wanna do that...?</h4>
|
||||
<p>Clearing the list is permanent, and your head <strong>will</strong> roll if you do this at the wrong time. You might wanna <a href="<?php echo $site_url ?>/print.pdf">save a PDF</a> of the current list first.</p>
|
||||
<a href="<?php echo $site_url ?>/clear/confirmed" class="btn btn-success">Yes, I'm positive.</a>
|
||||
<a href="<?php echo $site_url ?>/" class="btn btn-warning" style="margin-left:16px;">No, please forgive me!</a>
|
||||
</div>
|
||||
<?php } else if(isset($_GET['clear']) && isset($_GET['confirmed'])) {
|
||||
|
||||
mysql_query("TRUNCATE spooners");
|
||||
|
||||
?>
|
||||
<div class="alert">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<h4>All spooners have been successfully deleted.</h4>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="row" style="padding:16px 0px;">
|
||||
<div class="span6" style="font-size:16px;line-height:30px;">
|
||||
<form action="<?php echo $site_url ?>/add" method="GET">I want to add <input type="text" name="num" style="width:40px;margin:0px 4px;"> spooners. <button type="submit" class="btn btn-success" style="padding:4px 10px !important;margin:0px 8px;"> Leggo! » </button></form>
|
||||
</div>
|
||||
<div class="span2">
|
||||
<a href="<?php echo $site_url ?>/print.pdf" target="_blank" class="btn btn-primary"><i class="icon-print icon-white"></i> Print</a>
|
||||
</div>
|
||||
<div class="span2">
|
||||
<a href="<?php echo $site_url ?>/shuffle" class="btn btn-warning"><i class="icon-random icon-white"></i> Shuffle</a>
|
||||
</div>
|
||||
<div class="span2">
|
||||
<a href="<?php echo $site_url ?>/clear" class="btn btn-danger"><i class="icon-remove-circle icon-white"></i> Clear All</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Return a helper with preserved width of cells
|
||||
var fixHelper = function(e, ui) {
|
||||
ui.children().each(function() {
|
||||
$(this).width($(this).width());
|
||||
});
|
||||
return ui;
|
||||
};
|
||||
|
||||
$(".table-active tbody").sortable({
|
||||
helper: fixHelper,
|
||||
update: function(event, ui) {
|
||||
var newOrder = $(this).sortable('toArray').toString();
|
||||
$.post('sort_save.php', {order:newOrder});
|
||||
}
|
||||
}).disableSelection();
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php
|
||||
$result = mysql_query("SELECT id, first, last FROM spooners WHERE spooned = 0 ORDER BY order_num") or die(mysql_error());
|
||||
?>
|
||||
|
||||
<h4>Active Spooners (<?php echo mysql_num_rows($result) ?>)</h4>
|
||||
|
||||
<?php if(mysql_num_rows($result) > 0) { ?>
|
||||
<table class="table table-active">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="span1"> </th>
|
||||
<th class="span1"> </th>
|
||||
<th class="span3"><strong>First name</strong></th>
|
||||
<th class="span3"><strong>Last name</strong></th>
|
||||
<th class="span4"><small>Debug</small></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
while($spooner = mysql_fetch_array($result)) {
|
||||
echo ' <tr id="' . $spooner['id'] . '">
|
||||
<td><a href="' . $site_url . '/spoon/' . $spooner['id'] . '" class="btn btn-danger" type="submit">Spoon</a></td>
|
||||
<td style="text-align:center;"><i class="icon-list"></i></td>
|
||||
<td>' . $spooner['first'] . '</td>
|
||||
<td>' . $spooner['last'] . '</td>
|
||||
<td><small>Targeting ' . getNameByID(getTargetByID($spooner['id'])) . ', targeted by ' . getNameByID(getReverseTargetByID($spooner['id'])) . '</small></td>
|
||||
</tr>
|
||||
';
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php } else { ?>
|
||||
<h2 style="margin:25px 0px;color:#ccc;text-align:center;">Nothing to see here!</h2>
|
||||
<?php } ?>
|
||||
|
||||
<hr>
|
||||
|
||||
<?php
|
||||
$result = mysql_query("SELECT id, first, last, spooned_by, time_spooned FROM spooners WHERE spooned = 1 ORDER BY first") or die(mysql_error());
|
||||
?>
|
||||
|
||||
<h4>Dead Spooners (<?php echo mysql_num_rows($result) ?>)</h4>
|
||||
|
||||
<?php if(mysql_num_rows($result) > 0) { ?>
|
||||
<table class="table table-inactive">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="span1"> </th>
|
||||
<th class="span1"> </th>
|
||||
<th class="span3"><strong>Name</strong></th>
|
||||
<th class="span7"><strong>Details</strong></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
while($spooner = mysql_fetch_array($result)) {
|
||||
echo ' <tr>
|
||||
<td><a href="' . $site_url . '/revive/' . $spooner['id'] . '" class="btn" type="submit">Revive</a></td>
|
||||
<td> </td>
|
||||
<td>' . $spooner['first'] . ' ' . $spooner['last'] . '</td>
|
||||
<td><small>Spooned by <strong>' . getNameByID($spooner['spooned_by']) . '</strong> on <strong>' . date('l', strtotime($spooner['time_spooned'])) . '</strong> at <strong>' . date('g:i A', strtotime($spooner['time_spooned'])) . '</strong>.</small></td>
|
||||
</tr>
|
||||
';
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php } else { ?>
|
||||
<h2 style="margin:25px 0px;color:#ccc;text-align:center;">Nothing to see here!</h2>
|
||||
<?php } ?>
|
||||
|
||||
<?php include('footer.php') ?>
|
250
login.php
Normal file
@ -0,0 +1,250 @@
|
||||
<?php
|
||||
include('config.php');
|
||||
|
||||
session_start();
|
||||
|
||||
if($_SESSION['logged_in']) {
|
||||
header("Location:" . $site_url . "/");
|
||||
} else if($_COOKIE['remembered'] == 'TRUE') {
|
||||
$_SESSION['logged_in'] = TRUE;
|
||||
header("Location:" . $site_url . "/");
|
||||
}
|
||||
|
||||
if(isset($_POST['password'])) {
|
||||
if($_POST['password'] == $site_password) {
|
||||
$_SESSION['logged_in'] = TRUE;
|
||||
if($_POST['remember'] == "remember") {
|
||||
$threeMonths = 60 * 60 * 24 * 90 + time();
|
||||
setcookie('remembered', 'TRUE', $threeMonths);
|
||||
}
|
||||
header("Location:" . $site_url . "/");
|
||||
} else {
|
||||
$failure = TRUE;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!--
|
||||
_ _ _
|
||||
| \ | | (_)
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _ __ _ ___ _____
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` | / _` | \ \ / / _ \
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| | | (_| | |\ V / __/
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_| \__, |_| \_/ \___|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _
|
||||
| \ | |
|
||||
_ _ ___ _ _ _ _ _ __ | \| | _____ _____ _ __
|
||||
| | | |/ _ \| | | | | | | | '_ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| |_| | (_) | |_| | | |_| | |_) | | |\ | __/\ V / __/ |
|
||||
\__, |\___/ \__,_| \__,_| .__( ) \_| \_/\___| \_/ \___|_|
|
||||
__/ | | | |/
|
||||
|___/ |_|
|
||||
_ _
|
||||
| | | |
|
||||
__ _ ___ _ __ _ __ __ _ | | ___| |_ _ _ ___ _ _
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | |/ _ \ __| | | | |/ _ \| | | |
|
||||
| (_| | (_) | | | | | | | (_| | | | __/ |_ | |_| | (_) | |_| |
|
||||
\__, |\___/|_| |_|_| |_|\__,_| |_|\___|\__| \__, |\___/ \__,_|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _
|
||||
| | | \ | |
|
||||
__| | _____ ___ __ | \| | _____ _____ _ __
|
||||
/ _` |/ _ \ \ /\ / / '_ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| (_| | (_) \ V V /| | | | | |\ | __/\ V / __/ |
|
||||
\__,_|\___/ \_/\_/ |_| |_| \_| \_/\___| \_/ \___|_|
|
||||
|
||||
|
||||
|
||||
__ _ ___ _ __ _ __ __ _ _ __ _ _ _ __
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | '__| | | | '_ \
|
||||
| (_| | (_) | | | | | | | (_| | | | | |_| | | | |
|
||||
\__, |\___/|_| |_|_| |_|\__,_| |_| \__,_|_| |_|
|
||||
__/ |
|
||||
|___/
|
||||
_ _
|
||||
| | | |
|
||||
__ _ _ __ ___ _ _ _ __ __| | __ _ _ __ __| |
|
||||
/ _` | '__/ _ \| | | | '_ \ / _` | / _` | '_ \ / _` |
|
||||
| (_| | | | (_) | |_| | | | | (_| | | (_| | | | | (_| |
|
||||
\__,_|_| \___/ \__,_|_| |_|\__,_| \__,_|_| |_|\__,_|
|
||||
|
||||
|
||||
_ _
|
||||
| | | |
|
||||
__| | ___ ___ ___ _ __| |_ _ _ ___ _ _
|
||||
/ _` |/ _ \/ __|/ _ \ '__| __| | | | |/ _ \| | | |
|
||||
| (_| | __/\__ \ __/ | | |_ | |_| | (_) | |_| |
|
||||
\__,_|\___||___/\___|_| \__| \__, |\___/ \__,_|
|
||||
__/ |
|
||||
|___/
|
||||
_ _
|
||||
| \ | |
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` |
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| |
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_|
|
||||
__/ |
|
||||
|___/
|
||||
_
|
||||
| |
|
||||
_ __ ___ __ _| | _____ _ _ ___ _ _ ___ _ __ _ _
|
||||
| '_ ` _ \ / _` | |/ / _ \ | | | |/ _ \| | | | / __| '__| | | |
|
||||
| | | | | | (_| | < __/ | |_| | (_) | |_| | | (__| | | |_| |_
|
||||
|_| |_| |_|\__,_|_|\_\___| \__, |\___/ \__,_| \___|_| \__, ( )
|
||||
__/ | __/ |/
|
||||
|___/ |___/
|
||||
_ _
|
||||
| \ | |
|
||||
| \| | _____ _____ _ __ __ _ ___ _ __ _ __ __ _ ___ __ _ _ _
|
||||
| . ` |/ _ \ \ / / _ \ '__| / _` |/ _ \| '_ \| '_ \ / _` | / __|/ _` | | | |
|
||||
| |\ | __/\ V / __/ | | (_| | (_) | | | | | | | (_| | \__ \ (_| | |_| |
|
||||
\_| \_/\___| \_/ \___|_| \__, |\___/|_| |_|_| |_|\__,_| |___/\__,_|\__, |
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _ _
|
||||
| | | | \ | |
|
||||
__ _ ___ ___ __| | |__ _ _ ___ | \| | _____ _____ _ __
|
||||
/ _` |/ _ \ / _ \ / _` | '_ \| | | |/ _ \ | . ` |/ _ \ \ / / _ \ '__|
|
||||
| (_| | (_) | (_) | (_| | |_) | |_| | __/ | |\ | __/\ V / __/ |
|
||||
\__, |\___/ \___/ \__,_|_.__/ \__, |\___| \_| \_/\___| \_/ \___|_|
|
||||
__/ | __/ |
|
||||
|___/ |___/
|
||||
_ _ _ _ _
|
||||
| | | | | | (_)
|
||||
__ _ ___ _ __ _ __ __ _ | |_ ___| | | __ _ | |_ ___
|
||||
/ _` |/ _ \| '_ \| '_ \ / _` | | __/ _ \ | | / _` | | | |/ _ \
|
||||
| (_| | (_) | | | | | | | (_| | | || __/ | | | (_| | | | | __/
|
||||
\__, |\___/|_| |_|_| |_|\__,_| \__\___|_|_| \__,_| |_|_|\___|
|
||||
__/ |
|
||||
|___/
|
||||
_ _ _
|
||||
| | | | | |
|
||||
__ _ _ __ __| | | |__ _ _ _ __| |_ _ _ ___ _ _
|
||||
/ _` | '_ \ / _` | | '_ \| | | | '__| __| | | | |/ _ \| | | |
|
||||
| (_| | | | | (_| | | | | | |_| | | | |_ | |_| | (_) | |_| |
|
||||
\__,_|_| |_|\__,_| |_| |_|\__,_|_| \__| \__, |\___/ \__,_|
|
||||
__/ |
|
||||
|___/
|
||||
-->
|
||||
|
||||
<meta charset="utf-8">
|
||||
<title>Sign in — Spoons</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<!-- Le styles -->
|
||||
<link href="<?php echo $site_url ?>/assets/css/bootstrap.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
body {
|
||||
padding-top: 40px !important;
|
||||
padding-bottom: 40px !important;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.form-signin {
|
||||
max-width: 300px;
|
||||
padding: 19px 29px 29px;
|
||||
margin: 0 auto 20px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #e5e5e5;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
||||
}
|
||||
.form-signin .form-signin-heading,
|
||||
.form-signin .checkbox {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.form-signin input[type="text"],
|
||||
.form-signin input[type="password"] {
|
||||
font-size: 16px;
|
||||
height: auto;
|
||||
margin-bottom: 15px;
|
||||
padding: 7px 9px;
|
||||
}
|
||||
.form-signin button {
|
||||
padding: 11px 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
img {
|
||||
position: relative;
|
||||
margin-bottom: -1px;
|
||||
z-index: 1;
|
||||
}
|
||||
</style>
|
||||
<link href="<?php echo $site_url ?>/assets/css/bootstrap-responsive.css" rel="stylesheet">
|
||||
|
||||
<!-- Pretty font -->
|
||||
<script type="text/javascript" src="http://use.typekit.com/zhe6udw.js"></script>
|
||||
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||
|
||||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="<?php echo $site_url ?>/assets/js/html5shiv.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- Fav and touch icons -->
|
||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-144-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-114-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-72-precomposed.png">
|
||||
<link rel="apple-touch-icon-precomposed" href="<?php echo $site_url ?>/assets/ico/apple-touch-icon-57-precomposed.png">
|
||||
<link rel="shortcut icon" href="<?php echo $site_url ?>/assets/ico/favicon.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<form class="form-signin" action="<?php echo $site_url ?>/login" method="POST">
|
||||
<?php if($failure) { ?>
|
||||
<div class="alert alert-error">
|
||||
<strong>Nope!</strong> Try again buddy.
|
||||
</div>
|
||||
<?php } ?>
|
||||
<img src="<?php echo $site_url ?>/assets/img/paulblart.png">
|
||||
|
||||
<input type="password" name="password" class="input-block-level" placeholder="Password">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="remember" value="remember"> Remember this device
|
||||
</label>
|
||||
<button class="btn btn-large btn-success submit" type="submit">Leggo!</button>
|
||||
</form>
|
||||
|
||||
</div> <!-- /container -->
|
||||
|
||||
<script type="text/javascript">
|
||||
var _gauges = _gauges || [];
|
||||
(function() {
|
||||
var t = document.createElement('script');
|
||||
t.type = 'text/javascript';
|
||||
t.async = true;
|
||||
t.id = 'gauges-tracker';
|
||||
t.setAttribute('data-site-id', '517087f5613f5d77c300005e');
|
||||
t.src = '//secure.gaug.es/track.js';
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(t, s);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
|
||||
ga('create', 'UA-1563964-34', 'scrabblerocks.com');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
7
logout.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
include('config.php');
|
||||
session_start();
|
||||
setcookie('remembered', 'FALSE', 1);
|
||||
session_destroy();
|
||||
header("Location:" . $site_url . "/login.php");
|
||||
?>
|
379
mpdf/CHANGELOG.txt
Executable file
@ -0,0 +1,379 @@
|
||||
===========================
|
||||
mPDF 5.4
|
||||
14/02/2012
|
||||
===========================
|
||||
|
||||
|
||||
Files changed
|
||||
-------------
|
||||
mpdf.php
|
||||
config.php
|
||||
compress.php
|
||||
classes/ttfontsuni.php
|
||||
classes/barcode.php
|
||||
classes/indic.php
|
||||
classes/svg.php
|
||||
examples/show_code.php ----- SECURITY RISK**
|
||||
examples/example49_changelog.php
|
||||
examples/example57_new_mPDF_v5-3_active_forms_b (replace example57_new_mPDF_v5-3_active_forms)
|
||||
includes/out.php
|
||||
mpdfi/fpdi_pdf_parser.php
|
||||
|
||||
Files added
|
||||
-----------
|
||||
classes/bmp.php
|
||||
classes/directw.php
|
||||
classes/form.php
|
||||
classes/grad.php
|
||||
classes/tocontents.php
|
||||
classes/wmf.php
|
||||
examples/example58_new_mPDF_v5-4_features
|
||||
|
||||
config.php changes
|
||||
------------------
|
||||
Edited: $this->allowedCSStags, $this->innerblocktags, $this->defaultCSS; (CAPTION added in each case)
|
||||
Moved: Numerous $form_.. variables are now in /classes/form.php
|
||||
|
||||
New config variables
|
||||
--------------------
|
||||
$this->bookmarkStyles = array();
|
||||
$this->cacheTables = true;
|
||||
|
||||
New methods
|
||||
-----------
|
||||
function CircularText()
|
||||
function SetVisibility()
|
||||
|
||||
New/Extended CSS
|
||||
----------------
|
||||
box-shadow (block elements - does NOT support "inset")
|
||||
text-shadow (all text elements - does NOT support "blur")
|
||||
visibility: visible|hidden|printonly|screenonly (block-level elements and images IMG only)
|
||||
text-transform: capitalize|uppercase|lowercase (extended to support TD/TH)
|
||||
tr|td|th:nth-child(odd|even|2n+1)
|
||||
color, strikethrough, underline and background-color (extended to support rotated TD/TH)
|
||||
underline and strike-through (extended to support TD/TH)
|
||||
underline (line colour) (extended to work correctly in watermark)
|
||||
page-break-after: left|right|always (block elements and tables)
|
||||
NB respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
|
||||
background[-color]: extended to support rgba|cmyka|cmyk|hsla|hsl|spot
|
||||
border(extended to support inline elements)
|
||||
|
||||
|
||||
New HTML
|
||||
--------
|
||||
<caption>
|
||||
<textcircle />
|
||||
|
||||
|
||||
New features / Improvements
|
||||
---------------------------
|
||||
Tables - Zebra Stripes
|
||||
Tables: overlapping rowspans (partially) supported
|
||||
Tables - Disk caching
|
||||
Using progress bars (or $showStats) now reports 'real' memory usage i.e. get_memory_usage(true)
|
||||
Support for query string in the URLs for external stylesheets e.g. @import url("style.css?ltcyy7");
|
||||
Table caption partially supported
|
||||
CircularText
|
||||
BookMark styling
|
||||
Spread tables i.e. can split table (columns) across several pages width.
|
||||
Can use chelvetica, ctimes and ccourier to specify core fonts in a non-core font document
|
||||
Spread tables i.e. can split table (columns) across several pages width.
|
||||
{colsum} in <tfoot> cell will insert a column total per page.
|
||||
SVG embedded as island in HTML supported
|
||||
Active Forms
|
||||
textarea and input (text types) now accept javascript as:
|
||||
onKeystroke, onValidate, onCalculate and onFormat
|
||||
onChange is depracated but works as onCalculate (for textarea and input)
|
||||
(PS Select still accepts onChange cf. 5.3.37)
|
||||
Ledger and Tabloid added as page formats recognised. NB Ledger is same as tabloid but landscape. In mPDF, both give the same size (portrait)
|
||||
so need to add -L e.g. Ledger-L for landscape.
|
||||
|
||||
|
||||
Internal script changes
|
||||
-----------------------
|
||||
Changed this->k to _MPDFK throughout all scripts
|
||||
Changes to color (packed binary data in string rather than array) to reduce memory usage esp in tables
|
||||
Internal variables Removed
|
||||
$usetableheader;
|
||||
$tableheadernrows;
|
||||
$tablefooternrows;
|
||||
vars $ChangePage, $p_bottom_border, $img_margin_top(+) $issetcolor + other similar removed
|
||||
|
||||
Removed a whole load of // comments
|
||||
Updates to remove some more Warning Notices (not all marked in text)
|
||||
Border set on TR - changed so set on each cell, rather than retrospectively at end of TR
|
||||
All references to table['text'] removed as not needed - uses ['textbuffer'] instead
|
||||
OpenTag(TD) changes to reduce memory usage with tables
|
||||
Includes different method to set a default timezone
|
||||
fn _smallCaps does not need (undefined) $space
|
||||
this->chrs and this->ords replaced by chr() and ord()
|
||||
Headers in out.php updated to match those used in Output()
|
||||
Change to SetFont() to improve performance time
|
||||
Change to GetStringWidth() to improve performance time
|
||||
Corrected copying of Glyphs 0,1,2, to all subset fonts (non-SMP/SIP), and only setting 32->127 in subset
|
||||
Subset fonts (non-SMP/SIP) have additionally Unicode CMap tables (0,0,4 and 0,3,4) as well as Microsoft (3,1,4)
|
||||
Subset fonts (SMP/SIP) have CMap tables (1,0,6 and 3,0,4) - rather than 1,0,6 and 3,0,6
|
||||
Subset fonts (SMP/SIP) have 'name' table changed to give 1,0 and 3,0. As it is a symbol font (not Unicode encoded) :
|
||||
needs to have a name entry in 3,0 (e.g. symbol) - original font will have 3,1 (i.e. Unicode)
|
||||
Automatically checks for HTML code length > 100000 characters and gives error warning if
|
||||
PHP < 5.2.0 (as not configurable) or increases pcre.backtrack_limit if PHP < 5.3.7
|
||||
|
||||
Removed/Depracated
|
||||
------------------
|
||||
function UseTableHeader($opt=true) fn removed / depracated
|
||||
function UsePRE($opt=true) removed
|
||||
$attr['REPEAT_HEADER'] == true CSS removed / depracated
|
||||
$this->usepre=true; removed / depracated as never needed - always respects PRE whitespace
|
||||
|
||||
ToC: NB Values can no longer be set directly e.g. as in example
|
||||
$mpdf->TOCheader = array(); // array as for setting header/footer
|
||||
$mpdf->TOCfooter = array(); // array as for setting header/footer
|
||||
$mpdf->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
|
||||
$mpdf->TOCpostHTML = ''; // HTML text to appear after table of contents
|
||||
$mpdf->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
|
||||
Need to use TOCpagebreak either direct (or array version) or as HTML
|
||||
OR if absolutley necessary, could use:
|
||||
$mpdf->tocontents->TOCheader = array(); // array as for setting header/footer
|
||||
$mpdf->tocontents->TOCfooter = array(); // array as for setting header/footer
|
||||
$mpdf->tocontents->TOCpreHTML = '<h2>Contents - Portrait</h2>'; // HTML text to appear before table of contents
|
||||
$mpdf->tocontents->TOCpostHTML = ''; // HTML text to appear after table of contents
|
||||
$mpdf->tocontents->TOCbookmarkText = 'Content list'; // Text as it will appear in the Bookmarks (leave blank for none)
|
||||
|
||||
|
||||
|
||||
Further Details
|
||||
===============
|
||||
|
||||
CSS border on inline elements
|
||||
-----------------------------
|
||||
Support for CSS border (and variants) on inline elements e.g. <span style="border-bottom: 1px dashed #000000;">
|
||||
Border styles solid|dotted|dashed|double only are supported. Border radius not supported.
|
||||
Nested inline elements will have repeat left|right borders on the nested content (unlike browsers)
|
||||
|
||||
Tables - Zebra Stripes
|
||||
----------------------
|
||||
TABLE - striped rows cf. http://dev.opera.com/articles/view/zebra-striping-tables-with-css3/
|
||||
tr:nth-child(odd) { background-color: #99ff99; }
|
||||
thead tr:nth-child(3n+2) { background-color: #FFBBFF; }
|
||||
td:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
table.zebraTable td:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
table.zebraTable th:nth-child(2n+1) { background-color: #BBBBFF; }
|
||||
|
||||
NB mPDF does NOT correctly apply specificity to all CSS
|
||||
table.zebra tbody tr:nth-child(2n+1) td { background-color: #FFFFBB; }
|
||||
table.zebra tbody td:nth-child(odd) { background-color: #BBBBFF; }
|
||||
|
||||
should make every odd row yellow, and every odd coloumn blue, but with the row/yellow overriding the column/blue.
|
||||
In mPDF the td:nth-child(odd) trumps the plain td, so the column colour wins out. You can force the effect you want by using
|
||||
table.zebra tbody tr:nth-child(2n+1) td:nth-child(1n+0) { background-color: #FFFFBB; }
|
||||
|
||||
(The :nth-child(1n+0) selector just selects every td cell.)
|
||||
|
||||
|
||||
|
||||
Tables - Disk caching
|
||||
---------------------
|
||||
TABLES: using disk caching
|
||||
// Using disk to cache table data can reduce memory usage dramatically, but at a cost of increased
|
||||
// executon time and disk access (read and write)
|
||||
$this->cacheTables = true;
|
||||
NB $this->packTableData will be overridden to => true; // required for cacheTables
|
||||
$this->simpleTables will be overridden to => false; // Cannot co-exist with cacheTables
|
||||
|
||||
|
||||
Table caption
|
||||
-------------
|
||||
Must come immediately after <table...>
|
||||
CSS caption-side and HTML align attribute of top|bottom supported (not attribute left|right)
|
||||
Handled as a separate block element brought outside the table, so:
|
||||
CSS will not cascade correctly on the table
|
||||
width of caption block is that of page or of the block element containing the table
|
||||
so alignment will be to the page-width not the table width
|
||||
if table page-break-after: always, the caption will follow the pagebreak.
|
||||
This does work:
|
||||
<style>
|
||||
.tablecaption { caption-side: bottom; text-align: left; font-weight: bold; color: green; }
|
||||
</style>
|
||||
...
|
||||
<table>
|
||||
<caption class="tablecaption">Caption title here</caption>
|
||||
<tbody>
|
||||
|
||||
CSS visibility: printonly, screenonly
|
||||
-------------------------------------
|
||||
Roughly based on CSS
|
||||
|
||||
Works on Block elements P, DIV etc, or Image
|
||||
Cannot nest / layer.
|
||||
Inner blocks/image with set visibility are ignored if already set on enclosing block element.
|
||||
(Block element) does not work inside table (image does)
|
||||
So 'visible' does nothing but is set as default
|
||||
(NB Changes output to PDF version 1.5)
|
||||
Incompatible with PDFA / PDFX
|
||||
|
||||
'visibility'
|
||||
Value: visible | hidden | (collapse | inherit)
|
||||
Initial: visible
|
||||
Applies to: all elements
|
||||
Inherited: yes
|
||||
|
||||
The 'visibility' property specifies whether the boxes generated by an element are rendered.
|
||||
Invisible boxes still affect layout (set the 'display' property to 'none' to suppress box generation altogether).
|
||||
Values have the following meanings:
|
||||
|
||||
visible
|
||||
The generated box is visible.
|
||||
hidden
|
||||
The generated box is invisible (fully transparent, nothing is drawn), but still affects layout.
|
||||
Furthermore, descendants of the element will be visible if they have 'visibility: visible'.
|
||||
collapse | inherit
|
||||
NOT supported in mPDF
|
||||
|
||||
CUSTOM:
|
||||
printonly | screenonly
|
||||
|
||||
|
||||
Added VISIBILITY function
|
||||
$mpdf->SetVisibility('screenonly'); or 'printonly' 'visible' or 'hidden'
|
||||
(NB Changes output to PDF version 1.5)
|
||||
Incompatible with PDFA / PDFX
|
||||
|
||||
CircularText
|
||||
------------
|
||||
function CircularText($x, $y, $r, $text, $align='top', $kerning=120, $fontwidth=100) {
|
||||
x: abscissa of center
|
||||
y: ordinate of center
|
||||
r: radius of circle
|
||||
text: text to be printed
|
||||
align: text alignment: top or bottom. Default value: top
|
||||
kerning: spacing between letters in percentage. Default value: 120. Zero is not allowed.
|
||||
fontwidth: width of letters in percentage. Default value: 100. Zero is not allowed
|
||||
|
||||
- now uses Kerning between letters if useKerning == true (set manually see example)
|
||||
|
||||
BookMark styling
|
||||
----------------
|
||||
New configurable variable to control appearance of Bookmarks e.g.
|
||||
$this->bookmarkStyles = array(
|
||||
0 => array('color'=> array(0,64,128), 'style'=>'B'),
|
||||
1 => array('color'=> array(128,0,0), 'style'=>''),
|
||||
2 => array('color'=> array(0,128,0), 'style'=>'I'),
|
||||
);
|
||||
|
||||
Column sums
|
||||
-----------
|
||||
(Also changed some preg_replace to str_replace to improve performance)
|
||||
To use: just add {colsum} to any cells of the table footer <tfoot>
|
||||
Add a number to specify a fixed number of decimal points e.g. <td>£{colsum2}</td> will give you £123.40
|
||||
The width of the column will be calculated using the actual string {colsum} as a placeholder.
|
||||
If you need the column to be wider, use underscores "_" to pad it e.g. {colsum2_____}
|
||||
|
||||
|
||||
Spread tables
|
||||
-------------
|
||||
i.e. can split table (columns) across several pages width.
|
||||
CSS <table style="overflow: visible">
|
||||
Cannot use with:
|
||||
$this->kwt - ignored
|
||||
$this->table_rotate - ignored
|
||||
$this->table_keep_together - ignored
|
||||
$this->ColActive - cancels spread tables
|
||||
|
||||
Messes up with:
|
||||
$mpdf->forcePortraitHeaders = true;
|
||||
$mpdf->forcePortraitMargins = true;
|
||||
Problems with CJK, and RTL
|
||||
|
||||
Will do no resizing of fonts at all.
|
||||
Maximum width of column = page width i.e. will not split columns across pages - NB will keep colspan>1 on one page
|
||||
If table row too high for page will die with error message.
|
||||
Will override some specs for width if this creates conflicts
|
||||
Recommended to specify absolute value of width on each column.
|
||||
|
||||
|
||||
|
||||
|
||||
Bug fixes
|
||||
=========
|
||||
Dottab - if text after dottab is hyperlinked <a></a> then dots are underlined
|
||||
|
||||
page-break-before now respects $mpdf->restoreBlockPagebreaks = true; i.e. will make pagebreak act like formfeed
|
||||
Annotation() function called directly with colorarray(r,g,b)
|
||||
|
||||
Added urldecode to _getImage to cope with ../name%20of%20image.jpg
|
||||
Added urldecode AND htmlspecials_decode to href in <a> link e.g. https://www.google.com/search?hl=en&q=mpdf&filename=name%20of%20file
|
||||
[barcode.php] Allow in C39 codes - will be changed to spaces
|
||||
|
||||
<table> inside a <div position:fixed, left:300px;> not calculating table width correctly
|
||||
- leading to either upside down table or error width less than 1 character
|
||||
|
||||
Depracated magic_quotes_runtime() in compress.php
|
||||
|
||||
DIRECTW included twice in compress.php
|
||||
FORMS mark up for compress.php corrected
|
||||
|
||||
double backslashes not preserved inside <pre> or <textarea>
|
||||
|
||||
font-weight and font-style not recognised in <pageheader>
|
||||
|
||||
Progress bars causing corrupt PDF file (out.php) changed fopen from "r" mode to "rb" (binary)
|
||||
Target around image - <a href="#internaltarget"><img ... /></a> - not working
|
||||
|
||||
SmallCaps in <thead> error
|
||||
|
||||
Fonts with "name" table in format 1 not recognised correctly
|
||||
Rotated table which does not fit on remaining page, forces a new page even if already at top of page
|
||||
|
||||
Locale causing problems - all instances of sprintf() using %.3f changed to %.3F so not locale aware
|
||||
|
||||
CSS border radius not implemented on fixed/absolute positioned block element
|
||||
|
||||
Background color in rotated table extending way beyond bottom of table
|
||||
|
||||
Nested table containing <thead> or <tfoot> was confused with <thead> or <tfoot> of parent table
|
||||
|
||||
Correct handling of spaces, < or & in textarea
|
||||
|
||||
<option> and <input ..> attributes value/title decoded with fn lesser_entity_decode instead of htmlspecialchars_decode to include '
|
||||
|
||||
line width not restored to correct value after "line-through" text in Cell()
|
||||
|
||||
Kannada - incorrect positioning of Reph
|
||||
|
||||
Forms - In <input> or <option> (select) not correctly handling HTML named entities e.g. < in value or title
|
||||
Active forms - as Value or Title incorrectly showing as Euro - PDFDocEncoding fixed
|
||||
|
||||
Unicode data in embedded fonts not encrypted when doc encrypted
|
||||
|
||||
Nested block elements which are empty including innermost one, top margin of innermost block was ignored
|
||||
|
||||
font-size: xx% inside a block was setting on block's parent font-size
|
||||
|
||||
Active forms - radio buttons (removed name from Widget - leave on Radio group)
|
||||
causing problems accessing field for radio buttons
|
||||
|
||||
When using simple tables and border-collapse, if table border set, but cell borders not set, should display table border (fixed)
|
||||
position:fixed block - if neither top nor bottom nor height specified, was positioned incorrectly (y)
|
||||
Leave - if top, bottom, margin-top, margiin-bottom and height are all left unspecified (or auto), will centre vertically
|
||||
on the page (specific to mPDF - not consistent with CSS2.1)
|
||||
But if any one of them are specified (including e.g. margin-top=0), follows CSS spec, so top is the current "static" position
|
||||
|
||||
background-image-opacity=0 not working on BODY or BLOCK
|
||||
|
||||
Lists - if LI continues after a nested List, would add as a new LI item (should continue as part of earlier LI item)
|
||||
|
||||
fn WriteCell() converts to 'windows-1252' when required
|
||||
if multiple calls to mPDF used, cannot redefine function cmp()
|
||||
internal link targets <a name="xx" /> in ToC not moved when using: page-break-inside:avoid
|
||||
internal link targets <a name="xx" /> not moved when using: columns, page-break-inside:avoid, keep-with-table or table rotate
|
||||
|
||||
Active Forms - onChange not working for SELECT (cf. 5.3.25) Example 57 only worked by chance as JS was carried over from Select to Text field
|
||||
Bug is fixed, but example file needed updating to onCalculate for the display field.
|
||||
|
||||
Table cell: if height set as %, currently sets it as % of page-width; instead this now ignores it.
|
||||
|
||||
Bengali letter Khanda Ta (U+09CE) character not recognised; was added in Unicode v4.1 and prior to this, (U+09A4 U+09CD U+200D)
|
||||
so mPDF converts to this string and seems to work.
|
||||
|
||||
OCR characters wrong size in barcodes if using different ocr font
|
92
mpdf/CREDITS.txt
Executable file
@ -0,0 +1,92 @@
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Software: FPDF *
|
||||
* Version: 1.53 *
|
||||
* Date: 2004-12-31 *
|
||||
* Author: Olivier PLATHEY *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish. *
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* HTML2FPDF is a php script to read a HTML text and generate a PDF file. *
|
||||
* Copyright (C) 2004-2005 Renato Coelho *
|
||||
* *
|
||||
* html2fpdf.php, htmltoolkit.php *
|
||||
*******************************************************************************/
|
||||
|
||||
CREDITS From HTML2FPDF:
|
||||
|
||||
-Olivier Plathey for the fpdf.php class [http://www.fpdf.org]
|
||||
-Damon Kohler for the Flowing Block script [mailto:damonkohler@yahoo.com]
|
||||
-Clément Lavoillotte for HTML-oriented FPDF idea
|
||||
-Yamasoft for the gif.php class [http://www.yamasoft.com/]
|
||||
-Jérôme Fenal for the _parsegif() function
|
||||
-"VIETCOM" for the PDFTable code [http://www.freepgs.com/vietcom/tool/pdftable/] [mailto:vncommando@yahoo.com]
|
||||
-Yukihiro O. for the SetDash() function [mailto:yukihiro_o@infoseek.jp]
|
||||
-Ron Korving for the WordWrap() function
|
||||
-Michel Poulain for the DisplayPreferences() function
|
||||
-Patrick Benny for the MultiCellBlt() function idea [no longer in use]
|
||||
-Seb for the _SetTextRendering() and SetTextOutline() functions [mailto:captainseb@wanadoo.fr]
|
||||
-MorphSoft for the colornames list idea
|
||||
-W3SCHOOLS for HTML-related reference info [http://www.w3schools.com/]
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Software: FPDF_Protection *
|
||||
* Version: 1.02 *
|
||||
* Date: 2005/05/08 *
|
||||
* Author: Klemen VODOPIVEC *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish as stated in original *
|
||||
* FPDF package. *
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* @copyright Khaled Al-Shamaa 2008
|
||||
* @link http://www.ar-php.org
|
||||
* @author Khaled Al-Shamaa <khaled@ar-php.org>
|
||||
* @desc Set of PHP5 / UTF-8 Classes developed to enhance Arabic web
|
||||
* applications by providing set of tools includes stem-based searching,
|
||||
* translitiration, soundex, Hijri calendar, charset detection and
|
||||
* converter, spell numbers, keyboard language, Muslim prayer time,
|
||||
* auto-summarization, and more...
|
||||
* @package Arabic
|
||||
*
|
||||
* @version 1.8 released in Feb 15, 2009
|
||||
*
|
||||
* @license LGPL
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
[http://www.opensource.org/licenses/lgpl-license.php]
|
||||
|
164
mpdf/FONT INFO.txt
Executable file
@ -0,0 +1,164 @@
|
||||
|
||||
=================
|
||||
Open Source Fonts
|
||||
=================
|
||||
mPDF should be able to read most TrueType Unicode font files with a .ttf extension
|
||||
Truetype fonts with .ttf or .otf extension and .ttc TrueType collections should also work OK.
|
||||
|
||||
You will probably therefore have access to any number of fonts, but here are some useful sources for
|
||||
open-source or free-use fonts. Many of these were included with earlier versions of mPDF:
|
||||
|
||||
General collections
|
||||
-------------------
|
||||
- DejaVu font collection from: http://dejavu-fonts.org/wiki/Main_Page (included in the release)
|
||||
- GNU FreeFont from: http://www.gnu.org/software/freefont/
|
||||
- Linux Libertine from: http://www.linuxlibertine.org (use the .ttf files - not the .otf)
|
||||
- Liberation Fonts from: https://fedorahosted.org/liberation-fonts/ or directly https://fedorahosted.org/releases/l/i/liberation-fonts/
|
||||
|
||||
Thai fonts
|
||||
----------
|
||||
- Collection of Thai fonts from: ftp://linux.thai.net/pub/thailinux/software/thai-ttf/
|
||||
|
||||
|
||||
OCR-B
|
||||
-----
|
||||
OCRB (ocrb10) font: http://ansuz.sooke.bc.ca/software/ocrb.php
|
||||
Useful for barcodes (included in the release)
|
||||
|
||||
Pan-Unicode fonts (fonts containing most characters defined in Unicode)
|
||||
-----------------------------------------------------------------------
|
||||
- BitStream Cyberbit from: http://aol-4.vo.llnwd.net/pub/communicator/extras/fonts/windows/
|
||||
Cyberbit.ZIP (or just Google it)
|
||||
(NB if run with $debug_fonts gives warning of invalid table checksum - just turn it off!)
|
||||
- Code2000 (NB shareware) from: http://www.code2000.net/code2000_page.htm
|
||||
- Quivira from: http://www.quivira-font.com/ (combining diacritics are not placed correctly, but has a very full set of glyphs)
|
||||
|
||||
|
||||
CJK (Chinese-Japanese-Korean)
|
||||
-----------------------------
|
||||
HanNomA and B from: http://vietunicode.sourceforge.net/fonts/fonts_hannom.html
|
||||
unBatang_0613 from: http://people.ktug.or.kr/~nomos/mine/UnBatang_0613.ttf
|
||||
Sun-ExtA and Sun-ExtB from: http://www.alanwood.net/unicode/fonts-east-asian.html
|
||||
(http://www.alanwood.net/downloads/index.html)
|
||||
Fonts which contain both Unicode BMP and SIP (Supplementary Ideographic Plane)
|
||||
characters in one file e.g. "AR PL UMing" and "AR PL UKai"
|
||||
from: http://www.freedesktop.org
|
||||
http://www.freedesktop.org/wiki/Software/CJKUnifonts/Download
|
||||
[MS Windows fonts such as MS Mincho and MingLiU also work]
|
||||
Japanese IPA fonts: http://ossipedia.ipa.go.jp/ipafont/index.html
|
||||
|
||||
Arabic/Eastern fonts
|
||||
--------------------
|
||||
- XW Zar fonts can be downloaded from: http://www.redlers.com/downloadfont.html
|
||||
(2 of these fonts are included in the release)
|
||||
(original site in Farsi: http://wiki.irmug.org/index.php/XWZar)
|
||||
- See below for more details and font names of the fonts used in mPDF 4.x
|
||||
|
||||
|
||||
Other sources
|
||||
-------------
|
||||
http://www.unifont.org/fontguide/
|
||||
http://www.alanwood.net/unicode/fonts.html
|
||||
http://cooltext.com (e.g. http://cooltext.com/Fonts-Unicode+Arabic)
|
||||
ApparatusSIL, DoulosSIL, Padauk from SIL: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&cat_id=FontDownloads
|
||||
DaiBanna (Tai Le)
|
||||
|
||||
Mediaeval & Ancient Scripts
|
||||
---------------------------
|
||||
Junicode: http://junicode.sourceforge.net/
|
||||
Cardo: http://scholarsfonts.net/cardofnt.html
|
||||
|
||||
Syriac fonts
|
||||
------------
|
||||
http://www.bethmardutho.org/meltho/
|
||||
|
||||
|
||||
|
||||
|
||||
============
|
||||
ARABIC FONTS
|
||||
============
|
||||
You can use any appropriate Unicode-encoded .ttf or .ttc font file for arabic text, but
|
||||
the font file must include the Arabic Presentation Forms-B (U+FE70–U+FEFF).
|
||||
2 of the XW Zar fonts are included in the release.
|
||||
|
||||
|
||||
|
||||
===========
|
||||
INDIC FONTS
|
||||
===========
|
||||
Indic scripts e.g. Hindi, Bengali etc. use conjuct forms which have no Unicode assignment. You
|
||||
cannot therefore use any standard .ttf font files with mPDF.
|
||||
|
||||
A set of fonts has been adapted to use specifically with mPDF. They are based on a set of fonts from:
|
||||
|
||||
http://www.cdacmumbai.in/projects/indix/e_introduction.shtml
|
||||
|
||||
NB These fonts are released under GNU GPL Version 2 license
|
||||
|
||||
You need these adapted fonts (ind_bn_1_001.ttf etc.) to work with mPDF, as the glyphs have been
|
||||
assigned to Unicode values in the Private Use area (U+E000 ->). These are included in the
|
||||
mPDF download.
|
||||
|
||||
|
||||
|
||||
Users of mPDF v4.x
|
||||
------------------
|
||||
The original indic font files do not contain a full set of even basic ASCII
|
||||
characters. The fonts supplied have been "fixed" to include those extra
|
||||
characters. This now works whether the font is subset or not.
|
||||
|
||||
|
||||
|
||||
=========
|
||||
CJK Fonts
|
||||
=========
|
||||
|
||||
|
||||
Supplemental Ideographic Plane
|
||||
==============================
|
||||
SIP = Supplemental Ideographic Plane ( = Plane 2) = U+20000 - U+2FFFF (131072 - 196607)
|
||||
These characters are required for the HKSCS Hong Kong Supplementary Character Set. Fonts with
|
||||
SIP characters are commonly divided into a second file e.g. MingLiU and MingLiU-ExtB
|
||||
|
||||
mPDF requires 2 fonts and they should be cross-referenced in config_fonts.php e.g.
|
||||
"sun-exta" => array(
|
||||
'R' => "Sun-ExtA.ttf",
|
||||
'sip-ext' => 'sun-extb',
|
||||
),
|
||||
"sun-extb" => array(
|
||||
'R' => "Sun-ExtB.ttf",
|
||||
),
|
||||
|
||||
--OR--
|
||||
(NB these ones also define the font number within the TTC Collection as TTCfontID)
|
||||
'mingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
'sip-ext' => 'mingliu-extb',
|
||||
),
|
||||
'mingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
'mingliu_hkscs' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
'sip-ext' => 'mingliu_hkscs-extb',
|
||||
),
|
||||
'mingliu_hkscs-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
340
mpdf/LICENSE.txt
Executable file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
148
mpdf/README.txt
Executable file
@ -0,0 +1,148 @@
|
||||
Installation
|
||||
============
|
||||
* Download the .zip file and unzip it
|
||||
* Create a folder e.g. /mpdf on your server
|
||||
* Upload all of the files to the server, maintaining the folders as they are
|
||||
* Ensure that you have write permissions set (CHMOD 6xx or 7xx) for the following folders:
|
||||
/ttfontdata/ - used to cache font data; improves performance a lot
|
||||
/tmp/ - used for some images and ProgressBar
|
||||
/graph_cache/ - if you are using JpGraph in conjunction with mPDF
|
||||
|
||||
To test the installation, point your browser to the basic example file : [path_to_mpdf_folder]/mpdf/examples/example_basic.php
|
||||
|
||||
If you wish to define a different folder for temporary files rather than /tmp/ see the note on 'Folder for temporary files' in
|
||||
the section on Installation & Setup in the manual (http://mpdf1.com/manual/).
|
||||
|
||||
If you have problems, please read the section on troubleshooting in the manual.
|
||||
|
||||
|
||||
Fonts
|
||||
=====
|
||||
I will refer to font names in 2 ways:
|
||||
"CSS font-family name" - mPDF is designed primarily to read HTML and CSS. This is the name used in CSS e.g.
|
||||
<p style="font-family: 'Trebuchet MS';">
|
||||
|
||||
"mPDF font-family name" - the name used internally to process fonts. This could be anything you like,
|
||||
but by default mPDF will convert CSS font-family names by removing any spaces and changing
|
||||
to lowercase. Reading the name above, mPDF will look for a "mPDF font-family name" of
|
||||
'trebuchetms'.
|
||||
|
||||
The configurable values referred to below are set in the config_fonts.php file
|
||||
|
||||
When parsing HTML/CSS, mPDF will read the CSS font-family name (e.g. 'Trebuchet MS') and convert
|
||||
by removing any spaces and changing to lowercase, to look for a mPDF font-family name (trebuchetms).
|
||||
|
||||
Next it will look for a translation (if set) e.g.:
|
||||
$this->fonttrans = array(
|
||||
'trebuchetms' => 'trebuchet'
|
||||
)
|
||||
|
||||
Now the mPDF font-family name to be used is 'trebuchet'
|
||||
|
||||
If you wish to make this font available, you need to specify the Truetype .ttf font files for each variant.
|
||||
These should be defined in the array:
|
||||
$this->fontdata = array(
|
||||
"trebuchet" => array(
|
||||
'R' => "trebuc.ttf",
|
||||
'B' => "trebucbd.ttf",
|
||||
'I' => "trebucit.ttf",
|
||||
'BI' => "trebucbi.ttf",
|
||||
)
|
||||
)
|
||||
|
||||
This is the array which determines whether a font is available to mPDF. Each font-family must have a
|
||||
Regular ['R'] file defined - the others (bold, italic, bold-italic) are optional.
|
||||
|
||||
mPDF will try to load the font-file. If you have defined _MPDF_SYSTEM_TTFONTS at the top of the
|
||||
config_fonts.php file, it will first look for the font-file there. This is useful if you are running
|
||||
mPDF on a computer which already has a folder with TTF fonts in (e.g. on Windows)
|
||||
|
||||
If the font-file is not there, or _MPDF_SYSTEM_TTFONTS is not defined, mPDF will look in the folder
|
||||
/[your_path_to_mpdf]/ttfonts/
|
||||
|
||||
Note that the font-file names are case-sensitive and can contain capitals.
|
||||
|
||||
If the folder /ttfontdata/ is writeable (CHMOD 644 or 755), mPDF will save files there which it can
|
||||
re-use next time it accesses a particular font. This will significantly improve processing time
|
||||
and is strongly recommended.
|
||||
|
||||
mPDF should be able to read most TrueType Unicode font files with a .ttf extension
|
||||
Truetype fonts with .ttf extension that are OpenType also work OK.
|
||||
TrueType collections (.ttc) will also work if they contain TrueType Unicode fonts.
|
||||
|
||||
|
||||
Character substitution
|
||||
----------------------
|
||||
Most people will have access to a Pan-Unicode font with most Unicode characters in it such as
|
||||
Arial Unicode MS. Set $this->backupSubsFont = array('arialunicodems'); at the top of the config_fonts.php file
|
||||
to use this font when substituting any characters not found in the specific font being used.
|
||||
|
||||
Example:
|
||||
You can set $mpdf->useSubstitutions = true; at runtime
|
||||
or $this->useSubstitutions = true; in the config.php file
|
||||
|
||||
<p style="font-family: 'Comic Sans MS'">This text contains a Thai character ม which does not exist
|
||||
in the Comic Sans MS font file</p>
|
||||
|
||||
When useSubstitutions is true, mPDF will try to find substitutions for any missing characters:
|
||||
1) firstly looks if the character is available in the inbuilt Symbols or ZapfDingbats fonts;
|
||||
2) [If defined] looks in each of the the font(s) set by $this->backupSubsFont array
|
||||
|
||||
NB There is an increase in processing time when using substitutions, and even more so if
|
||||
a backupSubsFont is defined.
|
||||
|
||||
Controlling mPDF mode
|
||||
=====================
|
||||
The first parameter of new mPDF('') works as follows:
|
||||
new mPDF('c') - forces mPDF to only use the built-in [c]ore Adobe fonts (Helvetica, Times etc)
|
||||
|
||||
new mPDF('') - default - font subsetting behaviour is determined by the configurable variables
|
||||
$this->maxTTFFilesize and $this->percentSubset (see below)
|
||||
Default values are set so that: 1) very large font files are always subset
|
||||
2) Fonts are embedded as subsets if < 30% of the characters are used
|
||||
|
||||
new mPDF('..-x') - used together with a language or language/country code, this will cause
|
||||
mPDF to use only in-built core fonts (Helvetica, Times) if the language specified is appropiate;
|
||||
otherwise it will force subsetting (equivalent to using "")
|
||||
e.g. new mPDF('de-x') or new mPDF('pt-BR-x') will use in-built core fonts
|
||||
and new mPDF('ru-x') will use subsets of any available TrueType fonts
|
||||
The languages that use core fonts are defined in config_cp.php (using the value $coreSuitable).
|
||||
|
||||
new mPDF('..+aCJK') new mPDF('+aCJK')
|
||||
new mPDF('..-aCJK') new mPDF('-aCJK')
|
||||
- used optionally together with a language or language/country code, +aCJK will force mPDF
|
||||
to use the Adobe non-embedded CJK fonts when a passage is marked with e.g. "lang: ja"
|
||||
This can be used at runtime to override the value set for $mpdf->useAdobeCJK in config.php
|
||||
Use in conjunction with settings in config_cp.php
|
||||
|
||||
For backwards compatibility, new mPDF('-s') and new mPDF('s') will force subsetting by
|
||||
setting $this->percentSubset=100 (see below)
|
||||
new mPDF('utf-8-s') and new mPDF('ar-s') are also recognised
|
||||
|
||||
Language/Country (ll-cc)
|
||||
------------------------
|
||||
You can use a language code ('en') or language/country code ('en-GB') to control which
|
||||
mode/fonts are used. The behaviour is set up in config_cp.php file.
|
||||
The default settings show some of the things you can do:
|
||||
new mPDF('de') - as German is a Western European langauge, it is suitable to use the Adobe core fonts.
|
||||
Using 'de' alone will do nothing, but if you use ('de-x'), this will use core fonts.
|
||||
new mPDF('th') - many fonts do not contain the characters necessary for Thai script. The value $unifonts
|
||||
defines a restricted list of fonts available for mPDF to use.
|
||||
|
||||
NB <html dir="rtl"> or <body dir="rtl"> are supported.
|
||||
|
||||
|
||||
|
||||
Configuration variables changed
|
||||
===============================
|
||||
Configuration variables are documented in the on-line manual (http://mpdf1.com/manual/).
|
||||
|
||||
|
||||
Font folders
|
||||
============
|
||||
If you wish to define your own font file folders (perhaps to share),
|
||||
you can define the 2 constants in your script before including the mpdf.php script e.g.:
|
||||
|
||||
define('_MPDF_TTFONTPATH','your_path/ttfonts/');
|
||||
define('_MPDF_TTFONTDATAPATH','your_path/ttfontdata/'); // should be writeable
|
||||
|
1965
mpdf/classes/barcode.php
Executable file
248
mpdf/classes/bmp.php
Executable file
@ -0,0 +1,248 @@
|
||||
<?php
|
||||
|
||||
class bmp {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function bmp(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function _getBMPimage($data, $file) {
|
||||
$info = array();
|
||||
// Adapted from script by Valentin Schmidt
|
||||
// http://staff.dasdeck.de/valentin/fpdf/fpdf_bmp/
|
||||
$bfOffBits=$this->_fourbytes2int_le(substr($data,10,4));
|
||||
$width=$this->_fourbytes2int_le(substr($data,18,4));
|
||||
$height=$this->_fourbytes2int_le(substr($data,22,4));
|
||||
$flip = ($height<0);
|
||||
if ($flip) $height =-$height;
|
||||
$biBitCount=$this->_twobytes2int_le(substr($data,28,2));
|
||||
$biCompression=$this->_fourbytes2int_le(substr($data,30,4));
|
||||
$info = array('w'=>$width, 'h'=>$height);
|
||||
if ($biBitCount<16){
|
||||
$info['cs'] = 'Indexed';
|
||||
$info['bpc'] = $biBitCount;
|
||||
$palStr = substr($data,54,($bfOffBits-54));
|
||||
$pal = '';
|
||||
$cnt = strlen($palStr)/4;
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$n = 4*$i;
|
||||
$pal .= $palStr[$n+2].$palStr[$n+1].$palStr[$n];
|
||||
}
|
||||
$info['pal'] = $pal;
|
||||
}
|
||||
else{
|
||||
$info['cs'] = 'DeviceRGB';
|
||||
$info['bpc'] = 8;
|
||||
}
|
||||
|
||||
if ($this->mpdf->restrictColorSpace==1 || $this->mpdf->PDFX || $this->mpdf->restrictColorSpace==3) {
|
||||
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) { $this->mpdf->PDFAXwarnings[] = "Image cannot be converted to suitable colour space for PDFA or PDFX file - ".$file." - (Image replaced by 'no-image'.)"; }
|
||||
return array('error' => "BMP Image cannot be converted to suitable colour space - ".$file." - (Image replaced by 'no-image'.)");
|
||||
}
|
||||
|
||||
$biXPelsPerMeter=$this->_fourbytes2int_le(substr($data,38,4)); // horizontal pixels per meter, usually set to zero
|
||||
//$biYPelsPerMeter=$this->_fourbytes2int_le(substr($data,42,4)); // vertical pixels per meter, usually set to zero
|
||||
$biXPelsPerMeter=round($biXPelsPerMeter/1000 *25.4);
|
||||
//$biYPelsPerMeter=round($biYPelsPerMeter/1000 *25.4);
|
||||
$info['set-dpi'] = $biXPelsPerMeter;
|
||||
|
||||
switch ($biCompression){
|
||||
case 0:
|
||||
$str = substr($data,$bfOffBits);
|
||||
break;
|
||||
case 1: # BI_RLE8
|
||||
$str = $this->rle8_decode(substr($data,$bfOffBits), $width);
|
||||
break;
|
||||
case 2: # BI_RLE4
|
||||
$str = $this->rle4_decode(substr($data,$bfOffBits), $width);
|
||||
break;
|
||||
}
|
||||
$bmpdata = '';
|
||||
$padCnt = (4-ceil(($width/(8/$biBitCount)))%4)%4;
|
||||
switch ($biBitCount){
|
||||
case 1:
|
||||
case 4:
|
||||
case 8:
|
||||
$w = floor($width/(8/$biBitCount)) + ($width%(8/$biBitCount)?1:0);
|
||||
$w_row = $w + $padCnt;
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$w;$x++)
|
||||
$bmpdata .= $str[$y0+$x];
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$w;$x++)
|
||||
$bmpdata .= $str[$y0+$x];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 16:
|
||||
$w_row = $width*2 + $padCnt;
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x]));
|
||||
$b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7128;
|
||||
$bmpdata .= chr($r) . chr($g) . chr($b);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$n = (ord( $str[$y0 + 2*$x + 1])*256 + ord( $str[$y0 + 2*$x]));
|
||||
$b = ($n & 31)<<3; $g = ($n & 992)>>2; $r = ($n & 31744)>>7;
|
||||
$bmpdata .= chr($r) . chr($g) . chr($b);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 24:
|
||||
case 32:
|
||||
$byteCnt = $biBitCount/8;
|
||||
$w_row = $width*$byteCnt + $padCnt;
|
||||
|
||||
if ($flip){
|
||||
for ($y=0;$y<$height;$y++){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$i = $y0 + $x*$byteCnt ; # + 1
|
||||
$bmpdata .= $str[$i+2].$str[$i+1].$str[$i];
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for ($y=$height-1;$y>=0;$y--){
|
||||
$y0 = $y*$w_row;
|
||||
for ($x=0;$x<$width;$x++){
|
||||
$i = $y0 + $x*$byteCnt ; # + 1
|
||||
$bmpdata .= $str[$i+2].$str[$i+1].$str[$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return array('error' => 'Error parsing BMP image - Unsupported image biBitCount');
|
||||
}
|
||||
if ($this->mpdf->compress) {
|
||||
$bmpdata=gzcompress($bmpdata);
|
||||
$info['f']='FlateDecode';
|
||||
}
|
||||
$info['data']=$bmpdata;
|
||||
$info['type']='bmp';
|
||||
return $info;
|
||||
}
|
||||
|
||||
function _fourbytes2int_le($s) {
|
||||
//Read a 4-byte integer from string
|
||||
return (ord($s[3])<<24) + (ord($s[2])<<16) + (ord($s[1])<<8) + ord($s[0]);
|
||||
}
|
||||
|
||||
function _twobytes2int_le($s) {
|
||||
//Read a 2-byte integer from string
|
||||
return (ord(substr($s, 1, 1))<<8) + ord(substr($s, 0, 1));
|
||||
}
|
||||
|
||||
|
||||
# Decoder for RLE8 compression in windows bitmaps
|
||||
# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
|
||||
function rle8_decode ($str, $width){
|
||||
$lineWidth = $width + (3 - ($width-1) % 4);
|
||||
$out = '';
|
||||
$cnt = strlen($str);
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$o = ord($str[$i]);
|
||||
switch ($o){
|
||||
case 0: # ESCAPE
|
||||
$i++;
|
||||
switch (ord($str[$i])){
|
||||
case 0: # NEW LINE
|
||||
$padCnt = $lineWidth - strlen($out)%$lineWidth;
|
||||
if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line
|
||||
break;
|
||||
case 1: # END OF FILE
|
||||
$padCnt = $lineWidth - strlen($out)%$lineWidth;
|
||||
if ($padCnt<$lineWidth) $out .= str_repeat(chr(0), $padCnt); # pad line
|
||||
break 3;
|
||||
case 2: # DELTA
|
||||
$i += 2;
|
||||
break;
|
||||
default: # ABSOLUTE MODE
|
||||
$num = ord($str[$i]);
|
||||
for ($j=0;$j<$num;$j++)
|
||||
$out .= $str[++$i];
|
||||
if ($num % 2) $i++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$out .= str_repeat($str[++$i], $o);
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
# Decoder for RLE4 compression in windows bitmaps
|
||||
# see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
|
||||
function rle4_decode ($str, $width){
|
||||
$w = floor($width/2) + ($width % 2);
|
||||
$lineWidth = $w + (3 - ( ($width-1) / 2) % 4);
|
||||
$pixels = array();
|
||||
$cnt = strlen($str);
|
||||
for ($i=0;$i<$cnt;$i++){
|
||||
$o = ord($str[$i]);
|
||||
switch ($o){
|
||||
case 0: # ESCAPE
|
||||
$i++;
|
||||
switch (ord($str[$i])){
|
||||
case 0: # NEW LINE
|
||||
while (count($pixels)%$lineWidth!=0)
|
||||
$pixels[]=0;
|
||||
break;
|
||||
case 1: # END OF FILE
|
||||
while (count($pixels)%$lineWidth!=0)
|
||||
$pixels[]=0;
|
||||
break 3;
|
||||
case 2: # DELTA
|
||||
$i += 2;
|
||||
break;
|
||||
default: # ABSOLUTE MODE
|
||||
$num = ord($str[$i]);
|
||||
for ($j=0;$j<$num;$j++){
|
||||
if ($j%2==0){
|
||||
$c = ord($str[++$i]);
|
||||
$pixels[] = ($c & 240)>>4;
|
||||
} else
|
||||
$pixels[] = $c & 15;
|
||||
}
|
||||
if ($num % 2) $i++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$c = ord($str[++$i]);
|
||||
for ($j=0;$j<$o;$j++)
|
||||
$pixels[] = ($j%2==0 ? ($c & 240)>>4 : $c & 15);
|
||||
}
|
||||
}
|
||||
|
||||
$out = '';
|
||||
if (count($pixels)%2) $pixels[]=0;
|
||||
$cnt = count($pixels)/2;
|
||||
for ($i=0;$i<$cnt;$i++)
|
||||
$out .= chr(16*$pixels[2*$i] + $pixels[2*$i+1]);
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
371
mpdf/classes/directw.php
Executable file
@ -0,0 +1,371 @@
|
||||
<?php
|
||||
|
||||
class directw {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function directw(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function Write($h,$txt,$currentx=0,$link='',$directionality='ltr',$align='') {
|
||||
if (!$align) {
|
||||
if ($directionality=='rtl') { $align = 'R'; }
|
||||
else { $align = 'L'; }
|
||||
}
|
||||
if ($h == 0) { $this->mpdf->SetLineHeight(); $h = $this->mpdf->lineheight; }
|
||||
//Output text in flowing mode
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
$s=str_replace("\r",'',$txt);
|
||||
if ($this->mpdf->usingCoreFont) { $nb=strlen($s); }
|
||||
else {
|
||||
$nb=mb_strlen($s, $this->mpdf->mb_enc );
|
||||
// handle single space character
|
||||
if(($nb==1) && $s == " ") {
|
||||
$this->mpdf->x += $this->mpdf->GetStringWidth($s);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$sep=-1;
|
||||
$i=0;
|
||||
$j=0;
|
||||
$l=0;
|
||||
$nl=1;
|
||||
if (!$this->mpdf->usingCoreFont) {
|
||||
if (preg_match("/([".$this->mpdf->pregRTLchars."])/u", $txt)) { $this->mpdf->biDirectional = true; } // *RTL*
|
||||
$checkCursive=false;
|
||||
if ($this->mpdf->biDirectional) { $checkCursive=true; } // *RTL*
|
||||
else if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) { $checkCursive=true; } // *INDIC*
|
||||
while($i<$nb) {
|
||||
//Get next character
|
||||
$c = mb_substr($s,$i,1,$this->mpdf->mb_enc );
|
||||
if($c == "\n") {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
//Explicit line break
|
||||
$tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i++;
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl == 1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
}
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($c == " ") { $sep= $i; }
|
||||
$l += $this->mpdf->GetCharWidthNonCore($c); // mPDF 5.3.04
|
||||
if($l > $wmax) {
|
||||
//Automatic line break (word wrapping)
|
||||
if($sep == -1) {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
if($this->mpdf->x > $this->mpdf->lMargin) {
|
||||
//Move to next line
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$this->mpdf->y+=$h;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
$i++;
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($i==$j) { $i++; }
|
||||
$tmp = rtrim(mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
}
|
||||
else {
|
||||
$tmp = rtrim(mb_substr($s,$j,$sep-$j,$this->mpdf->mb_enc));
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
|
||||
if($align=='J') {
|
||||
//////////////////////////////////////////
|
||||
// JUSTIFY J using Unicode fonts (Word spacing doesn't work)
|
||||
// WORD SPACING
|
||||
// Change NON_BREAKING SPACE to spaces so they are 'spaced' properly
|
||||
$tmp = str_replace(chr(194).chr(160),chr(32),$tmp );
|
||||
$len_ligne = $this->mpdf->GetStringWidth($tmp );
|
||||
$nb_carac = mb_strlen( $tmp , $this->mpdf->mb_enc ) ;
|
||||
$nb_spaces = mb_substr_count( $tmp ,' ', $this->mpdf->mb_enc ) ;
|
||||
$inclCursive=false;
|
||||
if ($checkCursive) {
|
||||
if (preg_match("/([".$this->mpdf->pregRTLchars."])/u", $tmp)) { $inclCursive = true; } // *RTL*
|
||||
if (preg_match("/([".$this->mpdf->pregHIchars.$this->mpdf->pregBNchars.$this->mpdf->pregPAchars."])/u", $tmp)) { $inclCursive = true; } // *INDIC*
|
||||
}
|
||||
list($charspacing,$ws) = $this->mpdf->GetJspacing($nb_carac,$nb_spaces,((($w-2) - $len_ligne) * _MPDFK),$inclCursive);
|
||||
$this->mpdf->SetSpacing($charspacing,$ws);
|
||||
//////////////////////////////////////////
|
||||
}
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i=$sep+1;
|
||||
}
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl==1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax = ($w - ($this->mpdf->cMarginL+$this->mpdf->cMarginR));
|
||||
}
|
||||
$nl++;
|
||||
}
|
||||
else { $i++; }
|
||||
}
|
||||
//Last chunk
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
}
|
||||
else {
|
||||
while($i<$nb) {
|
||||
//Get next character
|
||||
$c=$s[$i];
|
||||
if($c == "\n") {
|
||||
//Explicit line break
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
$this->mpdf->Cell($w, $h, substr($s, $j, $i-$j), 0, 2, $align, $fill, $link);
|
||||
$i++;
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl == 1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w = $this->mpdf->w - $this->mpdf->rMargin - $this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
}
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($c == " ") { $sep= $i; }
|
||||
$l += $this->mpdf->GetCharWidthCore($c); // mPDF 5.3.04
|
||||
if($l > $wmax) {
|
||||
//Automatic line break (word wrapping)
|
||||
if($sep == -1) {
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
if($this->mpdf->x > $this->mpdf->lMargin) {
|
||||
//Move to next line
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$this->mpdf->y+=$h;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
$i++;
|
||||
$nl++;
|
||||
continue;
|
||||
}
|
||||
if($i==$j) { $i++; }
|
||||
$this->mpdf->Cell($w, $h, substr($s, $j, $i-$j), 0, 2, $align, $fill, $link);
|
||||
}
|
||||
else {
|
||||
$tmp = substr($s, $j, $sep-$j);
|
||||
if($align=='J') {
|
||||
//////////////////////////////////////////
|
||||
// JUSTIFY J using Unicode fonts (Word spacing doesn't work)
|
||||
// WORD SPACING
|
||||
// Change NON_BREAKING SPACE to spaces so they are 'spaced' properly
|
||||
$tmp = str_replace(chr(160),chr(32),$tmp );
|
||||
$len_ligne = $this->mpdf->GetStringWidth($tmp );
|
||||
$nb_carac = strlen( $tmp ) ;
|
||||
$nb_spaces = substr_count( $tmp ,' ' ) ;
|
||||
list($charspacing,$ws) = $this->mpdf->GetJspacing($nb_carac,$nb_spaces,((($w-2) - $len_ligne) * _MPDFK),$false);
|
||||
$this->mpdf->SetSpacing($charspacing,$ws);
|
||||
//////////////////////////////////////////
|
||||
}
|
||||
$this->mpdf->Cell($w, $h, $tmp, 0, 2, $align, $fill, $link);
|
||||
$i=$sep+1;
|
||||
}
|
||||
$sep = -1;
|
||||
$j = $i;
|
||||
$l = 0;
|
||||
if($nl==1) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
$w=$this->mpdf->w-$this->mpdf->rMargin-$this->mpdf->x;
|
||||
$wmax=$w-($this->mpdf->cMarginL+$this->mpdf->cMarginR);
|
||||
}
|
||||
$nl++;
|
||||
}
|
||||
else {
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
// WORD SPACING
|
||||
$this->mpdf->ResetSpacing();
|
||||
}
|
||||
//Last chunk
|
||||
if($i!=$j) {
|
||||
if ($currentx != 0) $this->mpdf->x=$currentx;
|
||||
else $this->mpdf->x=$this->mpdf->lMargin;
|
||||
if ($this->mpdf->usingCoreFont) { $tmp = substr($s,$j,$i-$j); }
|
||||
else {
|
||||
$tmp = mb_substr($s,$j,$i-$j,$this->mpdf->mb_enc);
|
||||
if ($directionality == 'rtl' && $align == 'J') { $align = 'R'; } // *RTL*
|
||||
$this->mpdf->magic_reverse_dir($tmp, true, $directionality); // *RTL*
|
||||
}
|
||||
$this->mpdf->Cell($w,$h,$tmp,0,0,$align,$fill,$link);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function CircularText($x, $y, $r, $text, $align='top', $fontfamily='', $fontsizePt=0, $fontstyle='', $kerning=120, $fontwidth=100) {
|
||||
if ($font || $fontstyle || $fontsizePt) $this->mpdf->SetFont($fontfamily,$fontstyle,$fontsizePt);
|
||||
$kerning/=100;
|
||||
$fontwidth/=100;
|
||||
if($kerning==0) $this->mpdf->Error('Please use values unequal to zero for kerning (CircularText)');
|
||||
if($fontwidth==0) $this->mpdf->Error('Please use values unequal to zero for font width (CircularText)');
|
||||
$t=0;
|
||||
$text=str_replace("\r",'',$text);
|
||||
if ($this->mpdf->usingCoreFont) {
|
||||
$nb=strlen($text);
|
||||
for($i=0; $i<$nb; $i++){
|
||||
$w[$i]=$this->mpdf->GetStringWidth($text[$i]);
|
||||
$w[$i]*=$kerning*$fontwidth;
|
||||
$t+=$w[$i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$nb=mb_strlen($text, $this->mpdf->mb_enc );
|
||||
$lastchar = '';
|
||||
$unicode = $this->mpdf->UTF8StringToArray($text);
|
||||
for($i=0; $i<$nb; $i++){
|
||||
$c = mb_substr($text,$i,1,$this->mpdf->mb_enc );
|
||||
$w[$i]=$this->mpdf->GetStringWidth($c);
|
||||
$w[$i]*=$kerning*$fontwidth;
|
||||
$char = $unicode[$i];
|
||||
if ($this->mpdf->useKerning && $lastchar) {
|
||||
if (isset($this->mpdf->CurrentFont['kerninfo'][$lastchar][$char])) {
|
||||
$tk = $this->mpdf->CurrentFont['kerninfo'][$lastchar][$char] * ($this->mpdf->FontSize/ 1000) * $kerning * $fontwidth;
|
||||
$w[$i] += $tk/2;
|
||||
$w[$i-1] += $tk/2;
|
||||
$t+=$tk;
|
||||
}
|
||||
}
|
||||
$lastchar = $char;
|
||||
$t+=$w[$i];
|
||||
}
|
||||
}
|
||||
//circumference
|
||||
$u=($r*2)*M_PI;
|
||||
//total width of string in degrees
|
||||
$d=($t/$u)*360;
|
||||
|
||||
$this->mpdf->StartTransform();
|
||||
// rotate matrix for the first letter to center the text
|
||||
// (half of total degrees)
|
||||
if($align=='top'){
|
||||
$this->mpdf->transformRotate(-$d/2, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate($d/2, $x, $y);
|
||||
}
|
||||
//run through the string
|
||||
for($i=0; $i<$nb; $i++){
|
||||
if($align=='top'){
|
||||
//rotate matrix half of the width of current letter + half of the width of preceding letter
|
||||
if($i==0){
|
||||
$this->mpdf->transformRotate((($w[$i]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate((($w[$i]/2+$w[$i-1]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformScale($fontwidth*100, 100, $x, $y);
|
||||
}
|
||||
$this->mpdf->SetXY($x-$w[$i]/2, $y-$r);
|
||||
}
|
||||
else{
|
||||
//rotate matrix half of the width of current letter + half of the width of preceding letter
|
||||
if($i==0){
|
||||
$this->mpdf->transformRotate(-(($w[$i]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
else{
|
||||
$this->mpdf->transformRotate(-(($w[$i]/2+$w[$i-1]/2)/$u)*360, $x, $y);
|
||||
}
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformScale($fontwidth*100, 100, $x, $y);
|
||||
}
|
||||
$this->mpdf->SetXY($x-$w[$i]/2, $y+$r-($this->mpdf->FontSize));
|
||||
}
|
||||
if ($this->mpdf->usingCoreFont) { $c=$text[$i]; }
|
||||
else { $c = mb_substr($text,$i,1,$this->mpdf->mb_enc ); }
|
||||
$this->mpdf->Cell(($w[$i]),$this->mpdf->FontSize,$c,0,0,'C'); // mPDF 5.3.53
|
||||
if($fontwidth!=1){
|
||||
$this->mpdf->StopTransform();
|
||||
}
|
||||
}
|
||||
$this->mpdf->StopTransform();
|
||||
}
|
||||
|
||||
function Shaded_box( $text,$font='',$fontstyle='B',$szfont='',$width='70%',$style='DF',$radius=2.5,$fill='#FFFFFF',$color='#000000',$pad=2 )
|
||||
{
|
||||
// F (shading - no line),S (line, no shading),DF (both)
|
||||
if (!$font) { $font= $this->mpdf->default_font; }
|
||||
if (!$szfont) { $szfont = ($this->mpdf->default_font_size * 1.8); }
|
||||
|
||||
$text = $this->mpdf->purify_utf8_text($text);
|
||||
if ($this->mpdf->text_input_as_HTML) {
|
||||
$text = $this->mpdf->all_entities_to_utf8($text);
|
||||
}
|
||||
if ($this->mpdf->usingCoreFont) { $text = mb_convert_encoding($text,$this->mpdf->mb_enc,'UTF-8'); }
|
||||
// DIRECTIONALITY
|
||||
$this->mpdf->magic_reverse_dir($text, true, $this->mpdf->directionality); // *RTL*
|
||||
// Font-specific ligature substitution for Indic fonts
|
||||
if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) $this->mpdf->ConvertIndic($text); // *INDIC*
|
||||
$text = ' '.$text.' ';
|
||||
if (!$width) { $width = $this->mpdf->pgwidth; } else { $width=$this->mpdf->ConvertSize($width,$this->mpdf->pgwidth); }
|
||||
$midpt = $this->mpdf->lMargin+($this->mpdf->pgwidth/2);
|
||||
$r1 = $midpt-($width/2); //($this->mpdf->w / 2) - 40;
|
||||
$r2 = $r1 + $width; //$r1 + 80;
|
||||
$y1 = $this->mpdf->y;
|
||||
|
||||
|
||||
$mid = ($r1 + $r2 ) / 2;
|
||||
$loop = 0;
|
||||
|
||||
while ( $loop == 0 )
|
||||
{
|
||||
$this->mpdf->SetFont( $font, $fontstyle, $szfont );
|
||||
$sz = $this->mpdf->GetStringWidth( $text );
|
||||
if ( ($r1+$sz) > $r2 )
|
||||
$szfont --;
|
||||
else
|
||||
$loop ++;
|
||||
}
|
||||
|
||||
$y2 = $this->mpdf->FontSize+($pad*2);
|
||||
|
||||
$this->mpdf->SetLineWidth(0.1);
|
||||
$fc = $this->mpdf->ConvertColor($fill);
|
||||
$tc = $this->mpdf->ConvertColor($color);
|
||||
$this->mpdf->SetFColor($fc);
|
||||
$this->mpdf->SetTColor($tc);
|
||||
$this->mpdf->RoundedRect($r1, $y1, ($r2 - $r1), $y2, $radius, $style);
|
||||
$this->mpdf->SetX( $r1);
|
||||
$this->mpdf->Cell($r2-$r1, $y2, $text, 0, 1, "C" );
|
||||
$this->mpdf->SetY($y1+$y2+2); // +2 = mm margin below shaded box
|
||||
$this->mpdf->Reset();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
1498
mpdf/classes/form.php
Executable file
700
mpdf/classes/gif.php
Executable file
@ -0,0 +1,700 @@
|
||||
<?php
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 2009-12-22 Adapted for mPDF 4.2
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// GIF Util - (C) 2003 Yamasoft (S/C)
|
||||
// http://www.yamasoft.com
|
||||
// All Rights Reserved
|
||||
// This file can be freely copied, distributed, modified, updated by anyone under the only
|
||||
// condition to leave the original address (Yamasoft, http://www.yamasoft.com) and this header.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 2009-12-22 Adapted INB
|
||||
// Functions calling functionname($x, $len = 0) were not working on PHP5.1.5 as pass by reference
|
||||
// All edited to $len = 0; then call function.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFLZW
|
||||
{
|
||||
var $MAX_LZW_BITS;
|
||||
var $Fresh, $CodeSize, $SetCodeSize, $MaxCode, $MaxCodeSize, $FirstCode, $OldCode;
|
||||
var $ClearCode, $EndCode, $Next, $Vals, $Stack, $sp, $Buf, $CurBit, $LastBit, $Done, $LastByte;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFLZW()
|
||||
{
|
||||
$this->MAX_LZW_BITS = 12;
|
||||
unSet($this->Next);
|
||||
unSet($this->Vals);
|
||||
unSet($this->Stack);
|
||||
unSet($this->Buf);
|
||||
|
||||
$this->Next = range(0, (1 << $this->MAX_LZW_BITS) - 1);
|
||||
$this->Vals = range(0, (1 << $this->MAX_LZW_BITS) - 1);
|
||||
$this->Stack = range(0, (1 << ($this->MAX_LZW_BITS + 1)) - 1);
|
||||
$this->Buf = range(0, 279);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function deCompress($data, &$datLen)
|
||||
{
|
||||
$stLen = strlen($data);
|
||||
$datLen = 0;
|
||||
$ret = "";
|
||||
$dp = 0; // data pointer
|
||||
|
||||
// INITIALIZATION
|
||||
$this->LZWCommandInit($data, $dp);
|
||||
|
||||
while(($iIndex = $this->LZWCommand($data, $dp)) >= 0) {
|
||||
$ret .= chr($iIndex);
|
||||
}
|
||||
|
||||
$datLen = $dp;
|
||||
|
||||
if($iIndex != -2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
function LZWCommandInit(&$data, &$dp)
|
||||
{
|
||||
$this->SetCodeSize = ord($data[0]);
|
||||
$dp += 1;
|
||||
|
||||
$this->CodeSize = $this->SetCodeSize + 1;
|
||||
$this->ClearCode = 1 << $this->SetCodeSize;
|
||||
$this->EndCode = $this->ClearCode + 1;
|
||||
$this->MaxCode = $this->ClearCode + 2;
|
||||
$this->MaxCodeSize = $this->ClearCode << 1;
|
||||
|
||||
$this->GetCodeInit($data, $dp);
|
||||
|
||||
$this->Fresh = 1;
|
||||
for($i = 0; $i < $this->ClearCode; $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = $i;
|
||||
}
|
||||
|
||||
for(; $i < (1 << $this->MAX_LZW_BITS); $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = 0;
|
||||
}
|
||||
|
||||
$this->sp = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function LZWCommand(&$data, &$dp)
|
||||
{
|
||||
if($this->Fresh) {
|
||||
$this->Fresh = 0;
|
||||
do {
|
||||
$this->FirstCode = $this->GetCode($data, $dp);
|
||||
$this->OldCode = $this->FirstCode;
|
||||
}
|
||||
while($this->FirstCode == $this->ClearCode);
|
||||
|
||||
return $this->FirstCode;
|
||||
}
|
||||
|
||||
if($this->sp > 0) {
|
||||
$this->sp--;
|
||||
return $this->Stack[$this->sp];
|
||||
}
|
||||
|
||||
while(($Code = $this->GetCode($data, $dp)) >= 0) {
|
||||
if($Code == $this->ClearCode) {
|
||||
for($i = 0; $i < $this->ClearCode; $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = $i;
|
||||
}
|
||||
|
||||
for(; $i < (1 << $this->MAX_LZW_BITS); $i++) {
|
||||
$this->Next[$i] = 0;
|
||||
$this->Vals[$i] = 0;
|
||||
}
|
||||
|
||||
$this->CodeSize = $this->SetCodeSize + 1;
|
||||
$this->MaxCodeSize = $this->ClearCode << 1;
|
||||
$this->MaxCode = $this->ClearCode + 2;
|
||||
$this->sp = 0;
|
||||
$this->FirstCode = $this->GetCode($data, $dp);
|
||||
$this->OldCode = $this->FirstCode;
|
||||
|
||||
return $this->FirstCode;
|
||||
}
|
||||
|
||||
if($Code == $this->EndCode) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
$InCode = $Code;
|
||||
if($Code >= $this->MaxCode) {
|
||||
$this->Stack[$this->sp++] = $this->FirstCode;
|
||||
$Code = $this->OldCode;
|
||||
}
|
||||
|
||||
while($Code >= $this->ClearCode) {
|
||||
$this->Stack[$this->sp++] = $this->Vals[$Code];
|
||||
|
||||
if($Code == $this->Next[$Code]) // Circular table entry, big GIF Error!
|
||||
return -1;
|
||||
|
||||
$Code = $this->Next[$Code];
|
||||
}
|
||||
|
||||
$this->FirstCode = $this->Vals[$Code];
|
||||
$this->Stack[$this->sp++] = $this->FirstCode;
|
||||
|
||||
if(($Code = $this->MaxCode) < (1 << $this->MAX_LZW_BITS)) {
|
||||
$this->Next[$Code] = $this->OldCode;
|
||||
$this->Vals[$Code] = $this->FirstCode;
|
||||
$this->MaxCode++;
|
||||
|
||||
if(($this->MaxCode >= $this->MaxCodeSize) && ($this->MaxCodeSize < (1 << $this->MAX_LZW_BITS))) {
|
||||
$this->MaxCodeSize *= 2;
|
||||
$this->CodeSize++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->OldCode = $InCode;
|
||||
if($this->sp > 0) {
|
||||
$this->sp--;
|
||||
return $this->Stack[$this->sp];
|
||||
}
|
||||
}
|
||||
|
||||
return $Code;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function GetCodeInit(&$data, &$dp)
|
||||
{
|
||||
$this->CurBit = 0;
|
||||
$this->LastBit = 0;
|
||||
$this->Done = 0;
|
||||
$this->LastByte = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function GetCode(&$data, &$dp)
|
||||
{
|
||||
if(($this->CurBit + $this->CodeSize) >= $this->LastBit) {
|
||||
if($this->Done) {
|
||||
if($this->CurBit >= $this->LastBit) {
|
||||
// Ran off the end of my bits
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
$this->Buf[0] = $this->Buf[$this->LastByte - 2];
|
||||
$this->Buf[1] = $this->Buf[$this->LastByte - 1];
|
||||
|
||||
$Count = ord($data[$dp]);
|
||||
$dp += 1;
|
||||
|
||||
if($Count) {
|
||||
for($i = 0; $i < $Count; $i++) {
|
||||
$this->Buf[2 + $i] = ord($data[$dp+$i]);
|
||||
}
|
||||
$dp += $Count;
|
||||
}
|
||||
else {
|
||||
$this->Done = 1;
|
||||
}
|
||||
|
||||
$this->LastByte = 2 + $Count;
|
||||
$this->CurBit = ($this->CurBit - $this->LastBit) + 16;
|
||||
$this->LastBit = (2 + $Count) << 3;
|
||||
}
|
||||
|
||||
$iRet = 0;
|
||||
for($i = $this->CurBit, $j = 0; $j < $this->CodeSize; $i++, $j++) {
|
||||
$iRet |= (($this->Buf[intval($i / 8)] & (1 << ($i % 8))) != 0) << $j;
|
||||
}
|
||||
|
||||
$this->CurBit += $this->CodeSize;
|
||||
return $iRet;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFCOLORTABLE
|
||||
{
|
||||
var $m_nColors;
|
||||
var $m_arColors;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFCOLORTABLE()
|
||||
{
|
||||
unSet($this->m_nColors);
|
||||
unSet($this->m_arColors);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, $num)
|
||||
{
|
||||
$this->m_nColors = 0;
|
||||
$this->m_arColors = array();
|
||||
|
||||
for($i = 0; $i < $num; $i++) {
|
||||
$rgb = substr($lpData, $i * 3, 3);
|
||||
if(strlen($rgb) < 3) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_arColors[] = (ord($rgb[2]) << 16) + (ord($rgb[1]) << 8) + ord($rgb[0]);
|
||||
$this->m_nColors++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function toString()
|
||||
{
|
||||
$ret = "";
|
||||
|
||||
for($i = 0; $i < $this->m_nColors; $i++) {
|
||||
$ret .=
|
||||
chr(($this->m_arColors[$i] & 0x000000FF)) . // R
|
||||
chr(($this->m_arColors[$i] & 0x0000FF00) >> 8) . // G
|
||||
chr(($this->m_arColors[$i] & 0x00FF0000) >> 16); // B
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function colorIndex($rgb)
|
||||
{
|
||||
$rgb = intval($rgb) & 0xFFFFFF;
|
||||
$r1 = ($rgb & 0x0000FF);
|
||||
$g1 = ($rgb & 0x00FF00) >> 8;
|
||||
$b1 = ($rgb & 0xFF0000) >> 16;
|
||||
$idx = -1;
|
||||
|
||||
for($i = 0; $i < $this->m_nColors; $i++) {
|
||||
$r2 = ($this->m_arColors[$i] & 0x000000FF);
|
||||
$g2 = ($this->m_arColors[$i] & 0x0000FF00) >> 8;
|
||||
$b2 = ($this->m_arColors[$i] & 0x00FF0000) >> 16;
|
||||
$d = abs($r2 - $r1) + abs($g2 - $g1) + abs($b2 - $b1);
|
||||
|
||||
if(($idx == -1) || ($d < $dif)) {
|
||||
$idx = $i;
|
||||
$dif = $d;
|
||||
}
|
||||
}
|
||||
|
||||
return $idx;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFFILEHEADER
|
||||
{
|
||||
var $m_lpVer;
|
||||
var $m_nWidth;
|
||||
var $m_nHeight;
|
||||
var $m_bGlobalClr;
|
||||
var $m_nColorRes;
|
||||
var $m_bSorted;
|
||||
var $m_nTableSize;
|
||||
var $m_nBgColor;
|
||||
var $m_nPixelRatio;
|
||||
var $m_colorTable;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFFILEHEADER()
|
||||
{
|
||||
unSet($this->m_lpVer);
|
||||
unSet($this->m_nWidth);
|
||||
unSet($this->m_nHeight);
|
||||
unSet($this->m_bGlobalClr);
|
||||
unSet($this->m_nColorRes);
|
||||
unSet($this->m_bSorted);
|
||||
unSet($this->m_nTableSize);
|
||||
unSet($this->m_nBgColor);
|
||||
unSet($this->m_nPixelRatio);
|
||||
unSet($this->m_colorTable);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, &$hdrLen)
|
||||
{
|
||||
$hdrLen = 0;
|
||||
|
||||
$this->m_lpVer = substr($lpData, 0, 6);
|
||||
if(($this->m_lpVer <> "GIF87a") && ($this->m_lpVer <> "GIF89a")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_nWidth = $this->w2i(substr($lpData, 6, 2));
|
||||
$this->m_nHeight = $this->w2i(substr($lpData, 8, 2));
|
||||
if(!$this->m_nWidth || !$this->m_nHeight) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$b = ord(substr($lpData, 10, 1));
|
||||
$this->m_bGlobalClr = ($b & 0x80) ? true : false;
|
||||
$this->m_nColorRes = ($b & 0x70) >> 4;
|
||||
$this->m_bSorted = ($b & 0x08) ? true : false;
|
||||
$this->m_nTableSize = 2 << ($b & 0x07);
|
||||
$this->m_nBgColor = ord(substr($lpData, 11, 1));
|
||||
$this->m_nPixelRatio = ord(substr($lpData, 12, 1));
|
||||
$hdrLen = 13;
|
||||
|
||||
if($this->m_bGlobalClr) {
|
||||
$this->m_colorTable = new CGIFCOLORTABLE();
|
||||
if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) {
|
||||
return false;
|
||||
}
|
||||
$hdrLen += 3 * $this->m_nTableSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFIMAGEHEADER
|
||||
{
|
||||
var $m_nLeft;
|
||||
var $m_nTop;
|
||||
var $m_nWidth;
|
||||
var $m_nHeight;
|
||||
var $m_bLocalClr;
|
||||
var $m_bInterlace;
|
||||
var $m_bSorted;
|
||||
var $m_nTableSize;
|
||||
var $m_colorTable;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIFIMAGEHEADER()
|
||||
{
|
||||
unSet($this->m_nLeft);
|
||||
unSet($this->m_nTop);
|
||||
unSet($this->m_nWidth);
|
||||
unSet($this->m_nHeight);
|
||||
unSet($this->m_bLocalClr);
|
||||
unSet($this->m_bInterlace);
|
||||
unSet($this->m_bSorted);
|
||||
unSet($this->m_nTableSize);
|
||||
unSet($this->m_colorTable);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($lpData, &$hdrLen)
|
||||
{
|
||||
$hdrLen = 0;
|
||||
|
||||
$this->m_nLeft = $this->w2i(substr($lpData, 0, 2));
|
||||
$this->m_nTop = $this->w2i(substr($lpData, 2, 2));
|
||||
$this->m_nWidth = $this->w2i(substr($lpData, 4, 2));
|
||||
$this->m_nHeight = $this->w2i(substr($lpData, 6, 2));
|
||||
|
||||
if(!$this->m_nWidth || !$this->m_nHeight) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$b = ord($lpData{8});
|
||||
$this->m_bLocalClr = ($b & 0x80) ? true : false;
|
||||
$this->m_bInterlace = ($b & 0x40) ? true : false;
|
||||
$this->m_bSorted = ($b & 0x20) ? true : false;
|
||||
$this->m_nTableSize = 2 << ($b & 0x07);
|
||||
$hdrLen = 9;
|
||||
|
||||
if($this->m_bLocalClr) {
|
||||
$this->m_colorTable = new CGIFCOLORTABLE();
|
||||
if(!$this->m_colorTable->load(substr($lpData, $hdrLen), $this->m_nTableSize)) {
|
||||
return false;
|
||||
}
|
||||
$hdrLen += 3 * $this->m_nTableSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIFIMAGE
|
||||
{
|
||||
var $m_disp;
|
||||
var $m_bUser;
|
||||
var $m_bTrans;
|
||||
var $m_nDelay;
|
||||
var $m_nTrans;
|
||||
var $m_lpComm;
|
||||
var $m_gih;
|
||||
var $m_data;
|
||||
var $m_lzw;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function CGIFIMAGE()
|
||||
{
|
||||
unSet($this->m_disp);
|
||||
unSet($this->m_bUser);
|
||||
unSet($this->m_bTrans);
|
||||
unSet($this->m_nDelay);
|
||||
unSet($this->m_nTrans);
|
||||
unSet($this->m_lpComm);
|
||||
unSet($this->m_data);
|
||||
$this->m_gih = new CGIFIMAGEHEADER();
|
||||
$this->m_lzw = new CGIFLZW();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function load($data, &$datLen)
|
||||
{
|
||||
$datLen = 0;
|
||||
|
||||
while(true) {
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$datLen++;
|
||||
|
||||
switch($b) {
|
||||
case 0x21: // Extension
|
||||
$len = 0;
|
||||
if(!$this->skipExt($data, $len)) {
|
||||
return false;
|
||||
}
|
||||
$datLen += $len;
|
||||
break;
|
||||
|
||||
case 0x2C: // Image
|
||||
// LOAD HEADER & COLOR TABLE
|
||||
$len = 0;
|
||||
if(!$this->m_gih->load($data, $len)) {
|
||||
return false;
|
||||
}
|
||||
$data = substr($data, $len);
|
||||
$datLen += $len;
|
||||
|
||||
// ALLOC BUFFER
|
||||
$len = 0;
|
||||
|
||||
if(!($this->m_data = $this->m_lzw->deCompress($data, $len))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = substr($data, $len);
|
||||
$datLen += $len;
|
||||
|
||||
if($this->m_gih->m_bInterlace) {
|
||||
$this->deInterlace();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case 0x3B: // EOF
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function skipExt(&$data, &$extLen)
|
||||
{
|
||||
$extLen = 0;
|
||||
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
|
||||
switch($b) {
|
||||
case 0xF9: // Graphic Control
|
||||
$b = ord($data[1]);
|
||||
$this->m_disp = ($b & 0x1C) >> 2;
|
||||
$this->m_bUser = ($b & 0x02) ? true : false;
|
||||
$this->m_bTrans = ($b & 0x01) ? true : false;
|
||||
$this->m_nDelay = $this->w2i(substr($data, 2, 2));
|
||||
$this->m_nTrans = ord($data[4]);
|
||||
break;
|
||||
|
||||
case 0xFE: // Comment
|
||||
$this->m_lpComm = substr($data, 1, ord($data[0]));
|
||||
break;
|
||||
|
||||
case 0x01: // Plain text
|
||||
break;
|
||||
|
||||
case 0xFF: // Application
|
||||
break;
|
||||
}
|
||||
|
||||
// SKIP DEFAULT AS DEFS MAY CHANGE
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
while($b > 0) {
|
||||
$data = substr($data, $b);
|
||||
$extLen += $b;
|
||||
$b = ord($data[0]);
|
||||
$data = substr($data, 1);
|
||||
$extLen++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function w2i($str)
|
||||
{
|
||||
return ord(substr($str, 0, 1)) + (ord(substr($str, 1, 1)) << 8);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function deInterlace()
|
||||
{
|
||||
$data = $this->m_data;
|
||||
|
||||
for($i = 0; $i < 4; $i++) {
|
||||
switch($i) {
|
||||
case 0:
|
||||
$s = 8;
|
||||
$y = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
$s = 8;
|
||||
$y = 4;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$s = 4;
|
||||
$y = 2;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$s = 2;
|
||||
$y = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
for(; $y < $this->m_gih->m_nHeight; $y += $s) {
|
||||
$lne = substr($this->m_data, 0, $this->m_gih->m_nWidth);
|
||||
$this->m_data = substr($this->m_data, $this->m_gih->m_nWidth);
|
||||
|
||||
$data =
|
||||
substr($data, 0, $y * $this->m_gih->m_nWidth) .
|
||||
$lne .
|
||||
substr($data, ($y + 1) * $this->m_gih->m_nWidth);
|
||||
}
|
||||
}
|
||||
|
||||
$this->m_data = $data;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class CGIF
|
||||
{
|
||||
var $m_gfh;
|
||||
var $m_lpData;
|
||||
var $m_img;
|
||||
var $m_bLoaded;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CONSTRUCTOR
|
||||
function CGIF()
|
||||
{
|
||||
$this->m_gfh = new CGIFFILEHEADER();
|
||||
$this->m_img = new CGIFIMAGE();
|
||||
$this->m_lpData = "";
|
||||
$this->m_bLoaded = false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
function ClearData() {
|
||||
$this->m_lpData = '';
|
||||
unSet($this->m_img->m_data);
|
||||
unSet($this->m_img->m_lzw->Next);
|
||||
unSet($this->m_img->m_lzw->Vals);
|
||||
unSet($this->m_img->m_lzw->Stack);
|
||||
unSet($this->m_img->m_lzw->Buf);
|
||||
}
|
||||
|
||||
function loadFile(&$data, $iIndex)
|
||||
{
|
||||
if($iIndex < 0) {
|
||||
return false;
|
||||
}
|
||||
$this->m_lpData = $data;
|
||||
|
||||
// GET FILE HEADER
|
||||
$len = 0;
|
||||
if(!$this->m_gfh->load($this->m_lpData, $len)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->m_lpData = substr($this->m_lpData, $len);
|
||||
|
||||
do {
|
||||
$imgLen = 0;
|
||||
if(!$this->m_img->load($this->m_lpData, $imgLen)) {
|
||||
return false;
|
||||
}
|
||||
$this->m_lpData = substr($this->m_lpData, $imgLen);
|
||||
}
|
||||
while($iIndex-- > 0);
|
||||
|
||||
$this->m_bLoaded = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
?>
|
723
mpdf/classes/grad.php
Executable file
@ -0,0 +1,723 @@
|
||||
<?php
|
||||
|
||||
class grad {
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
function grad(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
// mPDF 5.3.A1
|
||||
function CoonsPatchMesh($x, $y, $w, $h, $patch_array=array(), $x_min=0, $x_max=1, $y_min=0, $y_max=1, $colspace='RGB', $return=false){
|
||||
$s=' q ';
|
||||
$s.=sprintf(' %.3F %.3F %.3F %.3F re W n ', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK);
|
||||
$s.=sprintf(' %.3F 0 0 %.3F %.3F %.3F cm ', $w*_MPDFK, $h*_MPDFK, $x*_MPDFK, ($this->mpdf->h-($y+$h))*_MPDFK);
|
||||
$n = count($this->mpdf->gradients)+1;
|
||||
$this->mpdf->gradients[$n]['type'] = 6; //coons patch mesh
|
||||
$this->mpdf->gradients[$n]['colorspace'] = $colspace; //coons patch mesh
|
||||
$bpcd=65535; //16 BitsPerCoordinate
|
||||
$trans = false;
|
||||
$this->mpdf->gradients[$n]['stream']='';
|
||||
for($i=0;$i<count($patch_array);$i++){
|
||||
$this->mpdf->gradients[$n]['stream'].=chr($patch_array[$i]['f']); //start with the edge flag as 8 bit
|
||||
for($j=0;$j<count($patch_array[$i]['points']);$j++){
|
||||
//each point as 16 bit
|
||||
if (($j % 2) == 1) { // Y coordinate (adjusted as input is From top left)
|
||||
$patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$y_min)/($y_max-$y_min))*$bpcd;
|
||||
$patch_array[$i]['points'][$j]=$bpcd-$patch_array[$i]['points'][$j];
|
||||
}
|
||||
else {
|
||||
$patch_array[$i]['points'][$j]=(($patch_array[$i]['points'][$j]-$x_min)/($x_max-$x_min))*$bpcd;
|
||||
}
|
||||
if($patch_array[$i]['points'][$j]<0) $patch_array[$i]['points'][$j]=0;
|
||||
if($patch_array[$i]['points'][$j]>$bpcd) $patch_array[$i]['points'][$j]=$bpcd;
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]/256));
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(floor($patch_array[$i]['points'][$j]%256));
|
||||
}
|
||||
for($j=0;$j<count($patch_array[$i]['colors']);$j++){
|
||||
//each color component as 8 bit
|
||||
if ($colspace=='RGB') {
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]);
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][2]);
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][3]);
|
||||
if (isset($patch_array[$i]['colors'][$j][4]) && ord($patch_array[$i]['colors'][$j][4])<100) { $trans = true; }
|
||||
}
|
||||
else if ($colspace=='CMYK') {
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][1])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][2])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][3])*2.55);
|
||||
$this->mpdf->gradients[$n]['stream'].=chr(ord($patch_array[$i]['colors'][$j][4])*2.55);
|
||||
if (isset($patch_array[$i]['colors'][$j][5]) && ord($patch_array[$i]['colors'][$j][5])<100) { $trans = true; }
|
||||
}
|
||||
else if ($colspace=='Gray') {
|
||||
$this->mpdf->gradients[$n]['stream'].=($patch_array[$i]['colors'][$j][1]);
|
||||
if ($patch_array[$i]['colors'][$j][2]==1) { $trans = true; } // transparency converted from rgba or cmyka()
|
||||
}
|
||||
}
|
||||
}
|
||||
// TRANSPARENCY
|
||||
if ($trans) {
|
||||
$this->mpdf->gradients[$n]['stream_trans']='';
|
||||
for($i=0;$i<count($patch_array);$i++){
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr($patch_array[$i]['f']);
|
||||
for($j=0;$j<count($patch_array[$i]['points']);$j++){
|
||||
//each point as 16 bit
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]/256));
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(floor($patch_array[$i]['points'][$j]%256));
|
||||
}
|
||||
for($j=0;$j<count($patch_array[$i]['colors']);$j++){
|
||||
//each color component as 8 bit // OPACITY
|
||||
if ($colspace=='RGB') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][4])*2.55));
|
||||
}
|
||||
else if ($colspace=='CMYK') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][5])*2.55));
|
||||
}
|
||||
else if ($colspace=='Gray') {
|
||||
$this->mpdf->gradients[$n]['stream_trans'].=chr(intval(ord($patch_array[$i]['colors'][$j][3])*2.55));
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->mpdf->gradients[$n]['trans'] = true;
|
||||
$s .= ' /TGS'.$n.' gs ';
|
||||
}
|
||||
//paint the gradient
|
||||
$s .= '/Sh'.$n.' sh'."\n";
|
||||
//restore previous Graphic State
|
||||
$s .= 'Q'."\n";
|
||||
if ($return) { return $s; }
|
||||
else { $this->mpdf->_out($s); }
|
||||
}
|
||||
|
||||
|
||||
// type = linear:2; radial: 3;
|
||||
// Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg).
|
||||
// The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
|
||||
// Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1,
|
||||
// (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg).
|
||||
// (fx, fy) should be inside the circle, otherwise some areas will not be defined
|
||||
// $col = array(R,G,B/255); or array(G/255); or array(C,M,Y,K/100)
|
||||
// $stops = array('col'=>$col [, 'opacity'=>0-1] [, 'offset'=>0-1])
|
||||
function Gradient($x, $y, $w, $h, $type, $stops=array(), $colorspace='RGB', $coords='', $extend='', $return=false, $is_mask=false) {
|
||||
if (strtoupper(substr($type,0,1)) == 'L') { $type = 2; } // linear
|
||||
else if (strtoupper(substr($type,0,1)) == 'R') { $type = 3; } // radial
|
||||
if ($colorspace != 'CMYK' && $colorspace != 'Gray') {
|
||||
$colorspace = 'RGB';
|
||||
}
|
||||
$bboxw = $w;
|
||||
$bboxh = $h;
|
||||
$usex = $x;
|
||||
$usey = $y;
|
||||
$usew = $bboxw;
|
||||
$useh = $bboxh;
|
||||
if ($type < 1) { $type = 2; }
|
||||
if ($coords[0]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $coords[0] = $tmp/$w; }
|
||||
}
|
||||
if ($coords[1]!==false && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$coords[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $coords[1] = 1-($tmp/$h); }
|
||||
}
|
||||
// LINEAR
|
||||
if ($type == 2) {
|
||||
$angle = $coords[4];
|
||||
$repeat = $coords[5];
|
||||
// ALL POINTS SET (default for custom mPDF linear gradient) - no -moz
|
||||
if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false) {
|
||||
// do nothing - coords used as they are
|
||||
}
|
||||
|
||||
// If both a <point> and <angle> are defined, the gradient axis starts from the point and runs along the angle. The end point is
|
||||
// defined as before - in this case start points may not be in corners, and axis may not correctly fall in the right quadrant.
|
||||
// NO end points (Angle defined & Start points)
|
||||
else if ($angle!==false && $coords[0]!==false && $coords[1]!==false && $coords[2]===false && $coords[3]===false) {
|
||||
if ($angle==0 || $angle==360) { $coords[3]=$coords[1]; if ($coords[0]==1) $coords[2]=2; else $coords[2]=1; }
|
||||
else if ($angle==90) { $coords[2]=$coords[0]; $coords[3]=1; if ($coords[1]==1) $coords[3]=2; else $coords[3]=1; }
|
||||
else if ($angle==180) { if ($coords[4]==0) $coords[2]=-1; else $coords[2]=0; $coords[3]=$coords[1]; }
|
||||
else if ($angle==270) { $coords[2]=$coords[0]; if ($coords[1]==0) $coords[3]=-1; else $coords[3]=0; }
|
||||
else {
|
||||
$endx=1; $endy=1;
|
||||
if ($angle <=90) {
|
||||
if ($angle <=45) { $endy=tan(deg2rad($angle)); }
|
||||
else { $endx=tan(deg2rad(90-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = 1 - $coords[1] - (tan($b) * (1-$coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = 1+$tx; $coords[3] = 1-$ty;
|
||||
}
|
||||
else if ($angle <=180) {
|
||||
if ($angle <=135) { $endx=tan(deg2rad($angle-90)); }
|
||||
else { $endy=tan(deg2rad(180-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = 1 - $coords[1] - (tan($b) * ($coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = -$tx; $coords[3] = 1-$ty;
|
||||
}
|
||||
else if ($angle <=270) {
|
||||
if ($angle <=225) { $endy=tan(deg2rad($angle-180)); }
|
||||
else { $endx=tan(deg2rad(270-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = $coords[1] - (tan($b) * ($coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = -$tx; $coords[3] = $ty;
|
||||
}
|
||||
else {
|
||||
if ($angle <=315) { $endx=tan(deg2rad($angle-270)); }
|
||||
else { $endy=tan(deg2rad(360-$angle)); }
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$ny = $coords[1] - (tan($b) * (1-$coords[0]));
|
||||
$tx = sin($b) * cos($b) * $ny;
|
||||
$ty = cos($b) * cos($b) * $ny;
|
||||
$coords[2] = 1+$tx; $coords[3] = $ty;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -moz If the first parameter is only an <angle>, the gradient axis starts from the box's corner that would ensure the
|
||||
// axis goes through the box. The axis runs along the specified angle. The end point of the axis is defined such that the
|
||||
// farthest corner of the box from the starting point is perpendicular to the gradient axis at that point.
|
||||
// NO end points or Start points (Angle defined)
|
||||
else if ($angle!==false && $coords[0]===false && $coords[1]===false) {
|
||||
if ($angle==0 || $angle==360) { $coords[0]=0; $coords[1]=0; $coords[2]=1; $coords[3]=0; }
|
||||
else if ($angle==90) { $coords[0]=0; $coords[1]=0; $coords[2]=0; $coords[3]=1; }
|
||||
else if ($angle==180) { $coords[0]=1; $coords[1]=0; $coords[2]=0; $coords[3]=0; }
|
||||
else if ($angle==270) { $coords[0]=0; $coords[1]=1; $coords[2]=0; $coords[3]=0; }
|
||||
else {
|
||||
if ($angle <=90) {
|
||||
$coords[0]=0; $coords[1]=0;
|
||||
if ($angle <=45) { $endx=1; $endy=tan(deg2rad($angle)); }
|
||||
else { $endx=tan(deg2rad(90-$angle)); $endy=1; }
|
||||
}
|
||||
else if ($angle <=180) {
|
||||
$coords[0]=1; $coords[1]=0;
|
||||
if ($angle <=135) { $endx=tan(deg2rad($angle-90)); $endy=1; }
|
||||
else { $endx=1; $endy=tan(deg2rad(180-$angle)); }
|
||||
}
|
||||
else if ($angle <=270) {
|
||||
$coords[0]=1; $coords[1]=1;
|
||||
if ($angle <=225) { $endx=1; $endy=tan(deg2rad($angle-180)); }
|
||||
else { $endx=tan(deg2rad(270-$angle)); $endy=1; }
|
||||
}
|
||||
else {
|
||||
$coords[0]=0; $coords[1]=1;
|
||||
if ($angle <=315) { $endx=tan(deg2rad($angle-270)); $endy=1; }
|
||||
else { $endx=1; $endy=tan(deg2rad(360-$angle)); }
|
||||
}
|
||||
$b = atan2(($endy*$bboxh), ($endx*$bboxw));
|
||||
$h2 = $bboxh - ($bboxh * tan($b));
|
||||
$px = $bboxh + ($h2 * sin($b) * cos($b));
|
||||
$py = ($bboxh * tan($b)) + ($h2 * sin($b) * sin($b));
|
||||
$x1 = $px / $bboxh;
|
||||
$y1 = $py / $bboxh;
|
||||
if ($angle <=90) { $coords[2] = $x1; $coords[3] = $y1; }
|
||||
else if ($angle <=180) { $coords[2] = 1-$x1; $coords[3] = $y1; }
|
||||
else if ($angle <=270) { $coords[2] = 1-$x1; $coords[3] = 1-$y1; }
|
||||
else { $coords[2] = $x1; $coords[3] = 1-$y1; }
|
||||
}
|
||||
}
|
||||
// -moz If the first parameter to the gradient function is only a <point>, the gradient axis starts from the specified point,
|
||||
// and ends at the point you would get if you rotated the starting point by 180 degrees about the center of the box that the
|
||||
// gradient is to be applied to.
|
||||
// NO angle and NO end points (Start points defined)
|
||||
else if ((!isset($angle) || $angle===false) && $coords[0]!==false && $coords[1]!==false) { // should have start and end defined
|
||||
$coords[2] = 1-$coords[0]; $coords[3] = 1-$coords[1];
|
||||
$angle = rad2deg(atan2($coords[3]-$coords[1],$coords[2]-$coords[0]));
|
||||
if ($angle < 0) { $angle += 360; }
|
||||
else if ($angle > 360) { $angle -= 360; }
|
||||
if ($angle!=0 && $angle!=360 && $angle!=90 && $angle!=180 && $angle!=270) {
|
||||
if ($w >= $h) {
|
||||
$coords[1] *= $h/$w ;
|
||||
$coords[3] *= $h/$w ;
|
||||
$usew = $useh = $bboxw;
|
||||
$usey -= ($w-$h);
|
||||
}
|
||||
else {
|
||||
$coords[0] *= $w/$h ;
|
||||
$coords[2] *= $w/$h ;
|
||||
$usew = $useh = $bboxh;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -moz If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient
|
||||
// axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values T2B
|
||||
// All values are set in parseMozGradient - so won't appear here
|
||||
$coords = array(0,0,1,0); // default for original linear gradient (L2R)
|
||||
}
|
||||
$s = ' q';
|
||||
$s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n";
|
||||
$s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n";
|
||||
}
|
||||
|
||||
// RADIAL
|
||||
else if ($type == 3) {
|
||||
$radius = $coords[4];
|
||||
$angle = $coords[5]; // ?? no effect
|
||||
$shape = $coords[6];
|
||||
$size = $coords[7];
|
||||
$repeat = $coords[8];
|
||||
// ALL POINTS AND RADIUS SET (default for custom mPDF radial gradient) - no -moz
|
||||
if ($coords[0]!==false && $coords[1]!==false && $coords[2]!==false && $coords[3]!==false && $coords[4]!==false) {
|
||||
// do nothing - coords used as they are
|
||||
}
|
||||
// If a <point> is defined
|
||||
else if ($shape!==false && $size!==false) {
|
||||
if ($coords[2]==false) { $coords[2] = $coords[0]; }
|
||||
if ($coords[3]==false) { $coords[3] = $coords[1]; }
|
||||
// ELLIPSE
|
||||
if ($shape=='ellipse') {
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((1-$coords[0]),2) + pow((1-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (1-$coords[1])); }
|
||||
else { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
}
|
||||
// CIRCLE
|
||||
else if ($shape=='circle') {
|
||||
if ($w >= $h) {
|
||||
$coords[1] = $coords[3] = ($coords[1] * $h/$w) ;
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((($h/$w)-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((1-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((1-$coords[0]),2) + pow((($h/$w)-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (1-$coords[0]), (($h/$w)-$coords[1])); }
|
||||
else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
$usew = $useh = $bboxw;
|
||||
$usey -= ($w-$h);
|
||||
}
|
||||
else {
|
||||
$coords[0] = $coords[2] = ($coords[0] * $w/$h) ;
|
||||
$corner1 = sqrt(pow($coords[0],2) + pow($coords[1],2));
|
||||
$corner2 = sqrt(pow($coords[0],2) + pow((1-$coords[1]),2));
|
||||
$corner3 = sqrt(pow((($w/$h)-$coords[0]),2) + pow($coords[1],2));
|
||||
$corner4 = sqrt(pow((($w/$h)-$coords[0]),2) + pow((1-$coords[1]),2));
|
||||
if ($size=='closest-side') { $radius = min($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='closest-corner') { $radius = min($corner1, $corner2, $corner3, $corner4); }
|
||||
else if ($size=='farthest-side') { $radius = max($coords[0], $coords[1], (($w/$h)-$coords[0]), (1-$coords[1])); }
|
||||
else if ($size=='farthest-corner') { $radius = max($corner1, $corner2, $corner3, $corner4); } // farthest corner (default)
|
||||
$usew = $useh = $bboxh;
|
||||
}
|
||||
}
|
||||
if ($radius==0) { $radius=0.001; } // to prevent error
|
||||
$coords[4] = $radius;
|
||||
}
|
||||
|
||||
// -moz If entire function consists of only <stop> values
|
||||
else { // default values
|
||||
// All values are set in parseMozGradient - so won't appear here
|
||||
$coords = array(0.5,0.5,0.5,0.5); // default for radial gradient (centred)
|
||||
}
|
||||
$s = ' q';
|
||||
$s .= sprintf(' %.3F %.3F %.3F %.3F re W n', $x*_MPDFK, ($this->mpdf->h-$y)*_MPDFK, $w*_MPDFK, -$h*_MPDFK)."\n";
|
||||
$s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $usew*_MPDFK, $useh*_MPDFK, $usex*_MPDFK, ($this->mpdf->h-($usey+$useh))*_MPDFK)."\n";
|
||||
}
|
||||
|
||||
$n = count($this->mpdf->gradients) + 1;
|
||||
$this->mpdf->gradients[$n]['type'] = $type;
|
||||
$this->mpdf->gradients[$n]['colorspace'] = $colorspace;
|
||||
$trans = false;
|
||||
$this->mpdf->gradients[$n]['is_mask'] = $is_mask;
|
||||
if ($is_mask) { $trans = true; }
|
||||
if (count($stops) == 1) { $stops[1] = $stops[0]; }
|
||||
if (!isset($stops[0]['offset'])) { $stops[0]['offset'] = 0; }
|
||||
if (!isset($stops[(count($stops)-1)]['offset'])) { $stops[(count($stops)-1)]['offset'] = 1; }
|
||||
|
||||
// Fix stop-offsets set as absolute lengths
|
||||
if ($type==2) {
|
||||
$axisx = ($coords[2]-$coords[0])*$usew;
|
||||
$axisy = ($coords[3]-$coords[1])*$useh;
|
||||
$axis_length = sqrt(pow($axisx,2) + pow($axisy,2));
|
||||
}
|
||||
else { $axis_length = $coords[4]*$usew; } // Absolute lengths are meaningless for an ellipse - Firefox uses Width as reference
|
||||
|
||||
for($i=0;$i<count($stops);$i++) {
|
||||
if (isset($stops[$i]['offset']) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$stops[$i]['offset'],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
$stops[$i]['offset'] = $tmp/$axis_length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isset($stops[0]['offset']) && $stops[0]['offset']>0) {
|
||||
$firststop = $stops[0];
|
||||
$firststop['offset'] = 0;
|
||||
array_unshift($stops, $firststop);
|
||||
}
|
||||
if (!$repeat && isset($stops[(count($stops)-1)]['offset']) && $stops[(count($stops)-1)]['offset']<1) {
|
||||
$endstop = $stops[(count($stops)-1)];
|
||||
$endstop['offset'] = 1;
|
||||
$stops[] = $endstop;
|
||||
}
|
||||
if ($stops[0]['offset'] > $stops[(count($stops)-1)]['offset']) {
|
||||
$stops[0]['offset'] = 0;
|
||||
$stops[(count($stops)-1)]['offset'] = 1;
|
||||
}
|
||||
|
||||
for($i=0;$i<count($stops);$i++) {
|
||||
// mPDF 5.3.74
|
||||
if ($colorspace == 'CMYK') {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F %.3F', (ord($stops[$i]['col']{1})/100), (ord($stops[$i]['col']{2})/100), (ord($stops[$i]['col']{3})/100), (ord($stops[$i]['col']{4})/100));
|
||||
}
|
||||
else if ($colorspace == 'Gray') {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F', (ord($stops[$i]['col']{1})/255));
|
||||
}
|
||||
else {
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['col'] = sprintf('%.3F %.3F %.3F', (ord($stops[$i]['col']{1})/255), (ord($stops[$i]['col']{2})/255), (ord($stops[$i]['col']{3})/255));
|
||||
}
|
||||
if (!isset($stops[$i]['opacity'])) { $stops[$i]['opacity'] = 1; }
|
||||
else if ($stops[$i]['opacity'] > 1 || $stops[$i]['opacity'] < 0) { $stops[$i]['opacity'] = 1; }
|
||||
else if ($stops[$i]['opacity'] < 1) {
|
||||
$trans = true;
|
||||
}
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['opacity'] = $stops[$i]['opacity'];
|
||||
// OFFSET
|
||||
if ($i>0 && $i<(count($stops)-1)) {
|
||||
if (!isset($stops[$i]['offset']) || (isset($stops[$i+1]['offset']) && $stops[$i]['offset']>$stops[$i+1]['offset']) || $stops[$i]['offset']<$stops[$i-1]['offset']) {
|
||||
if (isset($stops[$i-1]['offset']) && isset($stops[$i+1]['offset'])) {
|
||||
$stops[$i]['offset'] = ($stops[$i-1]['offset']+$stops[$i+1]['offset'])/2;
|
||||
}
|
||||
else {
|
||||
for($j=($i+1);$j<count($stops);$j++) {
|
||||
if(isset($stops[$j]['offset'])) { break; }
|
||||
}
|
||||
$int = ($stops[$j]['offset'] - $stops[($i-1)]['offset'])/($j-$i+1);
|
||||
for($f=0;$f<($j-$i-1);$f++) {
|
||||
$stops[($i+$f)]['offset'] = $stops[($i+$f-1)]['offset'] + ($int);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset'];
|
||||
$this->mpdf->gradients[$n]['stops'][$i]['offset'] = $stops[$i]['offset'];
|
||||
}
|
||||
|
||||
if ($repeat) {
|
||||
$ns = count($this->mpdf->gradients[$n]['stops']);
|
||||
$offs = array();
|
||||
for($i=0;$i<$ns;$i++) {
|
||||
$offs[$i] = $this->mpdf->gradients[$n]['stops'][$i]['offset'];
|
||||
}
|
||||
$gp = 0;
|
||||
$inside=true;
|
||||
while($inside) {
|
||||
$gp++;
|
||||
for($i=0;$i<$ns;$i++) {
|
||||
$this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)] = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+$i)];
|
||||
$tmp = $this->mpdf->gradients[$n]['stops'][(($ns*($gp-1))+($ns-1))]['offset']+$offs[$i] ;
|
||||
if ($tmp < 1) { $this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = $tmp; }
|
||||
else {
|
||||
$this->mpdf->gradients[$n]['stops'][(($ns*$gp)+$i)]['offset'] = 1;
|
||||
$inside = false;
|
||||
break(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($trans) {
|
||||
$this->mpdf->gradients[$n]['trans'] = true;
|
||||
$s .= ' /TGS'.$n.' gs ';
|
||||
}
|
||||
if (!is_array($extend) || count($extend) <1) {
|
||||
$extend=array('true', 'true'); // These are supposed to be quoted - appear in PDF file as text
|
||||
}
|
||||
$this->mpdf->gradients[$n]['coords'] = $coords;
|
||||
$this->mpdf->gradients[$n]['extend'] = $extend;
|
||||
//paint the gradient
|
||||
$s .= '/Sh'.$n.' sh '."\n";
|
||||
//restore previous Graphic State
|
||||
$s .= ' Q '."\n";
|
||||
if ($return) { return $s; }
|
||||
else { $this->mpdf->_out($s); }
|
||||
}
|
||||
|
||||
|
||||
function parseMozGradient($bg) {
|
||||
// background[-image]: -moz-linear-gradient(left, #c7Fdde 20%, #FF0000 );
|
||||
// background[-image]: linear-gradient(left, #c7Fdde 20%, #FF0000 ); // CSS3
|
||||
if (preg_match('/repeating-/',$bg)) { $repeat = true; }
|
||||
else { $repeat = false; }
|
||||
if (preg_match('/linear-gradient\((.*)\)/',$bg,$m)) {
|
||||
$g = array();
|
||||
$g['type'] = 2;
|
||||
$g['colorspace'] = 'RGB';
|
||||
$g['extend'] = array('true','true');
|
||||
$v = trim($m[1]);
|
||||
// Change commas inside e.g. rgb(x,x,x)
|
||||
while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); }
|
||||
// Remove spaces inside e.g. rgb(x, x, x)
|
||||
while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); }
|
||||
$bgr = preg_split('/\s*,\s*/',$v);
|
||||
for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); }
|
||||
// Is first part $bgr[0] a valid point/angle?
|
||||
$first = preg_split('/\s+/',trim($bgr[0]));
|
||||
if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) {
|
||||
$startStops = 1;
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") {
|
||||
$startStops = 1;
|
||||
}
|
||||
else {
|
||||
$check = $this->mpdf->ConvertColor($first[0]);
|
||||
if ($check) $startStops = 0;
|
||||
else $startStops = 1;
|
||||
}
|
||||
// first part a valid point/angle?
|
||||
if ($startStops == 1) { // default values
|
||||
// [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,]
|
||||
if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$bgr[0],$m)) {
|
||||
$angle = $m[1] + 0;
|
||||
if (strtolower($m[2])=='deg') { $angle = $angle; }
|
||||
else if (strtolower($m[2])=='grad') { $angle *= (360/400); }
|
||||
else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); }
|
||||
while($angle < 0) { $angle += 360; }
|
||||
$angle = ($angle % 360);
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") { $angle = 0; }
|
||||
if (preg_match('/left/i',$bgr[0])) { $startx = 0; }
|
||||
else if (preg_match('/right/i',$bgr[0])) { $startx = 1; }
|
||||
if (preg_match('/top/i',$bgr[0])) { $starty = 1; }
|
||||
else if (preg_match('/bottom/i',$bgr[0])) { $starty = 0; }
|
||||
// Check for %? ?% or %%
|
||||
if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; }
|
||||
else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $startx = $m[1]; }
|
||||
}
|
||||
if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); }
|
||||
else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $starty = $m[1]; }
|
||||
}
|
||||
if (isset($startx) && !isset($starty)) { $starty = 0.5; }
|
||||
if (!isset($startx) && isset($starty)) { $startx = 0.5; }
|
||||
|
||||
}
|
||||
// If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values T2B
|
||||
$starty = 1; $startx = 0.5;
|
||||
$endy = 0; $endx = 0.5;
|
||||
}
|
||||
$coords = array();
|
||||
if (!isset($startx)) { $startx = false; }
|
||||
if (!isset($starty)) { $starty = false; }
|
||||
if (!isset($endx)) { $endx = false; }
|
||||
if (!isset($endy)) { $endy = false; }
|
||||
if (!isset($angle)) { $angle = false; }
|
||||
$g['coords'] = array($startx ,$starty ,$endx ,$endy, $angle, $repeat );
|
||||
$g['stops'] = array();
|
||||
for($i=$startStops;$i<count($bgr);$i++) {
|
||||
$stop = array();
|
||||
// parse stops
|
||||
$el = preg_split('/\s+/',trim($bgr[$i]));
|
||||
// mPDF 5.3.74
|
||||
$col = $this->mpdf->ConvertColor($el[0]);
|
||||
if ($col) { $stop['col'] = $col; }
|
||||
else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); }
|
||||
if ($col{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba()
|
||||
else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka()
|
||||
else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka()
|
||||
|
||||
if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) {
|
||||
$stop['offset'] = $m[1]/100;
|
||||
if ($stop['offset']>1) { unset($stop['offset']); }
|
||||
}
|
||||
else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $stop['offset'] = $m[1]; }
|
||||
}
|
||||
$g['stops'][] = $stop;
|
||||
}
|
||||
if (count($g['stops'] )) { return $g; }
|
||||
}
|
||||
else if (preg_match('/radial-gradient\((.*)\)/',$bg,$m)) {
|
||||
$g = array();
|
||||
$g['type'] = 3;
|
||||
$g['colorspace'] = 'RGB';
|
||||
$g['extend'] = array('true','true');
|
||||
$v = trim($m[1]);
|
||||
// Change commas inside e.g. rgb(x,x,x)
|
||||
while(preg_match('/(\([^\)]*?),/',$v)) { $v = preg_replace('/(\([^\)]*?),/','\\1@',$v); }
|
||||
// Remove spaces inside e.g. rgb(x, x, x)
|
||||
while(preg_match('/(\([^\)]*?)[ ]/',$v)) { $v = preg_replace('/(\([^\)]*?)[ ]/','\\1',$v); }
|
||||
$bgr = preg_split('/\s*,\s*/',$v);
|
||||
for($i=0;$i<count($bgr);$i++) { $bgr[$i] = preg_replace('/@/', ',', $bgr[$i]); }
|
||||
|
||||
// Is first part $bgr[0] a valid point/angle?
|
||||
$startStops = 0;
|
||||
$pos_angle = false;
|
||||
$shape_size = false;
|
||||
$first = preg_split('/\s+/',trim($bgr[0]));
|
||||
$checkCol = $this->mpdf->ConvertColor($first[0]);
|
||||
if (preg_match('/(left|center|right|bottom|top|deg|grad|rad)/i',$bgr[0]) && !preg_match('/(<#|rgb|rgba|hsl|hsla)/i',$bgr[0])) {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
else if (trim($first[(count($first)-1)]) === "0") {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
else if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[0])) {
|
||||
$startStops=1;
|
||||
$shape_size = $bgr[0];
|
||||
}
|
||||
else if (!$checkCol) {
|
||||
$startStops=1;
|
||||
$pos_angle = $bgr[0];
|
||||
}
|
||||
if (preg_match('/(circle|ellipse|closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$bgr[1])) {
|
||||
$startStops=2;
|
||||
$shape_size = $bgr[1];
|
||||
}
|
||||
|
||||
// If valid point/angle?
|
||||
if ($pos_angle) { // default values
|
||||
// [<point> || <angle>,] = [<% em px left center right bottom top> || <deg grad rad 0>,]
|
||||
if (preg_match('/left/i',$pos_angle)) { $startx = 0; }
|
||||
else if (preg_match('/right/i',$pos_angle)) { $startx = 1; }
|
||||
if (preg_match('/top/i',$pos_angle)) { $starty = 1; }
|
||||
else if (preg_match('/bottom/i',$pos_angle)) { $starty = 0; }
|
||||
// Check for %? ?% or %%
|
||||
if (preg_match('/(\d+)[%]/i',$first[0],$m)) { $startx = $m[1]/100; }
|
||||
else if (!isset($startx) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[0],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $startx = $m[1]; }
|
||||
}
|
||||
if (isset($first[1]) && preg_match('/(\d+)[%]/i',$first[1],$m)) { $starty = 1 - ($m[1]/100); }
|
||||
else if (!isset($starty) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$first[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
if ($tmp) { $starty = $m[1]; }
|
||||
}
|
||||
|
||||
/*
|
||||
// ?? Angle has no effect in radial gradient (does not exist in CSS3 spec.)
|
||||
if (preg_match('/([\-]*[0-9\.]+)(deg|grad|rad)/i',$pos_angle,$m)) {
|
||||
$angle = $m[1] + 0;
|
||||
if (strtolower($m[2])=='deg') { $angle = $angle; }
|
||||
else if (strtolower($m[2])=='grad') { $angle *= (360/400); }
|
||||
else if (strtolower($m[2])=='rad') { $angle = rad2deg($angle); }
|
||||
while($angle < 0) { $angle += 360; }
|
||||
$angle = ($angle % 360);
|
||||
}
|
||||
*/
|
||||
if (!isset($starty)) { $starty = 0.5; }
|
||||
if (!isset($startx)) { $startx = 0.5; }
|
||||
|
||||
}
|
||||
// If neither a <point> or <angle> is specified, i.e. the entire function consists of only <stop> values, the gradient axis starts from the top of the box and runs vertically downwards, ending at the bottom of the box.
|
||||
else { // default values Center
|
||||
$starty = 0.5; $startx = 0.5;
|
||||
$endy = 0.5; $endx = 0.5;
|
||||
}
|
||||
|
||||
// If valid shape/size?
|
||||
$shape = 'ellipse'; // default
|
||||
$size = 'farthest-corner'; // default
|
||||
if ($shape_size) { // default values
|
||||
if (preg_match('/(circle|ellipse)/i',$shape_size, $m)) {
|
||||
$shape = $m[1];
|
||||
}
|
||||
if (preg_match('/(closest-side|closest-corner|farthest-side|farthest-corner|contain|cover)/i',$shape_size, $m)) {
|
||||
$size = $m[1];
|
||||
if ($size=='contain') { $size = 'closest-side'; }
|
||||
else if ($size=='cover') { $size = 'farthest-corner'; }
|
||||
}
|
||||
}
|
||||
|
||||
$coords = array();
|
||||
if (!isset($startx)) { $startx = false; }
|
||||
if (!isset($starty)) { $starty = false; }
|
||||
if (!isset($endx)) { $endx = false; }
|
||||
if (!isset($endy)) { $endy = false; }
|
||||
if (!isset($radius)) { $radius = false; }
|
||||
if (!isset($angle)) { $angle = 0; }
|
||||
$g['coords'] = array($startx ,$starty ,$endx ,$endy, $radius, $angle, $shape, $size, $repeat );
|
||||
|
||||
$g['stops'] = array();
|
||||
for($i=$startStops;$i<count($bgr);$i++) {
|
||||
$stop = array();
|
||||
// parse stops
|
||||
$el = preg_split('/\s+/',trim($bgr[$i]));
|
||||
// mPDF 5.3.74
|
||||
$col = $this->mpdf->ConvertColor($el[0]);
|
||||
if ($col) { $stop['col'] = $col; }
|
||||
else { $stop['col'] = $col = $this->mpdf->ConvertColor(255); }
|
||||
if ($col{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($col{0}==4 || $col{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($col{0}==5) { $stop['opacity'] = ord($col{4})/100; } // transparency from rgba()
|
||||
else if ($col{0}==6) { $stop['opacity'] = ord($col{5})/100; } // transparency from cmyka()
|
||||
else if ($col{0}==1 && $col{2}==1) { $stop['opacity'] = ord($col{3})/100; } // transparency converted from rgba or cmyka()
|
||||
|
||||
if (isset($el[1]) && preg_match('/(\d+)[%]/',$el[1],$m)) {
|
||||
$stop['offset'] = $m[1]/100;
|
||||
if ($stop['offset']>1) { unset($stop['offset']); }
|
||||
}
|
||||
else if (isset($el[1]) && preg_match('/([0-9.]+(px|em|ex|pc|pt|cm|mm|in))/i',$el[1],$m)) {
|
||||
$tmp = $this->mpdf->ConvertSize($m[1],$this->mpdf->w,$this->mpdf->FontSize,false);
|
||||
$stop['offset'] = $el[1];
|
||||
}
|
||||
$g['stops'][] = $stop;
|
||||
}
|
||||
if (count($g['stops'] )) { return $g; }
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
function parseBackgroundGradient($bg) {
|
||||
// background-gradient: linear #00FFFF #FFFF00 0 0.5 1 0.5; or
|
||||
// background-gradient: radial #00FFFF #FFFF00 0.5 0.5 1 1 1.2;
|
||||
|
||||
$v = trim($bg);
|
||||
$bgr = preg_split('/\s+/',$v);
|
||||
$g = array();
|
||||
if (count($bgr)> 6) {
|
||||
if (strtoupper(substr($bgr[0],0,1)) == 'L' && count($bgr)==7) { // linear
|
||||
$g['type'] = 2;
|
||||
//$coords = array(0,0,1,1 ); // 0 0 1 0 or 0 1 1 1 is L 2 R; 1,1,0,1 is R2L; 1,1,1,0 is T2B; 1,0,1,1 is B2T
|
||||
// Linear: $coords - array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg).
|
||||
// The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
|
||||
$g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6]);
|
||||
}
|
||||
else if (count($bgr)==8) { // radial
|
||||
$g['type'] = 3;
|
||||
// Radial: $coords - array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1,
|
||||
// (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg).
|
||||
// (fx, fy) should be inside the circle, otherwise some areas will not be defined
|
||||
$g['coords'] = array($bgr[3], $bgr[4], $bgr[5], $bgr[6], $bgr[7]);
|
||||
}
|
||||
$g['colorspace'] = 'RGB';
|
||||
// mPDF 5.3.74
|
||||
$cor = $this->mpdf->ConvertColor($bgr[1]);
|
||||
if ($cor{0}==1) $g['colorspace'] = 'Gray';
|
||||
else if ($cor{0}==4 || $cor{0}==6) $g['colorspace'] = 'CMYK';
|
||||
if ($cor) { $g['col'] = $cor; }
|
||||
else { $g['col'] = $this->mpdf->ConvertColor(255); }
|
||||
$cor = $this->mpdf->ConvertColor($bgr[2]);
|
||||
if ($cor) { $g['col2'] = $cor; }
|
||||
else { $g['col2'] = $this->mpdf->ConvertColor(255); }
|
||||
$g['extend'] = array('true','true');
|
||||
$g['stops'] = array(array('col'=>$g['col'], 'opacity'=>1, 'offset'=>0), array('col'=>$g['col2'], 'opacity'=>1, 'offset'=>1));
|
||||
return $g;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
433
mpdf/classes/indic.php
Executable file
@ -0,0 +1,433 @@
|
||||
<?php
|
||||
|
||||
class indic {
|
||||
|
||||
function indic() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
function substituteIndic($earr, $lang, $font) {
|
||||
global $voltdata;
|
||||
|
||||
if (!isset($voltdata[$font])) {
|
||||
include_once(_MPDF_PATH.'includes/'.$font.'.volt.php');
|
||||
$voltdata[$font] = $volt;
|
||||
}
|
||||
|
||||
foreach($earr as $eid=>$char) {
|
||||
$earr[$eid] = sprintf("%04s", strtoupper(dechex($char)));
|
||||
}
|
||||
$vstr = "0020 ".implode(" ",$earr)." 0020";
|
||||
//============================
|
||||
// Common Indic Punctuation marks
|
||||
// If NOT devanagari
|
||||
if ($lang!='hi') {
|
||||
$vstr = str_replace('0964','007C', $vstr); // U+0964 replace with "|"
|
||||
$vstr = str_replace('0965','007C 007C', $vstr); // U+0964 replace with "|"
|
||||
}
|
||||
//============================
|
||||
// Tamil numeral for Zero missing Added mPDF 4.2
|
||||
if ($lang=='ta') {
|
||||
$vstr = str_replace('0BE6','0030', $vstr); // U+0BEB replace with "0"
|
||||
}
|
||||
|
||||
//============================
|
||||
// Re-order vowels
|
||||
|
||||
// DEVANAGARI vowel sign matraI[093F] before consonant
|
||||
if ($lang=='hi') {
|
||||
$prebasedvowels = "(093F)";
|
||||
$nukta = "093C";
|
||||
$halant = "094D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT == VIRAMA
|
||||
}
|
||||
|
||||
// BENGALI vowels [09BF 09C7 09C8]
|
||||
else if ($lang=='bn') {
|
||||
|
||||
// Khanda Ta 09CE not in font -> replace with 09A4|09CD
|
||||
$vstr = preg_replace('/09CE/','09A4 09CD 200D', $vstr); // mPDF 5.3.09
|
||||
|
||||
// BENGALI double-part vowels [09CB 09C7 09BE][09CC 09C7 09D7]
|
||||
$vstr = str_replace('09CB','09C7 09BE', $vstr); // convert to 2 parts
|
||||
$vstr = str_replace('09CC','09C7 09D7', $vstr); // 09C7 pre-based is then shifted below
|
||||
$prebasedvowels = "(09BF|09C7|09C8)";
|
||||
$nukta = "09BC";
|
||||
$halant = "09CD";
|
||||
// mPDF 5.0.044
|
||||
$bnfullcons = "0995|0996|0997|0998|0999|099A|099B|099C|099D|099F|09A0|09A1|09A2|09A3|09A4|09A5|09A6|09A7|09A8|09AA|09AB|09AC|09AD|09AE|09AF|09B0|09B2|09B6|09B7|09B8|09B9|09DC|09DD|09DF";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
// mPDF 5.0.044
|
||||
// .. and shifting left-based vowel further to the left in case 3 consonants together.
|
||||
$vstr = preg_replace('/('.$bnfullcons.') '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr);
|
||||
|
||||
// mPDF 5.0.044
|
||||
// If left-based vowel has now been shifted to left of RA/Halant (09B0/09CD)
|
||||
// Convert here to above-line form (E068) as it would get missed later
|
||||
// e.g. 09B0 09CD 09AD 09C7 would be changed above =>
|
||||
// e.g. 09C7 09B0 09CD 09AD. The 09B0 09CD should => E068
|
||||
// ??? need to add 09BF as well (09BF|09C7|09C8)
|
||||
$vstr = preg_replace('/(09C7|09C8) 09B0 09CD/', '\\1 E068', $vstr);
|
||||
|
||||
}
|
||||
|
||||
// GUJARATI pre-based vowel [0ABF]
|
||||
else if ($lang=='gu') {
|
||||
$prebasedvowels = "(0ABF)";
|
||||
$nukta = "0ABC";
|
||||
$halant = "0ACD";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// GURMUKHI/PUNJABI pre-based vowel [0ABF]
|
||||
else if ($lang=='pa') {
|
||||
$prebasedvowels = "(0A3F)";
|
||||
$nukta = "0A3C";
|
||||
$halant = "0A4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.' '.$nukta.'/','\\2 \\1 '.$nukta, $vstr); // before NUKTA
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$prebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// TAMIL pre-based vowel [0ABF]
|
||||
else if ($lang=='ta') {
|
||||
// Shrii (Shree)
|
||||
$vstr = preg_replace('/0BB6 0BCD 0BB0 0BC0/','E04B', $vstr);
|
||||
|
||||
// TAMIL double-part vowels [0BCA 0BC6 0BBE][0BCB 0BC7 0BBE][0BCC 0BC6 0BD7]
|
||||
$vstr = preg_replace('/0BCA/','0BC6 0BBE', $vstr); // convert to 2 parts
|
||||
$vstr = preg_replace('/0BCB/','0BC7 0BBE', $vstr); // pre-based is then shifted below
|
||||
$vstr = preg_replace('/0BCC/','0BC6 0BD7', $vstr);
|
||||
$prebasedvowels = "(0BC6|0BC7|0BC8)";
|
||||
// No nukta
|
||||
$halant = "0BCD"; // Doesn't seem to move most in front of halanted consonants
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$prebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
// ? Only for special case KSS (already moved to left of 0BB7)
|
||||
$vstr = preg_replace('/0B95 '.$halant.' '.$prebasedvowels.' 0BB7/','\\1 0B95 '.$halant.' 0BB7', $vstr);
|
||||
}
|
||||
|
||||
// ORIYA
|
||||
else if ($lang=='or') {
|
||||
// ORIYA double-part vowels []
|
||||
$vstr = str_replace('0B48','0B47 0B56', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0B4B','0B47 0B3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0B4C','0B47 0B57', $vstr); // 2-part Vowel
|
||||
$orprebasedvowels = "(0B47)";
|
||||
// No nukta
|
||||
$halant = "0B4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$orprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$orprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// MALAYALAM
|
||||
else if ($lang=='ml') {
|
||||
// Chillus - old forms - remove ZWNJ after
|
||||
// This font Volt rules recognises e.g. "Na Halant(Virama)" as ChilluN
|
||||
$vstr = preg_replace('/(0D23 0D4D|0D28 0D4D|0D30 0D4D|0D32 0D4D|0D33 0D4D) 200D/','\\1', $vstr);
|
||||
// See Chillus in Unicode [http://en.wikipedia.org/wiki/Malayalam_script]
|
||||
$vstr = str_replace('0D7A','0D23 0D4D', $vstr); // [mlymChilluNn]
|
||||
$vstr = str_replace('0D7B','0D28 0D4D', $vstr); // [mlymChilluN]
|
||||
$vstr = str_replace('0D7C','0D30 0D4D', $vstr); // [mlymChilluR]
|
||||
$vstr = str_replace('0D7D','0D32 0D4D', $vstr); // [mlymChilluL]
|
||||
$vstr = str_replace('0D7E','0D33 0D4D', $vstr); // [mlymChilluLl]
|
||||
/*
|
||||
// Chillus - 0D7A-0D7E not in font directly, but as E005-E009
|
||||
$vstr = preg_replace('/0D23 0D4D 200D/','0D7A', $vstr);
|
||||
$vstr = preg_replace('/0D28 0D4D 200D/','0D7B', $vstr);
|
||||
$vstr = preg_replace('/0D30 0D4D 200D/','0D7C', $vstr);
|
||||
$vstr = preg_replace('/0D32 0D4D 200D/','0D7D', $vstr);
|
||||
$vstr = preg_replace('/0D33 0D4D 200D/','0D7E', $vstr);
|
||||
|
||||
$vstr = preg_replace('/0D7F/','E004', $vstr); // [mlymChilluK]
|
||||
$vstr = preg_replace('/0D7A/','E005', $vstr); // [mlymChilluNn]
|
||||
$vstr = preg_replace('/0D7B/','E006', $vstr); // [mlymChilluN]
|
||||
$vstr = preg_replace('/0D7C/','E007', $vstr); // [mlymChilluR]
|
||||
$vstr = preg_replace('/0D7D/','E008', $vstr); // [mlymChilluL]
|
||||
$vstr = preg_replace('/0D7E/','E009', $vstr); // [mlymChilluLl]
|
||||
*/
|
||||
|
||||
// MALAYALAM double-part vowels []
|
||||
$vstr = str_replace('0D4A','0D46 0D3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0D4B','0D47 0D3E', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0D4C','0D46 0D57', $vstr); // 2-part Vowel
|
||||
$mlprebasedvowels = "(0D46|0D47|0D48)";
|
||||
// No nukta
|
||||
$halant = "0D4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$mlprebasedvowels.'/','\\2 \\1', $vstr); // vowel sign pre-based shift left
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels.'/','\\2 \\1 '.$halant, $vstr); // before CHAR HALANT
|
||||
}
|
||||
|
||||
// TELUGU
|
||||
else if ($lang=='te') {
|
||||
// TELUGU double-part vowels [0C48 -> 0C46 0C56]
|
||||
$vstr = str_replace('0C48','0C46 0C56', $vstr); // 2-part Vowel
|
||||
$prebasedvowels = "(0C46)";
|
||||
$abvvowels = "(0C3E|0C3F|0C40|0C46|0C47|0C4A|0C4B|0C4C|0C55)";
|
||||
// No nukta
|
||||
$halant = "0C4D";
|
||||
$tefullforms = "0C15|0C17|0C18|0C1A|0C1B|0C1C|0C1D|0C20|0C21|0C22|0C24|0C25|0C26|0C27|0C28|0C2A|0C2B|0C2D|0C2E|0C2F|0C30|0C33|0C35|0C36|0C37|0C38|0C39|E028|E029|E02A|E02B|E078|E07A|E07B";
|
||||
$vstr = preg_replace('/('.$tefullforms .') '.$halant.' ('.$tefullforms .') '.$abvvowels .'/','\\1 \\3 '.$halant.' \\2', $vstr); // before HALANT
|
||||
}
|
||||
|
||||
|
||||
// KANNADA
|
||||
else if ($lang=='kn') {
|
||||
// KANNADA double-part vowels [0CC8 -> 0CC6 0CD6]
|
||||
$vstr = str_replace('0CC0','0CBF 0CD5', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CC7','0CC6 0CD5', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CC8','0CC6 0CD6', $vstr); // 2-part Vowel AI - no glyph for single
|
||||
$vstr = str_replace('0CCA','0CC6 0CC2', $vstr); // 2-part Vowel
|
||||
$vstr = str_replace('0CCB','0CC6 0CC2 0CD5', $vstr); // 2-part Vowel
|
||||
$prebasedvowels = "(0CBF|0CC6)";
|
||||
$halant = "0CCD";
|
||||
}
|
||||
|
||||
|
||||
//============================
|
||||
|
||||
// SPECIALS
|
||||
|
||||
// DEVANAGARI Ra Halant Ra
|
||||
if ($lang=='hi') {
|
||||
$vstr = str_replace('0930 094D 0930','E05D 0930', $vstr); // Ra Halant Ra => halfRa FullRa
|
||||
}
|
||||
|
||||
// GUJARATI
|
||||
if ($lang=='gu') {
|
||||
$vstr = str_replace('0AB0 0AC2','E02E', $vstr); // Ra VowelUu => SpecialForm RaUu
|
||||
}
|
||||
|
||||
// TELUGU Ra Halant <Consonant> Halant => halfRa Halant<Consonant> Halant
|
||||
if ($lang=='te') {
|
||||
$vstr = preg_replace('/0C30 0C4D ([A-F0-9]{4}) 0C4D/','E021 0C4D \\1 0C4D', $vstr);
|
||||
}
|
||||
|
||||
// KANNADA
|
||||
// Reph at end of word becomes E0CC instead of E00B
|
||||
if ($lang=='kn') {
|
||||
$vstr = str_replace('0CB0 0CCD 0020','E0CC 0020', $vstr); // mPDF 5.3.87
|
||||
}
|
||||
|
||||
|
||||
//============================
|
||||
// MAIN BIT FROM VOLT RULES
|
||||
foreach($voltdata[$font] AS $rid=>$reps) {
|
||||
//echo $rid . ': ' . $vstr.'<br />';
|
||||
$vstr = preg_replace('/'.$reps['match'].'/',$reps['replace'], $vstr);
|
||||
}
|
||||
//echo $vstr.'<br />'; exit;
|
||||
|
||||
|
||||
//============================
|
||||
|
||||
// SPECIALS
|
||||
|
||||
// KANNADA
|
||||
// <Base> <BelowBase1> [<BelowBase2> ] MatraI -> <Base/MatraI ligature> <Belowbase1> etc
|
||||
if ($lang=='kn') {
|
||||
$matraI = "0CBF";
|
||||
$knbase = preg_split('/\|/', "0C95|0C96|0C97|0C98|0C9A|0C9B|0C9C|0C9D|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E0A3|E07D|E07E");
|
||||
$knmatraIligature = preg_split('/\|/', "E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2");
|
||||
$belowbase1 = "E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E081";
|
||||
$belowbase2 = "E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E081";
|
||||
for ($i=0; $i<count($knbase);$i++) {
|
||||
$vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') ('.$belowbase2.') '.$matraI.'/', $knmatraIligature[$i].' \\1 \\2', $vstr);
|
||||
$vstr = preg_replace('/'.$knbase[$i].' ('.$belowbase1.') '.$matraI.'/', $knmatraIligature[$i].' \\1', $vstr);
|
||||
}
|
||||
}
|
||||
|
||||
// KANNADA
|
||||
// [KanTtaFull] [matraI] => [KanTtaPartial] [matraI]
|
||||
if ($lang=='kn') {
|
||||
$vstr = preg_replace('/0C9F '.$matraI.'/', 'E015 '.$matraI, $vstr);
|
||||
}
|
||||
|
||||
// ORIYA
|
||||
if ($lang=='or') {
|
||||
// SpecialCase Ra[0B30] Halant still left before [oryaFullNnNna] => E00F
|
||||
$vstr = preg_replace('/0B30 '.$halant.' E00F/','E00F E069', $vstr); // convert to Reph
|
||||
}
|
||||
|
||||
//============================
|
||||
// SHIFT REPH
|
||||
|
||||
// DEVANAGARI Shift Reph [E015]
|
||||
if ($lang=='hi') {
|
||||
// FIRSTLY - halfRa = E05D - Change this to Reph [E015]
|
||||
$himatchhalfforms = "E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145";
|
||||
$himatchfullforms = "0915|0916|0917|0918|0919|091A|091B|091C|091D|091E|091F|0920|0921|0922|0923|0924|0925|0926|0927|0928|092A|092B|092C|092D|092E|092F|0930|0932|0933|0935|0936|0937|0938|0939|E028|E029|0958|0959|095A|E02A|E02B|E02C|E02D|095B|E02E|E02F|E030|E031|095C|095D|E032|E033|E034|E035|E036|0929|E037|095E|E038|E039|E03A|095F|0931|E03B|0934|E03C|E03D|E03E|E03F|E040|E041|E042|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133";
|
||||
$vstr = preg_replace('/E05D ('.$himatchhalfforms.'|'.$himatchfullforms.')/', 'E015 \\1', $vstr);
|
||||
|
||||
// Reph = E015 - Shift Right to just after end of syllable
|
||||
// FullAllForms + HalfAllForms + 093E matraA
|
||||
while(preg_match('/E015 ('.$himatchhalfforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/E015 ('.$himatchhalfforms.')/', '\\1 E015', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/E015 ('.$himatchfullforms.')/', '\\1 E015', $vstr);
|
||||
|
||||
// Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198
|
||||
$vstr = str_replace('E015 093E', '093E E015', $vstr);
|
||||
$vstr = preg_replace('/E015 (0940|E194|E195|E196|E197|E198)/', '\\1 E014', $vstr); // (Small) reph [E014] to Right of matraI
|
||||
$vstr = str_replace('E015 0947', '0947 E014', $vstr); // (Small) reph [E014] to Right of matraI
|
||||
}
|
||||
|
||||
// BENGALI Shift Reph [E068]
|
||||
else if ($lang=='bn') {
|
||||
$bnfullconjuncts = "E002|E003|E004|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5|E0F6|E0F7|E0F8|E0F9|E0FA|E0FB|E0FC|E0FD|E0FE|E0FF|E100|E101|E102|E103|E104|E105|E106|E107|E108|E109|E10A|E10B|E10C|E10D|E10E|E10F|E110|E111|E112|E113|E114|E115|E116|E117|E118|E119|E11A|E11B|E11C|E11D|E11E|E11F|E120|E121|E122|E123|E124|E125|E126|E127|E128|E129|E12A|E12B|E12C|E12D|E12E|E12F|E130|E131|E132|E133|E134|E135|E136|E137|E138|E139|E13A|E13B|E13C|E13D|E13E|E13F|E140|E141|E142|E143|E144|E145|E146|E147|E148|E149|E14A|E14B|E14C|E14D|E14E|E14F|E150|E151|E152|E153|E154|E155|E156|E157|E158|E159|E15A|E15B|E15C|E15D|E15E|E15F|E160|E161|E162|E163|E164|E165|E166|E167|E168|E169|E16A|E16B|E16C|E16D|E16E|E16F|E170|E171|E172|E173|E174|E175|E176|E177|E178|E179|E17A|E17B|E17C|E17D|E17E|E17F|E180|E181|E182|E183|E184|E185|E186|E187|E188|E189|E18A|E18B|E18C|E18D|E18E|E18F|E190|E191|E192|E193|E194|E195|E196|E197|E198|E199|E19A";
|
||||
// $bnfullcons - set above;
|
||||
$vstr = preg_replace('/E068 ('.$bnfullconjuncts.'|'.$bnfullcons.')/', '\\1 E068', $vstr);
|
||||
// ? Need to shift it beyond post-base vowels 09BE, 09C0, 09D7 haven't found so can't test??
|
||||
$vstr = preg_replace('/E068 (09BE|09C0|09D7)/', '\\1 E068', $vstr);
|
||||
}
|
||||
|
||||
// GUJARATI Shift Reph [E032]
|
||||
else if ($lang=='gu') {
|
||||
$gufullforms = "0A95|0A96|0A97|0A98|0A99|0A9A|0A9B|0A9C|0A9D|0A9E|0A9F|0AA0|0AA1|0AA2|0AA3|0AA4|0AA5|0AA6|0AA7|0AA8|0AAA|0AAB|0AAC|0AAD|0AAE|0AAF|0AB0|0AB2|0AB3|0AB5|0AB6|0AB7|0AB8|0AB9|E002|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D|E07E|E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5";
|
||||
$vstr = preg_replace('/E032 ('.$gufullforms.')/', '\\1 E032', $vstr);
|
||||
// Now shift it beyond post-based vowels // ??? Need to add others e.g. 0949,094A,094B,094C + presentation forms like E198
|
||||
// ? Need to shift it beyond post-base vowels 0ABE, 0AC0 haven't found so can't test??
|
||||
$vstr = preg_replace('/E032 (0ABE|0AC0)/', '\\1 E032', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// TELUGU Shift Reph to LEFT [E046|E069|E077] [TelRaSmallOne] => E046 [TelRaSmallTwo] => E069 [TelRaSmallThree] => E077
|
||||
else if ($lang=='te') {
|
||||
// tefullforms defined earlier
|
||||
$tepartialforms = "E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E07C|E07D|E07E";
|
||||
$matraligs = "E07F|E080|E081|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF";
|
||||
$tevowels = "0C3E|0C3F|0C40|0C46|0C47|0C56|0C4A|0C4B|0C4C"
|
||||
."|0C41|0C42|0C43|0C44"; // post matras
|
||||
$vstr = preg_replace('/('.$tevowels.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
while(preg_match('/('.$tepartialforms.') (E046|E069|E077)/', $vstr)) {
|
||||
$vstr = preg_replace('/('.$tepartialforms.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/('.$tefullforms .'|'.$matraligs.') (E046|E069|E077)/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// KANNADA Shift Reph to RIGHT [E00B]
|
||||
else if ($lang=='kn') {
|
||||
$knfullforms = "0C95|0C96|0C97|0C98|0C99|0C9A|0C9B|0C9C|0C9D|0C9E|0C9F|0CA0|0CA1|0CA2|0CA3|0CA4|0CA5|0CA6|0CA7|0CA8|0CAA|0CAB|0CAC|0CAD|0CAE|0CAF|0CB0|0CB1|0CB2|0CB3|0CB5|0CB6|0CB7|0CB8|0CB9|E07D|E07E|E0A3";
|
||||
$knpartialforms = "E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|0C9E|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E07F";
|
||||
while(preg_match('/E00B ('.$knpartialforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/E00B ('.$knpartialforms.')/', '\\1 E00B', $vstr);
|
||||
}
|
||||
// mPDF 5.3.47 Also move Reph to right of matraIligatures
|
||||
$knfullforms .= "|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A4|E0A1|E0A2";
|
||||
$vstr = preg_replace('/E00B ('.$knfullforms.')/', '\\1 E00B', $vstr);
|
||||
|
||||
// ? Need to shift it beyond base or below-base forms - haven't found so can't test??
|
||||
// mPDF 5.3.87
|
||||
// E004 added to list (which is a transformed version of 0CBE)
|
||||
$knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6|E004";
|
||||
$vstr = preg_replace('/E00B ('.$knvowels.')/', '\\1 E00B', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// ORIYA Shift Reph to RIGHT [E069|E06A|E06B|E06C]
|
||||
else if ($lang=='or') {
|
||||
$orrephs = "E069|E06A|E06B|E06C";
|
||||
$orfullforms = "0B15|0B16|0B17|0B18|0B19|0B1A|0B1B|0B1C|0B1D|0B1E|0B1F|0B20|0B21|0B22|0B23|0B24|0B25|0B26|0B27|0B28|0B29|0B2A|0B2B|0B2C|0B2D|0B2E|0B2F|0B30|0B31|0B32|0B33|0B34|0B35|0B36|0B37|0B38|E003|E004|E005|E006|E007|E008|E009|E00A|E00B|E00C|E00D|E00E|E00F|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037";
|
||||
// E123 - E147 FullHalant forms ? add to FullForms
|
||||
$orpartialforms = "E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB|E0AC|E0AD|E0AE|E0AF|E0B0|E0B1|E0B2|E0B3|E0B4|E0B5|E0B6|E0B7|E0B8|E0B9|E0BA|E0BB|E0BC|E0BD|E0BE|E0BF|E0C0|E0C1|E0C2|E0C3|E0C4|E0C5|E0C6|E0C7|E0C8|E0C9|E0CA|E0CB|E0CC|E0CD|E0CE|E0CF|E0D0|E0D1|E0D2|E0D3|E0D4|E0D5|E0D6|E0D7|E0D8|E0D9|E0DA|E0DB|E0DC|E0DD|E0DE|E0DF|E0E0|E0E1|E0E2|E0E3|E0E4|E0E5|E0E6|E0E7|E0E8|E0E9|E0EA|E0EB|E0EC|E0ED|E0EE|E0EF|E0F0|E0F1|E0F2|E0F3|E0F4|E0F5";
|
||||
|
||||
// Combined MatraIReph[E06D] split [0B3F & E069] to allow reph to be shifted forwards
|
||||
$vstr = preg_replace('/('.$orfullforms.') E06D ('.$orfullforms.') 0B3E/', '\\1 0B3F E069 \\2 0B3E', $vstr);
|
||||
|
||||
|
||||
while(preg_match('/('.$orrephs.') ('.$orpartialforms.')/', $vstr)) {
|
||||
$vstr = preg_replace('/('.$orrephs.') ('.$orpartialforms.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
$vstr = preg_replace('/('.$orrephs.') ('.$orfullforms.')/', '\\2 \\1', $vstr);
|
||||
|
||||
|
||||
// Combine Reph and MatraI
|
||||
$vstr = str_replace('E069 0B3F', 'E06D', $vstr); // Reph and MatraI -> MatraIReph
|
||||
$vstr = str_replace('E06A 0B3F', 'E06E', $vstr); // Reph and MatraI -> MatraIReph
|
||||
$vstr = str_replace('E06B 0B3F', 'E06F', $vstr); // Reph and MatraI -> MatraIReph
|
||||
}
|
||||
|
||||
|
||||
// MALAYALAM Shift Reph to LEFT [E00E] (mlylmRaVattu)
|
||||
else if ($lang=='ml') {
|
||||
$halant = "0D4D";
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' 0D30/','E00E \\1', $vstr); // 0D30 = Ra
|
||||
$vstr = preg_replace('/([A-F0-9]{4}) '.$halant.' '.$mlprebasedvowels .' 0D30/','\\2 E00E \\1', $vstr); // 0D30 = Ra
|
||||
|
||||
$mlfullforms = "0D15|0D16|0D17|0D18|0D19|0D1A|0D1B|0D1C|0D1D|0D1E|0D1F|0D20|0D21|0D22|0D23|0D24|0D25|0D26|0D27|0D28|0D2A|0D2B|0D2C|0D2D|0D2E|0D2F|0D30|0D31|0D32|0D33|0D34|0D35|0D36|0D37|0D38|0D39"
|
||||
."|E010|E011|E012|E013|E014|E015|E016|E017|E018|E019|E01A|E01B|E01C|E01D|E01E|E01F|E020|E021|E022|E023|E024|E025|E026|E027|E028|E029|E02A|E02B|E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E|E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071|E072|E073|E074|E075|E076|E077|E078|E079|E07A|E07B|E07C|E07D";
|
||||
// = FullConsonants + FullConjuncts
|
||||
|
||||
// = Add Chillu characters // mPDF 5.0.024
|
||||
$mlfullforms .= "|E004|E005|E006|E007|E008|E009";
|
||||
while(preg_match('/('.$mlfullforms.') E00E/', $vstr))
|
||||
$vstr = preg_replace('/('.$mlfullforms.') E00E/', 'E00E \\1', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
|
||||
// SHIFT post-based vowels to Left of SmallForms (NOT to left of full forms)
|
||||
|
||||
// TELUGU Shift
|
||||
if ($lang=='te') {
|
||||
// NB $tevowels defined above
|
||||
// NB $tefullforms defined above
|
||||
$tebelowbase1 = "E02C|E02D|E02E|E02F|E030|E031|E032|E033|E034|E035|E036|E037|E038|E039|E03A|E03B|E03C|E03D|E03E|E03F|E040|E041|E042|E043|E044|E045|E046|E047|E048|E049|E04A|E04B|E04C|E04D|E04E"; //'Small1KaToHa'
|
||||
$tebelowbase2 = "E04F|E050|E051|E052|E053|E054|E055|E056|E057|E058|E059|E05A|E05B|E05C|E05D|E05E|E05F|E060|E061|E062|E063|E064|E065|E066|E067|E068|E069|E06A|E06B|E06C|E06D|E06E|E06F|E070|E071"; // 'Small2KaToHa'
|
||||
$vstr = preg_replace('/('.$tebelowbase2.') ('.$tevowels.')/', '\\2 \\1', $vstr);
|
||||
$vstr = preg_replace('/('.$tebelowbase1.') ('.$tevowels.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
|
||||
// KANNADA Shift
|
||||
else if ($lang=='kn') {
|
||||
$knvowels = "0CBE|0CC0|0CC1|0CC2|0CC3|0CC4|0CC7|0CC8|0CCA|0CCB|0CD5|0CD6"
|
||||
// mPDF 5.3.87 Shouldn't swop E082 and E047 (belowbase1) below
|
||||
// E082 is a matraIligature
|
||||
// ."|E082|E083|E084|E085|E086|E087|E088|E089|E08A|E08B|E08C|E08D|E08E|E08F|E090|E091|E092|E093|E094|E095|E096|E097|E098|E099|E09A|E09B|E09C|E09D|E09E|E09F|E0A0|E0A1|E0A2|E0A3|E0A4|E0A5|E0A6|E0A7|E0A8|E0A9|E0AA|E0AB"
|
||||
."|E004|E007|E008|E009|E00A";
|
||||
|
||||
|
||||
// NB $knvowels defined above
|
||||
// NB $fullforms defined above
|
||||
// $belowbase1/2 defined above
|
||||
$vstr = preg_replace('/('.$belowbase2.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
// mPDF 5.3.87
|
||||
$vstr = preg_replace('/('.$belowbase1.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
|
||||
//$vstr = preg_replace('/('.$fullforms.') ('.$knvowels.')/', '\\2 \\1', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
// Clear unwanted ZWJ, ZWNJ
|
||||
// MALAYALAM
|
||||
if ($lang=='ml') {
|
||||
$vstr = preg_replace('/(200C|200D) /','', $vstr);
|
||||
}
|
||||
|
||||
//============================
|
||||
// END & PUT IT BACK TOGETHER
|
||||
$vstr = preg_replace('/^0020 (.*) 0020$/', '\\1', $vstr);
|
||||
|
||||
$varr = explode(" ",$vstr);
|
||||
$e = '';
|
||||
foreach($varr AS $v) {
|
||||
$e.=code2utf(hexdec($v));
|
||||
}
|
||||
//============================
|
||||
|
||||
return $e;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
2596
mpdf/classes/svg.php
Executable file
589
mpdf/classes/tocontents.php
Executable file
@ -0,0 +1,589 @@
|
||||
<?php
|
||||
|
||||
class tocontents {
|
||||
|
||||
var $mpdf = null;
|
||||
var $_toc;
|
||||
var $TOCmark;
|
||||
var $TOCfont;
|
||||
var $TOCfontsize;
|
||||
var $TOCindent;
|
||||
var $TOCheader;
|
||||
var $TOCfooter;
|
||||
var $TOCpreHTML;
|
||||
var $TOCpostHTML;
|
||||
var $TOCbookmarkText;
|
||||
var $TOCusePaging;
|
||||
var $TOCuseLinking;
|
||||
var $TOCorientation;
|
||||
var $TOC_margin_left;
|
||||
var $TOC_margin_right;
|
||||
var $TOC_margin_top;
|
||||
var $TOC_margin_bottom;
|
||||
var $TOC_margin_header;
|
||||
var $TOC_margin_footer;
|
||||
var $TOC_odd_header_name;
|
||||
var $TOC_even_header_name;
|
||||
var $TOC_odd_footer_name;
|
||||
var $TOC_even_footer_name;
|
||||
var $TOC_odd_header_value;
|
||||
var $TOC_even_header_value;
|
||||
var $TOC_odd_footer_value;
|
||||
var $TOC_even_footer_value;
|
||||
var $TOC_page_selector;
|
||||
var $m_TOC;
|
||||
|
||||
function tocontents(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
$this->_toc=array();
|
||||
$this->TOCmark = 0;
|
||||
$this->m_TOC=array();
|
||||
}
|
||||
|
||||
function TOCpagebreak($tocfont='', $tocfontsize='', $tocindent='', $TOCusePaging=true, $TOCuseLinking='', $toc_orientation='', $toc_mgl='',$toc_mgr='',$toc_mgt='',$toc_mgb='',$toc_mgh='',$toc_mgf='',$toc_ohname='',$toc_ehname='',$toc_ofname='',$toc_efname='',$toc_ohvalue=0,$toc_ehvalue=0,$toc_ofvalue=0, $toc_efvalue=0, $toc_preHTML='', $toc_postHTML='', $toc_bookmarkText='', $resetpagenum='', $pagenumstyle='', $suppress='', $orientation='', $mgl='',$mgr='',$mgt='',$mgb='',$mgh='',$mgf='',$ohname='',$ehname='',$ofname='',$efname='',$ohvalue=0,$ehvalue=0,$ofvalue=0,$efvalue=0, $toc_id=0, $pagesel='', $toc_pagesel='', $sheetsize='', $toc_sheetsize='') {
|
||||
if (strtoupper($toc_id)=='ALL') { $toc_id = '_mpdf_all'; }
|
||||
else if (!$toc_id) { $toc_id = 0; }
|
||||
else { $toc_id = strtolower($toc_id); }
|
||||
|
||||
if (!$tocfont) { $tocfont = $this->mpdf->default_font; }
|
||||
if (!$tocfontsize) { $tocfontsize = $this->mpdf->default_font_size; }
|
||||
if (!$tocindent && $tocindent !== 0) { $tocindent = 5; }
|
||||
if ($TOCusePaging === false || strtolower($TOCusePaging) == "off" || $TOCusePaging === 0 || $TOCusePaging === "0" || $TOCusePaging === "") { $TOCusePaging = false; }
|
||||
else { $TOCusePaging = true; }
|
||||
if (!$TOCuseLinking) { $TOCuseLinking = false; }
|
||||
if ($toc_id) {
|
||||
$this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['TOCfont'] = $tocfont;
|
||||
$this->m_TOC[$toc_id]['TOCfontsize'] = $tocfontsize;
|
||||
$this->m_TOC[$toc_id]['TOCindent'] = $tocindent;
|
||||
$this->m_TOC[$toc_id]['TOCorientation'] = $toc_orientation;
|
||||
$this->m_TOC[$toc_id]['TOCuseLinking'] = $TOCuseLinking;
|
||||
$this->m_TOC[$toc_id]['TOCusePaging'] = $TOCusePaging;
|
||||
|
||||
if ($toc_preHTML) { $this->m_TOC[$toc_id]['TOCpreHTML'] = $toc_preHTML; }
|
||||
if ($toc_postHTML) { $this->m_TOC[$toc_id]['TOCpostHTML'] = $toc_postHTML; }
|
||||
if ($toc_bookmarkText) { $this->m_TOC[$toc_id]['TOCbookmarkText'] = $toc_bookmarkText; }
|
||||
|
||||
$this->m_TOC[$toc_id]['TOC_margin_left'] = $toc_mgl;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_right'] = $toc_mgr;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_top'] = $toc_mgt;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_bottom'] = $toc_mgb;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_header'] = $toc_mgh;
|
||||
$this->m_TOC[$toc_id]['TOC_margin_footer'] = $toc_mgf;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_name'] = $toc_ohname;
|
||||
$this->m_TOC[$toc_id]['TOC_even_header_name'] = $toc_ehname;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $toc_ofname;
|
||||
$this->m_TOC[$toc_id]['TOC_even_footer_name'] = $toc_efname;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_value'] = $toc_ohvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_even_header_value'] = $toc_ehvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_odd_footer_value'] = $toc_ofvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_even_footer_value'] = $toc_efvalue;
|
||||
$this->m_TOC[$toc_id]['TOC_page_selector'] = $toc_pagesel;
|
||||
$this->m_TOC[$toc_id]['TOCsheetsize'] = $toc_sheetsize;
|
||||
}
|
||||
else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCfont = $tocfont;
|
||||
$this->TOCfontsize = $tocfontsize;
|
||||
$this->TOCindent = $tocindent;
|
||||
$this->TOCorientation = $toc_orientation;
|
||||
$this->TOCuseLinking = $TOCuseLinking;
|
||||
$this->TOCusePaging = $TOCusePaging;
|
||||
|
||||
if ($toc_preHTML) { $this->TOCpreHTML = $toc_preHTML; }
|
||||
if ($toc_postHTML) { $this->TOCpostHTML = $toc_postHTML; }
|
||||
if ($toc_bookmarkText) { $this->TOCbookmarkText = $toc_bookmarkText; }
|
||||
|
||||
$this->TOC_margin_left = $toc_mgl;
|
||||
$this->TOC_margin_right = $toc_mgr;
|
||||
$this->TOC_margin_top = $toc_mgt;
|
||||
$this->TOC_margin_bottom = $toc_mgb;
|
||||
$this->TOC_margin_header = $toc_mgh;
|
||||
$this->TOC_margin_footer = $toc_mgf;
|
||||
$this->TOC_odd_header_name = $toc_ohname;
|
||||
$this->TOC_even_header_name = $toc_ehname;
|
||||
$this->TOC_odd_footer_name = $toc_ofname;
|
||||
$this->TOC_even_footer_name = $toc_efname;
|
||||
$this->TOC_odd_header_value = $toc_ohvalue;
|
||||
$this->TOC_even_header_value = $toc_ehvalue;
|
||||
$this->TOC_odd_footer_value = $toc_ofvalue;
|
||||
$this->TOC_even_footer_value = $toc_efvalue;
|
||||
$this->TOC_page_selector = $toc_pagesel;
|
||||
$this->TOCsheetsize = $toc_sheetsize;
|
||||
}
|
||||
}
|
||||
|
||||
// Initiate, and Mark a place for the Table of Contents to be inserted
|
||||
function TOC($tocfont='', $tocfontsize=8, $tocindent=5, $resetpagenum='', $pagenumstyle='', $suppress='', $toc_orientation='', $TOCusePaging=true, $TOCuseLinking=false, $toc_id=0) {
|
||||
if (strtoupper($toc_id)=='ALL') { $toc_id = '_mpdf_all'; }
|
||||
else if (!$toc_id) { $toc_id = 0; }
|
||||
else { $toc_id = strtolower($toc_id); }
|
||||
// To use odd and even pages
|
||||
// Cannot start table of contents on an even page
|
||||
if (($this->mpdf->mirrorMargins) && (($this->mpdf->page)%2==0)) { // EVEN
|
||||
if ($this->mpdf->ColActive) {
|
||||
if (count($this->mpdf->columnbuffer)) { $this->mpdf->printcolumnbuffer(); }
|
||||
}
|
||||
$this->mpdf->AddPage($this->mpdf->CurOrientation,'',$resetpagenum, $pagenumstyle, $suppress);
|
||||
}
|
||||
else {
|
||||
$this->mpdf->PageNumSubstitutions[] = array('from'=>$this->mpdf->page, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=>$suppress);
|
||||
}
|
||||
if (!$tocfont) { $tocfont = $this->mpdf->default_font; }
|
||||
if (!$tocfontsize) { $tocfontsize = $this->mpdf->default_font_size; }
|
||||
if ($toc_id) {
|
||||
$this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['TOCfont'] = $tocfont;
|
||||
$this->m_TOC[$toc_id]['TOCfontsize'] = $tocfontsize;
|
||||
$this->m_TOC[$toc_id]['TOCindent'] = $tocindent;
|
||||
$this->m_TOC[$toc_id]['TOCorientation'] = $toc_orientation;
|
||||
$this->m_TOC[$toc_id]['TOCuseLinking'] = $TOCuseLinking;
|
||||
$this->m_TOC[$toc_id]['TOCusePaging'] = $TOCusePaging;
|
||||
}
|
||||
else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCfont = $tocfont;
|
||||
$this->TOCfontsize = $tocfontsize;
|
||||
$this->TOCindent = $tocindent;
|
||||
$this->TOCorientation = $toc_orientation;
|
||||
$this->TOCuseLinking = $TOCuseLinking;
|
||||
$this->TOCusePaging = $TOCusePaging;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function insertTOC() {
|
||||
$notocs = 0;
|
||||
if ($this->TOCmark) { $notocs = 1; }
|
||||
$notocs += count($this->m_TOC);
|
||||
|
||||
if ($notocs==0) { return; }
|
||||
|
||||
if (count($this->m_TOC)) { reset($this->m_TOC); }
|
||||
$added_toc_pages = 0;
|
||||
|
||||
if ($this->mpdf->ColActive) { $this->mpdf->SetColumns(0); }
|
||||
if (($this->mpdf->mirrorMargins) && (($this->mpdf->page)%2==1)) { // ODD
|
||||
$this->mpdf->AddPage($this->mpdf->CurOrientation);
|
||||
$extrapage = true;
|
||||
}
|
||||
else { $extrapage = false; }
|
||||
|
||||
for ($toci = 0; $toci<$notocs; $toci++) {
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$toc_id = 0;
|
||||
$toc_page = $this->TOCmark;
|
||||
$tocfont = $this->TOCfont;
|
||||
$tocfontsize = $this->TOCfontsize;
|
||||
$tocindent = $this->TOCindent;
|
||||
$toc_orientation = $this->TOCorientation;
|
||||
$TOCuseLinking = $this->TOCuseLinking;
|
||||
$TOCusePaging = $this->TOCusePaging;
|
||||
$toc_preHTML = $this->TOCpreHTML;
|
||||
$toc_postHTML = $this->TOCpostHTML;
|
||||
$toc_bookmarkText = $this->TOCbookmarkText;
|
||||
$toc_mgl = $this->TOC_margin_left;
|
||||
$toc_mgr = $this->TOC_margin_right;
|
||||
$toc_mgt = $this->TOC_margin_top;
|
||||
$toc_mgb = $this->TOC_margin_bottom;
|
||||
$toc_mgh = $this->TOC_margin_header;
|
||||
$toc_mgf = $this->TOC_margin_footer;
|
||||
$toc_ohname = $this->TOC_odd_header_name;
|
||||
$toc_ehname = $this->TOC_even_header_name;
|
||||
$toc_ofname = $this->TOC_odd_footer_name;
|
||||
$toc_efname = $this->TOC_even_footer_name;
|
||||
$toc_ohvalue = $this->TOC_odd_header_value;
|
||||
$toc_ehvalue = $this->TOC_even_header_value;
|
||||
$toc_ofvalue = $this->TOC_odd_footer_value;
|
||||
$toc_efvalue = $this->TOC_even_footer_value;
|
||||
$toc_page_selector = $this->TOC_page_selector;
|
||||
$toc_sheet_size = $this->TOCsheetsize;
|
||||
}
|
||||
else {
|
||||
$arr = current($this->m_TOC);
|
||||
|
||||
$toc_id = key($this->m_TOC);
|
||||
$toc_page = $this->m_TOC[$toc_id]['TOCmark'];
|
||||
$tocfont = $this->m_TOC[$toc_id]['TOCfont'];
|
||||
$tocfontsize = $this->m_TOC[$toc_id]['TOCfontsize'];
|
||||
$tocindent = $this->m_TOC[$toc_id]['TOCindent'];
|
||||
$toc_orientation = $this->m_TOC[$toc_id]['TOCorientation'];
|
||||
$TOCuseLinking = $this->m_TOC[$toc_id]['TOCuseLinking'];
|
||||
$TOCusePaging = $this->m_TOC[$toc_id]['TOCusePaging'];
|
||||
if (isset($this->m_TOC[$toc_id]['TOCpreHTML'])) { $toc_preHTML = $this->m_TOC[$toc_id]['TOCpreHTML']; }
|
||||
else { $toc_preHTML = ''; }
|
||||
if (isset($this->m_TOC[$toc_id]['TOCpostHTML'])) { $toc_postHTML = $this->m_TOC[$toc_id]['TOCpostHTML']; }
|
||||
else { $toc_postHTML = ''; }
|
||||
if (isset($this->m_TOC[$toc_id]['TOCbookmarkText'])) { $toc_bookmarkText = $this->m_TOC[$toc_id]['TOCbookmarkText']; }
|
||||
else { $toc_bookmarkText = ''; } // *BOOKMARKS*
|
||||
$toc_mgl = $this->m_TOC[$toc_id]['TOC_margin_left'];
|
||||
$toc_mgr = $this->m_TOC[$toc_id]['TOC_margin_right'];
|
||||
$toc_mgt = $this->m_TOC[$toc_id]['TOC_margin_top'];
|
||||
$toc_mgb = $this->m_TOC[$toc_id]['TOC_margin_bottom'];
|
||||
$toc_mgh = $this->m_TOC[$toc_id]['TOC_margin_header'];
|
||||
$toc_mgf = $this->m_TOC[$toc_id]['TOC_margin_footer'];
|
||||
$toc_ohname = $this->m_TOC[$toc_id]['TOC_odd_header_name'];
|
||||
$toc_ehname = $this->m_TOC[$toc_id]['TOC_even_header_name'];
|
||||
$toc_ofname = $this->m_TOC[$toc_id]['TOC_odd_footer_name'];
|
||||
$toc_efname = $this->m_TOC[$toc_id]['TOC_even_footer_name'];
|
||||
$toc_ohvalue = $this->m_TOC[$toc_id]['TOC_odd_header_value'];
|
||||
$toc_ehvalue = $this->m_TOC[$toc_id]['TOC_even_header_value'];
|
||||
$toc_ofvalue = $this->m_TOC[$toc_id]['TOC_odd_footer_value'];
|
||||
$toc_efvalue = $this->m_TOC[$toc_id]['TOC_even_footer_value'];
|
||||
$toc_page_selector = $this->m_TOC[$toc_id]['TOC_page_selector'];
|
||||
$toc_sheet_size = $this->m_TOC[$toc_id]['TOCsheetsize'];
|
||||
next($this->m_TOC);
|
||||
}
|
||||
if ($this->TOCheader) { $this->mpdf->SetHeader($this->TOCheader); }
|
||||
else if ($this->TOCheader !== false) { $this->mpdf->SetHeader(); }
|
||||
|
||||
if (!$tocindent && $tocindent !== 0) { $tocindent = 5; }
|
||||
if (!$toc_orientation) { $toc_orientation= $this->mpdf->DefOrientation; }
|
||||
$this->mpdf->AddPage($toc_orientation, '', '', '', "on", $toc_mgl, $toc_mgr, $toc_mgt, $toc_mgb, $toc_mgh, $toc_mgf, $toc_ohname, $toc_ehname, $toc_ofname, $toc_efname, $toc_ohvalue, $toc_ehvalue, $toc_ofvalue, $toc_efvalue, $toc_page_selector, $toc_sheet_size );
|
||||
|
||||
if ($this->TOCfooter) { $this->mpdf->SetFooter($this->TOCfooter); }
|
||||
else if ($this->TOCfooter !== false) { $this->mpdf->SetFooter(); }
|
||||
|
||||
$tocstart=count($this->mpdf->pages);
|
||||
if ($toc_preHTML) { $this->mpdf->WriteHTML($toc_preHTML); }
|
||||
|
||||
foreach($this->_toc as $t) {
|
||||
if ($t['toc_id']==='_mpdf_all' || $t['toc_id']===$toc_id ) {
|
||||
$tpgno = $this->mpdf->docPageNum($t['p']);
|
||||
$lineheightcorr = 2-$t['l'];
|
||||
//Offset
|
||||
$level=$t['l'];
|
||||
|
||||
if ($TOCuseLinking) { $tlink = $t['link']; }
|
||||
else { $tlink = ''; }
|
||||
|
||||
if ($this->mpdf->directionality == 'rtl') {
|
||||
$weight='';
|
||||
if($level==0)
|
||||
$weight='B';
|
||||
$str=$t['t'];
|
||||
$fullstr = $str;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$PageCellSize=$this->mpdf->GetStringWidth($tpgno )+2;
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$repdots = $this->mpdf->GetStringWidth(str_repeat('.',5)); // mPDF 5.3.07
|
||||
$cw = count(explode(' ',$str));
|
||||
while (($strsize + $repdots +4 + $PageCellSize) > $this->mpdf->pgwidth && $cw>1) { // mPDF 5.3.07
|
||||
$str = implode(' ',explode(' ',$str,-1));
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$cw = count(explode(' ',$str));
|
||||
}
|
||||
$sl = strlen($str);
|
||||
$rem = substr($fullstr, ($sl+1));
|
||||
|
||||
$this->mpdf->magic_reverse_dir($str, true, $this->mpdf->directionality); // *RTL*
|
||||
|
||||
if ($TOCusePaging) {
|
||||
//Page number
|
||||
$this->mpdf->SetFont($tocfont,'',$tocfontsize);
|
||||
$this->mpdf->Cell($PageCellSize,$this->mpdf->FontSize+$lineheightcorr,$tpgno ,0,0,'L',0,$tlink);
|
||||
|
||||
//Filling dots
|
||||
$w=$this->mpdf->w-$this->mpdf->lMargin-$this->mpdf->rMargin-$PageCellSize-($level*$tocindent)-($strsize+2);
|
||||
$nb=intval($w/$this->mpdf->GetCharWidth('.',false)); // mPDF 5.3.04
|
||||
if ($nb>0) {
|
||||
$dots=str_repeat('.',$nb);
|
||||
$this->mpdf->Cell($w+2,$this->mpdf->FontSize+$lineheightcorr,$dots,0,0,'L');
|
||||
}
|
||||
// Text
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize);
|
||||
$this->mpdf->Cell($strsize-($level*$tocindent),$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'R',0,$tlink);
|
||||
}
|
||||
else {
|
||||
// Text
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize);
|
||||
$this->mpdf->Cell($this->mpdf->pgwidth -($level*$tocindent),$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'R',0,$tlink);
|
||||
}
|
||||
|
||||
if ($rem) {
|
||||
$this->mpdf->x += 10;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$this->mpdf->MultiCell($this->mpdf->pgwidth -($level*$tocindent)-15,$this->mpdf->FontSize+$lineheightcorr,$rem,0,R,0,$tlink,'rtl',true);
|
||||
}
|
||||
}
|
||||
// LTR
|
||||
else {
|
||||
// Text
|
||||
$weight='';
|
||||
if($level==0)
|
||||
$weight='B';
|
||||
$str=$t['t'];
|
||||
$fullstr = $str;
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
if($level>0 && $tocindent) { $this->mpdf->Cell($level*$tocindent,$this->mpdf->FontSize+$lineheightcorr); }
|
||||
|
||||
// Font-specific ligature substitution for Indic fonts
|
||||
if (isset($this->mpdf->CurrentFont['indic']) && $this->mpdf->CurrentFont['indic']) $this->mpdf->ConvertIndic($str); // *INDIC*
|
||||
|
||||
$PageCellSize=$this->mpdf->GetStringWidth($tpgno )+2;
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$repdots = $this->mpdf->GetStringWidth(str_repeat('.',5)); // mPDF 5.3.07
|
||||
$cw = count(explode(' ',$str));
|
||||
while (($strsize + $repdots +4+ $PageCellSize + ($level*$tocindent)) > $this->mpdf->pgwidth && $cw>1) { // mPDF 5.3.07
|
||||
$str = implode(' ',explode(' ',$str,-1));
|
||||
$strsize=$this->mpdf->GetStringWidth($str);
|
||||
$cw = count(explode(' ',$str));
|
||||
}
|
||||
$sl = strlen($str);
|
||||
$rem = substr($fullstr, ($sl+1));
|
||||
|
||||
if ($TOCusePaging) {
|
||||
// Text
|
||||
$this->mpdf->Cell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$str,0,0,'',0,$tlink);
|
||||
|
||||
//Filling dots
|
||||
$this->mpdf->SetFont($tocfont,'',$tocfontsize);
|
||||
$w=$this->mpdf->w-$this->mpdf->lMargin-$this->mpdf->rMargin-$PageCellSize-($level*$tocindent)-($strsize+2);
|
||||
$nb=intval($w/$this->mpdf->GetCharWidth('.',false)); // mPDF 5.3.04
|
||||
if ($nb>0) { $dots=str_repeat('.',$nb); }
|
||||
else { $this->mpdf->y += $this->mpdf->lineheight; $dots=str_repeat('.',5); } // ..... 5 dots?
|
||||
$this->mpdf->Cell($w,$this->mpdf->FontSize+$lineheightcorr,$dots,0,0,'R');
|
||||
|
||||
//Page number
|
||||
$this->mpdf->Cell($PageCellSize,$this->mpdf->FontSize+$lineheightcorr,$tpgno ,0,1,'R',0,$tlink);
|
||||
}
|
||||
else {
|
||||
// Text only
|
||||
$this->mpdf->Cell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$str,0,1,'',0,$tlink); // forces new line
|
||||
}
|
||||
if ($rem) {
|
||||
$this->mpdf->x += 5 + $PageCellSize + ($level*$tocindent);
|
||||
$this->mpdf->SetFont($tocfont,$weight,$tocfontsize,true,true);
|
||||
$this->mpdf->MultiCell($strsize+2,$this->mpdf->FontSize+$lineheightcorr,$rem,0,L,0,$tlink,'ltr',true);
|
||||
}
|
||||
|
||||
} // *RTL*
|
||||
}
|
||||
}
|
||||
|
||||
if ($toc_postHTML) { $this->mpdf->WriteHTML($toc_postHTML); }
|
||||
$this->mpdf->AddPage($toc_orientation,'E');
|
||||
|
||||
$n_toc = $this->mpdf->page - $tocstart + 1;
|
||||
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$TOC_start = $tocstart ;
|
||||
$TOC_end = $this->mpdf->page;
|
||||
$TOC_npages = $n_toc;
|
||||
}
|
||||
else {
|
||||
$this->m_TOC[$toc_id]['start'] = $tocstart ;
|
||||
$this->m_TOC[$toc_id]['end'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['npages'] = $n_toc;
|
||||
}
|
||||
}
|
||||
|
||||
$s = '';
|
||||
|
||||
$s .= $this->mpdf->PrintBodyBackgrounds();
|
||||
|
||||
$s .= $this->mpdf->PrintPageBackgrounds();
|
||||
$this->mpdf->pages[$this->mpdf->page] = preg_replace('/(___BACKGROUND___PATTERNS'.date('jY').')/', "\n".$s."\n".'\\1', $this->mpdf->pages[$this->mpdf->page]);
|
||||
$this->mpdf->pageBackgrounds = array();
|
||||
|
||||
//Page footer
|
||||
$this->mpdf->InFooter=true;
|
||||
$this->mpdf->Footer();
|
||||
$this->mpdf->InFooter=false;
|
||||
|
||||
// 2nd time through to move pages etc.
|
||||
$added_toc_pages = 0;
|
||||
if (count($this->m_TOC)) { reset($this->m_TOC); }
|
||||
|
||||
for ($toci = 0; $toci<$notocs; $toci++) {
|
||||
if ($toci==0 && $this->TOCmark) {
|
||||
$toc_id = 0;
|
||||
$toc_page = $this->TOCmark + $added_toc_pages;
|
||||
$toc_orientation = $this->TOCorientation;
|
||||
$TOCuseLinking = $this->TOCuseLinking;
|
||||
$TOCusePaging = $this->TOCusePaging;
|
||||
$toc_bookmarkText = $this->TOCbookmarkText; // *BOOKMARKS*
|
||||
|
||||
$tocstart = $TOC_start ;
|
||||
$tocend = $n = $TOC_end;
|
||||
$n_toc = $TOC_npages;
|
||||
}
|
||||
else {
|
||||
$arr = current($this->m_TOC);
|
||||
|
||||
$toc_id = key($this->m_TOC);
|
||||
$toc_page = $this->m_TOC[$toc_id]['TOCmark'] + $added_toc_pages;
|
||||
$toc_orientation = $this->m_TOC[$toc_id]['TOCorientation'];
|
||||
$TOCuseLinking = $this->m_TOC[$toc_id]['TOCuseLinking'];
|
||||
$TOCusePaging = $this->m_TOC[$toc_id]['TOCusePaging'];
|
||||
$toc_bookmarkText = $this->m_TOC[$toc_id]['TOCbookmarkText']; // *BOOKMARKS*
|
||||
|
||||
$tocstart = $this->m_TOC[$toc_id]['start'] ;
|
||||
$tocend = $n = $this->m_TOC[$toc_id]['end'] ;
|
||||
$n_toc = $this->m_TOC[$toc_id]['npages'] ;
|
||||
|
||||
next($this->m_TOC);
|
||||
}
|
||||
|
||||
// Now pages moved
|
||||
$added_toc_pages += $n_toc;
|
||||
|
||||
$this->mpdf->MovePages($toc_page, $tocstart, $tocend) ;
|
||||
$this->mpdf->pgsIns[$toc_page] = $tocend - $tocstart + 1;
|
||||
|
||||
/*-- BOOKMARKS --*/
|
||||
// Insert new Bookmark for Bookmark
|
||||
if ($toc_bookmarkText) {
|
||||
$insert = -1;
|
||||
foreach($this->mpdf->BMoutlines as $i=>$o) {
|
||||
if($o['p']<$toc_page) { // i.e. before point of insertion
|
||||
$insert = $i;
|
||||
}
|
||||
}
|
||||
$txt = $this->mpdf->purify_utf8_text($toc_bookmarkText);
|
||||
if ($this->mpdf->text_input_as_HTML) {
|
||||
$txt = $this->mpdf->all_entities_to_utf8($txt);
|
||||
}
|
||||
$newBookmark[0] = array('t'=>$txt,'l'=>0,'y'=>0,'p'=>$toc_page );
|
||||
array_splice($this->mpdf->BMoutlines,($insert+1),0,$newBookmark);
|
||||
}
|
||||
/*-- END BOOKMARKS --*/
|
||||
|
||||
}
|
||||
|
||||
// Delete empty page that was inserted earlier
|
||||
if ($extrapage) {
|
||||
unset($this->mpdf->pages[count($this->mpdf->pages)]);
|
||||
$this->mpdf->page--; // Reset page pointer
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function openTagTOC($attr) {
|
||||
if (isset($attr['FONT-SIZE']) && $attr['FONT-SIZE']) { $tocfontsize = $attr['FONT-SIZE']; } else { $tocfontsize = ''; }
|
||||
if (isset($attr['FONT']) && $attr['FONT']) { $tocfont = $attr['FONT']; } else { $tocfont = ''; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $tocindent = $attr['INDENT']; } else { $tocindent = ''; }
|
||||
if (isset($attr['RESETPAGENUM']) && $attr['RESETPAGENUM']) { $resetpagenum = $attr['RESETPAGENUM']; } else { $resetpagenum = ''; }
|
||||
if (isset($attr['PAGENUMSTYLE']) && $attr['PAGENUMSTYLE']) { $pagenumstyle = $attr['PAGENUMSTYLE']; } else { $pagenumstyle= ''; }
|
||||
if (isset($attr['SUPPRESS']) && $attr['SUPPRESS']) { $suppress = $attr['SUPPRESS']; } else { $suppress = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $toc_orientation = $attr['TOC-ORIENTATION']; } else { $toc_orientation = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $paging = false; }
|
||||
else { $paging = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $links = true; }
|
||||
else { $links = false; }
|
||||
if (isset($attr['NAME']) && $attr['NAME']) { $toc_id = strtolower($attr['NAME']); } else { $toc_id = 0; }
|
||||
$this->TOC($tocfont,$tocfontsize,$tocindent,$resetpagenum, $pagenumstyle, $suppress, $toc_orientation, $paging, $links, $toc_id);
|
||||
}
|
||||
|
||||
|
||||
function openTagTOCPAGEBREAK($attr) {
|
||||
if (isset($attr['NAME']) && $attr['NAME']) { $toc_id = strtolower($attr['NAME']); } else { $toc_id = 0; }
|
||||
if ($toc_id) {
|
||||
if (isset($attr['FONT-SIZE'])) { $this->m_TOC[$toc_id]['TOCfontsize'] = $attr['FONT-SIZE']; } else { $this->m_TOC[$toc_id]['TOCfontsize'] = $this->mpdf->default_font_size; }
|
||||
if (isset($attr['FONT'])) { $this->m_TOC[$toc_id]['TOCfont'] = $attr['FONT']; } else { $this->m_TOC[$toc_id]['TOCfont'] = $this->mpdf->default_font; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $this->m_TOC[$toc_id]['TOCindent'] = $attr['INDENT']; } else { $this->m_TOC[$toc_id]['TOCindent'] = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $this->m_TOC[$toc_id]['TOCorientation'] = $attr['TOC-ORIENTATION']; } else { $this->m_TOC[$toc_id]['TOCorientation'] = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $this->m_TOC[$toc_id]['TOCusePaging'] = false; }
|
||||
else { $this->m_TOC[$toc_id]['TOCusePaging'] = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $this->m_TOC[$toc_id]['TOCuseLinking'] = true; }
|
||||
else { $this->m_TOC[$toc_id]['TOCuseLinking'] = false; }
|
||||
|
||||
$this->m_TOC[$toc_id]['TOC_margin_left'] = $this->m_TOC[$toc_id]['TOC_margin_right'] = $this->m_TOC[$toc_id]['TOC_margin_top'] = $this->m_TOC[$toc_id]['TOC_margin_bottom'] = $this->m_TOC[$toc_id]['TOC_margin_header'] = $this->m_TOC[$toc_id]['TOC_margin_footer'] = '';
|
||||
if (isset($attr['TOC-MARGIN-RIGHT'])) { $this->m_TOC[$toc_id]['TOC_margin_right'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-RIGHT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-LEFT'])) { $this->m_TOC[$toc_id]['TOC_margin_left'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-LEFT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-TOP'])) { $this->m_TOC[$toc_id]['TOC_margin_top'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-TOP'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-BOTTOM'])) { $this->m_TOC[$toc_id]['TOC_margin_bottom'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-BOTTOM'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-HEADER'])) { $this->m_TOC[$toc_id]['TOC_margin_header'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-HEADER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-FOOTER'])) { $this->m_TOC[$toc_id]['TOC_margin_footer'] = $this->mpdf->ConvertSize($attr['TOC-MARGIN-FOOTER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_name'] = $this->m_TOC[$toc_id]['TOC_even_header_name'] = $this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $this->m_TOC[$toc_id]['TOC_even_footer_name'] = '';
|
||||
if (isset($attr['TOC-ODD-HEADER-NAME']) && $attr['TOC-ODD-HEADER-NAME']) { $this->m_TOC[$toc_id]['TOC_odd_header_name'] = $attr['TOC-ODD-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-NAME']) && $attr['TOC-EVEN-HEADER-NAME']) { $this->m_TOC[$toc_id]['TOC_even_header_name'] = $attr['TOC-EVEN-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-NAME']) && $attr['TOC-ODD-FOOTER-NAME']) { $this->m_TOC[$toc_id]['TOC_odd_footer_name'] = $attr['TOC-ODD-FOOTER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-NAME']) && $attr['TOC-EVEN-FOOTER-NAME']) { $this->m_TOC[$toc_id]['TOC_even_footer_name'] = $attr['TOC-EVEN-FOOTER-NAME']; }
|
||||
$this->m_TOC[$toc_id]['TOC_odd_header_value'] = $this->m_TOC[$toc_id]['TOC_even_header_value'] = $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = $this->m_TOC[$toc_id]['TOC_even_footer_value'] = 0;
|
||||
if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_odd_header_value'] = 1; }
|
||||
else if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_odd_header_value'] = -1; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_even_header_value'] = 1; }
|
||||
else if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_even_header_value'] = -1; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = 1; }
|
||||
else if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_odd_footer_value'] = -1; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='ON')) { $this->m_TOC[$toc_id]['TOC_even_footer_value'] = 1; }
|
||||
else if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='OFF')) { $this->m_TOC[$toc_id]['TOC_even_footer_value'] = -1; }
|
||||
if (isset($attr['TOC-PAGE-SELECTOR']) && $attr['TOC-PAGE-SELECTOR']) { $this->m_TOC[$toc_id]['TOC_page_selector'] = $attr['TOC-PAGE-SELECTOR']; }
|
||||
else { $this->m_TOC[$toc_id]['TOC_page_selector'] = ''; }
|
||||
if (isset($attr['TOC-SHEET-SIZE']) && $attr['TOC-SHEET-SIZE']) { $this->m_TOC[$toc_id]['TOCsheetsize'] = $attr['TOC-SHEET-SIZE']; } else { $this->m_TOC[$toc_id]['TOCsheetsize'] = ''; }
|
||||
|
||||
|
||||
if (isset($attr['TOC-PREHTML']) && $attr['TOC-PREHTML']) { $this->m_TOC[$toc_id]['TOCpreHTML'] = htmlspecialchars_decode($attr['TOC-PREHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-POSTHTML']) && $attr['TOC-POSTHTML']) { $this->m_TOC[$toc_id]['TOCpostHTML'] = htmlspecialchars_decode($attr['TOC-POSTHTML'],ENT_QUOTES); }
|
||||
|
||||
if (isset($attr['TOC-BOOKMARKTEXT']) && $attr['TOC-BOOKMARKTEXT']) { $this->m_TOC[$toc_id]['TOCbookmarkText'] = htmlspecialchars_decode($attr['TOC-BOOKMARKTEXT'],ENT_QUOTES); } // *BOOKMARKS*
|
||||
}
|
||||
else {
|
||||
if (isset($attr['FONT-SIZE'])) { $this->TOCfontsize = $attr['FONT-SIZE']; } else { $this->TOCfontsize = $this->mpdf->default_font_size; }
|
||||
if (isset($attr['FONT'])) { $this->TOCfont = $attr['FONT']; } else { $this->TOCfont = $this->mpdf->default_font; }
|
||||
if (isset($attr['INDENT']) && $attr['INDENT']) { $this->TOCindent = $attr['INDENT']; } else { $this->TOCindent = ''; }
|
||||
if (isset($attr['TOC-ORIENTATION']) && $attr['TOC-ORIENTATION']) { $this->TOCorientation = $attr['TOC-ORIENTATION']; } else { $this->TOCorientation = ''; }
|
||||
if (isset($attr['PAGING']) && (strtoupper($attr['PAGING'])=='OFF' || $attr['PAGING']==='0')) { $this->TOCusePaging = false; }
|
||||
else { $this->TOCusePaging = true; }
|
||||
if (isset($attr['LINKS']) && (strtoupper($attr['LINKS'])=='ON' || $attr['LINKS']==1)) { $this->TOCuseLinking = true; }
|
||||
else { $this->TOCuseLinking = false; }
|
||||
|
||||
$this->TOC_margin_left = $this->TOC_margin_right = $this->TOC_margin_top = $this->TOC_margin_bottom = $this->TOC_margin_header = $this->TOC_margin_footer = '';
|
||||
if (isset($attr['TOC-MARGIN-RIGHT'])) { $this->TOC_margin_right = $this->mpdf->ConvertSize($attr['TOC-MARGIN-RIGHT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-LEFT'])) { $this->TOC_margin_left = $this->mpdf->ConvertSize($attr['TOC-MARGIN-LEFT'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-TOP'])) { $this->TOC_margin_top = $this->mpdf->ConvertSize($attr['TOC-MARGIN-TOP'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-BOTTOM'])) { $this->TOC_margin_bottom = $this->mpdf->ConvertSize($attr['TOC-MARGIN-BOTTOM'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-HEADER'])) { $this->TOC_margin_header = $this->mpdf->ConvertSize($attr['TOC-MARGIN-HEADER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
if (isset($attr['TOC-MARGIN-FOOTER'])) { $this->TOC_margin_footer = $this->mpdf->ConvertSize($attr['TOC-MARGIN-FOOTER'],$this->mpdf->w,$this->mpdf->FontSize,false); }
|
||||
$this->TOC_odd_header_name = $this->TOC_even_header_name = $this->TOC_odd_footer_name = $this->TOC_even_footer_name = '';
|
||||
if (isset($attr['TOC-ODD-HEADER-NAME']) && $attr['TOC-ODD-HEADER-NAME']) { $this->TOC_odd_header_name = $attr['TOC-ODD-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-NAME']) && $attr['TOC-EVEN-HEADER-NAME']) { $this->TOC_even_header_name = $attr['TOC-EVEN-HEADER-NAME']; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-NAME']) && $attr['TOC-ODD-FOOTER-NAME']) { $this->TOC_odd_footer_name = $attr['TOC-ODD-FOOTER-NAME']; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-NAME']) && $attr['TOC-EVEN-FOOTER-NAME']) { $this->TOC_even_footer_name = $attr['TOC-EVEN-FOOTER-NAME']; }
|
||||
$this->TOC_odd_header_value = $this->TOC_even_header_value = $this->TOC_odd_footer_value = $this->TOC_even_footer_value = 0;
|
||||
if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='ON')) { $this->TOC_odd_header_value = 1; }
|
||||
else if (isset($attr['TOC-ODD-HEADER-VALUE']) && ($attr['TOC-ODD-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-HEADER-VALUE'])=='OFF')) { $this->TOC_odd_header_value = -1; }
|
||||
if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='ON')) { $this->TOC_even_header_value = 1; }
|
||||
else if (isset($attr['TOC-EVEN-HEADER-VALUE']) && ($attr['TOC-EVEN-HEADER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-HEADER-VALUE'])=='OFF')) { $this->TOC_even_header_value = -1; }
|
||||
if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='ON')) { $this->TOC_odd_footer_value = 1; }
|
||||
else if (isset($attr['TOC-ODD-FOOTER-VALUE']) && ($attr['TOC-ODD-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-ODD-FOOTER-VALUE'])=='OFF')) { $this->TOC_odd_footer_value = -1; }
|
||||
if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='ON')) { $this->TOC_even_footer_value = 1; }
|
||||
else if (isset($attr['TOC-EVEN-FOOTER-VALUE']) && ($attr['TOC-EVEN-FOOTER-VALUE']=='-1' || strtoupper($attr['TOC-EVEN-FOOTER-VALUE'])=='OFF')) { $this->TOC_even_footer_value = -1; }
|
||||
if (isset($attr['TOC-PAGE-SELECTOR']) && $attr['TOC-PAGE-SELECTOR']) { $this->TOC_page_selector = $attr['TOC-PAGE-SELECTOR']; }
|
||||
else { $this->TOC_page_selector = ''; }
|
||||
if (isset($attr['TOC-SHEET-SIZE']) && $attr['TOC-SHEET-SIZE']) { $this->TOCsheetsize = $attr['TOC-SHEET-SIZE']; } else { $this->TOCsheetsize = ''; }
|
||||
|
||||
|
||||
if (isset($attr['TOC-PREHTML']) && $attr['TOC-PREHTML']) { $this->TOCpreHTML = htmlspecialchars_decode($attr['TOC-PREHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-POSTHTML']) && $attr['TOC-POSTHTML']) { $this->TOCpostHTML = htmlspecialchars_decode($attr['TOC-POSTHTML'],ENT_QUOTES); }
|
||||
if (isset($attr['TOC-BOOKMARKTEXT']) && $attr['TOC-BOOKMARKTEXT']) { $this->TOCbookmarkText = htmlspecialchars_decode($attr['TOC-BOOKMARKTEXT'],ENT_QUOTES); }
|
||||
}
|
||||
|
||||
if ($this->mpdf->y == $this->mpdf->tMargin && (!$this->mpdf->mirrorMargins ||($this->mpdf->mirrorMargins && $this->mpdf->page % 2==1))) {
|
||||
if ($toc_id) { $this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page; }
|
||||
else { $this->TOCmark = $this->mpdf->page; }
|
||||
// Don't add a page
|
||||
if ($this->mpdf->page==1 && count($this->mpdf->PageNumSubstitutions)==0) {
|
||||
$resetpagenum = '';
|
||||
$pagenumstyle = '';
|
||||
$suppress = '';
|
||||
if (isset($attr['RESETPAGENUM'])) { $resetpagenum = $attr['RESETPAGENUM']; }
|
||||
if (isset($attr['PAGENUMSTYLE'])) { $pagenumstyle = $attr['PAGENUMSTYLE']; }
|
||||
if (isset($attr['SUPPRESS'])) { $suppress = $attr['SUPPRESS']; }
|
||||
if (!$suppress) { $suppress = 'off'; }
|
||||
if (!$resetpagenum) { $resetpagenum= 1; }
|
||||
$this->mpdf->PageNumSubstitutions[] = array('from'=>1, 'reset'=> $resetpagenum, 'type'=>$pagenumstyle, 'suppress'=> $suppress);
|
||||
}
|
||||
return array(true, $toc_id);
|
||||
}
|
||||
// No break - continues as PAGEBREAK...
|
||||
return array(false, $toc_id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
2373
mpdf/classes/ttfontsuni.php
Executable file
236
mpdf/classes/wmf.php
Executable file
@ -0,0 +1,236 @@
|
||||
<?php
|
||||
|
||||
class wmf {
|
||||
|
||||
var $mpdf = null;
|
||||
var $gdiObjectArray;
|
||||
|
||||
function wmf(&$mpdf) {
|
||||
$this->mpdf = $mpdf;
|
||||
}
|
||||
|
||||
|
||||
function _getWMFimage($data) {
|
||||
$k = _MPDFK;
|
||||
|
||||
$this->gdiObjectArray = array();
|
||||
$a=unpack('stest',"\1\0");
|
||||
if ($a['test']!=1)
|
||||
return array(0, 'Error parsing WMF image - Big-endian architecture not supported');
|
||||
// check for Aldus placeable metafile header
|
||||
$key = unpack('Lmagic', substr($data, 0, 4));
|
||||
$p = 18; // WMF header
|
||||
if ($key['magic'] == (int)0x9AC6CDD7) { $p +=22; } // Aldus header
|
||||
// define some state variables
|
||||
$wo=null; // window origin
|
||||
$we=null; // window extent
|
||||
$polyFillMode = 0;
|
||||
$nullPen = false;
|
||||
$nullBrush = false;
|
||||
$endRecord = false;
|
||||
$wmfdata = '';
|
||||
while ($p < strlen($data) && !$endRecord) {
|
||||
$recordInfo = unpack('Lsize/Sfunc', substr($data, $p, 6)); $p += 6;
|
||||
// size of record given in WORDs (= 2 bytes)
|
||||
$size = $recordInfo['size'];
|
||||
// func is number of GDI function
|
||||
$func = $recordInfo['func'];
|
||||
if ($size > 3) {
|
||||
$parms = substr($data, $p, 2*($size-3)); $p += 2*($size-3);
|
||||
}
|
||||
switch ($func) {
|
||||
case 0x020b: // SetWindowOrg
|
||||
// do not allow window origin to be changed
|
||||
// after drawing has begun
|
||||
if (!$wmfdata)
|
||||
$wo = array_reverse(unpack('s2', $parms));
|
||||
break;
|
||||
case 0x020c: // SetWindowExt
|
||||
// do not allow window extent to be changed
|
||||
// after drawing has begun
|
||||
if (!$wmfdata)
|
||||
$we = array_reverse(unpack('s2', $parms));
|
||||
break;
|
||||
case 0x02fc: // CreateBrushIndirect
|
||||
$brush = unpack('sstyle/Cr/Cg/Cb/Ca/Shatch', $parms);
|
||||
$brush['type'] = 'B';
|
||||
$this->_AddGDIObject($brush);
|
||||
break;
|
||||
case 0x02fa: // CreatePenIndirect
|
||||
$pen = unpack('Sstyle/swidth/sdummy/Cr/Cg/Cb/Ca', $parms);
|
||||
// convert width from twips to user unit
|
||||
$pen['width'] /= (20 * $k);
|
||||
$pen['type'] = 'P';
|
||||
$this->_AddGDIObject($pen);
|
||||
break;
|
||||
|
||||
// MUST create other GDI objects even if we don't handle them
|
||||
case 0x06fe: // CreateBitmap
|
||||
case 0x02fd: // CreateBitmapIndirect
|
||||
case 0x00f8: // CreateBrush
|
||||
case 0x02fb: // CreateFontIndirect
|
||||
case 0x00f7: // CreatePalette
|
||||
case 0x01f9: // CreatePatternBrush
|
||||
case 0x06ff: // CreateRegion
|
||||
case 0x0142: // DibCreatePatternBrush
|
||||
$dummyObject = array('type'=>'D');
|
||||
$this->_AddGDIObject($dummyObject);
|
||||
break;
|
||||
case 0x0106: // SetPolyFillMode
|
||||
$polyFillMode = unpack('smode', $parms);
|
||||
$polyFillMode = $polyFillMode['mode'];
|
||||
break;
|
||||
case 0x01f0: // DeleteObject
|
||||
$idx = unpack('Sidx', $parms);
|
||||
$idx = $idx['idx'];
|
||||
$this->_DeleteGDIObject($idx);
|
||||
break;
|
||||
case 0x012d: // SelectObject
|
||||
$idx = unpack('Sidx', $parms);
|
||||
$idx = $idx['idx'];
|
||||
$obj = $this->_GetGDIObject($idx);
|
||||
switch ($obj['type']) {
|
||||
case 'B':
|
||||
$nullBrush = false;
|
||||
if ($obj['style'] == 1) { $nullBrush = true; }
|
||||
else {
|
||||
$wmfdata .= $this->mpdf->SetFColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n";
|
||||
}
|
||||
break;
|
||||
case 'P':
|
||||
$nullPen = false;
|
||||
$dashArray = array();
|
||||
// dash parameters are custom
|
||||
switch ($obj['style']) {
|
||||
case 0: // PS_SOLID
|
||||
break;
|
||||
case 1: // PS_DASH
|
||||
$dashArray = array(3,1);
|
||||
break;
|
||||
case 2: // PS_DOT
|
||||
$dashArray = array(0.5,0.5);
|
||||
break;
|
||||
case 3: // PS_DASHDOT
|
||||
$dashArray = array(2,1,0.5,1);
|
||||
break;
|
||||
case 4: // PS_DASHDOTDOT
|
||||
$dashArray = array(2,1,0.5,1,0.5,1);
|
||||
break;
|
||||
case 5: // PS_NULL
|
||||
$nullPen = true;
|
||||
break;
|
||||
}
|
||||
if (!$nullPen) {
|
||||
$wmfdata .= $this->mpdf->SetDColor($this->mpdf->ConvertColor('rgb('.$obj['r'].','.$obj['g'].','.$obj['b'].')'), true)."\n";
|
||||
$wmfdata .= sprintf("%.3F w\n",$obj['width']*$k);
|
||||
}
|
||||
if (!empty($dashArray)) {
|
||||
$s = '[';
|
||||
for ($i=0; $i<count($dashArray);$i++) {
|
||||
$s .= $dashArray[$i] * $k;
|
||||
if ($i != count($dashArray)-1) { $s .= ' '; }
|
||||
}
|
||||
$s .= '] 0 d';
|
||||
$wmfdata .= $s."\n";
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x0325: // Polyline
|
||||
case 0x0324: // Polygon
|
||||
$coords = unpack('s'.($size-3), $parms);
|
||||
$numpoints = $coords[1];
|
||||
for ($i = $numpoints; $i > 0; $i--) {
|
||||
$px = $coords[2*$i];
|
||||
$py = $coords[2*$i+1];
|
||||
|
||||
if ($i < $numpoints) { $wmfdata .= $this->_LineTo($px, $py); }
|
||||
else { $wmfdata .= $this->_MoveTo($px, $py); }
|
||||
}
|
||||
if ($func == 0x0325) { $op = 's'; }
|
||||
else if ($func == 0x0324) {
|
||||
if ($nullPen) {
|
||||
if ($nullBrush) { $op = 'n'; } // no op
|
||||
else { $op = 'f'; } // fill
|
||||
}
|
||||
else {
|
||||
if ($nullBrush) { $op = 's'; } // stroke
|
||||
else { $op = 'b'; } // stroke and fill
|
||||
}
|
||||
if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule
|
||||
}
|
||||
$wmfdata .= $op."\n";
|
||||
break;
|
||||
case 0x0538: // PolyPolygon
|
||||
$coords = unpack('s'.($size-3), $parms);
|
||||
$numpolygons = $coords[1];
|
||||
$adjustment = $numpolygons;
|
||||
for ($j = 1; $j <= $numpolygons; $j++) {
|
||||
$numpoints = $coords[$j + 1];
|
||||
for ($i = $numpoints; $i > 0; $i--) {
|
||||
$px = $coords[2*$i + $adjustment];
|
||||
$py = $coords[2*$i+1 + $adjustment];
|
||||
if ($i == $numpoints) { $wmfdata .= $this->_MoveTo($px, $py); }
|
||||
else { $wmfdata .= $this->_LineTo($px, $py); }
|
||||
}
|
||||
$adjustment += $numpoints * 2;
|
||||
}
|
||||
|
||||
if ($nullPen) {
|
||||
if ($nullBrush) { $op = 'n'; } // no op
|
||||
else { $op = 'f'; } // fill
|
||||
}
|
||||
else {
|
||||
if ($nullBrush) { $op = 's'; } // stroke
|
||||
else { $op = 'b'; } // stroke and fill
|
||||
}
|
||||
if ($polyFillMode==1 && ($op=='b' || $op=='f')) { $op .= '*'; } // use even-odd fill rule
|
||||
$wmfdata .= $op."\n";
|
||||
break;
|
||||
case 0x0000:
|
||||
$endRecord = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return array(1,$wmfdata,$wo,$we);
|
||||
}
|
||||
|
||||
|
||||
function _MoveTo($x, $y) {
|
||||
return "$x $y m\n";
|
||||
}
|
||||
|
||||
// a line must have been started using _MoveTo() first
|
||||
function _LineTo($x, $y) {
|
||||
return "$x $y l\n";
|
||||
}
|
||||
|
||||
function _AddGDIObject($obj) {
|
||||
// find next available slot
|
||||
$idx = 0;
|
||||
if (!empty($this->gdiObjectArray)) {
|
||||
$empty = false;
|
||||
$i = 0;
|
||||
while (!$empty) {
|
||||
$empty = !isset($this->gdiObjectArray[$i]);
|
||||
$i++;
|
||||
}
|
||||
$idx = $i-1;
|
||||
}
|
||||
$this->gdiObjectArray[$idx] = $obj;
|
||||
}
|
||||
|
||||
function _GetGDIObject($idx) {
|
||||
return $this->gdiObjectArray[$idx];
|
||||
}
|
||||
|
||||
function _DeleteGDIObject($idx) {
|
||||
unset($this->gdiObjectArray[$idx]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
172
mpdf/compress.php
Executable file
@ -0,0 +1,172 @@
|
||||
<?php
|
||||
|
||||
$excl = array( 'HTML-CSS', 'DIRECTW', 'TABLES', 'LISTS', 'IMAGES-CORE',
|
||||
'IMAGES-BMP', 'IMAGES-WMF', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'COLUMNS', 'TOC', 'INDEX', 'BOOKMARKS', 'BARCODES', 'FORMS', 'WATERMARK', 'CJK-FONTS', 'RTL', 'INDIC', 'ANNOTATIONS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS', 'HYPHENATION', 'ENCRYPTION', 'IMPORTS', 'PROGRESS-BAR');
|
||||
|
||||
|
||||
// *DIRECTW* = Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText
|
||||
// IMAGES-CORE = [PNG, GIF, and JPG] NB background-images and watermark images
|
||||
|
||||
// Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS'
|
||||
|
||||
// Text is marked in mpdf_source.php with e.g. :
|
||||
/*-- TABLES-ADVANCED-BORDERS --*/
|
||||
/*-- END TABLES-ADVANCED-BORDERS --*/
|
||||
// *TABLES-ADVANCED-BORDERS*
|
||||
|
||||
|
||||
if (!isset($_POST['generate']) || $_POST['generate']!='generate') {
|
||||
|
||||
|
||||
if (!file_exists('mpdf_source.php')) {
|
||||
die("ERROR - Could not find mpdf_source.php file in current directory. Please rename mpdf.php as mpdf_source.php");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
echo '<html>
|
||||
<head>
|
||||
<script language=javascript>
|
||||
checked=false;
|
||||
function checkedAll (frm1) {
|
||||
var aa= document.getElementById("frm1");
|
||||
if (checked == false)
|
||||
{
|
||||
checked = true
|
||||
}
|
||||
else
|
||||
{
|
||||
checked = false
|
||||
}
|
||||
for (var i =0; i < aa.elements.length; i++)
|
||||
{
|
||||
aa.elements[i].checked = checked;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p><span style="color:red; font-weight: bold;">WARNING</span>: This utility will OVERWRITE mpdf.php file in the current directory.</p>
|
||||
<p>Select the functions you wish to INCLUDE in your mpdf.php program. When you click generate, a new mpdf.php file will be written to the current directory.</p>
|
||||
<div><b>Notes</b>
|
||||
<ul>
|
||||
<li>HTML-CSS is required for many of the other functions to work including: Tables, Lists, Backgrounds, Forms, Border-radius and all other CSS</li>
|
||||
<li>DIRECTW includes the functions to Write directly to the PDF file e.g. Write, WriteText, WriteCell, Text, Shaded_box, AutosizeText</li>
|
||||
<li>You must include either HTML-CSS or DIRECTW</li>
|
||||
<li>JPG, PNG and JPG images are supported with IMAGES-CORE</li>
|
||||
<li>For WMF Images, you must include both IMAGES-CORE and IMAGES-WMF</li>
|
||||
<li>IMAGES-CORE are required for BACKGROUNDS (IMAGES) or WATERMARKS to work</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" name="checkall" onclick="checkedAll(frm1);"> <i>Select/Unselect All</i><br /><br />
|
||||
|
||||
<form id="frm1" action="compress.php" method="POST">
|
||||
';
|
||||
foreach($excl AS $k=>$ex) {
|
||||
echo '<input type="checkbox" value="1" name="inc['.$ex.']"';
|
||||
if ($k==0 || ($k > 1 && $k < 5)) {
|
||||
echo ' checked="checked"';
|
||||
}
|
||||
echo ' /> '.$ex.'<br />';
|
||||
}
|
||||
|
||||
echo '<br />
|
||||
<input type="submit" name="generate" value="generate" />
|
||||
</form>
|
||||
</body>
|
||||
</html>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$inc = $_POST['inc'];
|
||||
if (is_array($inc) && count($inc)>0 ) {
|
||||
foreach($inc AS $i=>$v) {
|
||||
$key = array_search($i, $excl);
|
||||
unset($excl[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!defined('PHP_VERSION_ID')) {
|
||||
$version = explode('.', PHP_VERSION);
|
||||
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
|
||||
}
|
||||
if (PHP_VERSION_ID < 50300) { $mqr = @get_magic_quotes_runtime(); }
|
||||
else { $mqr=0; }
|
||||
if ($mqr) { set_magic_quotes_runtime(0); }
|
||||
|
||||
$l = file('mpdf_source.php');
|
||||
if (!count($l)) { die("ERROR - Could not find mpdf_source.php file in current directory"); }
|
||||
$exclflags = array();
|
||||
$x = '';
|
||||
|
||||
// Excluding 'HTML-CSS' will also exclude: 'TABLES', 'LISTS', 'TABLES-ADVANCED-BORDERS', 'HTMLHEADERS-FOOTERS', 'FORMS', 'BACKGROUNDS', 'CSS-FLOAT', 'CSS-IMAGE-FLOAT', 'CSS-POSITION', 'CSS-PAGE', 'BORDER-RADIUS'
|
||||
if ($excl[0]=='HTML-CSS') {
|
||||
$excl[] = 'TABLES';
|
||||
$excl[] = 'LISTS';
|
||||
$excl[] = 'TABLES-ADVANCED-BORDERS';
|
||||
$excl[] = 'HTMLHEADERS-FOOTERS';
|
||||
$excl[] = 'FORMS';
|
||||
$excl[] = 'BACKGROUNDS';
|
||||
$excl[] = 'CSS-FLOAT';
|
||||
$excl[] = 'CSS-IMAGE-FLOAT';
|
||||
$excl[] = 'CSS-POSITION';
|
||||
$excl[] = 'CSS-PAGE';
|
||||
$excl[] = 'BORDER-RADIUS';
|
||||
}
|
||||
$excl = array_unique($excl);
|
||||
|
||||
foreach($l AS $k=>$ln) {
|
||||
$exclude = false;
|
||||
// *XXXXX*
|
||||
preg_match_all("/\/\/ \*([A-Za-z\-]+)\*/", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
$exclude = true;
|
||||
}
|
||||
}
|
||||
/*-- XXXXX --*/
|
||||
preg_match_all("/\/\*-- ([A-Za-z\-]+) --\*\//", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
$exclflags[$mm] = true;
|
||||
}
|
||||
$exclude = true;
|
||||
}
|
||||
$exclflags = array_unique($exclflags);
|
||||
/*-- END XXXX --*/
|
||||
preg_match_all("/\/\*-- END ([A-Za-z\-]+) --\*\//", $ln, $m);
|
||||
foreach($m[1] AS $mm) {
|
||||
if (in_array($mm, $excl)) {
|
||||
unset($exclflags[$mm]);
|
||||
}
|
||||
$exclude = true;
|
||||
}
|
||||
if (count($exclflags)==0 && !$exclude) {
|
||||
$x .= $ln;
|
||||
}
|
||||
}
|
||||
// mPDF 5.0
|
||||
if (function_exists('file_put_contents')) {
|
||||
$check = file_put_contents('mpdf.php', $x);
|
||||
}
|
||||
else {
|
||||
$f=fopen('mpdf.php', 'w');
|
||||
$check = fwrite($f, $x);
|
||||
fclose($f);
|
||||
}
|
||||
if (!$check) { die("ERROR - Could not write to mpdf.php file. Are permissions correctly set?"); }
|
||||
echo '<p><b>mPDF file generated successfully!</b></p>';
|
||||
echo '<div>mPDF file size '.number_format((strlen($x)/1024)).' kB</div>';
|
||||
|
||||
unset($l);
|
||||
unset($x);
|
||||
|
||||
include('mpdf.php');
|
||||
$mpdf = new mPDF();
|
||||
|
||||
echo '<div>Memory usage on loading mPDF class '.number_format((memory_get_usage(true)/(1024*1024)),2).' MB</div>';
|
||||
|
||||
exit;
|
||||
|
||||
?>
|
153
mpdf/config_cp.php
Executable file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
|
||||
function GetLangOpts($llcc, $adobeCJK) {
|
||||
if (strlen($llcc) == 5) {
|
||||
$lang = substr(strtolower($llcc),0,2);
|
||||
$country = substr(strtoupper($llcc),3,2);
|
||||
}
|
||||
else { $lang = strtolower($llcc); $country = ''; }
|
||||
$unifonts = "";
|
||||
$coreSuitable = false;
|
||||
|
||||
switch($lang){
|
||||
CASE "en":
|
||||
CASE "ca":
|
||||
CASE "cy":
|
||||
CASE "da":
|
||||
CASE "de":
|
||||
CASE "es":
|
||||
CASE "eu":
|
||||
CASE "fr":
|
||||
CASE "ga":
|
||||
CASE "fi":
|
||||
CASE "is":
|
||||
CASE "it":
|
||||
CASE "nl":
|
||||
CASE "no":
|
||||
CASE "pt":
|
||||
CASE "sv":
|
||||
// Edit this value to define how mPDF behaves when using new mPDF('-x')
|
||||
// If set to TRUE, mPDF will use Adobe core fonts only when it recognises the languages above
|
||||
$coreSuitable = true; break;
|
||||
|
||||
|
||||
|
||||
// RTL Languages
|
||||
CASE "he":
|
||||
CASE "yi":
|
||||
$unifonts = "dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break;
|
||||
|
||||
// Arabic
|
||||
CASE "ar":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "fa":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "ps":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
CASE "ur":
|
||||
$unifonts = "xbriyaz,xbriyazB,xbriyazI,xbriyazBI,xbzar,xbzarB,xbzarI,xbzarBI"; break;
|
||||
|
||||
// Sindhi (can be Arabic or Devanagari)
|
||||
CASE "sd":
|
||||
if ($country == "IN") { $unifonts = "ind_hi_1_001"; }
|
||||
// else if ($country == "PK") { $unifonts = ""; }
|
||||
// else { $unifonts = ""; }
|
||||
break;
|
||||
|
||||
|
||||
// INDIC
|
||||
// Assamese
|
||||
CASE "as": $unifonts = "ind_bn_1_001"; break;
|
||||
// Bengali
|
||||
CASE "bn": $unifonts = "ind_bn_1_001"; break;
|
||||
// Gujarati
|
||||
CASE "gu": $unifonts = "ind_gu_1_001"; break;
|
||||
// Hindi (Devanagari)
|
||||
CASE "hi": $unifonts = "ind_hi_1_001"; break;
|
||||
// Kannada
|
||||
CASE "kn": $unifonts = "ind_kn_1_001"; break;
|
||||
// Kashmiri
|
||||
CASE "ks": $unifonts = "ind_hi_1_001"; break;
|
||||
// Malayalam
|
||||
CASE "ml": $unifonts = "ind_ml_1_001"; break;
|
||||
// Nepali (Devanagari)
|
||||
CASE "ne": $unifonts = "ind_hi_1_001"; break;
|
||||
// Oriya
|
||||
CASE "or": $unifonts = "ind_or_1_001"; break;
|
||||
// Punjabi (Gurmukhi)
|
||||
CASE "pa": $unifonts = "ind_pa_1_001"; break;
|
||||
// Tamil
|
||||
CASE "ta": $unifonts = "ind_ta_1_001"; break;
|
||||
// Telegu
|
||||
CASE "te": $unifonts = "ind_te_1_001"; break;
|
||||
|
||||
// THAI
|
||||
CASE "th": $unifonts = "garuda,garudaB,garudaI,garudaBI,norasi,norasiB,norasiI,norasiBI"; break;
|
||||
|
||||
// VIETNAMESE
|
||||
CASE "vi":
|
||||
$unifonts = "dejavusanscondensed,dejavusanscondensedB,dejavusanscondensedI,dejavusanscondensedBI,dejavusans,dejavusansB,dejavusansI,dejavusansBI"; break;
|
||||
|
||||
// CJK Langauges
|
||||
CASE "ja":
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "sjis,sjisB,sjisI,sjisBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
break;
|
||||
|
||||
CASE "ko":
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "uhc,uhcB,uhcI,uhcBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "unbatang_0613";
|
||||
// }
|
||||
break;
|
||||
|
||||
CASE "zh":
|
||||
if ($country == "HK" || $country == "TW") {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "big5,big5B,big5I,big5BI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
else if ($country == "CN") {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "gb,gbB,gbI,gbBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
else {
|
||||
if ($adobeCJK) {
|
||||
$unifonts = "gb,gbB,gbI,gbBI";
|
||||
}
|
||||
/* Uncomment these lines if CJK fonts available */
|
||||
// else {
|
||||
// $unifonts = "sun-exta,sun-extb,hannoma,hannomb";
|
||||
// }
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
$unifonts_arr = array();
|
||||
if ($unifonts) {
|
||||
$unifonts_arr = preg_split('/\s*,\s*/',$unifonts);
|
||||
}
|
||||
return array($coreSuitable ,$unifonts_arr);
|
||||
}
|
||||
|
||||
?>
|
302
mpdf/config_fonts.php
Executable file
@ -0,0 +1,302 @@
|
||||
<?php
|
||||
|
||||
|
||||
// Optionally define a folder which contains TTF fonts
|
||||
// mPDF will look here before looking in the usual _MPDF_TTFONTPATH
|
||||
// Useful if you already have a folder for your fonts
|
||||
// e.g. on Windows: define("_MPDF_SYSTEM_TTFONTS", 'C:/Windows/Fonts/');
|
||||
// Leave undefined if not required
|
||||
|
||||
// define("_MPDF_SYSTEM_TTFONTS", '');
|
||||
|
||||
|
||||
// Optionally set font(s) (names as defined below in $this->fontdata) to use for missing characters
|
||||
// when using useSubstitutions. Use a font with wide coverage - dejavusanscondensed is a good start
|
||||
// only works using subsets (otherwise would add very large file)
|
||||
// doesn't do Indic or arabic
|
||||
// More than 1 font can be specified but each will add to the processing time of the script
|
||||
|
||||
$this->backupSubsFont = array('dejavusanscondensed');
|
||||
|
||||
|
||||
// Optionally set a font (name as defined below in $this->fontdata) to use for CJK characters
|
||||
// in Plane 2 Unicode (> U+20000) when using useSubstitutions.
|
||||
// Use a font like hannomb or sun-extb if available
|
||||
// only works using subsets (otherwise would add very large file)
|
||||
// Leave undefined or blank if not not required
|
||||
|
||||
// $this->backupSIPFont = 'sun-extb';
|
||||
|
||||
|
||||
/*
|
||||
This array defines translations from font-family in CSS or HTML
|
||||
to the internal font-family name used in mPDF.
|
||||
Can include as many as want, regardless of which fonts are installed.
|
||||
By default mPDF will take a CSS/HTML font-family and remove spaces
|
||||
and change to lowercase e.g. "Arial Unicode MS" will be recognised as
|
||||
"arialunicodems"
|
||||
You only need to define additional translations.
|
||||
You can also use it to define specific substitutions e.g.
|
||||
'frutiger55roman' => 'arial'
|
||||
Generic substitutions (i.e. to a sans-serif or serif font) are set
|
||||
by including the font-family in $this->sans_fonts below
|
||||
To aid backwards compatability some are included:
|
||||
*/
|
||||
$this->fonttrans = array(
|
||||
'helvetica' => 'arial',
|
||||
'times' => 'timesnewroman',
|
||||
'courier' => 'couriernew',
|
||||
'trebuchet' => 'trebuchetms',
|
||||
'comic' => 'comicsansms',
|
||||
'franklin' => 'franklingothicbook',
|
||||
'albertus' => 'albertusmedium',
|
||||
'arialuni' => 'arialunicodems',
|
||||
'zn_hannom_a' => 'hannoma',
|
||||
'ocr-b' => 'ocrb',
|
||||
'ocr-b10bt' => 'ocrb',
|
||||
|
||||
|
||||
);
|
||||
|
||||
/*
|
||||
This array lists the file names of the TrueType .ttf or .otf font files
|
||||
for each variant of the (internal mPDF) font-family name.
|
||||
['R'] = Regular (Normal), others are Bold, Italic, and Bold-Italic
|
||||
Each entry must contain an ['R'] entry, but others are optional.
|
||||
Only the font (files) entered here will be available to use in mPDF.
|
||||
Put preferred default first in order.
|
||||
This will be used if a named font cannot be found in any of
|
||||
$this->sans_fonts, $this->serif_fonts or $this->mono_fonts
|
||||
|
||||
['indic'] = true; for special mPDF fonts containing Indic characters
|
||||
['sip-ext'] = 'hannomb'; name a related font file containing SIP characters
|
||||
|
||||
If a .ttc TrueType collection file is referenced, the number of the font
|
||||
within the collection is required. Fonts in the collection are numbered
|
||||
starting at 1, as they appear in the .ttc file e.g.
|
||||
"cambria" => array(
|
||||
'R' => "cambria.ttc",
|
||||
'B' => "cambriab.ttf",
|
||||
'I' => "cambriai.ttf",
|
||||
'BI' => "cambriaz.ttf",
|
||||
'TTCfontID' => array(
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
"cambriamath" => array(
|
||||
'R' => "cambria.ttc",
|
||||
'TTCfontID' => array(
|
||||
'R' => 2,
|
||||
),
|
||||
),
|
||||
*/
|
||||
|
||||
$this->fontdata = array(
|
||||
"dejavusanscondensed" => array(
|
||||
'R' => "DejaVuSansCondensed.ttf",
|
||||
'B' => "DejaVuSansCondensed-Bold.ttf",
|
||||
'I' => "DejaVuSansCondensed-Oblique.ttf",
|
||||
'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
|
||||
),
|
||||
"dejavusans" => array(
|
||||
'R' => "DejaVuSans.ttf",
|
||||
'B' => "DejaVuSans-Bold.ttf",
|
||||
'I' => "DejaVuSans-Oblique.ttf",
|
||||
'BI' => "DejaVuSans-BoldOblique.ttf",
|
||||
),
|
||||
"dejavuserif" => array(
|
||||
'R' => "DejaVuSerif.ttf",
|
||||
'B' => "DejaVuSerif-Bold.ttf",
|
||||
'I' => "DejaVuSerif-Italic.ttf",
|
||||
'BI' => "DejaVuSerif-BoldItalic.ttf",
|
||||
),
|
||||
"dejavuserifcondensed" => array(
|
||||
'R' => "DejaVuSerifCondensed.ttf",
|
||||
'B' => "DejaVuSerifCondensed-Bold.ttf",
|
||||
'I' => "DejaVuSerifCondensed-Italic.ttf",
|
||||
'BI' => "DejaVuSerifCondensed-BoldItalic.ttf",
|
||||
),
|
||||
"dejavusansmono" => array(
|
||||
'R' => "DejaVuSansMono.ttf",
|
||||
'B' => "DejaVuSansMono-Bold.ttf",
|
||||
'I' => "DejaVuSansMono-Oblique.ttf",
|
||||
'BI' => "DejaVuSansMono-BoldOblique.ttf",
|
||||
),
|
||||
|
||||
|
||||
/* OCR-B font for Barcodes */
|
||||
"ocrb" => array(
|
||||
'R' => "ocrb10.ttf",
|
||||
),
|
||||
|
||||
/* Thai fonts */
|
||||
"garuda" => array(
|
||||
'R' => "Garuda.ttf",
|
||||
'B' => "Garuda-Bold.ttf",
|
||||
'I' => "Garuda-Oblique.ttf",
|
||||
'BI' => "Garuda-BoldOblique.ttf",
|
||||
),
|
||||
"norasi" => array(
|
||||
'R' => "Norasi.ttf",
|
||||
'B' => "Norasi-Bold.ttf",
|
||||
'I' => "Norasi-Oblique.ttf",
|
||||
'BI' => "Norasi-BoldOblique.ttf",
|
||||
),
|
||||
|
||||
|
||||
/* Indic fonts */
|
||||
"ind_bn_1_001" => array(
|
||||
'R' => "ind_bn_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_hi_1_001" => array(
|
||||
'R' => "ind_hi_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_ml_1_001" => array(
|
||||
'R' => "ind_ml_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_kn_1_001" => array(
|
||||
'R' => "ind_kn_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_gu_1_001" => array(
|
||||
'R' => "ind_gu_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_or_1_001" => array(
|
||||
'R' => "ind_or_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_ta_1_001" => array(
|
||||
'R' => "ind_ta_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_te_1_001" => array(
|
||||
'R' => "ind_te_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
"ind_pa_1_001" => array(
|
||||
'R' => "ind_pa_1_001.ttf",
|
||||
'indic' => true,
|
||||
),
|
||||
|
||||
|
||||
/* XW Zar Arabic fonts */
|
||||
"xbriyaz" => array(
|
||||
'R' => "XB Riyaz.ttf",
|
||||
'B' => "XB RiyazBd.ttf",
|
||||
'I' => "XB RiyazIt.ttf",
|
||||
'BI' => "XB RiyazBdIt.ttf",
|
||||
),
|
||||
"xbzar" => array(
|
||||
'R' => "XB Zar.ttf",
|
||||
'B' => "XB Zar Bd.ttf",
|
||||
'I' => "XB Zar It.ttf",
|
||||
'BI' => "XB Zar BdIt.ttf",
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
/* Examples of some CJK fonts */
|
||||
/*
|
||||
"unbatang_0613" => array(
|
||||
'R' => "UnBatang_0613.ttf",
|
||||
),
|
||||
"sun-exta" => array(
|
||||
'R' => "Sun-ExtA.ttf",
|
||||
'sip-ext' => 'sun-extb',
|
||||
),
|
||||
"sun-extb" => array(
|
||||
'R' => "Sun-ExtB.ttf",
|
||||
),
|
||||
"hannoma" => array(
|
||||
'R' => "HAN NOM A.ttf",
|
||||
'sip-ext' => 'hannomb',
|
||||
),
|
||||
"hannomb" => array(
|
||||
'R' => "HAN NOM B.ttf",
|
||||
),
|
||||
|
||||
|
||||
'mingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
'sip-ext' => 'mingliu-extb',
|
||||
),
|
||||
'pmingliu' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 2,
|
||||
),
|
||||
'sip-ext' => 'pmingliu-extb',
|
||||
),
|
||||
'mingliu_hkscs' => array (
|
||||
'R' => 'mingliu.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
'sip-ext' => 'mingliu_hkscs-extb',
|
||||
),
|
||||
'mingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 1,
|
||||
),
|
||||
),
|
||||
'pmingliu-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 2,
|
||||
),
|
||||
),
|
||||
'mingliu_hkscs-extb' => array (
|
||||
'R' => 'mingliub.ttc',
|
||||
'TTCfontID' => array (
|
||||
'R' => 3,
|
||||
),
|
||||
),
|
||||
*/
|
||||
|
||||
);
|
||||
|
||||
|
||||
// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes
|
||||
// but you do not require them. This allows a more efficient form of subsetting to be used.
|
||||
$this->BMPonly = array(
|
||||
"dejavusanscondensed",
|
||||
"dejavusans",
|
||||
"dejavuserifcondensed",
|
||||
"dejavuserif",
|
||||
"dejavusansmono",
|
||||
);
|
||||
|
||||
// These next 3 arrays do two things:
|
||||
// 1. If a font referred to in HTML/CSS is not available to mPDF, these arrays will determine whether
|
||||
// a serif/sans-serif or monospace font is substituted
|
||||
// 2. The first font in each array will be the font which is substituted in circumstances as above
|
||||
// (Otherwise the order is irrelevant)
|
||||
// Use the mPDF font-family names i.e. lowercase and no spaces (after any translations in $fonttrans)
|
||||
// Always include "sans-serif", "serif" and "monospace" etc.
|
||||
$this->sans_fonts = array('dejavusanscondensed','dejavusans','freesans','liberationsans','sans','sans-serif','cursive','fantasy',
|
||||
'arial','helvetica','verdana','geneva','lucida','arialnarrow','arialblack','arialunicodems',
|
||||
'franklin','franklingothicbook','tahoma','garuda','calibri','trebuchet','lucidagrande','microsoftsansserif',
|
||||
'trebuchetms','lucidasansunicode','franklingothicmedium','albertusmedium','xbriyaz','albasuper','quillscript'
|
||||
|
||||
);
|
||||
|
||||
$this->serif_fonts = array('dejavuserifcondensed','dejavuserif','freeserif','liberationserif','serif',
|
||||
'timesnewroman','times','centuryschoolbookl','palatinolinotype','centurygothic',
|
||||
'bookmanoldstyle','bookantiqua','cyberbit','cambria',
|
||||
'norasi','charis','palatino','constantia','georgia','albertus','xbzar','algerian','garamond',
|
||||
);
|
||||
|
||||
$this->mono_fonts = array('dejavusansmono','freemono','liberationmono','courier', 'mono','monospace','ocrb','ocr-b','lucidaconsole',
|
||||
'couriernew','monotypecorsiva'
|
||||
);
|
||||
|
||||
?>
|
9
mpdf/font/ccourier.php
Executable file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-23 -250 715 805]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
?>
|
9
mpdf/font/ccourierb.php
Executable file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-113 -250 749 801]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
9
mpdf/font/ccourierbi.php
Executable file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-57 -250 869 801]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
9
mpdf/font/ccourieri.php
Executable file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$cw[chr($i)]=600;
|
||||
$desc=array('Ascent'=>629,'Descent'=>-157,'CapHeight'=>562,'FontBBox'=>'[-27 -250 849 805]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
20
mpdf/font/chelvetica.php
Executable file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-166 -225 1000 931]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -37, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -18, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -74, chr(89)=> -74, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -110, chr(99)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(114)=> -37, chr(115)=> -110, chr(117)=> -37, chr(119)=> -55, chr(121)=> -55, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -37, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -37, chr(97)=> -37, chr(101)=> -18, chr(105)=> 0, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -8, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(112)=> -74, chr(113)=> -91, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -18, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -18, ), );
|
||||
?>
|
21
mpdf/font/chelveticab.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -228 1003 962]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(118)=> -37, chr(119)=> -18, chr(121)=> -37, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -91, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -110, chr(65)=> -74, chr(79)=> -18, chr(97)=> -74, chr(99)=> -74, chr(101)=> -74, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(115)=> -74, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -74, chr(114)=> -55, chr(117)=> -37, chr(121)=> -37, ), chr(87)=> array ( chr(44)=> -55, chr(46)=> -55, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -110, chr(46)=> -110, chr(58)=> -74, chr(65)=> -91, chr(97)=> -55, chr(101)=> -55, chr(105)=> -37, chr(111)=> -74, chr(112)=> -55, chr(113)=> -74, chr(117)=> -55, chr(118)=> -55, ), chr(102)=> array ( chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
21
mpdf/font/chelveticabi.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-174 -228 1114 962]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -74, chr(87)=> -55, chr(89)=> -74, chr(146)=> -55, ), chr(70)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -55, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -55, chr(89)=> -74, chr(146)=> -74, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(87)=> -18, chr(89)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -37, chr(99)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(115)=> -37, chr(117)=> -18, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -37, chr(65)=> -55, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, chr(111)=> -18, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -74, chr(97)=> -37, chr(101)=> -37, chr(105)=> -37, chr(111)=> -37, chr(112)=> -37, chr(113)=> -37, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 18, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(116)=> 18, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
21
mpdf/font/chelveticai.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
|
||||
$desc=array('Ascent'=>718,'Descent'=>-207,'CapHeight'=>718,'FontBBox'=>'[-170 -225 1116 931]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -18, chr(89)=> -74, chr(118)=> -18, chr(119)=> -18, chr(121)=> -8, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -74, chr(86)=> -55, chr(87)=> -37, chr(89)=> -91, chr(121)=> -18, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -18, chr(86)=> -18, chr(87)=> -18, chr(89)=> -37, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -8, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -74, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -18, chr(65)=> -55, chr(97)=> -37, chr(101)=> -37, chr(105)=> -18, chr(111)=> -37, chr(114)=> -18, chr(117)=> -18, chr(121)=> -18, ), chr(87)=> array ( chr(44)=> -37, chr(46)=> -37, chr(65)=> -18, chr(97)=> -18, chr(101)=> -18, chr(105)=> -8, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -55, chr(97)=> -74, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(112)=> -55, chr(113)=> -55, chr(117)=> -37, chr(118)=> -37, ), chr(102)=> array ( chr(146)=> 37, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -37, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(145)=> array ( chr(145)=> -37, ), chr(146)=> array ( chr(115)=> -18, chr(146)=> -37, ), );
|
||||
|
||||
?>
|
21
mpdf/font/csymbol.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
|
||||
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
|
||||
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
|
||||
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
|
||||
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
|
||||
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
|
||||
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
|
||||
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
|
||||
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
|
||||
|
||||
$desc=array('FontBBox'=>'[-180 -293 1090 1010]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
21
mpdf/font/ctimes.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
|
||||
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>662,'FontBBox'=>'[-168 -218 1000 898]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -37, ), chr(65)=> array ( chr(84)=> -110, chr(86)=> -128, chr(87)=> -80, chr(89)=> -91, chr(118)=> -74, chr(119)=> -91, chr(121)=> -91, chr(146)=> -110, ), chr(70)=> array ( chr(44)=> -80, chr(46)=> -80, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -74, chr(89)=> -100, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -110, chr(46)=> -110, chr(65)=> -91, ), chr(82)=> array ( chr(84)=> -60, chr(86)=> -80, chr(87)=> -55, chr(89)=> -55, chr(121)=> -40, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -49, chr(65)=> -80, chr(79)=> -18, chr(97)=> -69, chr(99)=> -69, chr(101)=> -69, chr(105)=> -35, chr(111)=> -69, chr(114)=> -35, chr(115)=> -69, chr(117)=> -35, chr(119)=> -69, chr(121)=> -69, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -128, chr(97)=> -110, chr(101)=> -110, chr(105)=> -60, chr(111)=> -128, chr(114)=> -60, chr(117)=> -60, chr(121)=> -110, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -37, chr(65)=> -110, chr(97)=> -80, chr(101)=> -80, chr(105)=> -40, chr(111)=> -80, chr(114)=> -40, chr(117)=> -40, chr(121)=> -60, ), chr(89)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -110, chr(97)=> -100, chr(101)=> -100, chr(105)=> -55, chr(111)=> -100, chr(112)=> -91, chr(113)=> -110, chr(117)=> -110, chr(118)=> -100, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -40, chr(46)=> -55, chr(103)=> -18, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(119)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(121)=> array ( chr(44)=> -64, chr(46)=> -64, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -55, chr(116)=> -18, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
21
mpdf/font/ctimesb.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
|
||||
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
|
||||
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>676,'FontBBox'=>'[-168 -218 1000 935]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -74, chr(86)=> -128, chr(87)=> -110, chr(89)=> -91, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(76)=> array ( chr(84)=> -91, chr(86)=> -91, chr(87)=> -91, chr(89)=> -91, chr(121)=> -55, chr(146)=> -91, ), chr(80)=> array ( chr(44)=> -91, chr(46)=> -91, chr(65)=> -74, ), chr(82)=> array ( chr(84)=> -35, chr(86)=> -35, chr(87)=> -35, chr(89)=> -35, chr(121)=> -35, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -74, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -18, chr(111)=> -91, chr(114)=> -74, chr(115)=> -91, chr(117)=> -91, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -91, chr(65)=> -128, chr(79)=> -20, chr(97)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -74, chr(117)=> -91, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -55, chr(65)=> -110, chr(97)=> -55, chr(101)=> -55, chr(105)=> -18, chr(111)=> -55, chr(114)=> -18, chr(117)=> -18, chr(121)=> -37, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -91, chr(65)=> -91, chr(97)=> -110, chr(101)=> -110, chr(105)=> -37, chr(111)=> -110, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -110, ), chr(102)=> array ( chr(102)=> 0, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -91, chr(46)=> -91, chr(99)=> -18, chr(101)=> -18, chr(104)=> 0, chr(111)=> -18, chr(113)=> -18, chr(116)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(122)=> 0, chr(146)=> 18, ), chr(118)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(119)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -37, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
21
mpdf/font/ctimesbi.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
|
||||
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>669,'FontBBox'=>'[-200 -218 996 921]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -55, ), chr(65)=> array ( chr(84)=> -55, chr(86)=> -74, chr(87)=> -91, chr(89)=> -55, chr(118)=> -74, chr(119)=> -74, chr(121)=> -74, chr(146)=> -74, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -91, ), chr(76)=> array ( chr(84)=> -18, chr(86)=> -37, chr(87)=> -37, chr(89)=> -37, chr(121)=> -37, chr(146)=> -55, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -74, ), chr(82)=> array ( chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -74, chr(65)=> -55, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -37, chr(111)=> -91, chr(114)=> -37, chr(115)=> -91, chr(117)=> -37, chr(119)=> -37, chr(121)=> -37, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -74, chr(65)=> -74, chr(97)=> -110, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(114)=> -55, chr(117)=> -55, chr(121)=> -74, ), chr(87)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(97)=> -74, chr(101)=> -74, chr(105)=> -37, chr(111)=> -74, chr(114)=> -74, chr(117)=> -55, chr(121)=> -55, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -74, chr(58)=> -91, chr(65)=> -74, chr(97)=> -91, chr(101)=> -110, chr(105)=> -55, chr(111)=> -110, chr(112)=> -74, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(102)=> -18, chr(146)=> 55, ), chr(114)=> array ( chr(44)=> -55, chr(46)=> -55, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(119)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(121)=> array ( chr(44)=> -37, chr(46)=> -37, ), chr(145)=> array ( chr(145)=> -74, ), chr(146)=> array ( chr(115)=> -74, chr(116)=> -37, chr(146)=> -74, ), );
|
||||
|
||||
?>
|
21
mpdf/font/ctimesi.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
|
||||
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
|
||||
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
|
||||
$desc=array('Ascent'=>683,'Descent'=>-217,'CapHeight'=>653,'FontBBox'=>'[-169 -217 1010 883]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$kerninfo=array ( chr(49)=> array ( chr(49)=> -74, ), chr(65)=> array ( chr(84)=> -37, chr(86)=> -49, chr(87)=> -37, chr(89)=> -55, chr(118)=> -55, chr(119)=> -55, chr(121)=> -55, chr(146)=> -37, ), chr(70)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(76)=> array ( chr(84)=> -20, chr(86)=> -37, chr(87)=> -37, chr(89)=> -20, chr(121)=> -29, chr(146)=> -37, ), chr(80)=> array ( chr(44)=> -128, chr(46)=> -128, chr(65)=> -128, ), chr(82)=> array ( chr(84)=> 0, chr(86)=> -18, chr(87)=> -18, chr(89)=> -18, chr(121)=> -18, ), chr(84)=> array ( chr(44)=> -74, chr(46)=> -74, chr(58)=> -55, chr(65)=> -74, chr(79)=> -18, chr(97)=> -91, chr(99)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(115)=> -91, chr(117)=> -55, chr(119)=> -74, chr(121)=> -74, ), chr(86)=> array ( chr(44)=> -128, chr(46)=> -128, chr(58)=> -64, chr(65)=> -74, chr(79)=> -29, chr(97)=> -110, chr(101)=> -110, chr(105)=> -74, chr(111)=> -110, chr(114)=> -74, chr(117)=> -74, chr(121)=> -91, ), chr(87)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -55, chr(111)=> -91, chr(114)=> -55, chr(117)=> -55, chr(121)=> -91, ), chr(89)=> array ( chr(44)=> -91, chr(46)=> -91, chr(58)=> -64, chr(65)=> -69, chr(97)=> -91, chr(101)=> -91, chr(105)=> -74, chr(111)=> -91, chr(112)=> -91, chr(113)=> -110, chr(117)=> -91, chr(118)=> -91, ), chr(102)=> array ( chr(146)=> 91, ), chr(114)=> array ( chr(44)=> -110, chr(46)=> -110, chr(99)=> -37, chr(100)=> -37, chr(101)=> -37, chr(103)=> -37, chr(104)=> -18, chr(111)=> -37, chr(113)=> -37, chr(114)=> 0, chr(116)=> 0, chr(117)=> 0, chr(118)=> 0, chr(119)=> 0, chr(120)=> 0, chr(121)=> 0, chr(146)=> 37, ), chr(118)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(119)=> array ( chr(44)=> -74, chr(46)=> -74, ), chr(121)=> array ( chr(44)=> -55, chr(46)=> -55, ), chr(145)=> array ( chr(145)=> -110, ), chr(146)=> array ( chr(115)=> -128, chr(116)=> -110, chr(146)=> -110, ), );
|
||||
|
||||
?>
|
21
mpdf/font/czapfdingbats.php
Executable file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$cw=array(
|
||||
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
|
||||
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
|
||||
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
|
||||
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
|
||||
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
|
||||
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
|
||||
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
|
||||
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
|
||||
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
|
||||
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
|
||||
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
|
||||
|
||||
$desc=array('FontBBox'=>'[-1 -143 981 820]');
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
|
||||
|
||||
?>
|
721
mpdf/graph.php
Executable file
@ -0,0 +1,721 @@
|
||||
<?php
|
||||
|
||||
|
||||
// mPDF 4.5.009
|
||||
define("FF_USERFONT", 15); // See jpgraph_ttf.inc.php for font IDs
|
||||
global $JpgUseSVGFormat;
|
||||
$JpgUseSVGFormat = true;
|
||||
|
||||
//======================================================================================================
|
||||
// DELETE OLD GRAPH FILES FIRST - Housekeeping
|
||||
// First clear any files in directory that are >1 hrs old
|
||||
$interval = 3600;
|
||||
if ($handle = opendir(_MPDF_PATH.'graph_cache')) {
|
||||
while (false !== ($file = readdir($handle))) {
|
||||
if (((filemtime(_MPDF_PATH.'graph_cache/'.$file)+$interval) < time()) && ($file != "..") && ($file != ".")) {
|
||||
@unlink(_MPDF_PATH.'graph_cache/'.$file); // mPDF 4.0
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
//==============================================================================================================
|
||||
// LOAD GRAPHS
|
||||
|
||||
include_once(_JPGRAPH_PATH.'jpgraph.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_line.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_log.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_scatter.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_regstat.php' );
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_pie.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_pie3d.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_bar.php');
|
||||
include_once(_JPGRAPH_PATH.'jpgraph_radar.php');
|
||||
|
||||
|
||||
//======================================================================================================
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//*****************************************************************************************************
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
//======================================================================================================
|
||||
function print_graph($g,$pgwidth) {
|
||||
$splines = false;
|
||||
$bandw = false;
|
||||
$percent = false;
|
||||
$show_percent = false;
|
||||
$stacked = false;
|
||||
$h = false;
|
||||
$show_values = false;
|
||||
$hide_grid = false;
|
||||
$hide_y_axis = false;
|
||||
|
||||
if (isset($g['attr']['TYPE']) && $g['attr']['TYPE']) { $type = strtolower($g['attr']['TYPE']); }
|
||||
if (!in_array($type,array('bar','horiz_bar','line','radar','pie','pie3d','xy','scatter'))) { $type = 'bar'; } // Default=bar
|
||||
|
||||
if (isset($g['attr']['STACKED']) && $g['attr']['STACKED']) { $stacked = true; } // stacked for bar or horiz_bar
|
||||
if (isset($g['attr']['SPLINES']) && $g['attr']['SPLINES'] && $type=='xy') { $splines = true; } // splines for XY line graphs
|
||||
if (isset($g['attr']['BANDW']) && $g['attr']['BANDW']) { $bandw = true; } // black and white
|
||||
if (isset($g['attr']['LEGEND-OVERLAP']) && $g['attr']['LEGEND-OVERLAP']) { $overlap = true; } // avoid overlap of Legends over graph (line, bar, horiz_bar only)
|
||||
if (isset($g['attr']['PERCENT']) && $g['attr']['PERCENT'] && $type != 'xy' && $type != 'scatter') { $percent = true; } // Show data series as percent of total in series
|
||||
if (isset($g['attr']['SHOW-VALUES']) && $g['attr']['SHOW-VALUES']) { $show_values = true; } // Show the individual data values
|
||||
if (isset($g['attr']['HIDE-GRID']) && $g['attr']['HIDE-GRID']) { $hide_grid = true; } // Hide the y-axis gridlines
|
||||
if (isset($g['attr']['HIDE-Y-AXIS']) && $g['attr']['HIDE-Y-AXIS']) { $hide_y_axis = true; } // Hide the y-axis
|
||||
|
||||
|
||||
// Antialias: If true - better quality curves, but graph line will only be 1px even in PDF 300dpi
|
||||
// default=true for most except line and radar
|
||||
if (isset($g['attr']['ANTIALIAS']) && ($g['attr']['ANTIALIAS']=='' || $g['attr']['ANTIALIAS']==0)) { $antialias = false; }
|
||||
else if (isset($g['attr']['ANTIALIAS']) && $g['attr']['ANTIALIAS'] > 0) { $antialias = true; }
|
||||
else if ($type=='line' || $type=='radar') { $antialias = false; }
|
||||
else { $antialias = true; }
|
||||
|
||||
if ($g['attr']['DPI']) { $dpi = intval($g['attr']['DPI']); }
|
||||
if (!$dpi || $dpi < 50 || $dpi > 2400) { $dpi = 150; } // Default dpi 150
|
||||
$k = (0.2645/25.4 * $dpi);
|
||||
|
||||
// mPDF 4.5.009
|
||||
global $JpgUseSVGFormat;
|
||||
if (isset($JpgUseSVGFormat) && $JpgUseSVGFormat) {
|
||||
$img_type = 'svg';
|
||||
$k = 1; // Overrides as Vector scale does not need DPI
|
||||
}
|
||||
else {
|
||||
$img_type = 'png';
|
||||
}
|
||||
|
||||
if (isset($g['attr']['TITLE']) && $g['attr']['TITLE']) { $title = $g['attr']['TITLE']; }
|
||||
|
||||
if (isset($g['attr']['LABEL-X']) && $g['attr']['LABEL-X']) { $xlabel = $g['attr']['LABEL-X']; } // NOT IMPLEMENTED??????
|
||||
if (isset($g['attr']['LABEL-Y']) && $g['attr']['LABEL-Y']) { $ylabel = $g['attr']['LABEL-Y']; }
|
||||
|
||||
if (isset($g['attr']['AXIS-X']) && $g['attr']['AXIS-X']) { $xaxis = strtolower($g['attr']['AXIS-X']); }
|
||||
if (!in_array($xaxis,array('text','lin','linear','log'))) { $xaxis = 'text'; } // Default=text
|
||||
if ($xaxis == 'linear') { $xaxis = 'lin'; }
|
||||
|
||||
if (isset($g['attr']['AXIS-Y']) && $g['attr']['AXIS-Y']) { $yaxis = strtolower($g['attr']['AXIS-Y']); }
|
||||
if (!in_array($yaxis,array('lin','linear','log','percent'))) { $yaxis = 'lin'; } // Default=lin
|
||||
if ($yaxis == 'percent') { $show_percent = true; $yaxis = 'lin'; } // Show percent sign on scales
|
||||
if ($yaxis == 'linear') { $yaxis = 'lin'; }
|
||||
|
||||
if ($splines) { $xaxis = 'lin'; }
|
||||
$axes = $xaxis.$yaxis; // e.g.textlin, textlog, loglog, loglin, linlog (XY)
|
||||
|
||||
// mPDF 4.0
|
||||
if (isset($g['attr']['cWIDTH']) && $g['attr']['cWIDTH']) { $w=($g['attr']['cWIDTH'] / 0.2645); } // pixels
|
||||
if (isset($g['attr']['cHEIGHT']) && $g['attr']['cHEIGHT']) { $h=($g['attr']['cHEIGHT'] / 0.2645); }
|
||||
|
||||
|
||||
if (isset($g['attr']['SERIES']) && strtolower($g['attr']['SERIES']) == 'rows') { $dataseries = 'rows'; }
|
||||
else { $dataseries = 'cols'; }
|
||||
|
||||
// Defaults - define data
|
||||
$rowbegin = 2;
|
||||
$colbegin = 2;
|
||||
if($type=='scatter' || $type=='xy') {
|
||||
if ($dataseries == 'rows') { $rowbegin = 1; }
|
||||
else { $colbegin = 1; }
|
||||
}
|
||||
$rowend = 0;
|
||||
$colend = 0;
|
||||
|
||||
if (isset($g['attr']['DATA-ROW-BEGIN']) && ($g['attr']['DATA-ROW-BEGIN'] === '0' || $g['attr']['DATA-ROW-BEGIN'] > 0)) { $rowbegin = $g['attr']['DATA-ROW-BEGIN']; }
|
||||
|
||||
if (isset($g['attr']['DATA-COL-BEGIN']) && ($g['attr']['DATA-COL-BEGIN'] === '0' || $g['attr']['DATA-COL-BEGIN'] > 0)) { $colbegin = $g['attr']['DATA-COL-BEGIN']; }
|
||||
|
||||
if (isset($g['attr']['DATA-ROW-END']) && ($g['attr']['DATA-ROW-END'] === '0' || $g['attr']['DATA-ROW-END'] <> 0)) { $rowend = $g['attr']['DATA-ROW-END']; }
|
||||
if (isset($g['attr']['DATA-COL-END']) && ($g['attr']['DATA-COL-END'] === '0' || $g['attr']['DATA-COL-END'] <> 0)) { $colend = $g['attr']['DATA-COL-END']; }
|
||||
|
||||
$nr = count($g['data']);
|
||||
$nc = 0;
|
||||
foreach($g['data'] AS $r) {
|
||||
$cc=0;
|
||||
foreach($r AS $c) { $cc++; }
|
||||
$nc = max($nc,$cc);
|
||||
}
|
||||
if ($colend == 0) { $colend = $nc; }
|
||||
else if ($colend < 0) { $colend = $nc+$colend; }
|
||||
|
||||
if ($rowend == 0) { $rowend = $nr; }
|
||||
else if ($rowend < 0) { $rowend = $nr+$rowend; }
|
||||
|
||||
if ($colend < $colbegin) { $colend = $colbegin; }
|
||||
if ($rowend < $rowbegin) { $rowend = $rowbegin; }
|
||||
|
||||
// if ($type == 'xy' || $type=='scatter') { $colstart=0; }
|
||||
|
||||
// Get Data + Totals
|
||||
$data = array();
|
||||
$totals = array();
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
if (isset($g['data'][$r][$c])) { $g['data'][$r][$c] = floatval($g['data'][$r][$c] ); }
|
||||
else { $g['data'][$r][$c] = 0; }
|
||||
if ($dataseries=='rows') {
|
||||
$data[($r+1-$rowbegin)][($c+1-$colbegin)] = $g['data'][$r][$c] ;
|
||||
$totals[($r+1-$rowbegin)] += $g['data'][$r][$c] ;
|
||||
}
|
||||
else {
|
||||
$data[($c+1-$colbegin)][($r+1-$rowbegin)] = $g['data'][$r][$c] ;
|
||||
if (isset($totals[($c+1-$colbegin)])) { $totals[($c+1-$colbegin)] += $g['data'][$r][$c] ; }
|
||||
else { $totals[($c+1-$colbegin)] = $g['data'][$r][$c] ; }
|
||||
}
|
||||
}
|
||||
}
|
||||
// PERCENT
|
||||
if ($percent && $type != 'pie' && $type != 'pie3d') {
|
||||
for ($r=0;$r<count($data);$r++) {
|
||||
for ($c=0;$c<count($data[$r]);$c++) {
|
||||
$data[$r][$c] = $data[$r][$c]/$totals[$r] * 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Get Legends and labels
|
||||
$legends = array();
|
||||
$labels = array();
|
||||
$longestlegend = 0;
|
||||
$longestlabel = 0;
|
||||
if ($dataseries=='cols') {
|
||||
if ($colbegin>1) {
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
$legends[($r+1-$rowbegin)] = $g['data'][$r][0] ;
|
||||
$longestlegend = max($longestlegend, strlen( $g['data'][$r][0] ));
|
||||
}
|
||||
}
|
||||
if ($rowbegin>1) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
$labels[($c+1-$colbegin)] = $g['data'][0][$c] ;
|
||||
$longestlabel = max($longestlabel , strlen( $g['data'][0][$c] ));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($dataseries=='rows') {
|
||||
if ($colbegin>1) {
|
||||
for ($r=($rowbegin-1);$r<$rowend;$r++) {
|
||||
$labels[($r+1-$rowbegin)] = $g['data'][$r][0] ;
|
||||
$longestlabel = max($longestlabel , strlen( $g['data'][$r][0] ));
|
||||
}
|
||||
}
|
||||
if ($rowbegin>1) {
|
||||
for ($c=($colbegin-1);$c<$colend;$c++) {
|
||||
$legends[($c+1-$colbegin)] = $g['data'][0][$c] ;
|
||||
$longestlegend = max($longestlegend, strlen( $g['data'][0][$c] ));
|
||||
}
|
||||
}
|
||||
}
|
||||
// Default sizes
|
||||
$defsize = array();
|
||||
$defsize['pie'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['pie3d'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['radar'] = array('w' => 600, 'h' => 300);
|
||||
$defsize['line'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['xy'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['scatter'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['bar'] = array('w' => 600, 'h' => 400);
|
||||
$defsize['horiz_bar'] = array('w' => 600, 'h' => 500);
|
||||
|
||||
|
||||
// Use default ratios
|
||||
if ($w && !$h) { $h = $w*$defsize[$type]['h']/$defsize[$type]['w']; }
|
||||
if ($h && !$w) { $w = $h*$defsize[$type]['w']/$defsize[$type]['h']; }
|
||||
if (!$h && !$w) { $w = $defsize[$type]['w']; $h = $defsize[$type]['h']; }
|
||||
|
||||
|
||||
if (count($data)>0 && $type) {
|
||||
$figure_file = "graph_cache/".rand(11111,999999999).".".$img_type;
|
||||
if ($bandw) { $colours = array('snow1','black','snow4','snow3','snow2','cadetblue4','cadetblue3','cadetblue1','bisque4','bisque2','beige'); }
|
||||
else { $colours = array('cyan','darkorchid4','cadetblue3','khaki1','darkolivegreen2','cadetblue4','coral','cyan4','rosybrown3','wheat1'); }
|
||||
$fills = array('navy','orange','red','yellow','purple','navy','orange','red','yellow','purple');
|
||||
$patterns = array(PATTERN_DIAG1,PATTERN_CROSS1,PATTERN_STRIPE1,PATTERN_DIAG3,PATTERN_CROSS2,PATTERN_DIAG2,PATTERN_DIAG4,PATTERN_CROSS3, PATTERN_CROSS4,PATTERN_STRIPE1);
|
||||
$markers = array(MARK_DIAMOND, MARK_SQUARE, MARK_CIRCLE, MARK_UTRIANGLE, MARK_DTRIANGLE, MARK_FILLEDCIRCLE, MARK_CROSS, MARK_STAR, MARK_X);
|
||||
|
||||
// LEGENDS
|
||||
if ($type == 'pie' || $type == 'pie3d') {
|
||||
$graph = new PieGraph (($w*$k),($h*$k));
|
||||
}
|
||||
else if ($type == 'radar') {
|
||||
$graph = new RadarGraph(($w*$k),($h*$k));
|
||||
}
|
||||
else {
|
||||
$graph = new Graph(($w*$k),($h*$k));
|
||||
}
|
||||
|
||||
// mPDF 4.5.009
|
||||
// $graph->img->SetImgFormat($img_type) ;
|
||||
// if (strtoupper($img_type)=='JPEG') { $graph->img->SetQuality(90); }
|
||||
if ($antialias) { $graph->img->SetAntiAliasing(); }
|
||||
$graph->SetShadow(true, 2*$k);
|
||||
$graph->SetMarginColor("white");
|
||||
// TITLE
|
||||
$graph->title->Set($title);
|
||||
$graph->title->SetMargin(10*$k);
|
||||
$graph->title->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->title->SetColor("black");
|
||||
$graph->legend->SetLineSpacing(3*$k);
|
||||
$graph->legend->SetMarkAbsSize(6*$k);
|
||||
$graph->legend->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
|
||||
// Set GRAPH IMAGE MARGINS
|
||||
if ($type == 'pie' || $type == 'pie3d') {
|
||||
$psize = 0.3;
|
||||
$pposxabs = ($w/2);
|
||||
$pposy = 0.55;
|
||||
if ($longestlegend) { // if legend showing
|
||||
$pposxabs -= ((($longestlegend * 5) + 20) / 2);
|
||||
}
|
||||
$pposx = ($pposxabs / $w);
|
||||
$graph->legend->Pos(0.02,0.5,'right','center');
|
||||
}
|
||||
else if ($type == 'radar') {
|
||||
$psize = 0.5;
|
||||
$pposxabs = ($w/2);
|
||||
$pposy = 0.55;
|
||||
if ($longestlabel) { // if legend showing
|
||||
$pposxabs -= ((($longestlabel * 5) + 20) / 2);
|
||||
}
|
||||
$pposx = ($pposxabs / $w);
|
||||
$graph->legend->Pos(0.02,0.5,'right','center');
|
||||
}
|
||||
else if ($type == 'xy' || $type == 'scatter') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 60;
|
||||
$pmb = 50;
|
||||
$xaxislblmargin = $pmb - 30;
|
||||
$yaxislblmargin = $pml - 15;
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
else if ($type == 'line' || $type == 'bar') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 60;
|
||||
$pmb = 50;
|
||||
$xlangle = 0;
|
||||
$ll = ($longestlegend * 5); // 45 degrees 8pt fontsize
|
||||
if ($ll > 5 || ($ll>3 && count($data)>10)) {
|
||||
$pmb = max($pmb, $ll + 30);
|
||||
$xlangle = 50;
|
||||
}
|
||||
$xaxislblmargin = $pmb - 30;
|
||||
$yaxislblmargin = $pml - 15;
|
||||
if ($longestlabel && !$overlap) { // if legend showing
|
||||
$pmr = ((($longestlabel * 5) + 40));
|
||||
}
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
else if ($type == 'horiz_bar') {
|
||||
$pml = 50;
|
||||
$pmr = 20;
|
||||
$pmt = 50;
|
||||
$pmb = 45;
|
||||
$ll = ($longestlegend * 6.5); // 8pt fontsize
|
||||
$pml = max($pml, $ll + 20);
|
||||
$xaxislblmargin = $pml - 20;
|
||||
$yaxislblmargin = $pmb - 15;
|
||||
if ($longestlabel && !$overlap) { // if legend showing
|
||||
$pmr = ((($longestlabel * 5) + 40));
|
||||
}
|
||||
$graph->legend->Pos(0.02,0.1,'right','top');
|
||||
}
|
||||
|
||||
|
||||
// DRAW THE GRAPHS
|
||||
if ($type == 'pie') {
|
||||
$p1 = new PiePlot($data[0]);
|
||||
$p1->SetSliceColors($colours);
|
||||
|
||||
if ($show_values) {
|
||||
$p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
|
||||
else { $p1->SetLabelType(PIE_VALUE_ABS); }
|
||||
if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
|
||||
else { $p1->value->SetFormat("%s"); }
|
||||
// Enable and set policy for guide-lines. Make labels line up vertically
|
||||
$p1->SetGuideLines(true);
|
||||
$p1->SetGuideLinesAdjust(1.5);
|
||||
}
|
||||
else { $p1->value->Show(false); }
|
||||
$p1->SetLegends($legends);
|
||||
$p1->SetSize($psize);
|
||||
$p1->SetCenter($pposx, $pposy);
|
||||
if ($labels[0]) {
|
||||
$graph->subtitle->Set($labels[0]);
|
||||
$graph->subtitle->SetMargin(10*$k);
|
||||
$graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->subtitle->SetColor("black");
|
||||
}
|
||||
$graph->Add($p1);
|
||||
}
|
||||
else if ($type == 'pie3d') {
|
||||
$p1 = new PiePlot3d($data[0]);
|
||||
$p1->SetSliceColors($colours);
|
||||
if ($show_values) {
|
||||
$p1->value->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($percent) { $p1->SetLabelType(PIE_VALUE_PERADJ); } //PIE_VAL_PER = default
|
||||
else { $p1->SetLabelType(PIE_VALUE_ABS); }
|
||||
if ($percent || $show_percent) { $p1->value->SetFormat("%d%%"); }
|
||||
else { $p1->value->SetFormat("%s"); }
|
||||
}
|
||||
else { $p1->value->Show(false); }
|
||||
$p1->SetLegends($legends);
|
||||
$p1->SetEdge();
|
||||
$p1->SetSize($psize);
|
||||
$p1->SetCenter($pposx, $pposy);
|
||||
|
||||
if ($labels[0]) {
|
||||
$graph->subtitle->Set($labels[0]);
|
||||
$graph->subtitle->SetMargin(10*$k);
|
||||
$graph->subtitle->SetFont(FF_USERFONT,FS_BOLD,11*$k);
|
||||
$graph->subtitle->SetColor("black");
|
||||
}
|
||||
|
||||
$graph->Add( $p1);
|
||||
}
|
||||
// RADAR
|
||||
else if ($type == 'radar') {
|
||||
$graph->SetSize($psize);
|
||||
$graph->SetPos($pposx, $pposy);
|
||||
|
||||
$graph->SetTitles( $legends); // labels each axis
|
||||
|
||||
$graph->axis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->axis->title->SetMargin(5*$k);
|
||||
$graph->axis->SetWeight(1*$k);
|
||||
$graph->axis->HideLabels();
|
||||
$graph->axis->SetFont(FF_USERFONT,FS_NORMAL,6*$k);
|
||||
$graph->HideTickMarks();
|
||||
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
if (count($rdata)<3) { die("ERROR::Graph::Cannot create a Radar Plot with less than 3 data points."); }
|
||||
// Create the radar plot
|
||||
$bplot = new RadarPlot($rdata);
|
||||
$bplot->mark->SetType($markers[$series]);
|
||||
$bplot->mark->SetFillColor($colours[$series]);
|
||||
$bplot->mark->SetWidth(3*$k);
|
||||
$bplot->SetColor($colours[$series]);
|
||||
if ($series == 0) { $bplot->SetFillColor('lightred'); }
|
||||
else { $bplot->SetFill(false); }
|
||||
$bplot->SetLineWeight(1*$k);
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
}
|
||||
// LINE
|
||||
else if ($type == 'line') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
}
|
||||
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(true);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle($xlangle);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
}
|
||||
foreach($data AS $series => $rdata) {
|
||||
$bplot = new LinePlot($rdata);
|
||||
$bplot->mark->SetType($markers[$series]);
|
||||
$bplot->mark->SetFillColor($colours[$series]);
|
||||
$bplot->mark->SetWidth(4*$k);
|
||||
if ($show_values) {
|
||||
$bplot->value-> Show(); // Not if scatter
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
// Set color for each line
|
||||
$bplot->SetColor($colours[$series]);
|
||||
$bplot->SetWeight(2*$k);
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
// Indent the X-scale so the first and last point doesn't fall on the edges
|
||||
$bplot->SetCenter();
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
|
||||
}
|
||||
// XY or SCATTER
|
||||
else if ($type == 'xy' || $type == 'scatter') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
// Setup font for axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
// Y-axis title
|
||||
if ($labels[1]) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
$graph->yaxis->SetTitle($labels[1],'middle');
|
||||
}
|
||||
|
||||
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); } // Percent
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(true);
|
||||
// Just let the maximum be autoscaled
|
||||
$graph->yaxis->scale->SetAutoMin(0);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
// mPDF 2.5 Corrects labelling of x-axis
|
||||
// $graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle(50);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($labels[0]) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
$graph->xaxis->SetTitle($labels[0],'middle');
|
||||
}
|
||||
|
||||
// Create the bar plot
|
||||
// SPLINES
|
||||
if ($splines && $type=='xy') {
|
||||
$spline = new Spline($data[0],$data[1]);
|
||||
list($newx,$newy) = $spline->Get(100);
|
||||
}
|
||||
else {
|
||||
$newx = $data[0];
|
||||
$newy = $data[1];
|
||||
}
|
||||
|
||||
if ($type=='xy') {
|
||||
// LINE PLOT
|
||||
$bplot = new LinePlot($newy, $newx);
|
||||
// Set color for each line
|
||||
$bplot->SetColor($fills[0]);
|
||||
$bplot->SetWeight(4*$k);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
$graph->Add($bplot);
|
||||
}
|
||||
|
||||
// SCATTER PLOT
|
||||
$cplot = new ScatterPlot($data[1], $data[0]);
|
||||
|
||||
$cplot->mark->SetType($markers[0]);
|
||||
$cplot->mark->SetFillColor($fills[0]);
|
||||
$cplot->mark->SetWidth(8*$k);
|
||||
if ($show_values) {
|
||||
// mPDF 2.5
|
||||
if ($type=='xy') { $cplot->value->Show(); } // Not if scatter
|
||||
$cplot->value->SetMargin(8*$k);
|
||||
$cplot->value->SetColor("darkred");
|
||||
$cplot->value->SetFont( FF_USERFONT, FS_NORMAL, 6*$k);
|
||||
|
||||
if ($percent || $show_percent) { $cplot->value->SetFormat( '%d%%'); }
|
||||
else { $cplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
// Set color for each line
|
||||
$cplot->SetColor($fills[0]);
|
||||
$cplot->SetWeight(4*$k);
|
||||
if ($bandw) { $cplot->SetShadow("gray5"); }
|
||||
$graph->Add($cplot);
|
||||
|
||||
}
|
||||
// BAR
|
||||
else if ($type == 'bar') {
|
||||
// Setup the graph.
|
||||
$graph->img->SetMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
$graph->SetScale($axes);
|
||||
// Setup y-axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
}
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(false);
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelAngle($xlangle);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
}
|
||||
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
|
||||
// Create the bar plot
|
||||
$bplot = new BarPlot($rdata);
|
||||
$bplot->SetWidth(0.6); // for SINGLE??
|
||||
// Setup color for gradient fill style
|
||||
if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
|
||||
else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
|
||||
|
||||
// Set color for the frame of each bar
|
||||
$bplot->SetColor("darkgray");
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
if ($show_values) {
|
||||
$bplot->value->Show();
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
$group[] = $bplot;
|
||||
}
|
||||
if (count($data)==1) {
|
||||
$graph->Add($group[0]);
|
||||
}
|
||||
else {
|
||||
// Create the grouped bar plot
|
||||
if ($stacked) {
|
||||
$gbplot = new AccBarPlot ($group);
|
||||
}
|
||||
else {
|
||||
$gbplot = new GroupBarPlot ($group);
|
||||
}
|
||||
$graph->Add($gbplot);
|
||||
}
|
||||
}
|
||||
else if ($type == 'horiz_bar') {
|
||||
$graph->SetScale($axes);
|
||||
$graph->Set90AndMargin($pml*$k,$pmr*$k,$pmt*$k,$pmb*$k); // LRTB
|
||||
|
||||
// Setup y-axis
|
||||
$graph->yaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetLabelMargin(4*$k);
|
||||
|
||||
$graph->yaxis->SetPos('max'); // Intersect at top of x-axis i.e. y axis is at bottom
|
||||
// First make the labels look right
|
||||
$graph->yaxis->SetLabelAlign('center','top');
|
||||
if ($percent || $show_percent) { $graph->yaxis->SetLabelFormat('%d%%'); }
|
||||
$graph->yaxis->SetLabelSide(SIDE_RIGHT);
|
||||
$graph->yaxis->scale->SetGrace(10); // sets 10% headroom
|
||||
if ($hide_y_axis) { $graph->yaxis->Hide(); }
|
||||
if ($hide_grid) { $graph->ygrid->Show(false); }
|
||||
|
||||
// The fix the tick marks
|
||||
$graph->yaxis->SetTickSide(SIDE_LEFT);
|
||||
if ($ylabel) {
|
||||
$graph->yaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->yaxis->SetTitle($ylabel,'middle');
|
||||
$graph->yaxis->SetTitleMargin($yaxislblmargin*$k);
|
||||
// Finally setup the title
|
||||
$graph->yaxis->SetTitleSide(SIDE_RIGHT);
|
||||
// To align the title to the right use :
|
||||
$graph->yaxis->title->Align('right');
|
||||
$graph->yaxis->title->SetAngle(0);
|
||||
|
||||
}
|
||||
|
||||
// Show 0 label on Y-axis (default is not to show)
|
||||
$graph->yscale->ticks->SupressZeroLabel(false);
|
||||
// Setup X-axis labels
|
||||
$graph->xaxis->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->title->SetAngle(90);
|
||||
$graph->xaxis->SetTickLabels($legends);
|
||||
$graph->xaxis->SetLabelMargin(4*$k);
|
||||
// X-axis title
|
||||
if ($xlabel) {
|
||||
$graph->xaxis->title->SetFont(FF_USERFONT,FS_NORMAL,8*$k);
|
||||
$graph->xaxis->SetTitleMargin($xaxislblmargin*$k);
|
||||
$graph->xaxis->SetTitle($xlabel,'middle');
|
||||
}
|
||||
$group = array();
|
||||
foreach($data AS $series => $dat) {
|
||||
$rdata = array();
|
||||
foreach($data[$series] AS $row) { $rdata[] = $row; }
|
||||
// Create the bar pot
|
||||
$bplot = new BarPlot($rdata);
|
||||
$bplot->SetWidth(0.6); // for SINGLE??
|
||||
// Setup color for gradient fill style
|
||||
if ($bandw) { $bplot->SetPattern( $patterns[$series]); }
|
||||
else { $bplot->SetFillGradient($fills[$series],"#EEEEEE",GRAD_LEFT_REFLECTION); }
|
||||
|
||||
// Set color for the frame of each bar
|
||||
$bplot->SetColor("darkgray");
|
||||
$bplot->SetLegend($labels[$series]);
|
||||
if ($bandw) { $bplot->SetShadow("gray5"); }
|
||||
if ($show_values) {
|
||||
$bplot->value-> Show();
|
||||
$bplot->value->SetMargin(6*$k);
|
||||
$bplot->value->SetColor("darkred");
|
||||
$bplot->value->SetFont( FF_USERFONT, FS_NORMAL, 8*$k);
|
||||
if ($percent || $show_percent) { $bplot->value->SetFormat( '%d%%'); }
|
||||
else { $bplot->value->SetFormat("%s"); }
|
||||
}
|
||||
|
||||
$group[] = $bplot;
|
||||
}
|
||||
if (count($data)==1) {
|
||||
$graph->Add($group[0]);
|
||||
}
|
||||
else {
|
||||
// Create the grouped bar plot
|
||||
if ($stacked) {
|
||||
$gbplot = new AccBarPlot ($group);
|
||||
}
|
||||
else {
|
||||
$gbplot = new GroupBarPlot ($group);
|
||||
}
|
||||
$graph->Add($gbplot);
|
||||
}
|
||||
}
|
||||
if ($graph) {
|
||||
$graph->Stroke( _MPDF_PATH.$figure_file);
|
||||
$srcpath = str_replace("\\","/",dirname(__FILE__)) . "/";
|
||||
$srcpath .= $figure_file;
|
||||
return array('file'=>$srcpath, 'w'=>$w, 'h'=>$h);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
//======================================================================================================
|
||||
|
||||
?>
|
2
mpdf/graph_cache/dummy.txt
Executable file
@ -0,0 +1,2 @@
|
||||
This is just a placeholder file so that the folder is created on install.
|
||||
It can be deleted once installed.
|
BIN
mpdf/iccprofiles/SWOP2006_Coated5v2.icc
Executable file
BIN
mpdf/iccprofiles/sRGB_IEC61966-2-1.icc
Executable file
101
mpdf/includes/CJKdata.php
Executable file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
// mPDF 2.5
|
||||
|
||||
// BIG 5
|
||||
$cw = array(
|
||||
32 => 250, 33 => 250, 34 => 408, 35 => 668, 36 => 490, 37 => 875, 38 => 698, 39 => 250, 40 => 240, 41 => 240,
|
||||
42 => 417, 43 => 667, 44 => 250, 45 => 313, 46 => 250, 47 => 520, 48 => 500, 49 => 500, 50 => 500, 51 => 500,
|
||||
52 => 500, 53 => 500, 54 => 500, 55 => 500, 56 => 500, 57 => 500, 58 => 250, 59 => 250, 60 => 667, 61 => 667,
|
||||
62 => 667, 63 => 396, 64 => 921, 65 => 677, 66 => 615, 67 => 719, 68 => 760, 69 => 625, 70 => 552, 71 => 771,
|
||||
72 => 802, 73 => 354, 74 => 354, 75 => 781, 76 => 604, 77 => 927, 78 => 750, 79 => 823, 80 => 563, 81 => 823,
|
||||
82 => 729, 83 => 542, 84 => 698, 85 => 771, 86 => 729, 87 => 948, 88 => 771, 89 => 677, 90 => 635, 91 => 344,
|
||||
92 => 520, 93 => 344, 94 => 469, 95 => 500, 96 => 250, 97 => 469, 98 => 521, 99 => 427, 100 => 521, 101 => 438,
|
||||
102 => 271, 103 => 469, 104 => 531, 105 => 250, 106 => 250, 107 => 458, 108 => 240, 109 => 802, 110 => 531, 111 => 500,
|
||||
112 => 521, 113 => 521, 114 => 365, 115 => 333, 116 => 292, 117 => 521, 118 => 458, 119 => 677, 120 => 479, 121 => 458,
|
||||
122 => 427, 123 => 480, 124 => 496, 125 => 480, 126 => 667,
|
||||
17601 => 500,
|
||||
);
|
||||
$this->Big5_widths=$cw;
|
||||
|
||||
|
||||
// GB
|
||||
$cw = array(
|
||||
32 => 207, 33 => 270, 34 => 342, 35 => 467, 36 => 462, 37 => 797, 38 => 710, 39 => 239, 40 => 374, 41 => 374,
|
||||
42 => 423, 43 => 605, 44 => 238, 45 => 375, 46 => 238, 47 => 334, 48 => 462, 49 => 462, 50 => 462, 51 => 462,
|
||||
52 => 462, 53 => 462, 54 => 462, 55 => 462, 56 => 462, 57 => 462, 58 => 238, 59 => 238, 60 => 605, 61 => 605,
|
||||
62 => 605, 63 => 344, 64 => 748, 65 => 684, 66 => 560, 67 => 695, 68 => 739, 69 => 563, 70 => 511, 71 => 729,
|
||||
72 => 793, 73 => 318, 74 => 312, 75 => 666, 76 => 526, 77 => 896, 78 => 758, 79 => 772, 80 => 544, 81 => 772,
|
||||
82 => 628, 83 => 465, 84 => 607, 85 => 753, 86 => 711, 87 => 972, 88 => 647, 89 => 620, 90 => 607, 91 => 374,
|
||||
92 => 333, 93 => 374, 94 => 606, 95 => 500, 96 => 239, 97 => 417, 98 => 503, 99 => 427, 100 => 529, 101 => 415,
|
||||
102 => 264, 103 => 444, 104 => 518, 105 => 241, 106 => 230, 107 => 495, 108 => 228, 109 => 793, 110 => 527, 111 => 524,
|
||||
112 => 524, 113 => 504, 114 => 338, 115 => 336, 116 => 277, 117 => 517, 118 => 450, 119 => 652, 120 => 466, 121 => 452,
|
||||
122 => 407, 123 => 370, 124 => 258, 125 => 370, 126 => 605,
|
||||
);
|
||||
$this->GB_widths=$cw;
|
||||
|
||||
// Japanese
|
||||
$cw = array(
|
||||
32 => 278, 33 => 299, 34 => 353, 35 => 614, 36 => 614, 37 => 721, 38 => 735, 39 => 216, 40 => 323, 41 => 323,
|
||||
42 => 449, 43 => 529, 44 => 219, 45 => 306, 46 => 219, 47 => 453, 48 => 614, 49 => 614, 50 => 614, 51 => 614,
|
||||
52 => 614, 53 => 614, 54 => 614, 55 => 614, 56 => 614, 57 => 614, 58 => 219, 59 => 219, 60 => 529, 61 => 529,
|
||||
62 => 529, 63 => 486, 64 => 744, 65 => 646, 66 => 604, 67 => 617, 68 => 681, 69 => 567, 70 => 537, 71 => 647,
|
||||
72 => 738, 73 => 320, 74 => 433, 75 => 637, 76 => 566, 77 => 904, 78 => 710, 79 => 716, 80 => 605, 81 => 716,
|
||||
82 => 623, 83 => 517, 84 => 601, 85 => 690, 86 => 668, 87 => 990, 88 => 681, 89 => 634, 90 => 578, 91 => 316,
|
||||
92 => 614, 93 => 316, 94 => 529, 95 => 500, 96 => 387, 97 => 509, 98 => 566, 99 => 478, 100 => 565, 101 => 503,
|
||||
102 => 337, 103 => 549, 104 => 580, 105 => 275, 106 => 266, 107 => 544, 108 => 276, 109 => 854, 110 => 579, 111 => 550,
|
||||
112 => 578, 113 => 566, 114 => 410, 115 => 444, 116 => 340, 117 => 575, 118 => 512, 119 => 760, 120 => 503, 121 => 529,
|
||||
122 => 453, 123 => 326, 124 => 380, 125 => 326, 126 => 387, 127 => 216, 128 => 453, 129 => 216, 130 => 380, 131 => 529,
|
||||
132 => 299, 133 => 614, 134 => 614, 135 => 265, 136 => 614, 137 => 475, 138 => 614, 139 => 353, 140 => 451, 141 => 291,
|
||||
142 => 291, 143 => 588, 144 => 589, 145 => 500, 146 => 476, 147 => 476, 148 => 219, 149 => 494, 150 => 452, 151 => 216,
|
||||
152 => 353, 153 => 353, 154 => 451, 156 => 1075, 157 => 486, 158 => 387, 159 => 387, 160 => 387, 161 => 387,
|
||||
162 => 387, 163 => 387, 164 => 387, 165 => 387, 166 => 387, 167 => 387, 168 => 387, 170 => 880, 171 => 448,
|
||||
172 => 566, 173 => 716, 174 => 903, 175 => 460, 176 => 805, 177 => 275, 178 => 276, 179 => 550, 180 => 886, 181 => 582,
|
||||
182 => 529, 183 => 738, 184 => 529, 185 => 738, 186 => 357, 187 => 529, 188 => 406, 189 => 406, 190 => 575, 191 => 406,
|
||||
192 => 934, 193 => 934, 194 => 934, 195 => 646, 196 => 646, 197 => 646, 198 => 646, 199 => 646, 200 => 646, 201 => 617,
|
||||
202 => 567, 203 => 567, 204 => 567, 205 => 567, 206 => 320, 207 => 320, 208 => 320, 209 => 320, 210 => 681, 211 => 710,
|
||||
212 => 716, 213 => 716, 214 => 716, 215 => 716, 216 => 716, 217 => 529, 218 => 690, 219 => 690, 220 => 690, 221 => 690,
|
||||
222 => 634, 223 => 605, 224 => 509, 225 => 509, 226 => 509, 227 => 509, 228 => 509, 229 => 509, 230 => 478, 231 => 503,
|
||||
232 => 503, 233 => 503, 234 => 503, 235 => 275, 236 => 275, 237 => 275, 238 => 275, 239 => 550, 240 => 579, 241 => 550,
|
||||
242 => 550, 243 => 550, 244 => 550, 245 => 550, 246 => 529, 247 => 575, 248 => 575, 249 => 575, 250 => 575, 251 => 529,
|
||||
252 => 578, 253 => 529, 254 => 517, 255 => 634, 256 => 578, 257 => 445, 258 => 444, 259 => 842, 260 => 453, 261 => 614,
|
||||
);
|
||||
|
||||
|
||||
$_cr = array(
|
||||
array(231, 632, 500), // half-width
|
||||
array(8718, 8718, 500),
|
||||
array(9738, 9757, 250), // quarter-width
|
||||
array(9758, 9778, 333), // third-width
|
||||
array(12063, 12087, 500),
|
||||
);
|
||||
foreach($_cr as $_r) {
|
||||
for($i = $_r[0]; $i <= $_r[1]; $i++) {
|
||||
$cw[$i+31] = $_r[2];
|
||||
}
|
||||
}
|
||||
$this->SJIS_widths=$cw;
|
||||
|
||||
// Korean
|
||||
$cw = array(
|
||||
32 => 333, 33 => 416, 34 => 416, 35 => 833, 36 => 625, 37 => 916, 38 => 833, 39 => 250, 40 => 500, 41 => 500,
|
||||
42 => 500, 43 => 833, 44 => 291, 45 => 450, 46 => 291, 47 => 375, 48 => 625, 49 => 625, 50 => 625, 51 => 625,
|
||||
52 => 625, 53 => 625, 54 => 625, 55 => 625, 56 => 625, 57 => 625, 58 => 333, 59 => 333, 60 => 833, 61 => 833,
|
||||
62 => 916, 63 => 500, 64 => 1000, 65 => 791, 66 => 708, 67 => 708, 68 => 750, 69 => 708, 70 => 666, 71 => 750,
|
||||
72 => 791, 73 => 375, 74 => 500, 75 => 791, 76 => 666, 77 => 916, 78 => 791, 79 => 750, 80 => 666, 81 => 750,
|
||||
82 => 708, 83 => 666, 84 => 791, 85 => 791, 86 => 750, 87 => 1000, 88 => 708, 89 => 708, 90 => 666, 91 => 500,
|
||||
92 => 375, 93 => 500, 94 => 500, 95 => 500, 96 => 333, 97 => 541, 98 => 583, 99 => 541, 100 => 583, 101 => 583,
|
||||
102 => 375, 103 => 583, 104 => 583, 105 => 291, 106 => 333, 107 => 583, 108 => 291, 109 => 875, 110 => 583, 111 => 583,
|
||||
112 => 583, 113 => 583, 114 => 458, 115 => 541, 116 => 375, 117 => 583, 118 => 583, 119 => 833, 120 => 625, 121 => 625,
|
||||
122 => 500, 123 => 583, 124 => 583, 125 => 583, 126 => 750,
|
||||
);
|
||||
$_cr = array(
|
||||
array(8094, 8190, 500)
|
||||
);
|
||||
foreach($_cr as $_r) {
|
||||
for($i = $_r[0]; $i <= $_r[1]; $i++) {
|
||||
$cw[$i+31] = $_r[2];
|
||||
}
|
||||
}
|
||||
$this->UHC_widths=$cw;
|
||||
|
||||
?>
|
99
mpdf/includes/functions.php
Executable file
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
|
||||
function _strspn($str1, $str2, $start=null, $length=null) {
|
||||
$numargs = func_num_args();
|
||||
if ($numargs == 2) {
|
||||
return strspn($str1, $str2);
|
||||
}
|
||||
else if ($numargs == 3) {
|
||||
return strspn($str1, $str2, $start);
|
||||
}
|
||||
else {
|
||||
return strspn($str1, $str2, $start, $length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function _strcspn($str1, $str2, $start=null, $length=null) {
|
||||
$numargs = func_num_args();
|
||||
if ($numargs == 2) {
|
||||
return strcspn($str1, $str2);
|
||||
}
|
||||
else if ($numargs == 3) {
|
||||
return strcspn($str1, $str2, $start);
|
||||
}
|
||||
else {
|
||||
return strcspn($str1, $str2, $start, $length);
|
||||
}
|
||||
}
|
||||
|
||||
function _fgets (&$h, $force=false) {
|
||||
$startpos = ftell($h);
|
||||
$s = fgets($h, 1024);
|
||||
if ($force && preg_match("/^([^\r\n]*[\r\n]{1,2})(.)/",trim($s), $ns)) {
|
||||
$s = $ns[1];
|
||||
fseek($h,$startpos+strlen($s));
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
// For PHP4 compatability
|
||||
if(!function_exists('str_ireplace')) {
|
||||
function str_ireplace($search,$replace,$subject) {
|
||||
$search = preg_quote($search, "/");
|
||||
return preg_replace("/".$search."/i", $replace, $subject);
|
||||
}
|
||||
}
|
||||
if(!function_exists('htmlspecialchars_decode')) {
|
||||
function htmlspecialchars_decode ($str) {
|
||||
return strtr($str, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
|
||||
}
|
||||
}
|
||||
|
||||
function PreparePreText($text,$ff='//FF//') {
|
||||
// mPDF 5.0.053
|
||||
$text = htmlspecialchars($text);
|
||||
if ($ff) { $text = str_replace($ff,'</pre><formfeed /><pre>',$text); }
|
||||
return ('<pre>'.$text.'</pre>');
|
||||
}
|
||||
|
||||
if(!function_exists('strcode2utf')){
|
||||
function strcode2utf($str,$lo=true) {
|
||||
//converts all the &#nnn; and &#xhhh; in a string to Unicode
|
||||
if ($lo) { $lo = 1; } else { $lo = 0; }
|
||||
$str = preg_replace('/\&\#([0-9]+)\;/me', "code2utf('\\1',{$lo})",$str);
|
||||
$str = preg_replace('/\&\#x([0-9a-fA-F]+)\;/me', "codeHex2utf('\\1',{$lo})",$str);
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
||||
if(!function_exists('code2utf')){
|
||||
function code2utf($num,$lo=true){
|
||||
//Returns the utf string corresponding to the unicode value
|
||||
//added notes - http://uk.php.net/utf8_encode
|
||||
if ($num<128) {
|
||||
if ($lo) return chr($num);
|
||||
else return '&#'.$num.';'; // i.e. no change
|
||||
}
|
||||
if ($num<2048) return chr(($num>>6)+192).chr(($num&63)+128);
|
||||
if ($num<65536) return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
|
||||
if ($num<2097152) return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
|
||||
return '?';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!function_exists('codeHex2utf')){
|
||||
function codeHex2utf($hex,$lo=true){
|
||||
$num = hexdec($hex);
|
||||
if (($num<128) && !$lo) return '&#x'.$hex.';'; // i.e. no change
|
||||
return code2utf($num,$lo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
3164
mpdf/includes/ind_bn_1_001.volt.php
Executable file
3314
mpdf/includes/ind_gu_1_001.volt.php
Executable file
4169
mpdf/includes/ind_hi_1_001.volt.php
Executable file
2994
mpdf/includes/ind_kn_1_001.volt.php
Executable file
1769
mpdf/includes/ind_ml_1_001.volt.php
Executable file
2149
mpdf/includes/ind_or_1_001.volt.php
Executable file
1444
mpdf/includes/ind_pa_1_001.volt.php
Executable file
394
mpdf/includes/ind_ta_1_001.volt.php
Executable file
@ -0,0 +1,394 @@
|
||||
<?php
|
||||
$volt = array (
|
||||
0 =>
|
||||
array (
|
||||
'match' => '0BCD 200D',
|
||||
'replace' => '014B',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'match' => '0BCD 200C',
|
||||
'replace' => 'E002',
|
||||
),
|
||||
2 =>
|
||||
array (
|
||||
'match' => '200D 0BCD',
|
||||
'replace' => '014A',
|
||||
),
|
||||
3 =>
|
||||
array (
|
||||
'match' => '0B95 0BCD 0BB7',
|
||||
'replace' => 'E005',
|
||||
),
|
||||
4 =>
|
||||
array (
|
||||
'match' => '0BB8 0BCD 0BB0 0BC0',
|
||||
'replace' => 'E04B',
|
||||
),
|
||||
5 =>
|
||||
array (
|
||||
'match' => '0B93 0BAE 0BCD',
|
||||
'replace' => 'E04C',
|
||||
),
|
||||
6 =>
|
||||
array (
|
||||
'match' => '(0BB8) 0BC1',
|
||||
'replace' => '\\1 E00C',
|
||||
),
|
||||
7 =>
|
||||
array (
|
||||
'match' => '(0BB8) 0BC2',
|
||||
'replace' => '\\1 E00D',
|
||||
),
|
||||
8 =>
|
||||
array (
|
||||
'match' => '0B95 0BC2',
|
||||
'replace' => 'E00F',
|
||||
),
|
||||
9 =>
|
||||
array (
|
||||
'match' => '0B9C 0BC1',
|
||||
'replace' => 'E014',
|
||||
),
|
||||
10 =>
|
||||
array (
|
||||
'match' => '0B9C 0BC2',
|
||||
'replace' => 'E015',
|
||||
),
|
||||
11 =>
|
||||
array (
|
||||
'match' => '0B9F 0BBF',
|
||||
'replace' => 'E018',
|
||||
),
|
||||
12 =>
|
||||
array (
|
||||
'match' => '0BB2 0BBF',
|
||||
'replace' => 'E033',
|
||||
),
|
||||
13 =>
|
||||
array (
|
||||
'match' => '0BB7 0BBF',
|
||||
'replace' => 'E03F',
|
||||
),
|
||||
14 =>
|
||||
array (
|
||||
'match' => '0BB7 0BC1',
|
||||
'replace' => 'E041',
|
||||
),
|
||||
15 =>
|
||||
array (
|
||||
'match' => '0BB7 0BC2',
|
||||
'replace' => 'E042',
|
||||
),
|
||||
16 =>
|
||||
array (
|
||||
'match' => '0BB8 0BBF',
|
||||
'replace' => 'E043',
|
||||
),
|
||||
17 =>
|
||||
array (
|
||||
'match' => '0BB9 0BC1',
|
||||
'replace' => 'E045',
|
||||
),
|
||||
18 =>
|
||||
array (
|
||||
'match' => '0BB9 0BC2',
|
||||
'replace' => 'E046',
|
||||
),
|
||||
19 =>
|
||||
array (
|
||||
'match' => 'E005 0BBF',
|
||||
'replace' => 'E047',
|
||||
),
|
||||
20 =>
|
||||
array (
|
||||
'match' => 'E005 0BC1',
|
||||
'replace' => 'E049',
|
||||
),
|
||||
21 =>
|
||||
array (
|
||||
'match' => 'E005 0BC2',
|
||||
'replace' => 'E04A',
|
||||
),
|
||||
22 =>
|
||||
array (
|
||||
'match' => '((0BAA|0BAF|0B99|0BB5)) 0BC0',
|
||||
'replace' => '\\1 E00B',
|
||||
),
|
||||
23 =>
|
||||
array (
|
||||
'match' => '((0BAE|0B9A|0BB9|0B9C|0BB4|0BB1)) 0BBF',
|
||||
'replace' => '\\1 E006',
|
||||
),
|
||||
24 =>
|
||||
array (
|
||||
'match' => '((0BB0|0BB3|0BA3|0BA9)) 0BBF',
|
||||
'replace' => '\\1 E007',
|
||||
),
|
||||
25 =>
|
||||
array (
|
||||
'match' => '((0B95|0BA4)) 0BBF',
|
||||
'replace' => '\\1 E008',
|
||||
),
|
||||
26 =>
|
||||
array (
|
||||
'match' => '((0BAA|0BAF|0B99|0BB5)) 0BBF',
|
||||
'replace' => '\\1 E009',
|
||||
),
|
||||
27 =>
|
||||
array (
|
||||
'match' => '((0BA8|0B9E)) 0BBF',
|
||||
'replace' => '\\1 E00A',
|
||||
),
|
||||
28 =>
|
||||
array (
|
||||
'match' => '0BA3 200C 0BC8',
|
||||
'replace' => 'E01F',
|
||||
),
|
||||
29 =>
|
||||
array (
|
||||
'match' => '0BA9 200C 0BC8',
|
||||
'replace' => 'E027',
|
||||
),
|
||||
30 =>
|
||||
array (
|
||||
'match' => '0BB2 200C 0BC8',
|
||||
'replace' => 'E037',
|
||||
),
|
||||
31 =>
|
||||
array (
|
||||
'match' => '0BB3 200C 0BC8',
|
||||
'replace' => 'E03A',
|
||||
),
|
||||
32 =>
|
||||
array (
|
||||
'match' => '0B9F 0BC0',
|
||||
'replace' => 'E019',
|
||||
),
|
||||
33 =>
|
||||
array (
|
||||
'match' => '0BB2 0BC0',
|
||||
'replace' => 'E034',
|
||||
),
|
||||
34 =>
|
||||
array (
|
||||
'match' => '0BB7 0BC0',
|
||||
'replace' => 'E040',
|
||||
),
|
||||
35 =>
|
||||
array (
|
||||
'match' => '0BB8 0BC0',
|
||||
'replace' => 'E044',
|
||||
),
|
||||
36 =>
|
||||
array (
|
||||
'match' => 'E005 0BC0',
|
||||
'replace' => 'E048',
|
||||
),
|
||||
37 =>
|
||||
array (
|
||||
'match' => '0B95 0BC1',
|
||||
'replace' => 'E00E',
|
||||
),
|
||||
38 =>
|
||||
array (
|
||||
'match' => '0B99 0BC1',
|
||||
'replace' => 'E010',
|
||||
),
|
||||
39 =>
|
||||
array (
|
||||
'match' => '0B99 0BC2',
|
||||
'replace' => 'E011',
|
||||
),
|
||||
40 =>
|
||||
array (
|
||||
'match' => '0B9A 0BC1',
|
||||
'replace' => 'E012',
|
||||
),
|
||||
41 =>
|
||||
array (
|
||||
'match' => '0B9A 0BC2',
|
||||
'replace' => 'E013',
|
||||
),
|
||||
42 =>
|
||||
array (
|
||||
'match' => '0B9E 0BC1',
|
||||
'replace' => 'E016',
|
||||
),
|
||||
43 =>
|
||||
array (
|
||||
'match' => '0B9E 0BC2',
|
||||
'replace' => 'E017',
|
||||
),
|
||||
44 =>
|
||||
array (
|
||||
'match' => '0B9F 0BC1',
|
||||
'replace' => 'E01A',
|
||||
),
|
||||
45 =>
|
||||
array (
|
||||
'match' => '0B9F 0BC2',
|
||||
'replace' => 'E01B',
|
||||
),
|
||||
46 =>
|
||||
array (
|
||||
'match' => '0BA3 200C 0BBE',
|
||||
'replace' => 'E01C',
|
||||
),
|
||||
47 =>
|
||||
array (
|
||||
'match' => '0BA3 0BC1',
|
||||
'replace' => 'E01D',
|
||||
),
|
||||
48 =>
|
||||
array (
|
||||
'match' => '0BA3 0BC2',
|
||||
'replace' => 'E01E',
|
||||
),
|
||||
49 =>
|
||||
array (
|
||||
'match' => '0BA4 0BC1',
|
||||
'replace' => 'E020',
|
||||
),
|
||||
50 =>
|
||||
array (
|
||||
'match' => '0BA4 0BC2',
|
||||
'replace' => 'E021',
|
||||
),
|
||||
51 =>
|
||||
array (
|
||||
'match' => '0BA8 0BC1',
|
||||
'replace' => 'E022',
|
||||
),
|
||||
52 =>
|
||||
array (
|
||||
'match' => '0BA8 0BC2',
|
||||
'replace' => 'E023',
|
||||
),
|
||||
53 =>
|
||||
array (
|
||||
'match' => '0BA9 200C 0BBE',
|
||||
'replace' => 'E024',
|
||||
),
|
||||
54 =>
|
||||
array (
|
||||
'match' => '0BA9 0BC1',
|
||||
'replace' => 'E025',
|
||||
),
|
||||
55 =>
|
||||
array (
|
||||
'match' => '0BA9 0BC2',
|
||||
'replace' => 'E026',
|
||||
),
|
||||
56 =>
|
||||
array (
|
||||
'match' => '0BAA 0BC1',
|
||||
'replace' => 'E028',
|
||||
),
|
||||
57 =>
|
||||
array (
|
||||
'match' => '0BAA 0BC2',
|
||||
'replace' => 'E029',
|
||||
),
|
||||
58 =>
|
||||
array (
|
||||
'match' => '0BAE 0BC1',
|
||||
'replace' => 'E02A',
|
||||
),
|
||||
59 =>
|
||||
array (
|
||||
'match' => '0BAE 0BC2',
|
||||
'replace' => 'E02B',
|
||||
),
|
||||
60 =>
|
||||
array (
|
||||
'match' => '0BAF 0BC1',
|
||||
'replace' => 'E02C',
|
||||
),
|
||||
61 =>
|
||||
array (
|
||||
'match' => '0BAF 0BC2',
|
||||
'replace' => 'E02D',
|
||||
),
|
||||
62 =>
|
||||
array (
|
||||
'match' => '0BB0 0BC1',
|
||||
'replace' => 'E02E',
|
||||
),
|
||||
63 =>
|
||||
array (
|
||||
'match' => '0BB0 0BC2',
|
||||
'replace' => 'E02F',
|
||||
),
|
||||
64 =>
|
||||
array (
|
||||
'match' => '0BB1 200C 0BBE',
|
||||
'replace' => 'E030',
|
||||
),
|
||||
65 =>
|
||||
array (
|
||||
'match' => '0BB1 0BC1',
|
||||
'replace' => 'E031',
|
||||
),
|
||||
66 =>
|
||||
array (
|
||||
'match' => '0BB1 0BC2',
|
||||
'replace' => 'E032',
|
||||
),
|
||||
67 =>
|
||||
array (
|
||||
'match' => '0BB2 0BC1',
|
||||
'replace' => 'E035',
|
||||
),
|
||||
68 =>
|
||||
array (
|
||||
'match' => '0BB2 0BC2',
|
||||
'replace' => 'E036',
|
||||
),
|
||||
69 =>
|
||||
array (
|
||||
'match' => '0BB3 0BC1',
|
||||
'replace' => 'E038',
|
||||
),
|
||||
70 =>
|
||||
array (
|
||||
'match' => '0BB3 0BC2',
|
||||
'replace' => 'E039',
|
||||
),
|
||||
71 =>
|
||||
array (
|
||||
'match' => '0BB4 0BC1',
|
||||
'replace' => 'E03B',
|
||||
),
|
||||
72 =>
|
||||
array (
|
||||
'match' => '0BB4 0BC2',
|
||||
'replace' => 'E03C',
|
||||
),
|
||||
73 =>
|
||||
array (
|
||||
'match' => '0BB5 0BC1',
|
||||
'replace' => 'E03D',
|
||||
),
|
||||
74 =>
|
||||
array (
|
||||
'match' => '0BB5 0BC2',
|
||||
'replace' => 'E03E',
|
||||
),
|
||||
75 =>
|
||||
array (
|
||||
'match' => '014B',
|
||||
'replace' => '0BCD',
|
||||
),
|
||||
76 =>
|
||||
array (
|
||||
'match' => 'E002',
|
||||
'replace' => '0BCD',
|
||||
),
|
||||
77 =>
|
||||
array (
|
||||
'match' => '014A',
|
||||
'replace' => '0BCD',
|
||||
),
|
||||
);
|
||||
?>
|
1489
mpdf/includes/ind_te_1_001.volt.php
Executable file
BIN
mpdf/includes/no_image.jpg
Executable file
After Width: | Height: | Size: 7.7 KiB |
58
mpdf/includes/out.php
Executable file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
|
||||
$tempfilename = $_REQUEST['filename'].'.pdf';
|
||||
$opname = $_REQUEST['opname'];
|
||||
$path = urldecode($_REQUEST['path']);
|
||||
$dest = $_REQUEST['dest'];
|
||||
if ($tempfilename && file_exists($path.$tempfilename)) {
|
||||
// mPDF 5.3.17
|
||||
if ($dest=='I') {
|
||||
if(PHP_SAPI!='cli') {
|
||||
header('Content-Type: application/pdf');
|
||||
header('Content-disposition: inline; filename="'.$name.'"');
|
||||
header('Cache-Control: public, must-revalidate, max-age=0');
|
||||
header('Pragma: public');
|
||||
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
|
||||
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
|
||||
}
|
||||
}
|
||||
|
||||
else if ($dest=='D') {
|
||||
header('Content-Description: File Transfer');
|
||||
if (headers_sent())
|
||||
$this->Error('Some data has already been output to browser, can\'t send PDF file');
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Cache-Control: public, must-revalidate, max-age=0');
|
||||
header('Pragma: public');
|
||||
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
|
||||
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
|
||||
header('Content-Type: application/force-download');
|
||||
header('Content-Type: application/octet-stream', false);
|
||||
header('Content-Type: application/download', false);
|
||||
header('Content-Type: application/pdf', false);
|
||||
header('Content-disposition: attachment; filename="'.$name.'"');
|
||||
}
|
||||
$filesize = filesize($path.$tempfilename);
|
||||
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
|
||||
// don't use length if server using compression
|
||||
header('Content-Length: '.$filesize);
|
||||
}
|
||||
$fd=fopen($path.$tempfilename,'rb'); // mPDF 5.3.85
|
||||
fpassthru($fd);
|
||||
fclose($fd);
|
||||
unlink($path.$tempfilename);
|
||||
// ====================== DELETE OLD FILES - Housekeeping =========================================
|
||||
// Clear any files in directory that are >24 hrs old
|
||||
$interval = 86400;
|
||||
if ($handle = opendir(dirname($path.'dummy'))) {
|
||||
while (false !== ($file = readdir($handle))) {
|
||||
if (((filemtime($path.$file)+$interval) < time()) && ($file != "..") && ($file != ".") && substr($file, -3)=='pdf') {
|
||||
unlink($path.$file);
|
||||
}
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
?>
|
454
mpdf/includes/subs_core.php
Executable file
@ -0,0 +1,454 @@
|
||||
<?php
|
||||
$aarr = array(
|
||||
160 => 160,
|
||||
161 => 161,
|
||||
162 => 162,
|
||||
163 => 163,
|
||||
164 => 164,
|
||||
165 => 165,
|
||||
166 => 166,
|
||||
167 => 167,
|
||||
168 => 168,
|
||||
169 => 169,
|
||||
170 => 170,
|
||||
171 => 171,
|
||||
172 => 172,
|
||||
173 => 173,
|
||||
174 => 174,
|
||||
175 => 175,
|
||||
176 => 176,
|
||||
177 => 177,
|
||||
178 => 178,
|
||||
179 => 179,
|
||||
180 => 180,
|
||||
181 => 181,
|
||||
182 => 182,
|
||||
183 => 183,
|
||||
184 => 184,
|
||||
185 => 185,
|
||||
186 => 186,
|
||||
187 => 187,
|
||||
188 => 188,
|
||||
189 => 189,
|
||||
190 => 190,
|
||||
191 => 191,
|
||||
192 => 192,
|
||||
193 => 193,
|
||||
194 => 194,
|
||||
195 => 195,
|
||||
196 => 196,
|
||||
197 => 197,
|
||||
198 => 198,
|
||||
199 => 199,
|
||||
200 => 200,
|
||||
201 => 201,
|
||||
202 => 202,
|
||||
203 => 203,
|
||||
204 => 204,
|
||||
205 => 205,
|
||||
206 => 206,
|
||||
207 => 207,
|
||||
208 => 208,
|
||||
209 => 209,
|
||||
210 => 210,
|
||||
211 => 211,
|
||||
212 => 212,
|
||||
213 => 213,
|
||||
214 => 214,
|
||||
215 => 215,
|
||||
216 => 216,
|
||||
217 => 217,
|
||||
218 => 218,
|
||||
219 => 219,
|
||||
220 => 220,
|
||||
221 => 221,
|
||||
222 => 222,
|
||||
223 => 223,
|
||||
224 => 224,
|
||||
225 => 225,
|
||||
226 => 226,
|
||||
227 => 227,
|
||||
228 => 228,
|
||||
229 => 229,
|
||||
230 => 230,
|
||||
231 => 231,
|
||||
232 => 232,
|
||||
233 => 233,
|
||||
234 => 234,
|
||||
235 => 235,
|
||||
236 => 236,
|
||||
237 => 237,
|
||||
238 => 238,
|
||||
239 => 239,
|
||||
240 => 240,
|
||||
241 => 241,
|
||||
242 => 242,
|
||||
243 => 243,
|
||||
244 => 244,
|
||||
245 => 245,
|
||||
246 => 246,
|
||||
247 => 247,
|
||||
248 => 248,
|
||||
249 => 249,
|
||||
250 => 250,
|
||||
251 => 251,
|
||||
252 => 252,
|
||||
253 => 253,
|
||||
254 => 254,
|
||||
255 => 255,
|
||||
338 => 140,
|
||||
339 => 156,
|
||||
352 => 138,
|
||||
353 => 154,
|
||||
376 => 159,
|
||||
381 => 142,
|
||||
382 => 158,
|
||||
402 => 131,
|
||||
710 => 136,
|
||||
732 => 152,
|
||||
8211 => 150,
|
||||
8212 => 151,
|
||||
8216 => 145,
|
||||
8217 => 146,
|
||||
8218 => 130,
|
||||
8220 => 147,
|
||||
8221 => 148,
|
||||
8222 => 132,
|
||||
8224 => 134,
|
||||
8225 => 135,
|
||||
8226 => 149,
|
||||
8230 => 133,
|
||||
8240 => 137,
|
||||
8249 => 139,
|
||||
8250 => 155,
|
||||
8364 => 128,
|
||||
8482 => 153
|
||||
);
|
||||
|
||||
$zarr = array(
|
||||
8594 => 213,
|
||||
8596 => 214,
|
||||
8597 => 215,
|
||||
9312 => 172,
|
||||
9313 => 173,
|
||||
9314 => 174,
|
||||
9315 => 175,
|
||||
9316 => 176,
|
||||
9317 => 177,
|
||||
9318 => 178,
|
||||
9319 => 179,
|
||||
9320 => 180,
|
||||
9321 => 181,
|
||||
9632 => 110,
|
||||
9650 => 115,
|
||||
9660 => 116,
|
||||
9670 => 117,
|
||||
9679 => 108,
|
||||
9687 => 119,
|
||||
9733 => 72,
|
||||
9742 => 37,
|
||||
9755 => 42,
|
||||
9758 => 43,
|
||||
9824 => 171,
|
||||
9827 => 168,
|
||||
9829 => 170,
|
||||
9830 => 169,
|
||||
9985 => 33,
|
||||
9986 => 34,
|
||||
9987 => 35,
|
||||
9988 => 36,
|
||||
9990 => 38,
|
||||
9991 => 39,
|
||||
9992 => 40,
|
||||
9993 => 41,
|
||||
9996 => 44,
|
||||
9997 => 45,
|
||||
9998 => 46,
|
||||
9999 => 47,
|
||||
10000 => 48,
|
||||
10001 => 49,
|
||||
10002 => 50,
|
||||
10003 => 51,
|
||||
10004 => 52,
|
||||
10005 => 53,
|
||||
10006 => 54,
|
||||
10007 => 55,
|
||||
10008 => 56,
|
||||
10009 => 57,
|
||||
10010 => 58,
|
||||
10011 => 59,
|
||||
10012 => 60,
|
||||
10013 => 61,
|
||||
10014 => 62,
|
||||
10015 => 63,
|
||||
10016 => 64,
|
||||
10017 => 65,
|
||||
10018 => 66,
|
||||
10019 => 67,
|
||||
10020 => 68,
|
||||
10021 => 69,
|
||||
10022 => 70,
|
||||
10023 => 71,
|
||||
10025 => 73,
|
||||
10026 => 74,
|
||||
10027 => 75,
|
||||
10028 => 76,
|
||||
10029 => 77,
|
||||
10030 => 78,
|
||||
10031 => 79,
|
||||
10032 => 80,
|
||||
10033 => 81,
|
||||
10034 => 82,
|
||||
10035 => 83,
|
||||
10036 => 84,
|
||||
10037 => 85,
|
||||
10038 => 86,
|
||||
10039 => 87,
|
||||
10040 => 88,
|
||||
10041 => 89,
|
||||
10042 => 90,
|
||||
10043 => 91,
|
||||
10044 => 92,
|
||||
10045 => 93,
|
||||
10046 => 94,
|
||||
10047 => 95,
|
||||
10048 => 96,
|
||||
10049 => 97,
|
||||
10050 => 98,
|
||||
10051 => 99,
|
||||
10052 => 100,
|
||||
10053 => 101,
|
||||
10054 => 102,
|
||||
10055 => 103,
|
||||
10056 => 104,
|
||||
10057 => 105,
|
||||
10058 => 106,
|
||||
10059 => 107,
|
||||
10061 => 109,
|
||||
10063 => 111,
|
||||
10064 => 112,
|
||||
10065 => 113,
|
||||
10066 => 114,
|
||||
10070 => 118,
|
||||
10072 => 120,
|
||||
10073 => 121,
|
||||
10074 => 122,
|
||||
10075 => 123,
|
||||
10076 => 124,
|
||||
10077 => 125,
|
||||
10078 => 126,
|
||||
10081 => 161,
|
||||
10082 => 162,
|
||||
10083 => 163,
|
||||
10084 => 164,
|
||||
10085 => 165,
|
||||
10086 => 166,
|
||||
10087 => 167,
|
||||
10102 => 182,
|
||||
10103 => 183,
|
||||
10104 => 184,
|
||||
10105 => 185,
|
||||
10106 => 186,
|
||||
10107 => 187,
|
||||
10108 => 188,
|
||||
10109 => 189,
|
||||
10110 => 190,
|
||||
10111 => 191,
|
||||
10112 => 192,
|
||||
10113 => 193,
|
||||
10114 => 194,
|
||||
10115 => 195,
|
||||
10116 => 196,
|
||||
10117 => 197,
|
||||
10118 => 198,
|
||||
10119 => 199,
|
||||
10120 => 200,
|
||||
10121 => 201,
|
||||
10122 => 202,
|
||||
10123 => 203,
|
||||
10124 => 204,
|
||||
10125 => 205,
|
||||
10126 => 206,
|
||||
10127 => 207,
|
||||
10128 => 208,
|
||||
10129 => 209,
|
||||
10130 => 210,
|
||||
10131 => 211,
|
||||
10132 => 212,
|
||||
10136 => 216,
|
||||
10137 => 217,
|
||||
10138 => 218,
|
||||
10139 => 219,
|
||||
10140 => 220,
|
||||
10141 => 221,
|
||||
10142 => 222,
|
||||
10143 => 223,
|
||||
10144 => 224,
|
||||
10145 => 225,
|
||||
10146 => 226,
|
||||
10147 => 227,
|
||||
10148 => 228,
|
||||
10149 => 229,
|
||||
10150 => 230,
|
||||
10151 => 231,
|
||||
10152 => 232,
|
||||
10153 => 233,
|
||||
10154 => 234,
|
||||
10155 => 235,
|
||||
10156 => 236,
|
||||
10157 => 237,
|
||||
10158 => 238,
|
||||
10159 => 239,
|
||||
10161 => 241,
|
||||
10162 => 242,
|
||||
10163 => 243,
|
||||
10164 => 244,
|
||||
10165 => 245,
|
||||
10166 => 246,
|
||||
10167 => 247,
|
||||
10168 => 248,
|
||||
10169 => 249,
|
||||
10170 => 250,
|
||||
10171 => 251,
|
||||
10172 => 252,
|
||||
10173 => 253,
|
||||
10174 => 254
|
||||
);
|
||||
|
||||
$sarr = array(
|
||||
169 => 227,
|
||||
172 => 216,
|
||||
174 => 226,
|
||||
176 => 176,
|
||||
177 => 177,
|
||||
181 => 109,
|
||||
215 => 180,
|
||||
247 => 184,
|
||||
402 => 166,
|
||||
913 => 65,
|
||||
914 => 66,
|
||||
915 => 71,
|
||||
916 => 68,
|
||||
917 => 69,
|
||||
918 => 90,
|
||||
919 => 72,
|
||||
920 => 81,
|
||||
921 => 73,
|
||||
922 => 75,
|
||||
923 => 76,
|
||||
924 => 77,
|
||||
925 => 78,
|
||||
926 => 88,
|
||||
927 => 79,
|
||||
928 => 80,
|
||||
929 => 82,
|
||||
931 => 83,
|
||||
932 => 84,
|
||||
933 => 85,
|
||||
934 => 70,
|
||||
935 => 67,
|
||||
936 => 89,
|
||||
937 => 87,
|
||||
945 => 97,
|
||||
946 => 98,
|
||||
947 => 103,
|
||||
948 => 100,
|
||||
949 => 101,
|
||||
950 => 122,
|
||||
951 => 104,
|
||||
952 => 113,
|
||||
953 => 105,
|
||||
954 => 107,
|
||||
955 => 108,
|
||||
956 => 109,
|
||||
957 => 110,
|
||||
958 => 120,
|
||||
959 => 111,
|
||||
960 => 112,
|
||||
961 => 114,
|
||||
962 => 86,
|
||||
963 => 115,
|
||||
964 => 116,
|
||||
965 => 117,
|
||||
966 => 102,
|
||||
967 => 99,
|
||||
968 => 121,
|
||||
969 => 119,
|
||||
977 => 74,
|
||||
978 => 161,
|
||||
981 => 106,
|
||||
982 => 118,
|
||||
8226 => 183,
|
||||
8230 => 188,
|
||||
8242 => 162,
|
||||
8243 => 178,
|
||||
8260 => 164,
|
||||
8465 => 193,
|
||||
8472 => 195,
|
||||
8476 => 194,
|
||||
8482 => 228,
|
||||
8486 => 87,
|
||||
8501 => 192,
|
||||
8592 => 172,
|
||||
8593 => 173,
|
||||
8594 => 174,
|
||||
8595 => 175,
|
||||
8596 => 171,
|
||||
8629 => 191,
|
||||
8656 => 220,
|
||||
8657 => 221,
|
||||
8658 => 222,
|
||||
8659 => 223,
|
||||
8660 => 219,
|
||||
8704 => 34,
|
||||
8706 => 182,
|
||||
8707 => 36,
|
||||
8709 => 198,
|
||||
8710 => 68,
|
||||
8711 => 209,
|
||||
8712 => 206,
|
||||
8713 => 207,
|
||||
8715 => 39,
|
||||
8719 => 213,
|
||||
8721 => 229,
|
||||
8722 => 45,
|
||||
8725 => 164,
|
||||
8727 => 42,
|
||||
8730 => 214,
|
||||
8733 => 181,
|
||||
8734 => 165,
|
||||
8736 => 208,
|
||||
8743 => 217,
|
||||
8744 => 218,
|
||||
8745 => 199,
|
||||
8746 => 200,
|
||||
8747 => 242,
|
||||
8756 => 92,
|
||||
8764 => 126,
|
||||
8773 => 64,
|
||||
8776 => 187,
|
||||
8800 => 185,
|
||||
8801 => 186,
|
||||
8804 => 163,
|
||||
8805 => 179,
|
||||
8834 => 204,
|
||||
8835 => 201,
|
||||
8836 => 203,
|
||||
8838 => 205,
|
||||
8839 => 202,
|
||||
8853 => 197,
|
||||
8855 => 196,
|
||||
8869 => 94,
|
||||
8901 => 215,
|
||||
8992 => 243,
|
||||
8993 => 245,
|
||||
9001 => 225,
|
||||
9002 => 241,
|
||||
9674 => 224,
|
||||
9824 => 170,
|
||||
9827 => 167,
|
||||
9829 => 169,
|
||||
9830 => 168
|
||||
);
|
||||
|
||||
?>
|
308
mpdf/includes/subs_win-1252.php
Executable file
@ -0,0 +1,308 @@
|
||||
<?php
|
||||
|
||||
$subsarray = array (
|
||||
913 => '<tts>65</tts>',
|
||||
914 => '<tts>66</tts>',
|
||||
915 => '<tts>71</tts>',
|
||||
916 => '<tts>68</tts>',
|
||||
917 => '<tts>69</tts>',
|
||||
918 => '<tts>90</tts>',
|
||||
919 => '<tts>72</tts>',
|
||||
920 => '<tts>81</tts>',
|
||||
921 => '<tts>73</tts>',
|
||||
922 => '<tts>75</tts>',
|
||||
923 => '<tts>76</tts>',
|
||||
924 => '<tts>77</tts>',
|
||||
925 => '<tts>78</tts>',
|
||||
926 => '<tts>88</tts>',
|
||||
927 => '<tts>79</tts>',
|
||||
928 => '<tts>80</tts>',
|
||||
929 => '<tts>82</tts>',
|
||||
931 => '<tts>83</tts>',
|
||||
932 => '<tts>84</tts>',
|
||||
933 => '<tts>85</tts>',
|
||||
934 => '<tts>70</tts>',
|
||||
935 => '<tts>67</tts>',
|
||||
936 => '<tts>89</tts>',
|
||||
937 => '<tts>87</tts>',
|
||||
945 => '<tts>97</tts>',
|
||||
946 => '<tts>98</tts>',
|
||||
947 => '<tts>103</tts>',
|
||||
948 => '<tts>100</tts>',
|
||||
949 => '<tts>101</tts>',
|
||||
950 => '<tts>122</tts>',
|
||||
951 => '<tts>104</tts>',
|
||||
952 => '<tts>113</tts>',
|
||||
953 => '<tts>105</tts>',
|
||||
954 => '<tts>107</tts>',
|
||||
955 => '<tts>108</tts>',
|
||||
956 => '<tts>109</tts>',
|
||||
957 => '<tts>110</tts>',
|
||||
958 => '<tts>120</tts>',
|
||||
959 => '<tts>111</tts>',
|
||||
960 => '<tts>112</tts>',
|
||||
961 => '<tts>114</tts>',
|
||||
962 => '<tts>86</tts>',
|
||||
963 => '<tts>115</tts>',
|
||||
964 => '<tts>116</tts>',
|
||||
965 => '<tts>117</tts>',
|
||||
966 => '<tts>102</tts>',
|
||||
967 => '<tts>99</tts>',
|
||||
968 => '<tts>121</tts>',
|
||||
969 => '<tts>119</tts>',
|
||||
977 => '<tts>74</tts>',
|
||||
978 => '<tts>161</tts>',
|
||||
981 => '<tts>106</tts>',
|
||||
982 => '<tts>118</tts>',
|
||||
8242 => '<tts>162</tts>',
|
||||
8243 => '<tts>178</tts>',
|
||||
8260 => '<tts>164</tts>',
|
||||
8465 => '<tts>193</tts>',
|
||||
8472 => '<tts>195</tts>',
|
||||
8476 => '<tts>194</tts>',
|
||||
8486 => '<tts>87</tts>',
|
||||
8501 => '<tts>192</tts>',
|
||||
8592 => '<tts>172</tts>',
|
||||
8593 => '<tts>173</tts>',
|
||||
8594 => '<tts>174</tts>',
|
||||
8595 => '<tts>175</tts>',
|
||||
8596 => '<tts>171</tts>',
|
||||
8597 => '<ttz>215</ttz>',
|
||||
8629 => '<tts>191</tts>',
|
||||
8656 => '<tts>220</tts>',
|
||||
8657 => '<tts>221</tts>',
|
||||
8658 => '<tts>222</tts>',
|
||||
8659 => '<tts>223</tts>',
|
||||
8660 => '<tts>219</tts>',
|
||||
8704 => '<tts>34</tts>',
|
||||
8706 => '<tts>182</tts>',
|
||||
8707 => '<tts>36</tts>',
|
||||
8709 => '<tts>198</tts>',
|
||||
8710 => '<tts>68</tts>',
|
||||
8711 => '<tts>209</tts>',
|
||||
8712 => '<tts>206</tts>',
|
||||
8713 => '<tts>207</tts>',
|
||||
8715 => '<tts>39</tts>',
|
||||
8719 => '<tts>213</tts>',
|
||||
8721 => '<tts>229</tts>',
|
||||
8722 => '<tts>45</tts>',
|
||||
8725 => '<tts>164</tts>',
|
||||
8727 => '<tts>42</tts>',
|
||||
8730 => '<tts>214</tts>',
|
||||
8733 => '<tts>181</tts>',
|
||||
8734 => '<tts>165</tts>',
|
||||
8736 => '<tts>208</tts>',
|
||||
8743 => '<tts>217</tts>',
|
||||
8744 => '<tts>218</tts>',
|
||||
8745 => '<tts>199</tts>',
|
||||
8746 => '<tts>200</tts>',
|
||||
8747 => '<tts>242</tts>',
|
||||
8756 => '<tts>92</tts>',
|
||||
8764 => '<tts>126</tts>',
|
||||
8773 => '<tts>64</tts>',
|
||||
8776 => '<tts>187</tts>',
|
||||
8800 => '<tts>185</tts>',
|
||||
8801 => '<tts>186</tts>',
|
||||
8804 => '<tts>163</tts>',
|
||||
8805 => '<tts>179</tts>',
|
||||
8834 => '<tts>204</tts>',
|
||||
8835 => '<tts>201</tts>',
|
||||
8836 => '<tts>203</tts>',
|
||||
8838 => '<tts>205</tts>',
|
||||
8839 => '<tts>202</tts>',
|
||||
8853 => '<tts>197</tts>',
|
||||
8855 => '<tts>196</tts>',
|
||||
8869 => '<tts>94</tts>',
|
||||
8901 => '<tts>215</tts>',
|
||||
8992 => '<tts>243</tts>',
|
||||
8993 => '<tts>245</tts>',
|
||||
9001 => '<tts>225</tts>',
|
||||
9002 => '<tts>241</tts>',
|
||||
9312 => '<ttz>172</ttz>',
|
||||
9313 => '<ttz>173</ttz>',
|
||||
9314 => '<ttz>174</ttz>',
|
||||
9315 => '<ttz>175</ttz>',
|
||||
9316 => '<ttz>176</ttz>',
|
||||
9317 => '<ttz>177</ttz>',
|
||||
9318 => '<ttz>178</ttz>',
|
||||
9319 => '<ttz>179</ttz>',
|
||||
9320 => '<ttz>180</ttz>',
|
||||
9321 => '<ttz>181</ttz>',
|
||||
9632 => '<ttz>110</ttz>',
|
||||
9650 => '<ttz>115</ttz>',
|
||||
9660 => '<ttz>116</ttz>',
|
||||
9670 => '<ttz>117</ttz>',
|
||||
9674 => '<tts>224</tts>',
|
||||
9679 => '<ttz>108</ttz>',
|
||||
9687 => '<ttz>119</ttz>',
|
||||
9733 => '<ttz>72</ttz>',
|
||||
9742 => '<ttz>37</ttz>',
|
||||
9755 => '<ttz>42</ttz>',
|
||||
9758 => '<ttz>43</ttz>',
|
||||
9824 => '<tts>170</tts>',
|
||||
9827 => '<tts>167</tts>',
|
||||
9829 => '<tts>169</tts>',
|
||||
9830 => '<tts>168</tts>',
|
||||
9985 => '<ttz>33</ttz>',
|
||||
9986 => '<ttz>34</ttz>',
|
||||
9987 => '<ttz>35</ttz>',
|
||||
9988 => '<ttz>36</ttz>',
|
||||
9990 => '<ttz>38</ttz>',
|
||||
9991 => '<ttz>39</ttz>',
|
||||
9992 => '<ttz>40</ttz>',
|
||||
9993 => '<ttz>41</ttz>',
|
||||
9996 => '<ttz>44</ttz>',
|
||||
9997 => '<ttz>45</ttz>',
|
||||
9998 => '<ttz>46</ttz>',
|
||||
9999 => '<ttz>47</ttz>',
|
||||
10000 => '<ttz>48</ttz>',
|
||||
10001 => '<ttz>49</ttz>',
|
||||
10002 => '<ttz>50</ttz>',
|
||||
10003 => '<ttz>51</ttz>',
|
||||
10004 => '<ttz>52</ttz>',
|
||||
10005 => '<ttz>53</ttz>',
|
||||
10006 => '<ttz>54</ttz>',
|
||||
10007 => '<ttz>55</ttz>',
|
||||
10008 => '<ttz>56</ttz>',
|
||||
10009 => '<ttz>57</ttz>',
|
||||
10010 => '<ttz>58</ttz>',
|
||||
10011 => '<ttz>59</ttz>',
|
||||
10012 => '<ttz>60</ttz>',
|
||||
10013 => '<ttz>61</ttz>',
|
||||
10014 => '<ttz>62</ttz>',
|
||||
10015 => '<ttz>63</ttz>',
|
||||
10016 => '<ttz>64</ttz>',
|
||||
10017 => '<ttz>65</ttz>',
|
||||
10018 => '<ttz>66</ttz>',
|
||||
10019 => '<ttz>67</ttz>',
|
||||
10020 => '<ttz>68</ttz>',
|
||||
10021 => '<ttz>69</ttz>',
|
||||
10022 => '<ttz>70</ttz>',
|
||||
10023 => '<ttz>71</ttz>',
|
||||
10025 => '<ttz>73</ttz>',
|
||||
10026 => '<ttz>74</ttz>',
|
||||
10027 => '<ttz>75</ttz>',
|
||||
10028 => '<ttz>76</ttz>',
|
||||
10029 => '<ttz>77</ttz>',
|
||||
10030 => '<ttz>78</ttz>',
|
||||
10031 => '<ttz>79</ttz>',
|
||||
10032 => '<ttz>80</ttz>',
|
||||
10033 => '<ttz>81</ttz>',
|
||||
10034 => '<ttz>82</ttz>',
|
||||
10035 => '<ttz>83</ttz>',
|
||||
10036 => '<ttz>84</ttz>',
|
||||
10037 => '<ttz>85</ttz>',
|
||||
10038 => '<ttz>86</ttz>',
|
||||
10039 => '<ttz>87</ttz>',
|
||||
10040 => '<ttz>88</ttz>',
|
||||
10041 => '<ttz>89</ttz>',
|
||||
10042 => '<ttz>90</ttz>',
|
||||
10043 => '<ttz>91</ttz>',
|
||||
10044 => '<ttz>92</ttz>',
|
||||
10045 => '<ttz>93</ttz>',
|
||||
10046 => '<ttz>94</ttz>',
|
||||
10047 => '<ttz>95</ttz>',
|
||||
10048 => '<ttz>96</ttz>',
|
||||
10049 => '<ttz>97</ttz>',
|
||||
10050 => '<ttz>98</ttz>',
|
||||
10051 => '<ttz>99</ttz>',
|
||||
10052 => '<ttz>100</ttz>',
|
||||
10053 => '<ttz>101</ttz>',
|
||||
10054 => '<ttz>102</ttz>',
|
||||
10055 => '<ttz>103</ttz>',
|
||||
10056 => '<ttz>104</ttz>',
|
||||
10057 => '<ttz>105</ttz>',
|
||||
10058 => '<ttz>106</ttz>',
|
||||
10059 => '<ttz>107</ttz>',
|
||||
10061 => '<ttz>109</ttz>',
|
||||
10063 => '<ttz>111</ttz>',
|
||||
10064 => '<ttz>112</ttz>',
|
||||
10065 => '<ttz>113</ttz>',
|
||||
10066 => '<ttz>114</ttz>',
|
||||
10070 => '<ttz>118</ttz>',
|
||||
10072 => '<ttz>120</ttz>',
|
||||
10073 => '<ttz>121</ttz>',
|
||||
10074 => '<ttz>122</ttz>',
|
||||
10075 => '<ttz>123</ttz>',
|
||||
10076 => '<ttz>124</ttz>',
|
||||
10077 => '<ttz>125</ttz>',
|
||||
10078 => '<ttz>126</ttz>',
|
||||
10081 => '<ttz>161</ttz>',
|
||||
10082 => '<ttz>162</ttz>',
|
||||
10083 => '<ttz>163</ttz>',
|
||||
10084 => '<ttz>164</ttz>',
|
||||
10085 => '<ttz>165</ttz>',
|
||||
10086 => '<ttz>166</ttz>',
|
||||
10087 => '<ttz>167</ttz>',
|
||||
10102 => '<ttz>182</ttz>',
|
||||
10103 => '<ttz>183</ttz>',
|
||||
10104 => '<ttz>184</ttz>',
|
||||
10105 => '<ttz>185</ttz>',
|
||||
10106 => '<ttz>186</ttz>',
|
||||
10107 => '<ttz>187</ttz>',
|
||||
10108 => '<ttz>188</ttz>',
|
||||
10109 => '<ttz>189</ttz>',
|
||||
10110 => '<ttz>190</ttz>',
|
||||
10111 => '<ttz>191</ttz>',
|
||||
10112 => '<ttz>192</ttz>',
|
||||
10113 => '<ttz>193</ttz>',
|
||||
10114 => '<ttz>194</ttz>',
|
||||
10115 => '<ttz>195</ttz>',
|
||||
10116 => '<ttz>196</ttz>',
|
||||
10117 => '<ttz>197</ttz>',
|
||||
10118 => '<ttz>198</ttz>',
|
||||
10119 => '<ttz>199</ttz>',
|
||||
10120 => '<ttz>200</ttz>',
|
||||
10121 => '<ttz>201</ttz>',
|
||||
10122 => '<ttz>202</ttz>',
|
||||
10123 => '<ttz>203</ttz>',
|
||||
10124 => '<ttz>204</ttz>',
|
||||
10125 => '<ttz>205</ttz>',
|
||||
10126 => '<ttz>206</ttz>',
|
||||
10127 => '<ttz>207</ttz>',
|
||||
10128 => '<ttz>208</ttz>',
|
||||
10129 => '<ttz>209</ttz>',
|
||||
10130 => '<ttz>210</ttz>',
|
||||
10131 => '<ttz>211</ttz>',
|
||||
10132 => '<ttz>212</ttz>',
|
||||
10136 => '<ttz>216</ttz>',
|
||||
10137 => '<ttz>217</ttz>',
|
||||
10138 => '<ttz>218</ttz>',
|
||||
10139 => '<ttz>219</ttz>',
|
||||
10140 => '<ttz>220</ttz>',
|
||||
10141 => '<ttz>221</ttz>',
|
||||
10142 => '<ttz>222</ttz>',
|
||||
10143 => '<ttz>223</ttz>',
|
||||
10144 => '<ttz>224</ttz>',
|
||||
10145 => '<ttz>225</ttz>',
|
||||
10146 => '<ttz>226</ttz>',
|
||||
10147 => '<ttz>227</ttz>',
|
||||
10148 => '<ttz>228</ttz>',
|
||||
10149 => '<ttz>229</ttz>',
|
||||
10150 => '<ttz>230</ttz>',
|
||||
10151 => '<ttz>231</ttz>',
|
||||
10152 => '<ttz>232</ttz>',
|
||||
10153 => '<ttz>233</ttz>',
|
||||
10154 => '<ttz>234</ttz>',
|
||||
10155 => '<ttz>235</ttz>',
|
||||
10156 => '<ttz>236</ttz>',
|
||||
10157 => '<ttz>237</ttz>',
|
||||
10158 => '<ttz>238</ttz>',
|
||||
10159 => '<ttz>239</ttz>',
|
||||
10161 => '<ttz>241</ttz>',
|
||||
10162 => '<ttz>242</ttz>',
|
||||
10163 => '<ttz>243</ttz>',
|
||||
10164 => '<ttz>244</ttz>',
|
||||
10165 => '<ttz>245</ttz>',
|
||||
10166 => '<ttz>246</ttz>',
|
||||
10167 => '<ttz>247</ttz>',
|
||||
10168 => '<ttz>248</ttz>',
|
||||
10169 => '<ttz>249</ttz>',
|
||||
10170 => '<ttz>250</ttz>',
|
||||
10171 => '<ttz>251</ttz>',
|
||||
10172 => '<ttz>252</ttz>',
|
||||
10173 => '<ttz>253</ttz>',
|
||||
10174 => '<ttz>254</ttz>',
|
||||
);
|
||||
|
||||
?>
|
975
mpdf/includes/upperCase.php
Executable file
@ -0,0 +1,975 @@
|
||||
<?php
|
||||
$this->upperCase=array (
|
||||
97 => 65,
|
||||
98 => 66,
|
||||
99 => 67,
|
||||
100 => 68,
|
||||
101 => 69,
|
||||
102 => 70,
|
||||
103 => 71,
|
||||
104 => 72,
|
||||
105 => 73,
|
||||
106 => 74,
|
||||
107 => 75,
|
||||
108 => 76,
|
||||
109 => 77,
|
||||
110 => 78,
|
||||
111 => 79,
|
||||
112 => 80,
|
||||
113 => 81,
|
||||
114 => 82,
|
||||
115 => 83,
|
||||
116 => 84,
|
||||
117 => 85,
|
||||
118 => 86,
|
||||
119 => 87,
|
||||
120 => 88,
|
||||
121 => 89,
|
||||
122 => 90,
|
||||
181 => 924,
|
||||
224 => 192,
|
||||
225 => 193,
|
||||
226 => 194,
|
||||
227 => 195,
|
||||
228 => 196,
|
||||
229 => 197,
|
||||
230 => 198,
|
||||
231 => 199,
|
||||
232 => 200,
|
||||
233 => 201,
|
||||
234 => 202,
|
||||
235 => 203,
|
||||
236 => 204,
|
||||
237 => 205,
|
||||
238 => 206,
|
||||
239 => 207,
|
||||
240 => 208,
|
||||
241 => 209,
|
||||
242 => 210,
|
||||
243 => 211,
|
||||
244 => 212,
|
||||
245 => 213,
|
||||
246 => 214,
|
||||
248 => 216,
|
||||
249 => 217,
|
||||
250 => 218,
|
||||
251 => 219,
|
||||
252 => 220,
|
||||
253 => 221,
|
||||
254 => 222,
|
||||
255 => 376,
|
||||
257 => 256,
|
||||
259 => 258,
|
||||
261 => 260,
|
||||
263 => 262,
|
||||
265 => 264,
|
||||
267 => 266,
|
||||
269 => 268,
|
||||
271 => 270,
|
||||
273 => 272,
|
||||
275 => 274,
|
||||
277 => 276,
|
||||
279 => 278,
|
||||
281 => 280,
|
||||
283 => 282,
|
||||
285 => 284,
|
||||
287 => 286,
|
||||
289 => 288,
|
||||
291 => 290,
|
||||
293 => 292,
|
||||
295 => 294,
|
||||
297 => 296,
|
||||
299 => 298,
|
||||
301 => 300,
|
||||
303 => 302,
|
||||
305 => 73,
|
||||
307 => 306,
|
||||
309 => 308,
|
||||
311 => 310,
|
||||
314 => 313,
|
||||
316 => 315,
|
||||
318 => 317,
|
||||
320 => 319,
|
||||
322 => 321,
|
||||
324 => 323,
|
||||
326 => 325,
|
||||
328 => 327,
|
||||
331 => 330,
|
||||
333 => 332,
|
||||
335 => 334,
|
||||
337 => 336,
|
||||
339 => 338,
|
||||
341 => 340,
|
||||
343 => 342,
|
||||
345 => 344,
|
||||
347 => 346,
|
||||
349 => 348,
|
||||
351 => 350,
|
||||
353 => 352,
|
||||
355 => 354,
|
||||
357 => 356,
|
||||
359 => 358,
|
||||
361 => 360,
|
||||
363 => 362,
|
||||
365 => 364,
|
||||
367 => 366,
|
||||
369 => 368,
|
||||
371 => 370,
|
||||
373 => 372,
|
||||
375 => 374,
|
||||
378 => 377,
|
||||
380 => 379,
|
||||
382 => 381,
|
||||
383 => 83,
|
||||
384 => 579,
|
||||
387 => 386,
|
||||
389 => 388,
|
||||
392 => 391,
|
||||
396 => 395,
|
||||
402 => 401,
|
||||
405 => 502,
|
||||
409 => 408,
|
||||
410 => 573,
|
||||
414 => 544,
|
||||
417 => 416,
|
||||
419 => 418,
|
||||
421 => 420,
|
||||
424 => 423,
|
||||
429 => 428,
|
||||
432 => 431,
|
||||
436 => 435,
|
||||
438 => 437,
|
||||
441 => 440,
|
||||
445 => 444,
|
||||
447 => 503,
|
||||
453 => 452,
|
||||
454 => 452,
|
||||
456 => 455,
|
||||
457 => 455,
|
||||
459 => 458,
|
||||
460 => 458,
|
||||
462 => 461,
|
||||
464 => 463,
|
||||
466 => 465,
|
||||
468 => 467,
|
||||
470 => 469,
|
||||
472 => 471,
|
||||
474 => 473,
|
||||
476 => 475,
|
||||
477 => 398,
|
||||
479 => 478,
|
||||
481 => 480,
|
||||
483 => 482,
|
||||
485 => 484,
|
||||
487 => 486,
|
||||
489 => 488,
|
||||
491 => 490,
|
||||
493 => 492,
|
||||
495 => 494,
|
||||
498 => 497,
|
||||
499 => 497,
|
||||
501 => 500,
|
||||
505 => 504,
|
||||
507 => 506,
|
||||
509 => 508,
|
||||
511 => 510,
|
||||
513 => 512,
|
||||
515 => 514,
|
||||
517 => 516,
|
||||
519 => 518,
|
||||
521 => 520,
|
||||
523 => 522,
|
||||
525 => 524,
|
||||
527 => 526,
|
||||
529 => 528,
|
||||
531 => 530,
|
||||
533 => 532,
|
||||
535 => 534,
|
||||
537 => 536,
|
||||
539 => 538,
|
||||
541 => 540,
|
||||
543 => 542,
|
||||
547 => 546,
|
||||
549 => 548,
|
||||
551 => 550,
|
||||
553 => 552,
|
||||
555 => 554,
|
||||
557 => 556,
|
||||
559 => 558,
|
||||
561 => 560,
|
||||
563 => 562,
|
||||
572 => 571,
|
||||
575 => 11390,
|
||||
576 => 11391,
|
||||
578 => 577,
|
||||
583 => 582,
|
||||
585 => 584,
|
||||
587 => 586,
|
||||
589 => 588,
|
||||
591 => 590,
|
||||
592 => 11375,
|
||||
593 => 11373,
|
||||
594 => 11376,
|
||||
595 => 385,
|
||||
596 => 390,
|
||||
598 => 393,
|
||||
599 => 394,
|
||||
601 => 399,
|
||||
603 => 400,
|
||||
608 => 403,
|
||||
611 => 404,
|
||||
616 => 407,
|
||||
617 => 406,
|
||||
619 => 11362,
|
||||
623 => 412,
|
||||
625 => 11374,
|
||||
626 => 413,
|
||||
629 => 415,
|
||||
637 => 11364,
|
||||
640 => 422,
|
||||
643 => 425,
|
||||
648 => 430,
|
||||
649 => 580,
|
||||
650 => 433,
|
||||
651 => 434,
|
||||
652 => 581,
|
||||
658 => 439,
|
||||
837 => 921,
|
||||
881 => 880,
|
||||
883 => 882,
|
||||
887 => 886,
|
||||
891 => 1021,
|
||||
892 => 1022,
|
||||
893 => 1023,
|
||||
940 => 902,
|
||||
941 => 904,
|
||||
942 => 905,
|
||||
943 => 906,
|
||||
945 => 913,
|
||||
946 => 914,
|
||||
947 => 915,
|
||||
948 => 916,
|
||||
949 => 917,
|
||||
950 => 918,
|
||||
951 => 919,
|
||||
952 => 920,
|
||||
953 => 921,
|
||||
954 => 922,
|
||||
955 => 923,
|
||||
956 => 924,
|
||||
957 => 925,
|
||||
958 => 926,
|
||||
959 => 927,
|
||||
960 => 928,
|
||||
961 => 929,
|
||||
962 => 931,
|
||||
963 => 931,
|
||||
964 => 932,
|
||||
965 => 933,
|
||||
966 => 934,
|
||||
967 => 935,
|
||||
968 => 936,
|
||||
969 => 937,
|
||||
970 => 938,
|
||||
971 => 939,
|
||||
972 => 908,
|
||||
973 => 910,
|
||||
974 => 911,
|
||||
976 => 914,
|
||||
977 => 920,
|
||||
981 => 934,
|
||||
982 => 928,
|
||||
983 => 975,
|
||||
985 => 984,
|
||||
987 => 986,
|
||||
989 => 988,
|
||||
991 => 990,
|
||||
993 => 992,
|
||||
995 => 994,
|
||||
997 => 996,
|
||||
999 => 998,
|
||||
1001 => 1000,
|
||||
1003 => 1002,
|
||||
1005 => 1004,
|
||||
1007 => 1006,
|
||||
1008 => 922,
|
||||
1009 => 929,
|
||||
1010 => 1017,
|
||||
1013 => 917,
|
||||
1016 => 1015,
|
||||
1019 => 1018,
|
||||
1072 => 1040,
|
||||
1073 => 1041,
|
||||
1074 => 1042,
|
||||
1075 => 1043,
|
||||
1076 => 1044,
|
||||
1077 => 1045,
|
||||
1078 => 1046,
|
||||
1079 => 1047,
|
||||
1080 => 1048,
|
||||
1081 => 1049,
|
||||
1082 => 1050,
|
||||
1083 => 1051,
|
||||
1084 => 1052,
|
||||
1085 => 1053,
|
||||
1086 => 1054,
|
||||
1087 => 1055,
|
||||
1088 => 1056,
|
||||
1089 => 1057,
|
||||
1090 => 1058,
|
||||
1091 => 1059,
|
||||
1092 => 1060,
|
||||
1093 => 1061,
|
||||
1094 => 1062,
|
||||
1095 => 1063,
|
||||
1096 => 1064,
|
||||
1097 => 1065,
|
||||
1098 => 1066,
|
||||
1099 => 1067,
|
||||
1100 => 1068,
|
||||
1101 => 1069,
|
||||
1102 => 1070,
|
||||
1103 => 1071,
|
||||
1104 => 1024,
|
||||
1105 => 1025,
|
||||
1106 => 1026,
|
||||
1107 => 1027,
|
||||
1108 => 1028,
|
||||
1109 => 1029,
|
||||
1110 => 1030,
|
||||
1111 => 1031,
|
||||
1112 => 1032,
|
||||
1113 => 1033,
|
||||
1114 => 1034,
|
||||
1115 => 1035,
|
||||
1116 => 1036,
|
||||
1117 => 1037,
|
||||
1118 => 1038,
|
||||
1119 => 1039,
|
||||
1121 => 1120,
|
||||
1123 => 1122,
|
||||
1125 => 1124,
|
||||
1127 => 1126,
|
||||
1129 => 1128,
|
||||
1131 => 1130,
|
||||
1133 => 1132,
|
||||
1135 => 1134,
|
||||
1137 => 1136,
|
||||
1139 => 1138,
|
||||
1141 => 1140,
|
||||
1143 => 1142,
|
||||
1145 => 1144,
|
||||
1147 => 1146,
|
||||
1149 => 1148,
|
||||
1151 => 1150,
|
||||
1153 => 1152,
|
||||
1163 => 1162,
|
||||
1165 => 1164,
|
||||
1167 => 1166,
|
||||
1169 => 1168,
|
||||
1171 => 1170,
|
||||
1173 => 1172,
|
||||
1175 => 1174,
|
||||
1177 => 1176,
|
||||
1179 => 1178,
|
||||
1181 => 1180,
|
||||
1183 => 1182,
|
||||
1185 => 1184,
|
||||
1187 => 1186,
|
||||
1189 => 1188,
|
||||
1191 => 1190,
|
||||
1193 => 1192,
|
||||
1195 => 1194,
|
||||
1197 => 1196,
|
||||
1199 => 1198,
|
||||
1201 => 1200,
|
||||
1203 => 1202,
|
||||
1205 => 1204,
|
||||
1207 => 1206,
|
||||
1209 => 1208,
|
||||
1211 => 1210,
|
||||
1213 => 1212,
|
||||
1215 => 1214,
|
||||
1218 => 1217,
|
||||
1220 => 1219,
|
||||
1222 => 1221,
|
||||
1224 => 1223,
|
||||
1226 => 1225,
|
||||
1228 => 1227,
|
||||
1230 => 1229,
|
||||
1231 => 1216,
|
||||
1233 => 1232,
|
||||
1235 => 1234,
|
||||
1237 => 1236,
|
||||
1239 => 1238,
|
||||
1241 => 1240,
|
||||
1243 => 1242,
|
||||
1245 => 1244,
|
||||
1247 => 1246,
|
||||
1249 => 1248,
|
||||
1251 => 1250,
|
||||
1253 => 1252,
|
||||
1255 => 1254,
|
||||
1257 => 1256,
|
||||
1259 => 1258,
|
||||
1261 => 1260,
|
||||
1263 => 1262,
|
||||
1265 => 1264,
|
||||
1267 => 1266,
|
||||
1269 => 1268,
|
||||
1271 => 1270,
|
||||
1273 => 1272,
|
||||
1275 => 1274,
|
||||
1277 => 1276,
|
||||
1279 => 1278,
|
||||
1281 => 1280,
|
||||
1283 => 1282,
|
||||
1285 => 1284,
|
||||
1287 => 1286,
|
||||
1289 => 1288,
|
||||
1291 => 1290,
|
||||
1293 => 1292,
|
||||
1295 => 1294,
|
||||
1297 => 1296,
|
||||
1299 => 1298,
|
||||
1301 => 1300,
|
||||
1303 => 1302,
|
||||
1305 => 1304,
|
||||
1307 => 1306,
|
||||
1309 => 1308,
|
||||
1311 => 1310,
|
||||
1313 => 1312,
|
||||
1315 => 1314,
|
||||
1317 => 1316,
|
||||
1377 => 1329,
|
||||
1378 => 1330,
|
||||
1379 => 1331,
|
||||
1380 => 1332,
|
||||
1381 => 1333,
|
||||
1382 => 1334,
|
||||
1383 => 1335,
|
||||
1384 => 1336,
|
||||
1385 => 1337,
|
||||
1386 => 1338,
|
||||
1387 => 1339,
|
||||
1388 => 1340,
|
||||
1389 => 1341,
|
||||
1390 => 1342,
|
||||
1391 => 1343,
|
||||
1392 => 1344,
|
||||
1393 => 1345,
|
||||
1394 => 1346,
|
||||
1395 => 1347,
|
||||
1396 => 1348,
|
||||
1397 => 1349,
|
||||
1398 => 1350,
|
||||
1399 => 1351,
|
||||
1400 => 1352,
|
||||
1401 => 1353,
|
||||
1402 => 1354,
|
||||
1403 => 1355,
|
||||
1404 => 1356,
|
||||
1405 => 1357,
|
||||
1406 => 1358,
|
||||
1407 => 1359,
|
||||
1408 => 1360,
|
||||
1409 => 1361,
|
||||
1410 => 1362,
|
||||
1411 => 1363,
|
||||
1412 => 1364,
|
||||
1413 => 1365,
|
||||
1414 => 1366,
|
||||
7545 => 42877,
|
||||
7549 => 11363,
|
||||
7681 => 7680,
|
||||
7683 => 7682,
|
||||
7685 => 7684,
|
||||
7687 => 7686,
|
||||
7689 => 7688,
|
||||
7691 => 7690,
|
||||
7693 => 7692,
|
||||
7695 => 7694,
|
||||
7697 => 7696,
|
||||
7699 => 7698,
|
||||
7701 => 7700,
|
||||
7703 => 7702,
|
||||
7705 => 7704,
|
||||
7707 => 7706,
|
||||
7709 => 7708,
|
||||
7711 => 7710,
|
||||
7713 => 7712,
|
||||
7715 => 7714,
|
||||
7717 => 7716,
|
||||
7719 => 7718,
|
||||
7721 => 7720,
|
||||
7723 => 7722,
|
||||
7725 => 7724,
|
||||
7727 => 7726,
|
||||
7729 => 7728,
|
||||
7731 => 7730,
|
||||
7733 => 7732,
|
||||
7735 => 7734,
|
||||
7737 => 7736,
|
||||
7739 => 7738,
|
||||
7741 => 7740,
|
||||
7743 => 7742,
|
||||
7745 => 7744,
|
||||
7747 => 7746,
|
||||
7749 => 7748,
|
||||
7751 => 7750,
|
||||
7753 => 7752,
|
||||
7755 => 7754,
|
||||
7757 => 7756,
|
||||
7759 => 7758,
|
||||
7761 => 7760,
|
||||
7763 => 7762,
|
||||
7765 => 7764,
|
||||
7767 => 7766,
|
||||
7769 => 7768,
|
||||
7771 => 7770,
|
||||
7773 => 7772,
|
||||
7775 => 7774,
|
||||
7777 => 7776,
|
||||
7779 => 7778,
|
||||
7781 => 7780,
|
||||
7783 => 7782,
|
||||
7785 => 7784,
|
||||
7787 => 7786,
|
||||
7789 => 7788,
|
||||
7791 => 7790,
|
||||
7793 => 7792,
|
||||
7795 => 7794,
|
||||
7797 => 7796,
|
||||
7799 => 7798,
|
||||
7801 => 7800,
|
||||
7803 => 7802,
|
||||
7805 => 7804,
|
||||
7807 => 7806,
|
||||
7809 => 7808,
|
||||
7811 => 7810,
|
||||
7813 => 7812,
|
||||
7815 => 7814,
|
||||
7817 => 7816,
|
||||
7819 => 7818,
|
||||
7821 => 7820,
|
||||
7823 => 7822,
|
||||
7825 => 7824,
|
||||
7827 => 7826,
|
||||
7829 => 7828,
|
||||
7835 => 7776,
|
||||
7841 => 7840,
|
||||
7843 => 7842,
|
||||
7845 => 7844,
|
||||
7847 => 7846,
|
||||
7849 => 7848,
|
||||
7851 => 7850,
|
||||
7853 => 7852,
|
||||
7855 => 7854,
|
||||
7857 => 7856,
|
||||
7859 => 7858,
|
||||
7861 => 7860,
|
||||
7863 => 7862,
|
||||
7865 => 7864,
|
||||
7867 => 7866,
|
||||
7869 => 7868,
|
||||
7871 => 7870,
|
||||
7873 => 7872,
|
||||
7875 => 7874,
|
||||
7877 => 7876,
|
||||
7879 => 7878,
|
||||
7881 => 7880,
|
||||
7883 => 7882,
|
||||
7885 => 7884,
|
||||
7887 => 7886,
|
||||
7889 => 7888,
|
||||
7891 => 7890,
|
||||
7893 => 7892,
|
||||
7895 => 7894,
|
||||
7897 => 7896,
|
||||
7899 => 7898,
|
||||
7901 => 7900,
|
||||
7903 => 7902,
|
||||
7905 => 7904,
|
||||
7907 => 7906,
|
||||
7909 => 7908,
|
||||
7911 => 7910,
|
||||
7913 => 7912,
|
||||
7915 => 7914,
|
||||
7917 => 7916,
|
||||
7919 => 7918,
|
||||
7921 => 7920,
|
||||
7923 => 7922,
|
||||
7925 => 7924,
|
||||
7927 => 7926,
|
||||
7929 => 7928,
|
||||
7931 => 7930,
|
||||
7933 => 7932,
|
||||
7935 => 7934,
|
||||
7936 => 7944,
|
||||
7937 => 7945,
|
||||
7938 => 7946,
|
||||
7939 => 7947,
|
||||
7940 => 7948,
|
||||
7941 => 7949,
|
||||
7942 => 7950,
|
||||
7943 => 7951,
|
||||
7952 => 7960,
|
||||
7953 => 7961,
|
||||
7954 => 7962,
|
||||
7955 => 7963,
|
||||
7956 => 7964,
|
||||
7957 => 7965,
|
||||
7968 => 7976,
|
||||
7969 => 7977,
|
||||
7970 => 7978,
|
||||
7971 => 7979,
|
||||
7972 => 7980,
|
||||
7973 => 7981,
|
||||
7974 => 7982,
|
||||
7975 => 7983,
|
||||
7984 => 7992,
|
||||
7985 => 7993,
|
||||
7986 => 7994,
|
||||
7987 => 7995,
|
||||
7988 => 7996,
|
||||
7989 => 7997,
|
||||
7990 => 7998,
|
||||
7991 => 7999,
|
||||
8000 => 8008,
|
||||
8001 => 8009,
|
||||
8002 => 8010,
|
||||
8003 => 8011,
|
||||
8004 => 8012,
|
||||
8005 => 8013,
|
||||
8017 => 8025,
|
||||
8019 => 8027,
|
||||
8021 => 8029,
|
||||
8023 => 8031,
|
||||
8032 => 8040,
|
||||
8033 => 8041,
|
||||
8034 => 8042,
|
||||
8035 => 8043,
|
||||
8036 => 8044,
|
||||
8037 => 8045,
|
||||
8038 => 8046,
|
||||
8039 => 8047,
|
||||
8048 => 8122,
|
||||
8049 => 8123,
|
||||
8050 => 8136,
|
||||
8051 => 8137,
|
||||
8052 => 8138,
|
||||
8053 => 8139,
|
||||
8054 => 8154,
|
||||
8055 => 8155,
|
||||
8056 => 8184,
|
||||
8057 => 8185,
|
||||
8058 => 8170,
|
||||
8059 => 8171,
|
||||
8060 => 8186,
|
||||
8061 => 8187,
|
||||
8064 => 8072,
|
||||
8065 => 8073,
|
||||
8066 => 8074,
|
||||
8067 => 8075,
|
||||
8068 => 8076,
|
||||
8069 => 8077,
|
||||
8070 => 8078,
|
||||
8071 => 8079,
|
||||
8080 => 8088,
|
||||
8081 => 8089,
|
||||
8082 => 8090,
|
||||
8083 => 8091,
|
||||
8084 => 8092,
|
||||
8085 => 8093,
|
||||
8086 => 8094,
|
||||
8087 => 8095,
|
||||
8096 => 8104,
|
||||
8097 => 8105,
|
||||
8098 => 8106,
|
||||
8099 => 8107,
|
||||
8100 => 8108,
|
||||
8101 => 8109,
|
||||
8102 => 8110,
|
||||
8103 => 8111,
|
||||
8112 => 8120,
|
||||
8113 => 8121,
|
||||
8115 => 8124,
|
||||
8126 => 921,
|
||||
8131 => 8140,
|
||||
8144 => 8152,
|
||||
8145 => 8153,
|
||||
8160 => 8168,
|
||||
8161 => 8169,
|
||||
8165 => 8172,
|
||||
8179 => 8188,
|
||||
8526 => 8498,
|
||||
8560 => 8544,
|
||||
8561 => 8545,
|
||||
8562 => 8546,
|
||||
8563 => 8547,
|
||||
8564 => 8548,
|
||||
8565 => 8549,
|
||||
8566 => 8550,
|
||||
8567 => 8551,
|
||||
8568 => 8552,
|
||||
8569 => 8553,
|
||||
8570 => 8554,
|
||||
8571 => 8555,
|
||||
8572 => 8556,
|
||||
8573 => 8557,
|
||||
8574 => 8558,
|
||||
8575 => 8559,
|
||||
8580 => 8579,
|
||||
9424 => 9398,
|
||||
9425 => 9399,
|
||||
9426 => 9400,
|
||||
9427 => 9401,
|
||||
9428 => 9402,
|
||||
9429 => 9403,
|
||||
9430 => 9404,
|
||||
9431 => 9405,
|
||||
9432 => 9406,
|
||||
9433 => 9407,
|
||||
9434 => 9408,
|
||||
9435 => 9409,
|
||||
9436 => 9410,
|
||||
9437 => 9411,
|
||||
9438 => 9412,
|
||||
9439 => 9413,
|
||||
9440 => 9414,
|
||||
9441 => 9415,
|
||||
9442 => 9416,
|
||||
9443 => 9417,
|
||||
9444 => 9418,
|
||||
9445 => 9419,
|
||||
9446 => 9420,
|
||||
9447 => 9421,
|
||||
9448 => 9422,
|
||||
9449 => 9423,
|
||||
11312 => 11264,
|
||||
11313 => 11265,
|
||||
11314 => 11266,
|
||||
11315 => 11267,
|
||||
11316 => 11268,
|
||||
11317 => 11269,
|
||||
11318 => 11270,
|
||||
11319 => 11271,
|
||||
11320 => 11272,
|
||||
11321 => 11273,
|
||||
11322 => 11274,
|
||||
11323 => 11275,
|
||||
11324 => 11276,
|
||||
11325 => 11277,
|
||||
11326 => 11278,
|
||||
11327 => 11279,
|
||||
11328 => 11280,
|
||||
11329 => 11281,
|
||||
11330 => 11282,
|
||||
11331 => 11283,
|
||||
11332 => 11284,
|
||||
11333 => 11285,
|
||||
11334 => 11286,
|
||||
11335 => 11287,
|
||||
11336 => 11288,
|
||||
11337 => 11289,
|
||||
11338 => 11290,
|
||||
11339 => 11291,
|
||||
11340 => 11292,
|
||||
11341 => 11293,
|
||||
11342 => 11294,
|
||||
11343 => 11295,
|
||||
11344 => 11296,
|
||||
11345 => 11297,
|
||||
11346 => 11298,
|
||||
11347 => 11299,
|
||||
11348 => 11300,
|
||||
11349 => 11301,
|
||||
11350 => 11302,
|
||||
11351 => 11303,
|
||||
11352 => 11304,
|
||||
11353 => 11305,
|
||||
11354 => 11306,
|
||||
11355 => 11307,
|
||||
11356 => 11308,
|
||||
11357 => 11309,
|
||||
11358 => 11310,
|
||||
11361 => 11360,
|
||||
11365 => 570,
|
||||
11366 => 574,
|
||||
11368 => 11367,
|
||||
11370 => 11369,
|
||||
11372 => 11371,
|
||||
11379 => 11378,
|
||||
11382 => 11381,
|
||||
11393 => 11392,
|
||||
11395 => 11394,
|
||||
11397 => 11396,
|
||||
11399 => 11398,
|
||||
11401 => 11400,
|
||||
11403 => 11402,
|
||||
11405 => 11404,
|
||||
11407 => 11406,
|
||||
11409 => 11408,
|
||||
11411 => 11410,
|
||||
11413 => 11412,
|
||||
11415 => 11414,
|
||||
11417 => 11416,
|
||||
11419 => 11418,
|
||||
11421 => 11420,
|
||||
11423 => 11422,
|
||||
11425 => 11424,
|
||||
11427 => 11426,
|
||||
11429 => 11428,
|
||||
11431 => 11430,
|
||||
11433 => 11432,
|
||||
11435 => 11434,
|
||||
11437 => 11436,
|
||||
11439 => 11438,
|
||||
11441 => 11440,
|
||||
11443 => 11442,
|
||||
11445 => 11444,
|
||||
11447 => 11446,
|
||||
11449 => 11448,
|
||||
11451 => 11450,
|
||||
11453 => 11452,
|
||||
11455 => 11454,
|
||||
11457 => 11456,
|
||||
11459 => 11458,
|
||||
11461 => 11460,
|
||||
11463 => 11462,
|
||||
11465 => 11464,
|
||||
11467 => 11466,
|
||||
11469 => 11468,
|
||||
11471 => 11470,
|
||||
11473 => 11472,
|
||||
11475 => 11474,
|
||||
11477 => 11476,
|
||||
11479 => 11478,
|
||||
11481 => 11480,
|
||||
11483 => 11482,
|
||||
11485 => 11484,
|
||||
11487 => 11486,
|
||||
11489 => 11488,
|
||||
11491 => 11490,
|
||||
11500 => 11499,
|
||||
11502 => 11501,
|
||||
11520 => 4256,
|
||||
11521 => 4257,
|
||||
11522 => 4258,
|
||||
11523 => 4259,
|
||||
11524 => 4260,
|
||||
11525 => 4261,
|
||||
11526 => 4262,
|
||||
11527 => 4263,
|
||||
11528 => 4264,
|
||||
11529 => 4265,
|
||||
11530 => 4266,
|
||||
11531 => 4267,
|
||||
11532 => 4268,
|
||||
11533 => 4269,
|
||||
11534 => 4270,
|
||||
11535 => 4271,
|
||||
11536 => 4272,
|
||||
11537 => 4273,
|
||||
11538 => 4274,
|
||||
11539 => 4275,
|
||||
11540 => 4276,
|
||||
11541 => 4277,
|
||||
11542 => 4278,
|
||||
11543 => 4279,
|
||||
11544 => 4280,
|
||||
11545 => 4281,
|
||||
11546 => 4282,
|
||||
11547 => 4283,
|
||||
11548 => 4284,
|
||||
11549 => 4285,
|
||||
11550 => 4286,
|
||||
11551 => 4287,
|
||||
11552 => 4288,
|
||||
11553 => 4289,
|
||||
11554 => 4290,
|
||||
11555 => 4291,
|
||||
11556 => 4292,
|
||||
11557 => 4293,
|
||||
42561 => 42560,
|
||||
42563 => 42562,
|
||||
42565 => 42564,
|
||||
42567 => 42566,
|
||||
42569 => 42568,
|
||||
42571 => 42570,
|
||||
42573 => 42572,
|
||||
42575 => 42574,
|
||||
42577 => 42576,
|
||||
42579 => 42578,
|
||||
42581 => 42580,
|
||||
42583 => 42582,
|
||||
42585 => 42584,
|
||||
42587 => 42586,
|
||||
42589 => 42588,
|
||||
42591 => 42590,
|
||||
42595 => 42594,
|
||||
42597 => 42596,
|
||||
42599 => 42598,
|
||||
42601 => 42600,
|
||||
42603 => 42602,
|
||||
42605 => 42604,
|
||||
42625 => 42624,
|
||||
42627 => 42626,
|
||||
42629 => 42628,
|
||||
42631 => 42630,
|
||||
42633 => 42632,
|
||||
42635 => 42634,
|
||||
42637 => 42636,
|
||||
42639 => 42638,
|
||||
42641 => 42640,
|
||||
42643 => 42642,
|
||||
42645 => 42644,
|
||||
42647 => 42646,
|
||||
42787 => 42786,
|
||||
42789 => 42788,
|
||||
42791 => 42790,
|
||||
42793 => 42792,
|
||||
42795 => 42794,
|
||||
42797 => 42796,
|
||||
42799 => 42798,
|
||||
42803 => 42802,
|
||||
42805 => 42804,
|
||||
42807 => 42806,
|
||||
42809 => 42808,
|
||||
42811 => 42810,
|
||||
42813 => 42812,
|
||||
42815 => 42814,
|
||||
42817 => 42816,
|
||||
42819 => 42818,
|
||||
42821 => 42820,
|
||||
42823 => 42822,
|
||||
42825 => 42824,
|
||||
42827 => 42826,
|
||||
42829 => 42828,
|
||||
42831 => 42830,
|
||||
42833 => 42832,
|
||||
42835 => 42834,
|
||||
42837 => 42836,
|
||||
42839 => 42838,
|
||||
42841 => 42840,
|
||||
42843 => 42842,
|
||||
42845 => 42844,
|
||||
42847 => 42846,
|
||||
42849 => 42848,
|
||||
42851 => 42850,
|
||||
42853 => 42852,
|
||||
42855 => 42854,
|
||||
42857 => 42856,
|
||||
42859 => 42858,
|
||||
42861 => 42860,
|
||||
42863 => 42862,
|
||||
42874 => 42873,
|
||||
42876 => 42875,
|
||||
42879 => 42878,
|
||||
42881 => 42880,
|
||||
42883 => 42882,
|
||||
42885 => 42884,
|
||||
42887 => 42886,
|
||||
42892 => 42891,
|
||||
);
|
||||
?>
|
20
mpdf/mpdf.css
Executable file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
This is a secondary default stylesheet for mPDF
|
||||
It will only parse element-level CSS here
|
||||
Remove the comment marks below and edit as required
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
These values used to be the default prior to mPDF 4.2
|
||||
Altered to make appearance closer to that of browsers
|
||||
Uncomment these lines to return to behaviour prior to v4.2
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
img { margin: 0.83em 0; vertical-align: bottom; }
|
||||
table { margin: 0.5em; }
|
||||
textarea { vertical-align: top; }
|
||||
*/
|
32839
mpdf/mpdf.php
Executable file
98
mpdf/mpdfi/filters/FilterASCII85.php
Executable file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.3.1
|
||||
//
|
||||
// Copyright 2004-2009 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
if (!defined('ORD_z'))
|
||||
define('ORD_z',ord('z'));
|
||||
if (!defined('ORD_exclmark'))
|
||||
define('ORD_exclmark', ord('!'));
|
||||
if (!defined('ORD_u'))
|
||||
define('ORD_u', ord('u'));
|
||||
if (!defined('ORD_tilde'))
|
||||
define('ORD_tilde', ord('~'));
|
||||
|
||||
class FilterASCII85 {
|
||||
|
||||
function error($msg) {
|
||||
die($msg);
|
||||
}
|
||||
|
||||
function decode($in) {
|
||||
$out = '';
|
||||
$state = 0;
|
||||
$chn = null;
|
||||
|
||||
$l = strlen($in);
|
||||
|
||||
for ($k = 0; $k < $l; ++$k) {
|
||||
$ch = ord($in[$k]) & 0xff;
|
||||
|
||||
if ($ch == ORD_tilde) {
|
||||
break;
|
||||
}
|
||||
if (preg_match('/^\s$/',chr($ch))) {
|
||||
continue;
|
||||
}
|
||||
if ($ch == ORD_z && $state == 0) {
|
||||
$out .= chr(0).chr(0).chr(0).chr(0);
|
||||
continue;
|
||||
}
|
||||
if ($ch < ORD_exclmark || $ch > ORD_u) {
|
||||
$this->error('Illegal character in ASCII85Decode.');
|
||||
}
|
||||
|
||||
$chn[$state++] = $ch - ORD_exclmark;
|
||||
|
||||
if ($state == 5) {
|
||||
$state = 0;
|
||||
$r = 0;
|
||||
for ($j = 0; $j < 5; ++$j)
|
||||
$r = $r * 85 + $chn[$j];
|
||||
$out .= chr($r >> 24);
|
||||
$out .= chr($r >> 16);
|
||||
$out .= chr($r >> 8);
|
||||
$out .= chr($r);
|
||||
}
|
||||
}
|
||||
$r = 0;
|
||||
|
||||
if ($state == 1)
|
||||
$this->error('Illegal length in ASCII85Decode.');
|
||||
if ($state == 2) {
|
||||
$r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
|
||||
$out .= chr($r >> 24);
|
||||
}
|
||||
else if ($state == 3) {
|
||||
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2]+1) * 85 * 85;
|
||||
$out .= chr($r >> 24);
|
||||
$out .= chr($r >> 16);
|
||||
}
|
||||
else if ($state == 4) {
|
||||
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3]+1) * 85 ;
|
||||
$out .= chr($r >> 24);
|
||||
$out .= chr($r >> 16);
|
||||
$out .= chr($r >> 8);
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
function encode($in) {
|
||||
$this->error("ASCII85 encoding not implemented.");
|
||||
}
|
||||
}
|
154
mpdf/mpdfi/filters/FilterLZW.php
Executable file
@ -0,0 +1,154 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.3.1
|
||||
//
|
||||
// Copyright 2004-2009 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
class FilterLZW {
|
||||
|
||||
var $sTable = array();
|
||||
var $data = null;
|
||||
var $dataLength = 0;
|
||||
var $tIdx;
|
||||
var $bitsToGet = 9;
|
||||
var $bytePointer;
|
||||
var $bitPointer;
|
||||
var $nextData = 0;
|
||||
var $nextBits = 0;
|
||||
var $andTable = array(511, 1023, 2047, 4095);
|
||||
|
||||
function error($msg) {
|
||||
die($msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to decode LZW compressed data.
|
||||
*
|
||||
* @param string data The compressed data.
|
||||
*/
|
||||
function decode($data) {
|
||||
|
||||
if($data[0] == 0x00 && $data[1] == 0x01) {
|
||||
$this->error('LZW flavour not supported.');
|
||||
}
|
||||
|
||||
$this->initsTable();
|
||||
|
||||
$this->data = $data;
|
||||
$this->dataLength = strlen($data);
|
||||
|
||||
// Initialize pointers
|
||||
$this->bytePointer = 0;
|
||||
$this->bitPointer = 0;
|
||||
|
||||
$this->nextData = 0;
|
||||
$this->nextBits = 0;
|
||||
|
||||
$oldCode = 0;
|
||||
|
||||
$string = '';
|
||||
$uncompData = '';
|
||||
|
||||
while (($code = $this->getNextCode()) != 257) {
|
||||
if ($code == 256) {
|
||||
$this->initsTable();
|
||||
$code = $this->getNextCode();
|
||||
|
||||
if ($code == 257) {
|
||||
break;
|
||||
}
|
||||
|
||||
$uncompData .= $this->sTable[$code];
|
||||
$oldCode = $code;
|
||||
|
||||
} else {
|
||||
|
||||
if ($code < $this->tIdx) {
|
||||
$string = $this->sTable[$code];
|
||||
$uncompData .= $string;
|
||||
|
||||
$this->addStringToTable($this->sTable[$oldCode], $string[0]);
|
||||
$oldCode = $code;
|
||||
} else {
|
||||
$string = $this->sTable[$oldCode];
|
||||
$string = $string.$string[0];
|
||||
$uncompData .= $string;
|
||||
|
||||
$this->addStringToTable($string);
|
||||
$oldCode = $code;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $uncompData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the string table.
|
||||
*/
|
||||
function initsTable() {
|
||||
$this->sTable = array();
|
||||
|
||||
for ($i = 0; $i < 256; $i++)
|
||||
$this->sTable[$i] = chr($i);
|
||||
|
||||
$this->tIdx = 258;
|
||||
$this->bitsToGet = 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new string to the string table.
|
||||
*/
|
||||
function addStringToTable ($oldString, $newString='') {
|
||||
$string = $oldString.$newString;
|
||||
|
||||
// Add this new String to the table
|
||||
$this->sTable[$this->tIdx++] = $string;
|
||||
|
||||
if ($this->tIdx == 511) {
|
||||
$this->bitsToGet = 10;
|
||||
} else if ($this->tIdx == 1023) {
|
||||
$this->bitsToGet = 11;
|
||||
} else if ($this->tIdx == 2047) {
|
||||
$this->bitsToGet = 12;
|
||||
}
|
||||
}
|
||||
|
||||
// Returns the next 9, 10, 11 or 12 bits
|
||||
function getNextCode() {
|
||||
if ($this->bytePointer == $this->dataLength) {
|
||||
return 257;
|
||||
}
|
||||
|
||||
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
|
||||
$this->nextBits += 8;
|
||||
|
||||
if ($this->nextBits < $this->bitsToGet) {
|
||||
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
|
||||
$this->nextBits += 8;
|
||||
}
|
||||
|
||||
$code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet-9];
|
||||
$this->nextBits -= $this->bitsToGet;
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
function encode($in) {
|
||||
$this->error("LZW encoding not implemented.");
|
||||
}
|
||||
}
|
363
mpdf/mpdfi/fpdi_pdf_parser.php
Executable file
@ -0,0 +1,363 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
|
||||
class fpdi_pdf_parser extends pdf_parser {
|
||||
|
||||
/**
|
||||
* Pages
|
||||
* Index beginns at 0
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $pages;
|
||||
|
||||
/**
|
||||
* Page count
|
||||
* @var integer
|
||||
*/
|
||||
var $page_count;
|
||||
|
||||
/**
|
||||
* actual page number
|
||||
* @var integer
|
||||
*/
|
||||
var $pageno;
|
||||
|
||||
|
||||
/**
|
||||
* FPDI Reference
|
||||
* @var object
|
||||
*/
|
||||
var $fpdi;
|
||||
|
||||
/**
|
||||
* Available BoxTypes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $availableBoxes = array("/MediaBox","/CropBox","/BleedBox","/TrimBox","/ArtBox");
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $filename Source-Filename
|
||||
* @param object $fpdi Object of type fpdi
|
||||
*/
|
||||
function fpdi_pdf_parser($filename,&$fpdi) {
|
||||
$this->fpdi =& $fpdi;
|
||||
$this->filename = $filename;
|
||||
|
||||
parent::pdf_parser($filename);
|
||||
if ($this->success == false) { return false; }
|
||||
|
||||
// resolve Pages-Dictonary
|
||||
$pages = $this->pdf_resolve_object($this->c, $this->root[1][1]['/Pages']);
|
||||
if ($this->success == false) { return false; }
|
||||
|
||||
// Read pages
|
||||
$this->read_pages($this->c, $pages, $this->pages);
|
||||
if ($this->success == false) { return false; }
|
||||
|
||||
// count pages;
|
||||
$this->page_count = count($this->pages);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get pagecount from sourcefile
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
function getPageCount() {
|
||||
return $this->page_count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set pageno
|
||||
*
|
||||
* @param int $pageno Pagenumber to use
|
||||
*/
|
||||
function setPageno($pageno) {
|
||||
$pageno = ((int) $pageno) - 1;
|
||||
|
||||
if ($pageno < 0 || $pageno >= $this->getPageCount()) {
|
||||
$this->fpdi->error("Pagenumber is wrong!");
|
||||
}
|
||||
|
||||
$this->pageno = $pageno;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get page-resources from current page
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function getPageResources() {
|
||||
return $this->_getPageResources($this->pages[$this->pageno]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get page-resources from /Page
|
||||
*
|
||||
* @param array $obj Array of pdf-data
|
||||
*/
|
||||
function _getPageResources ($obj) { // $obj = /Page
|
||||
$obj = $this->pdf_resolve_object($this->c, $obj);
|
||||
|
||||
// If the current object has a resources
|
||||
// dictionary associated with it, we use
|
||||
// it. Otherwise, we move back to its
|
||||
// parent object.
|
||||
if (isset ($obj[1][1]['/Resources'])) {
|
||||
$res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Resources']);
|
||||
if ($res[0] == PDF_TYPE_OBJECT)
|
||||
return $res[1];
|
||||
return $res;
|
||||
} else {
|
||||
if (!isset ($obj[1][1]['/Parent'])) {
|
||||
return false;
|
||||
} else {
|
||||
$res = $this->_getPageResources($obj[1][1]['/Parent']);
|
||||
if ($res[0] == PDF_TYPE_OBJECT)
|
||||
return $res[1];
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get content of current page
|
||||
*
|
||||
* If more /Contents is an array, the streams are concated
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function getContent() {
|
||||
$buffer = "";
|
||||
|
||||
if (isset($this->pages[$this->pageno][1][1]['/Contents'])) {
|
||||
$contents = $this->_getPageContent($this->pages[$this->pageno][1][1]['/Contents']);
|
||||
foreach($contents AS $tmp_content) {
|
||||
$buffer .= $this->_rebuildContentStream($tmp_content).' ';
|
||||
}
|
||||
}
|
||||
|
||||
return $buffer;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Resolve all content-objects
|
||||
*
|
||||
* @param array $content_ref
|
||||
* @return array
|
||||
*/
|
||||
function _getPageContent($content_ref) {
|
||||
$contents = array();
|
||||
|
||||
if ($content_ref[0] == PDF_TYPE_OBJREF) {
|
||||
$content = $this->pdf_resolve_object($this->c, $content_ref);
|
||||
if ($content[1][0] == PDF_TYPE_ARRAY) {
|
||||
$contents = $this->_getPageContent($content[1]);
|
||||
} else {
|
||||
$contents[] = $content;
|
||||
}
|
||||
} else if ($content_ref[0] == PDF_TYPE_ARRAY) {
|
||||
foreach ($content_ref[1] AS $tmp_content_ref) {
|
||||
$contents = array_merge($contents,$this->_getPageContent($tmp_content_ref));
|
||||
}
|
||||
}
|
||||
|
||||
return $contents;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Rebuild content-streams
|
||||
*
|
||||
* @param array $obj
|
||||
* @return string
|
||||
*/
|
||||
function _rebuildContentStream($obj) {
|
||||
$filters = array();
|
||||
|
||||
if (isset($obj[1][1]['/Filter'])) {
|
||||
$_filter = $obj[1][1]['/Filter'];
|
||||
|
||||
if ($_filter[0] == PDF_TYPE_TOKEN) {
|
||||
$filters[] = $_filter;
|
||||
} else if ($_filter[0] == PDF_TYPE_ARRAY) {
|
||||
$filters = $_filter[1];
|
||||
}
|
||||
}
|
||||
|
||||
$stream = $obj[2][1];
|
||||
|
||||
foreach ($filters AS $_filter) {
|
||||
switch ($_filter[1]) {
|
||||
case "/FlateDecode":
|
||||
if (function_exists('gzuncompress')) {
|
||||
$stream = (strlen($stream) > 0) ? @gzuncompress($stream) : '';
|
||||
} else {
|
||||
$this->fpdi->error(sprintf("To handle %s filter, please compile php with zlib support.",$_filter[1]));
|
||||
}
|
||||
if ($stream === false) {
|
||||
$this->fpdi->error("Error while decompressing stream.");
|
||||
}
|
||||
break;
|
||||
// mPDF 4.2.003
|
||||
case '/LZWDecode':
|
||||
include_once(_MPDF_PATH.'mpdfi/filters/FilterLZW.php');
|
||||
// mPDF 5.0 Removed pass by reference =&
|
||||
$decoder = new FilterLZW();
|
||||
$stream = $decoder->decode($stream);
|
||||
break;
|
||||
case '/ASCII85Decode':
|
||||
include_once(_MPDF_PATH.'mpdfi/filters/FilterASCII85.php');
|
||||
// mPDF 5.0 Removed pass by reference =&
|
||||
$decoder = new FilterASCII85();
|
||||
$stream = $decoder->decode($stream);
|
||||
break;
|
||||
case null:
|
||||
$stream = $stream;
|
||||
break;
|
||||
default:
|
||||
$this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1]));
|
||||
}
|
||||
}
|
||||
|
||||
return $stream;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a Box from a page
|
||||
* Arrayformat is same as used by fpdf_tpl
|
||||
*
|
||||
* @param array $page a /Page
|
||||
* @param string $box_index Type of Box @see $availableBoxes
|
||||
* @return array
|
||||
*/
|
||||
function getPageBox($page, $box_index) {
|
||||
$page = $this->pdf_resolve_object($this->c,$page);
|
||||
$box = null;
|
||||
if (isset($page[1][1][$box_index]))
|
||||
$box =& $page[1][1][$box_index];
|
||||
|
||||
if (!is_null($box) && $box[0] == PDF_TYPE_OBJREF) {
|
||||
$tmp_box = $this->pdf_resolve_object($this->c,$box);
|
||||
$box = $tmp_box[1];
|
||||
}
|
||||
|
||||
if (!is_null($box) && $box[0] == PDF_TYPE_ARRAY) {
|
||||
$b =& $box[1];
|
||||
return array("x" => $b[0][1]/_MPDFK,
|
||||
"y" => $b[1][1]/_MPDFK,
|
||||
"w" => abs($b[0][1]-$b[2][1])/_MPDFK,
|
||||
"h" => abs($b[1][1]-$b[3][1])/_MPDFK); // mPDF 5.3.90
|
||||
} else if (!isset ($page[1][1]['/Parent'])) {
|
||||
return false;
|
||||
} else {
|
||||
return $this->getPageBox($this->pdf_resolve_object($this->c, $page[1][1]['/Parent']), $box_index);
|
||||
}
|
||||
}
|
||||
|
||||
function getPageBoxes($pageno) {
|
||||
return $this->_getPageBoxes($this->pages[$pageno-1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all Boxes from /Page
|
||||
*
|
||||
* @param array a /Page
|
||||
* @return array
|
||||
*/
|
||||
function _getPageBoxes($page) {
|
||||
$boxes = array();
|
||||
|
||||
foreach($this->availableBoxes AS $box) {
|
||||
if ($_box = $this->getPageBox($page,$box)) {
|
||||
$boxes[$box] = $_box;
|
||||
}
|
||||
}
|
||||
|
||||
return $boxes;
|
||||
}
|
||||
|
||||
function getPageRotation($pageno) {
|
||||
return $this->_getPageRotation($this->pages[$pageno-1]);
|
||||
}
|
||||
|
||||
function _getPageRotation ($obj) { // $obj = /Page
|
||||
$obj = $this->pdf_resolve_object($this->c, $obj);
|
||||
if (isset ($obj[1][1]['/Rotate'])) {
|
||||
$res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Rotate']);
|
||||
if ($res[0] == PDF_TYPE_OBJECT)
|
||||
return $res[1];
|
||||
return $res;
|
||||
} else {
|
||||
if (!isset ($obj[1][1]['/Parent'])) {
|
||||
return false;
|
||||
} else {
|
||||
$res = $this->_getPageRotation($obj[1][1]['/Parent']);
|
||||
if ($res[0] == PDF_TYPE_OBJECT)
|
||||
return $res[1];
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read all /Page(es)
|
||||
*
|
||||
* @param object pdf_context
|
||||
* @param array /Pages
|
||||
* @param array the result-array
|
||||
*/
|
||||
function read_pages (&$c, &$pages, &$result) {
|
||||
// Get the kids dictionary
|
||||
$kids = $this->pdf_resolve_object ($c, $pages[1][1]['/Kids']);
|
||||
|
||||
if (!is_array($kids)) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Cannot find /Kids in current /Page-Dictionary");
|
||||
return false;
|
||||
}
|
||||
foreach ($kids[1] as $v) {
|
||||
$pg = $this->pdf_resolve_object ($c, $v);
|
||||
if ($pg[1][1]['/Type'][1] === '/Pages') {
|
||||
// If one of the kids is an embedded
|
||||
// /Pages array, resolve it as well.
|
||||
$this->read_pages ($c, $pg, $result);
|
||||
} else {
|
||||
$result[] = $pg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
78
mpdf/mpdfi/pdf_context.php
Executable file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
class pdf_context {
|
||||
|
||||
var $file;
|
||||
var $buffer;
|
||||
var $offset;
|
||||
var $length;
|
||||
|
||||
var $stack;
|
||||
|
||||
// Constructor
|
||||
|
||||
function pdf_context($f) {
|
||||
$this->file = $f;
|
||||
$this->reset();
|
||||
}
|
||||
|
||||
// Optionally move the file
|
||||
// pointer to a new location
|
||||
// and reset the buffered data
|
||||
|
||||
function reset($pos = null, $l = 100) {
|
||||
if (!is_null ($pos)) {
|
||||
fseek ($this->file, $pos);
|
||||
}
|
||||
|
||||
$this->buffer = $l > 0 ? fread($this->file, $l) : '';
|
||||
$this->offset = 0;
|
||||
$this->length = strlen($this->buffer);
|
||||
$this->stack = array();
|
||||
}
|
||||
|
||||
// Make sure that there is at least one
|
||||
// character beyond the current offset in
|
||||
// the buffer to prevent the tokenizer
|
||||
// from attempting to access data that does
|
||||
// not exist
|
||||
|
||||
function ensure_content() {
|
||||
if ($this->offset >= $this->length - 1) {
|
||||
return $this->increase_length();
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Forcefully read more data into the buffer
|
||||
|
||||
function increase_length($l=100) {
|
||||
if (feof($this->file)) {
|
||||
return false;
|
||||
} else {
|
||||
$this->buffer .= fread($this->file, $l);
|
||||
$this->length = strlen($this->buffer);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
690
mpdf/mpdfi/pdf_parser.php
Executable file
@ -0,0 +1,690 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
if (!defined ('PDF_TYPE_NULL'))
|
||||
define ('PDF_TYPE_NULL', 0);
|
||||
if (!defined ('PDF_TYPE_NUMERIC'))
|
||||
define ('PDF_TYPE_NUMERIC', 1);
|
||||
if (!defined ('PDF_TYPE_TOKEN'))
|
||||
define ('PDF_TYPE_TOKEN', 2);
|
||||
if (!defined ('PDF_TYPE_HEX'))
|
||||
define ('PDF_TYPE_HEX', 3);
|
||||
if (!defined ('PDF_TYPE_STRING'))
|
||||
define ('PDF_TYPE_STRING', 4);
|
||||
if (!defined ('PDF_TYPE_DICTIONARY'))
|
||||
define ('PDF_TYPE_DICTIONARY', 5);
|
||||
if (!defined ('PDF_TYPE_ARRAY'))
|
||||
define ('PDF_TYPE_ARRAY', 6);
|
||||
if (!defined ('PDF_TYPE_OBJDEC'))
|
||||
define ('PDF_TYPE_OBJDEC', 7);
|
||||
if (!defined ('PDF_TYPE_OBJREF'))
|
||||
define ('PDF_TYPE_OBJREF', 8);
|
||||
if (!defined ('PDF_TYPE_OBJECT'))
|
||||
define ('PDF_TYPE_OBJECT', 9);
|
||||
if (!defined ('PDF_TYPE_STREAM'))
|
||||
define ('PDF_TYPE_STREAM', 10);
|
||||
|
||||
|
||||
class pdf_parser {
|
||||
|
||||
/**
|
||||
* Filename
|
||||
* @var string
|
||||
*/
|
||||
var $filename;
|
||||
|
||||
/**
|
||||
* File resource
|
||||
* @var resource
|
||||
*/
|
||||
var $f;
|
||||
|
||||
/**
|
||||
* PDF Context
|
||||
* @var object pdf_context-Instance
|
||||
*/
|
||||
var $c;
|
||||
|
||||
/**
|
||||
* xref-Data
|
||||
* @var array
|
||||
*/
|
||||
var $xref;
|
||||
|
||||
/**
|
||||
* root-Object
|
||||
* @var array
|
||||
*/
|
||||
var $root;
|
||||
|
||||
// mPDF 4.0 Added flag to show success on loading file
|
||||
var $success;
|
||||
var $errormsg;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $filename Source-Filename
|
||||
*/
|
||||
function pdf_parser($filename) {
|
||||
$this->filename = $filename;
|
||||
// mPDF 4.0
|
||||
$this->success = true;
|
||||
|
||||
$this->f = @fopen($this->filename, "rb");
|
||||
|
||||
if (!$this->f) {
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Cannot open %s !", $filename);
|
||||
return false;
|
||||
}
|
||||
// mPDF 5.0 Removed pass by reference =&
|
||||
$this->c = new pdf_context($this->f);
|
||||
// Read xref-Data
|
||||
$offset = $this->pdf_find_xref();
|
||||
if ($offset===false) {
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Cannot open %s !", $filename);
|
||||
return false;
|
||||
}
|
||||
$this->pdf_read_xref($this->xref, $offset);
|
||||
if ($this->success == false) { return false; }
|
||||
|
||||
// Check for Encryption
|
||||
$this->getEncryption();
|
||||
if ($this->success == false) { return false; }
|
||||
|
||||
// Read root
|
||||
$this->pdf_read_root();
|
||||
if ($this->success == false) { return false; }
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the opened file
|
||||
*/
|
||||
function closeFile() {
|
||||
if (isset($this->f)) {
|
||||
fclose($this->f);
|
||||
unset($this->f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print Error and die
|
||||
*
|
||||
* @param string $msg Error-Message
|
||||
*/
|
||||
function error($msg) {
|
||||
die("<b>PDF-Parser Error:</b> ".$msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Trailer for Encryption
|
||||
*/
|
||||
function getEncryption() {
|
||||
if (isset($this->xref['trailer'][1]['/Encrypt'])) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("File is encrypted!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find/Return /Root
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function pdf_find_root() {
|
||||
if ($this->xref['trailer'][1]['/Root'][0] != PDF_TYPE_OBJREF) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Wrong Type of Root-Element! Must be an indirect reference");
|
||||
return false;
|
||||
}
|
||||
return $this->xref['trailer'][1]['/Root'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the /Root
|
||||
*/
|
||||
function pdf_read_root() {
|
||||
// read root
|
||||
$root = $this->pdf_find_root();
|
||||
if ($root ===false) {
|
||||
$this->success = false;
|
||||
return false;
|
||||
}
|
||||
$this->root = $this->pdf_resolve_object($this->c, $root);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the xref-Table
|
||||
*/
|
||||
function pdf_find_xref() {
|
||||
fseek ($this->f, -min(filesize($this->filename),1500), SEEK_END);
|
||||
$data = fread($this->f, 1500);
|
||||
|
||||
$pos = strlen($data) - strpos(strrev($data), strrev('startxref'));
|
||||
$data = substr($data, $pos);
|
||||
|
||||
if (!preg_match('/\s*(\d+).*$/s', $data, $matches)) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Unable to find pointer to xref table");
|
||||
return false;
|
||||
}
|
||||
|
||||
return (int) $matches[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Read xref-table
|
||||
*
|
||||
* @param array $result Array of xref-table
|
||||
* @param integer $offset of xref-table
|
||||
* @param integer $start start-position in xref-table
|
||||
* @param integer $end end-position in xref-table
|
||||
*/
|
||||
function pdf_read_xref(&$result, $offset, $start = null, $end = null) {
|
||||
if (is_null ($start) || is_null ($end)) {
|
||||
fseek($this->f, $o_pos = $offset);
|
||||
$data = trim(fgets($this->f,1024));
|
||||
|
||||
if (strlen($data) == 0)
|
||||
$data = trim(fgets($this->f,1024));
|
||||
|
||||
if ($data !== 'xref') {
|
||||
fseek($this->f, $o_pos);
|
||||
$data = trim(_fgets($this->f, true));
|
||||
if ($data !== 'xref') {
|
||||
if (preg_match('/(.*xref)(.*)/m', $data, $m)) { // xref 0 128 - in one line
|
||||
fseek($this->f, $o_pos+strlen($m[1]));
|
||||
} elseif (preg_match('/(x|r|e|f)+/', $data, $m)) { // correct invalid xref-pointer
|
||||
$tmpOffset = $offset-4+strlen($m[0]);
|
||||
$this->pdf_read_xref($result, $tmpOffset, $start, $end);
|
||||
return;
|
||||
} else {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Unable to find xref table - Maybe a Problem with 'auto_detect_line_endings'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$o_pos = ftell($this->f);
|
||||
$data = explode(' ', trim(fgets($this->f,1024)));
|
||||
if (count($data) != 2) {
|
||||
fseek($this->f, $o_pos);
|
||||
$data = explode(' ', trim(_fgets($this->f, true)));
|
||||
|
||||
if (count($data) != 2) {
|
||||
if (count($data) > 2) { // no lineending
|
||||
$n_pos = $o_pos+strlen($data[0])+strlen($data[1])+2;
|
||||
fseek($this->f, $n_pos);
|
||||
} else {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Unexpected header in xref table");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
$start = $data[0];
|
||||
$end = $start + $data[1];
|
||||
}
|
||||
|
||||
if (!isset($result['xref_location'])) {
|
||||
$result['xref_location'] = $offset;
|
||||
}
|
||||
|
||||
if (!isset($result['max_object']) || $end > $result['max_object']) {
|
||||
$result['max_object'] = $end;
|
||||
}
|
||||
|
||||
for (; $start < $end; $start++) {
|
||||
$data = ltrim(fread($this->f, 20)); // Spezifications says: 20 bytes including newlines
|
||||
$offset = substr($data, 0, 10);
|
||||
$generation = substr($data, 11, 5);
|
||||
|
||||
if (!isset ($result['xref'][$start][(int) $generation])) {
|
||||
$result['xref'][$start][(int) $generation] = (int) $offset;
|
||||
}
|
||||
}
|
||||
|
||||
$o_pos = ftell($this->f);
|
||||
$data = fgets($this->f,1024);
|
||||
if (strlen(trim($data)) == 0)
|
||||
$data = fgets($this->f, 1024);
|
||||
|
||||
if (preg_match("/trailer/",$data)) {
|
||||
if (preg_match("/(.*trailer[ \n\r]*)/",$data,$m)) {
|
||||
fseek($this->f, $o_pos+strlen($m[1]));
|
||||
}
|
||||
|
||||
// mPDF 5.0 Removed pass by reference =&
|
||||
$c = new pdf_context($this->f);
|
||||
$trailer = $this->pdf_read_value($c);
|
||||
|
||||
if (isset($trailer[1]['/Prev'])) {
|
||||
$this->pdf_read_xref($result, $trailer[1]['/Prev'][1]);
|
||||
$result['trailer'][1] = array_merge($result['trailer'][1], $trailer[1]);
|
||||
} else {
|
||||
$result['trailer'] = $trailer;
|
||||
}
|
||||
} else {
|
||||
$data = explode(' ', trim($data));
|
||||
|
||||
if (count($data) != 2) {
|
||||
fseek($this->f, $o_pos);
|
||||
$data = explode(' ', trim (_fgets ($this->f, true)));
|
||||
|
||||
if (count($data) != 2) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Unexpected data in xref table");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->pdf_read_xref($result, null, (int) $data[0], (int) $data[0] + (int) $data[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reads an Value
|
||||
*
|
||||
* @param object $c pdf_context
|
||||
* @param string $token a Token
|
||||
* @return mixed
|
||||
*/
|
||||
function pdf_read_value(&$c, $token = null) {
|
||||
if (is_null($token)) {
|
||||
$token = $this->pdf_read_token($c);
|
||||
}
|
||||
|
||||
if ($token === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch ($token) {
|
||||
case '<':
|
||||
// This is a hex string.
|
||||
// Read the value, then the terminator
|
||||
|
||||
$pos = $c->offset;
|
||||
|
||||
while(1) {
|
||||
|
||||
$match = strpos ($c->buffer, '>', $pos);
|
||||
|
||||
// If you can't find it, try
|
||||
// reading more data from the stream
|
||||
|
||||
if ($match === false) {
|
||||
if (!$c->increase_length()) {
|
||||
return false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$result = substr ($c->buffer, $c->offset, $match - $c->offset);
|
||||
$c->offset = $match+1;
|
||||
|
||||
return array (PDF_TYPE_HEX, $result);
|
||||
}
|
||||
|
||||
break;
|
||||
case '<<':
|
||||
// This is a dictionary.
|
||||
|
||||
$result = array();
|
||||
|
||||
// Recurse into this function until we reach
|
||||
// the end of the dictionary.
|
||||
while (($key = $this->pdf_read_token($c)) !== '>>') {
|
||||
if ($key === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (($value = $this->pdf_read_value($c)) === false) {
|
||||
return false;
|
||||
}
|
||||
$result[$key] = $value;
|
||||
}
|
||||
|
||||
return array (PDF_TYPE_DICTIONARY, $result);
|
||||
|
||||
case '[':
|
||||
// This is an array.
|
||||
|
||||
$result = array();
|
||||
|
||||
// Recurse into this function until we reach
|
||||
// the end of the array.
|
||||
while (($token = $this->pdf_read_token($c)) !== ']') {
|
||||
if ($token === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (($value = $this->pdf_read_value($c, $token)) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$result[] = $value;
|
||||
}
|
||||
|
||||
return array (PDF_TYPE_ARRAY, $result);
|
||||
|
||||
case '(' :
|
||||
// This is a string
|
||||
|
||||
$pos = $c->offset;
|
||||
|
||||
while(1) {
|
||||
|
||||
// Start by finding the next closed
|
||||
// parenthesis
|
||||
|
||||
$match = strpos ($c->buffer, ')', $pos);
|
||||
|
||||
// If you can't find it, try
|
||||
// reading more data from the stream
|
||||
|
||||
if ($match === false) {
|
||||
if (!$c->increase_length()) {
|
||||
return false;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure that there is no backslash
|
||||
// before the parenthesis. If there is,
|
||||
// move on. Otherwise, return the string.
|
||||
$esc = preg_match('/([\\\\]+)$/', $tmpresult = substr($c->buffer, $c->offset, $match - $c->offset), $m);
|
||||
|
||||
if ($esc === 0 || strlen($m[1]) % 2 == 0) {
|
||||
$result = $tmpresult;
|
||||
$c->offset = $match + 1;
|
||||
return array (PDF_TYPE_STRING, $result);
|
||||
} else {
|
||||
$pos = $match + 1;
|
||||
|
||||
if ($pos > $c->offset + $c->length) {
|
||||
$c->increase_length();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case "stream":
|
||||
$o_pos = ftell($c->file)-strlen($c->buffer);
|
||||
$o_offset = $c->offset;
|
||||
|
||||
$c->reset($startpos = $o_pos + $o_offset);
|
||||
|
||||
$e = 0; // ensure line breaks in front of the stream
|
||||
if ($c->buffer[0] == chr(10) || $c->buffer[0] == chr(13))
|
||||
$e++;
|
||||
if ($c->buffer[1] == chr(10) && $c->buffer[0] != chr(10))
|
||||
$e++;
|
||||
|
||||
if ($this->actual_obj[1][1]['/Length'][0] == PDF_TYPE_OBJREF) {
|
||||
// mPDF 5.0 Removed pass by reference =&
|
||||
$tmp_c = new pdf_context($this->f);
|
||||
$tmp_length = $this->pdf_resolve_object($tmp_c,$this->actual_obj[1][1]['/Length']);
|
||||
$length = $tmp_length[1][1];
|
||||
} else {
|
||||
$length = $this->actual_obj[1][1]['/Length'][1];
|
||||
}
|
||||
|
||||
if ($length > 0) {
|
||||
$c->reset($startpos+$e,$length);
|
||||
$v = $c->buffer;
|
||||
} else {
|
||||
$v = '';
|
||||
}
|
||||
$c->reset($startpos+$e+$length+9); // 9 = strlen("endstream")
|
||||
|
||||
return array(PDF_TYPE_STREAM, $v);
|
||||
|
||||
default :
|
||||
if (is_numeric ($token)) {
|
||||
// A numeric token. Make sure that
|
||||
// it is not part of something else.
|
||||
if (($tok2 = $this->pdf_read_token ($c)) !== false) {
|
||||
if (is_numeric ($tok2)) {
|
||||
|
||||
// Two numeric tokens in a row.
|
||||
// In this case, we're probably in
|
||||
// front of either an object reference
|
||||
// or an object specification.
|
||||
// Determine the case and return the data
|
||||
if (($tok3 = $this->pdf_read_token ($c)) !== false) {
|
||||
switch ($tok3) {
|
||||
case 'obj' :
|
||||
return array (PDF_TYPE_OBJDEC, (int) $token, (int) $tok2);
|
||||
case 'R' :
|
||||
return array (PDF_TYPE_OBJREF, (int) $token, (int) $tok2);
|
||||
}
|
||||
// If we get to this point, that numeric value up
|
||||
// there was just a numeric value. Push the extra
|
||||
// tokens back into the stack and return the value.
|
||||
array_push ($c->stack, $tok3);
|
||||
}
|
||||
}
|
||||
|
||||
array_push ($c->stack, $tok2);
|
||||
}
|
||||
|
||||
return array (PDF_TYPE_NUMERIC, $token);
|
||||
} else {
|
||||
|
||||
// Just a token. Return it.
|
||||
return array (PDF_TYPE_TOKEN, $token);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve an object
|
||||
*
|
||||
* @param object $c pdf_context
|
||||
* @param array $obj_spec The object-data
|
||||
* @param boolean $encapsulate Must set to true, cause the parsing and fpdi use this method only without this para
|
||||
*/
|
||||
function pdf_resolve_object(&$c, $obj_spec, $encapsulate = true) {
|
||||
// Exit if we get invalid data
|
||||
if (!is_array($obj_spec)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($obj_spec[0] == PDF_TYPE_OBJREF) {
|
||||
|
||||
// This is a reference, resolve it
|
||||
if (isset($this->xref['xref'][$obj_spec[1]][$obj_spec[2]])) {
|
||||
|
||||
// Save current file position
|
||||
// This is needed if you want to resolve
|
||||
// references while you're reading another object
|
||||
// (e.g.: if you need to determine the length
|
||||
// of a stream)
|
||||
|
||||
$old_pos = ftell($c->file);
|
||||
|
||||
// Reposition the file pointer and
|
||||
// load the object header.
|
||||
|
||||
$c->reset($this->xref['xref'][$obj_spec[1]][$obj_spec[2]]);
|
||||
|
||||
$header = $this->pdf_read_value($c,null,true);
|
||||
|
||||
if ($header[0] != PDF_TYPE_OBJDEC || $header[1] != $obj_spec[1] || $header[2] != $obj_spec[2]) {
|
||||
// mPDF 4.0
|
||||
$this->success = false;
|
||||
$this->errormsg = sprintf("Unable to find object ({$obj_spec[1]}, {$obj_spec[2]}) at expected location");
|
||||
return false;
|
||||
}
|
||||
|
||||
// If we're being asked to store all the information
|
||||
// about the object, we add the object ID and generation
|
||||
// number for later use
|
||||
$this->actual_obj =& $result;
|
||||
if ($encapsulate) {
|
||||
$result = array (
|
||||
PDF_TYPE_OBJECT,
|
||||
'obj' => $obj_spec[1],
|
||||
'gen' => $obj_spec[2]
|
||||
);
|
||||
} else {
|
||||
$result = array();
|
||||
}
|
||||
|
||||
// Now simply read the object data until
|
||||
// we encounter an end-of-object marker
|
||||
while(1) {
|
||||
$value = $this->pdf_read_value($c);
|
||||
if ($value === false || count($result) > 4) {
|
||||
// in this case the parser coudn't find an endobj so we break here
|
||||
break;
|
||||
}
|
||||
|
||||
if ($value[0] == PDF_TYPE_TOKEN && $value[1] === 'endobj') {
|
||||
break;
|
||||
}
|
||||
|
||||
$result[] = $value;
|
||||
}
|
||||
|
||||
$c->reset($old_pos);
|
||||
|
||||
if (isset($result[2][0]) && $result[2][0] == PDF_TYPE_STREAM) {
|
||||
$result[0] = PDF_TYPE_STREAM;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
} else {
|
||||
return $obj_spec;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reads a token from the file
|
||||
*
|
||||
* @param object $c pdf_context
|
||||
* @return mixed
|
||||
*/
|
||||
function pdf_read_token(&$c)
|
||||
{
|
||||
// If there is a token available
|
||||
// on the stack, pop it out and
|
||||
// return it.
|
||||
|
||||
if (count($c->stack)) {
|
||||
return array_pop($c->stack);
|
||||
}
|
||||
|
||||
// Strip away any whitespace
|
||||
|
||||
do {
|
||||
if (!$c->ensure_content()) {
|
||||
return false;
|
||||
}
|
||||
$c->offset += _strspn($c->buffer, " \n\r\t", $c->offset);
|
||||
} while ($c->offset >= $c->length - 1);
|
||||
|
||||
// Get the first character in the stream
|
||||
|
||||
$char = $c->buffer[$c->offset++];
|
||||
|
||||
switch ($char) {
|
||||
|
||||
case '[' :
|
||||
case ']' :
|
||||
case '(' :
|
||||
case ')' :
|
||||
|
||||
// This is either an array or literal string
|
||||
// delimiter, Return it
|
||||
|
||||
return $char;
|
||||
|
||||
case '<' :
|
||||
case '>' :
|
||||
|
||||
// This could either be a hex string or
|
||||
// dictionary delimiter. Determine the
|
||||
// appropriate case and return the token
|
||||
|
||||
if ($c->buffer[$c->offset] == $char) {
|
||||
if (!$c->ensure_content()) {
|
||||
return false;
|
||||
}
|
||||
$c->offset++;
|
||||
return $char . $char;
|
||||
} else {
|
||||
return $char;
|
||||
}
|
||||
|
||||
default :
|
||||
|
||||
// This is "another" type of token (probably
|
||||
// a dictionary entry or a numeric value)
|
||||
// Find the end and return it.
|
||||
|
||||
if (!$c->ensure_content()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
while(1) {
|
||||
|
||||
// Determine the length of the token
|
||||
|
||||
$pos = _strcspn($c->buffer, " []<>()\r\n\t/", $c->offset);
|
||||
if ($c->offset + $pos <= $c->length - 1) {
|
||||
break;
|
||||
} else {
|
||||
// If the script reaches this point,
|
||||
// the token may span beyond the end
|
||||
// of the current buffer. Therefore,
|
||||
// we increase the size of the buffer
|
||||
// and try again--just to be safe.
|
||||
|
||||
$c->increase_length();
|
||||
}
|
||||
}
|
||||
|
||||
$result = substr($c->buffer, $c->offset - 1, $pos + 1);
|
||||
|
||||
$c->offset += $pos;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
5
mpdf/patterns/NOTES.txt
Executable file
@ -0,0 +1,5 @@
|
||||
Alternative sources of Hyphenation programs or TEX files:
|
||||
|
||||
OpenOffice: http://wiki.services.openoffice.org/wiki/Dictionaries
|
||||
|
||||
Hyphenator4PHP- alternative PHP hyphenator scripts: http://apps.sourceforge.net/trac/hyphenator4php/
|
9
mpdf/patterns/de.php
Executable file
1
mpdf/patterns/dictionary.txt
Executable file
@ -0,0 +1 @@
|
||||
dis/es/tab/lish/men/tar/i/an/ism
|