commit
This commit is contained in:
parent
036a34db87
commit
6f4ec6b044
|
@ -100,7 +100,6 @@ class Admin extends CI_Controller
|
|||
$this->load->view('admin/modals/modal_edit_penyakit', $data);
|
||||
}
|
||||
|
||||
|
||||
public function rule()
|
||||
{
|
||||
$data['judul'] = 'Sistem Pakar Metode Naive Bayes';
|
||||
|
@ -129,13 +128,18 @@ class Admin extends CI_Controller
|
|||
$data['judul'] = 'Sistem Pakar Metode Naive Bayes';
|
||||
$data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array();
|
||||
$data['subMenu'] = $this->db->get_where('sub_menu_user', ['id' => 7])->row_array();
|
||||
$data['dftr_konsul'] = $this->db->get('daftar_konsultasi')->result_array();
|
||||
$this->db->select('riwayat_gejala.*, user.name as nama_user');
|
||||
$this->db->from('riwayat_gejala');
|
||||
$this->db->join('user', 'riwayat_gejala.id_user = user.id');
|
||||
// $this->db->join('user', 'riwayat_gejala.id = user.id');
|
||||
$data['dftr_konsul'] = $this->db->get()->result_array();
|
||||
|
||||
$this->load->view('templates/header', $data);
|
||||
$this->load->view('templates/sidebar', $data);
|
||||
$this->load->view('templates/topbar', $data);
|
||||
$this->load->view('admin/daftar_konsultasi', $data);
|
||||
$this->load->view('admin/modals/modal_tambah_pengobatan');
|
||||
$this->load->view('templates/footer');
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,13 +1,13 @@
|
|||
<?php
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
require_once APPPATH . 'third_party/mpdf-6.1.4/mpdf.php';
|
||||
/**
|
||||
* @property CI_DB_query_builder $db
|
||||
* @property CI_Session $session
|
||||
* @property Auth_model $auth
|
||||
* @property form_validation $form_validation
|
||||
* @property diagnosa $diagnosa
|
||||
* @property input $input
|
||||
* @property Diagnosa_model $diagnosa
|
||||
* @property CI_Form_validation $form_validation
|
||||
* @property CI_Input $input
|
||||
*/
|
||||
|
||||
class Diagnosa extends CI_Controller
|
||||
|
@ -22,7 +22,7 @@ class Diagnosa extends CI_Controller
|
|||
}
|
||||
|
||||
public function hasil()
|
||||
{
|
||||
{
|
||||
// Kosongkan tabel temporary sebelum diagnosa dimulai
|
||||
$this->diagnosa->kosongkanTemp();
|
||||
$this->diagnosa->kosongkanTempFinal();
|
||||
|
@ -30,44 +30,56 @@ class Diagnosa extends CI_Controller
|
|||
// Tangkap input checkbox gejala
|
||||
$gejala = $this->input->post('gejala');
|
||||
if (!empty($gejala)) {
|
||||
foreach ($gejala as $g) {
|
||||
$data = ['id_gejala' => $g];
|
||||
$this->db->insert('temporary', $data);
|
||||
}
|
||||
foreach ($gejala as $g) {
|
||||
$data = ['id_gejala' => $g];
|
||||
$this->db->insert('temporary', $data);
|
||||
}
|
||||
}
|
||||
|
||||
// Insert ke temporary final dengan id_penyakit & probabilitas
|
||||
// Cek apakah semua gejala dipilih
|
||||
$total_gejala = $this->db->count_all('gejala'); // Jumlah total gejala di tabel
|
||||
if (count($gejala) == $total_gejala) {
|
||||
$data['hasilMax'] = [['nama_penyakit' => 'Gangguan Gizi Buruk Kronis', 'informasi' => 'Kondisi ini terjadi akibat kekurangan nutrisi dalam jangka waktu lama.', 'saran' => 'Segera konsultasikan dengan tenaga medis untuk penanganan lebih lanjut.']];
|
||||
$data['hasil'] = [];
|
||||
$this->load->view('home/hasil_diagnosa', $data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Proses perhitungan probabilitas seperti biasa
|
||||
$temp = $this->diagnosa->insertTempFinal();
|
||||
if (!empty($temp)) {
|
||||
$this->db->insert_batch('temporary_final', $temp);
|
||||
$this->db->insert_batch('temporary_final', $temp);
|
||||
}
|
||||
|
||||
// Ambil probabilitas untuk setiap penyakit
|
||||
$probKwarshiorkor = $this->diagnosa->getProbKwarshiorkor();
|
||||
$probMarasmus = $this->diagnosa->getProbMarasmus();
|
||||
$probMarasmusKwarshiokor = $this->diagnosa->getProbMarasmusKwarshiorkor();
|
||||
$probBeriBeri = $this->diagnosa->getProbBeriBeri();
|
||||
$probSkorbut = $this->diagnosa->getProbSkorbut();
|
||||
// Ambil probabilitas setiap penyakit
|
||||
$probKwarshiorkor = $this->diagnosa->getProbPenyakit(1);
|
||||
$probMarasmus = $this->diagnosa->getProbPenyakit(3);
|
||||
$probMarasmusKwarshiokor = $this->diagnosa->getProbPenyakit(4);
|
||||
$probBeriBeri = $this->diagnosa->getProbPenyakit(5);
|
||||
$probSkorbut = $this->diagnosa->getProbPenyakit(6);
|
||||
|
||||
// Siapkan array data untuk menjumlahkan probabilitas total
|
||||
$data = [
|
||||
'kwarshiorkor' => $probKwarshiorkor,
|
||||
'marasmus' => $probMarasmus,
|
||||
'marasmus_kwarshiorkor' => $probMarasmusKwarshiokor,
|
||||
'beri_beri' => $probBeriBeri,
|
||||
'skorbut' => $probSkorbut
|
||||
'kwarshiorkor' => $probKwarshiorkor,
|
||||
'marasmus' => $probMarasmus,
|
||||
'marasmus_kwarshiorkor' => $probMarasmusKwarshiokor,
|
||||
'beri_beri' => $probBeriBeri,
|
||||
'skorbut' => $probSkorbut
|
||||
];
|
||||
|
||||
$jmlProb = array_sum($data);
|
||||
|
||||
// Hindari pembagian dengan nol
|
||||
$kwarshiorkor = ($jmlProb > 0) ? ($probKwarshiorkor / $jmlProb) : 0;
|
||||
$marasmus = ($jmlProb > 0) ? ($probMarasmus / $jmlProb) : 0;
|
||||
$marasmus_kwarshiorkor = ($jmlProb > 0) ? ($probMarasmusKwarshiokor / $jmlProb) : 0;
|
||||
$beri_beri = ($jmlProb > 0) ? ($probBeriBeri / $jmlProb) : 0;
|
||||
$skorbut = ($jmlProb > 0) ? ($probSkorbut / $jmlProb) : 0;
|
||||
// $kwarshiorkor = ($jmlProb > 0) ? ($probKwarshiorkor / $jmlProb) : 0;
|
||||
// $marasmus = ($jmlProb > 0) ? ($probMarasmus / $jmlProb) : 0;
|
||||
// $marasmus_kwarshiorkor = ($jmlProb > 0) ? ($probMarasmusKwarshiokor / $jmlProb) : 0;
|
||||
// $beri_beri = ($jmlProb > 0) ? ($probBeriBeri / $jmlProb) : 0;
|
||||
// $skorbut = ($jmlProb > 0) ? ($probSkorbut / $jmlProb) : 0;
|
||||
$kwarshiorkor = @($probKwarshiorkor / $jmlProb);
|
||||
$marasmus = @($probMarasmus / $jmlProb);
|
||||
$marasmus_kwarshiorkor = @($probMarasmusKwarshiokor / $jmlProb);
|
||||
$beri_beri = @($probBeriBeri / $jmlProb);
|
||||
$skorbut = @($probSkorbut / $jmlProb);
|
||||
|
||||
// Simpan hasil probabilitas ke database
|
||||
// Simpan hasil ke database
|
||||
$this->diagnosa->hasilProbKwarshiorkor($kwarshiorkor);
|
||||
$this->diagnosa->hasilProbMarasmus($marasmus);
|
||||
$this->diagnosa->hasilProbMarasmusKwarshiorkor($marasmus_kwarshiorkor);
|
||||
|
@ -77,12 +89,52 @@ class Diagnosa extends CI_Controller
|
|||
// Ambil hasil diagnosa berdasarkan probabilitas terbesar
|
||||
$data['hasil'] = $this->diagnosa->diagnosis();
|
||||
$data['hasilMax'] = $this->diagnosa->diagnosisMax();
|
||||
$data['penyakit'] = $this->db->get('penyakit')->result_array();
|
||||
|
||||
// Simpan daftar konsultasi user
|
||||
$this->diagnosa->insertDaftarKonsult();
|
||||
|
||||
if (!empty($gejala)) {
|
||||
$this->diagnosa->insertRiwayatKonsult($gejala);
|
||||
}
|
||||
|
||||
// Load tampilan hasil diagnosa
|
||||
$this->load->view('home/hasil_diagnosa', $data);
|
||||
}
|
||||
}
|
||||
|
||||
public function export_pdf()
|
||||
{
|
||||
$this->load->model('Diagnosa_model');
|
||||
$data['riwayat_gejala'] = $this->diagnosa->getAllRiwayat();
|
||||
|
||||
$mpdf = new mPDF('utf-8', 'A4');
|
||||
$html = '<h3>Laporan Konsultasi</h3><table border="1" cellpadding="4">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Id User</th>
|
||||
<th>Tanggal</th>
|
||||
<th>gejala</th>
|
||||
<th>diagnosis</th>
|
||||
<th>pengobatan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
$i = 1;
|
||||
foreach ($data['riwayat_gejala'] as $konsul) {
|
||||
$html .= '<tr>
|
||||
<td>' . $i . '</td>
|
||||
<td>' . $konsul['id_user'] . '</td>
|
||||
<td>' . $konsul['tanggal'] . '</td>
|
||||
<td>' . $konsul['gejala'] . '</td>
|
||||
<td>' . $konsul['diagnosis'] . '</td>
|
||||
<td>' . $konsul['pengobatan'] . '%</td>
|
||||
</tr>';
|
||||
$i++;
|
||||
}
|
||||
$html .= '</tbody></table>';
|
||||
|
||||
$mpdf->WriteHTML($html);
|
||||
$mpdf->Output('laporan_konsultasi.pdf', 'D');
|
||||
}
|
||||
|
||||
}
|
|
@ -41,4 +41,6 @@ class Gejala extends CI_Controller
|
|||
$this->session->set_flashdata('flash', 'Dihapus');
|
||||
redirect('admin/gejala');
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -16,15 +16,12 @@ class Home extends CI_Controller
|
|||
$this->load->view('home/index', $data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function hasil_diagnosa()
|
||||
{
|
||||
$this->load->view('home/hasil_diagnosa');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function diagnosa()
|
||||
{
|
||||
if (!$this->session->userdata('email')) {
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* @property CI_DB_query_builder $db
|
||||
* @property CI_Session $session
|
||||
* @property Auth_model $auth
|
||||
* @property form_validation $form_validation
|
||||
* @property input $input
|
||||
* @property Admin_model $admin
|
||||
*/
|
||||
|
||||
class Konsultasi extends CI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->load->model('Admin_model', 'admin');
|
||||
if (!$this->session->userdata('email')) {
|
||||
// tendang ke auth/login page
|
||||
redirect('auth');
|
||||
}
|
||||
}
|
||||
|
||||
public function tambahSaran()
|
||||
{
|
||||
$id = $this->input->post('id'); // ID dari tabel riwayat_gejala
|
||||
$data = [
|
||||
'gejala' => $this->input->post('gejala'),
|
||||
'diagnosis' => $this->input->post('diagnosis'),
|
||||
'pengobatan' => $this->input->post('pengobatan')
|
||||
];
|
||||
|
||||
$this->db->where('id', $id);
|
||||
$this->db->update('riwayat_gejala', $data);
|
||||
|
||||
$this->session->set_flashdata('message', '<div class="alert alert-success">Pengobatan berhasil diperbarui!</div>');
|
||||
redirect('admin/konsultasi');
|
||||
}
|
||||
|
||||
}
|
|
@ -118,8 +118,6 @@ class Rule extends CI_Controller
|
|||
redirect('admin/rule');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function editRule()
|
||||
{
|
||||
$this->admin->editRule();
|
||||
|
|
|
@ -9,7 +9,7 @@ defined('BASEPATH') or exit('No direct script access allowed');
|
|||
* @property form_validation $form_validation
|
||||
* @property input $input
|
||||
* @property upload $upload
|
||||
* @property user $user
|
||||
* @property Usrr_model $user
|
||||
*/
|
||||
|
||||
class User extends CI_Controller
|
||||
|
@ -131,6 +131,19 @@ class User extends CI_Controller
|
|||
$this->load->view('templates/footer');
|
||||
}
|
||||
|
||||
public function riwayatku(){
|
||||
$data['judul'] = 'Sistem Pakar Metode Naive Bayes';
|
||||
$data['user'] = $this->db->get_where('user', ['email' => $this->session->userdata('email')])->row_array();
|
||||
$data['subMenu'] = $this->db->get_where('sub_menu_user', ['id' => 12])->row_array();
|
||||
$data['riwayat_gejala'] = $this->user->getRiwayat();
|
||||
$data['daftar'] = $this->db->get('riwayat_gejala')->result_array();
|
||||
$this->load->view('templates/header', $data);
|
||||
$this->load->view('templates/sidebar', $data);
|
||||
$this->load->view('templates/topbar', $data);
|
||||
$this->load->view('user/riwayat-gejala', $data);
|
||||
$this->load->view('templates/footer');
|
||||
}
|
||||
|
||||
public function hapusKonsultasi($id)
|
||||
{
|
||||
$this->load->model('User_model', 'user');
|
||||
|
|
|
@ -94,7 +94,6 @@ class Admin_model extends CI_Model
|
|||
$this->db->delete('gejala');
|
||||
}
|
||||
|
||||
// penyakit
|
||||
public function tambahPenyakit()
|
||||
{
|
||||
$Kode = $this->cekKodePenyakit();
|
||||
|
@ -123,6 +122,19 @@ class Admin_model extends CI_Model
|
|||
$this->db->update('penyakit', $data);
|
||||
}
|
||||
|
||||
public function tambahSaran()
|
||||
{
|
||||
$data = [
|
||||
'pengobatan' => $this->input->post('pengobatan'),
|
||||
'gejala' => $this->input->post('gejala'),
|
||||
'diagnosis' => $this->input->post('diagnosis'),
|
||||
];
|
||||
|
||||
$this->db->where('id_user', $this->input->post('id'));
|
||||
// $this->db->where('id', $this->input->post('id'));
|
||||
$this->db->update('riwayat_gejala', $data);
|
||||
}
|
||||
|
||||
public function hapusPenyakit($id)
|
||||
{
|
||||
$this->db->where('id_penyakit', $id);
|
||||
|
|
|
@ -13,119 +13,139 @@ class Diagnosa_model extends CI_Model
|
|||
}
|
||||
|
||||
|
||||
public function getProbKwarshiorkor()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('temporary_final');
|
||||
$this->db->where('id_penyakit', 1);
|
||||
// public function getProbKwarshiorkor()
|
||||
// {
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('temporary_final');
|
||||
// $this->db->where('id_penyakit', 1);
|
||||
// $data = $this->db->get()->result();
|
||||
// //inisialisasi untuk total probabilitas
|
||||
// $jumlah = 1;
|
||||
// foreach ($data as $row) {
|
||||
// //perkalian antar setiap id_gejala x probabilitasnya
|
||||
// $jumlah = $jumlah * $row->probabilitas;
|
||||
// }
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('penyakit');
|
||||
// $this->db->where('id_penyakit', 1);
|
||||
// $data = $this->db->get()->result();
|
||||
// foreach ($data as $rowku) {
|
||||
// //P(H1|F)
|
||||
// $hasil = $jumlah * $rowku->probabilitas;
|
||||
// }
|
||||
// return $hasil;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// public function getProbMarasmus()
|
||||
// {
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('temporary_final');
|
||||
// $this->db->where('id_penyakit', 3);
|
||||
// $data = $this->db->get()->result();
|
||||
// //inisialisasi untuk total probabilitas
|
||||
// $jumlah = 1;
|
||||
// foreach ($data as $row) {
|
||||
// //perkalian antar setiap id_gejala x probabilitasnya
|
||||
// $jumlah = $jumlah * $row->probabilitas;
|
||||
// }
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('penyakit');
|
||||
// $this->db->where('id_penyakit', 3);
|
||||
// $data = $this->db->get()->result();
|
||||
// foreach ($data as $rowku) {
|
||||
// //P(H2|F)
|
||||
// $hasil = $jumlah * $rowku->probabilitas;
|
||||
// }
|
||||
// return $hasil;
|
||||
// }
|
||||
|
||||
|
||||
// public function getProbMarasmusKwarshiorkor()
|
||||
// {
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('temporary_final');
|
||||
// $this->db->where('id_penyakit', 4);
|
||||
// $data = $this->db->get()->result();
|
||||
// //inisialisasi untuk total probabilitas
|
||||
// $jumlah = 1;
|
||||
// foreach ($data as $row) {
|
||||
// $jumlah = $jumlah * $row->probabilitas;
|
||||
// }
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('penyakit');
|
||||
// $this->db->where('id_penyakit', 4);
|
||||
// $data = $this->db->get()->result();
|
||||
// foreach ($data as $rowku) {
|
||||
// //P(H3|F)
|
||||
// $hasil = $jumlah * $rowku->probabilitas;
|
||||
// }
|
||||
// return $hasil;
|
||||
// }
|
||||
|
||||
// public function getProbBeriBeri()
|
||||
// {
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('temporary_final');
|
||||
// $this->db->where('id_penyakit', 5);
|
||||
// $data = $this->db->get()->result();
|
||||
// //inisialisasi untuk total probabilitas
|
||||
// $jumlah = 1;
|
||||
// foreach ($data as $row) {
|
||||
// $jumlah = $jumlah * $row->probabilitas;
|
||||
// }
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('penyakit');
|
||||
// $this->db->where('id_penyakit', 5);
|
||||
// $data = $this->db->get()->result();
|
||||
// foreach ($data as $rowku) {
|
||||
// //P(H4|F)
|
||||
// $hasil = $jumlah * $rowku->probabilitas;
|
||||
// }
|
||||
// return $hasil;
|
||||
// }
|
||||
// public function getProbSkorbut()
|
||||
// {
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('temporary_final');
|
||||
// $this->db->where('id_penyakit', 6);
|
||||
// $data = $this->db->get()->result();
|
||||
// //inisialisasi untuk total probabilitas
|
||||
// $jumlah = 1;
|
||||
// foreach ($data as $row) {
|
||||
// $jumlah = $jumlah * $row->probabilitas;
|
||||
// }
|
||||
// $this->db->select('*');
|
||||
// $this->db->from('penyakit');
|
||||
// $this->db->where('id_penyakit', 6);
|
||||
// $data = $this->db->get()->result();
|
||||
// foreach ($data as $rowku) {
|
||||
// ////P(H5F)
|
||||
// $hasil = $jumlah * $rowku->probabilitas;
|
||||
// }
|
||||
// return $hasil;
|
||||
// }
|
||||
|
||||
public function getProbPenyakit($id_penyakit) {
|
||||
$this->db->select('*')->from('temporary_final')->where('id_penyakit', $id_penyakit);
|
||||
$data = $this->db->get()->result();
|
||||
//inisialisasi untuk total probabilitas
|
||||
|
||||
$jumlah = 1;
|
||||
foreach ($data as $row) {
|
||||
//perkalian antar setiap id_gejala x probabilitasnya
|
||||
$jumlah = $jumlah * $row->probabilitas;
|
||||
$jumlah *= $row->probabilitas;
|
||||
}
|
||||
$this->db->select('*');
|
||||
$this->db->from('penyakit');
|
||||
$this->db->where('id_penyakit', 1);
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $rowku) {
|
||||
//P(H1|F)
|
||||
|
||||
$this->db->select('*')->from('penyakit')->where('id_penyakit', $id_penyakit);
|
||||
$data_penyakit = $this->db->get()->result();
|
||||
|
||||
foreach ($data_penyakit as $rowku) {
|
||||
$hasil = $jumlah * $rowku->probabilitas;
|
||||
}
|
||||
|
||||
return $hasil;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getProbMarasmus()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('temporary_final');
|
||||
$this->db->where('id_penyakit', 3);
|
||||
$data = $this->db->get()->result();
|
||||
//inisialisasi untuk total probabilitas
|
||||
$jumlah = 1;
|
||||
foreach ($data as $row) {
|
||||
//perkalian antar setiap id_gejala x probabilitasnya
|
||||
$jumlah = $jumlah * $row->probabilitas;
|
||||
}
|
||||
$this->db->select('*');
|
||||
$this->db->from('penyakit');
|
||||
$this->db->where('id_penyakit', 3);
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $rowku) {
|
||||
//P(H2|F)
|
||||
$hasil = $jumlah * $rowku->probabilitas;
|
||||
}
|
||||
return $hasil;
|
||||
}
|
||||
|
||||
|
||||
public function getProbMarasmusKwarshiorkor()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('temporary_final');
|
||||
$this->db->where('id_penyakit', 4);
|
||||
$data = $this->db->get()->result();
|
||||
//inisialisasi untuk total probabilitas
|
||||
$jumlah = 1;
|
||||
foreach ($data as $row) {
|
||||
$jumlah = $jumlah * $row->probabilitas;
|
||||
}
|
||||
$this->db->select('*');
|
||||
$this->db->from('penyakit');
|
||||
$this->db->where('id_penyakit', 4);
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $rowku) {
|
||||
//P(H3|F)
|
||||
$hasil = $jumlah * $rowku->probabilitas;
|
||||
}
|
||||
return $hasil;
|
||||
}
|
||||
|
||||
public function getProbBeriBeri()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('temporary_final');
|
||||
$this->db->where('id_penyakit', 5);
|
||||
$data = $this->db->get()->result();
|
||||
//inisialisasi untuk total probabilitas
|
||||
$jumlah = 1;
|
||||
foreach ($data as $row) {
|
||||
$jumlah = $jumlah * $row->probabilitas;
|
||||
}
|
||||
$this->db->select('*');
|
||||
$this->db->from('penyakit');
|
||||
$this->db->where('id_penyakit', 5);
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $rowku) {
|
||||
//P(H4|F)
|
||||
$hasil = $jumlah * $rowku->probabilitas;
|
||||
}
|
||||
return $hasil;
|
||||
}
|
||||
public function getProbSkorbut()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('temporary_final');
|
||||
$this->db->where('id_penyakit', 6);
|
||||
$data = $this->db->get()->result();
|
||||
//inisialisasi untuk total probabilitas
|
||||
$jumlah = 1;
|
||||
foreach ($data as $row) {
|
||||
$jumlah = $jumlah * $row->probabilitas;
|
||||
}
|
||||
$this->db->select('*');
|
||||
$this->db->from('penyakit');
|
||||
$this->db->where('id_penyakit', 6);
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $rowku) {
|
||||
////P(H5F)
|
||||
$hasil = $jumlah * $rowku->probabilitas;
|
||||
}
|
||||
return $hasil;
|
||||
}
|
||||
public function insertTempFinal()
|
||||
{
|
||||
$query = "SELECT `rule`.`id_penyakit`,`rule`.`id_gejala`, `rule`.`probabilitas` from `rule` JOIN `temporary` ON `rule`.`id_gejala` = `temporary`.`id_gejala` ORDER BY `rule`.`id_penyakit` ASC";
|
||||
|
@ -211,4 +231,51 @@ class Diagnosa_model extends CI_Model
|
|||
];
|
||||
return $this->db->insert('daftar_konsultasi', $data);
|
||||
}
|
||||
|
||||
public function insertRiwayatKonsult($gejala)
|
||||
{
|
||||
// Ambil data user berdasarkan session email
|
||||
$this->db->select('*');
|
||||
$this->db->from('user');
|
||||
$this->db->where('email', $this->session->userdata('email'));
|
||||
$user = $this->db->get()->row();
|
||||
|
||||
if (!$user) {
|
||||
return false; // Jika user tidak ditemukan, hentikan proses
|
||||
}
|
||||
|
||||
// Ambil hasil diagnosis tertinggi
|
||||
$penyakit = $this->diagnosisMax();
|
||||
$diagnosis = (!empty($penyakit)) ? $penyakit[0]['nama_penyakit'] : 'Tidak Diketahui';
|
||||
|
||||
// Ambil nama gejala berdasarkan ID yang dipilih
|
||||
$this->db->select('gejala');
|
||||
$this->db->from('gejala');
|
||||
$this->db->where_in('id_gejala', $gejala); // Ambil semua gejala berdasarkan ID
|
||||
$result = $this->db->get()->result_array();
|
||||
|
||||
// Ubah array hasil query menjadi daftar gejala (nama)
|
||||
$nama_gejala = array_column($result, 'gejala');
|
||||
|
||||
// Simpan data konsultasi ke tabel riwayat_gejala
|
||||
$data = [
|
||||
'tanggal' => date('Y-m-d'),
|
||||
'id_user' => $user->id,
|
||||
'diagnosis' => $diagnosis,
|
||||
'gejala' => implode(', ', $nama_gejala) // Simpan sebagai teks
|
||||
];
|
||||
|
||||
return $this->db->insert('riwayat_gejala', $data);
|
||||
}
|
||||
|
||||
|
||||
public function getAllKonsultasi()
|
||||
{
|
||||
return $this->db->get('daftar_konsultasi')->result_array();
|
||||
}
|
||||
|
||||
public function getAllRiwayat(){
|
||||
return $this->db->get('riwayat_gejala')->result_arraY();
|
||||
}
|
||||
|
||||
}
|
|
@ -36,6 +36,19 @@ class User_model extends CI_Model
|
|||
$query = "SELECT `daftar_konsultasi`.* FROM `daftar_konsultasi` JOIN `user` ON `daftar_konsultasi`.`id_user` = `user`.`id` WHERE `daftar_konsultasi`.`id_user` = $idUser ORDER BY `daftar_konsultasi`.`id`";
|
||||
return $this->db->query($query)->result_array();
|
||||
}
|
||||
|
||||
public function getRiwayat()
|
||||
{
|
||||
$this->db->select('*');
|
||||
$this->db->from('user');
|
||||
$this->db->where('email', $this->session->userdata('email'));
|
||||
$data = $this->db->get()->result();
|
||||
foreach ($data as $row) {
|
||||
$idUser = $row->id;
|
||||
}
|
||||
$query = "SELECT `riwayat_gejala`.* FROM `riwayat_gejala` JOIN `user` ON `riwayat_gejala`.`id_user` = `user`.`id` WHERE `riwayat_gejala`.`id_user` = $idUser ORDER BY `riwayat_gejala`.`id`";
|
||||
return $this->db->query($query)->result_array();
|
||||
}
|
||||
public function hapusKonsultasi($id)
|
||||
{
|
||||
$this->db->where('id', $id);
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
vendor/*
|
||||
composer.lock
|
|
@ -0,0 +1,20 @@
|
|||
language: php
|
||||
|
||||
php:
|
||||
- 5.4
|
||||
- 5.5
|
||||
- 5.6
|
||||
- 7.0
|
||||
- hhvm
|
||||
|
||||
matrix:
|
||||
allow_failures:
|
||||
- php: 7.0
|
||||
- php: hhvm
|
||||
|
||||
install:
|
||||
- composer self-update
|
||||
- composer install
|
||||
|
||||
notifications:
|
||||
email: change
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,91 @@
|
|||
|
||||
|
||||
/*******************************************************************************
|
||||
* 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]
|
|
@ -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.
|
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
|
||||
class MpdfException extends Exception
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
mPDF is a PHP class which generates PDF files from UTF-8 encoded HTML. It is based on [FPDF](http://www.fpdf.org/)
|
||||
and [HTML2FPDF](http://html2fpdf.sourceforge.net/) (see [CREDITS](CREDITS.txt)), with a number of enhancements.
|
||||
mPDF was written by Ian Back and is released under the [GNU GPL v2 licence](LICENSE.txt).
|
||||
|
||||
[](https://travis-ci.org/mpdf/mpdf)
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Preferred installation method is via composer and its packagist package [mpdf/mpdf](https://packagist.org/packages/mpdf/mpdf).
|
||||
|
||||
Manual installation
|
||||
-------------------
|
||||
|
||||
* Download the [.zip release file](https://github.com/mpdf/mpdf/releases) 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](http://jpgraph.net) in conjunction with mPDF
|
||||
|
||||
To test the installation, point your browser to the basic example file:
|
||||
|
||||
[path_to_mpdf_folder]/mpdf/examples/example01_basic.php
|
||||
|
||||
If you wish to define a different folder for temporary files rather than /tmp/ see the note on
|
||||
[Folder for temporary files](https://mpdf.github.io/installation-setup/folders-for-temporary-files.html)
|
||||
in the section on Installation & Setup in the [manual](https://mpdf.github.io/).
|
||||
|
||||
If you have problems, please read the section on [troubleshooting](https://mpdf.github.io/troubleshooting/known-issues.html) in the manual.
|
||||
|
||||
Online manual
|
||||
=============
|
||||
|
||||
Online manual is available at https://mpdf.github.io/.
|
||||
|
||||
Unit Testing
|
||||
============
|
||||
|
||||
Unit testing for mPDF is done using [PHPUnit](https://phpunit.de/).
|
||||
|
||||
To get started, run `composer install` from the command line while in the mPDF root directory
|
||||
(you'll need [composer installed first](https://getcomposer.org/download/)).
|
||||
|
||||
To execute tests, run `vendor/bin/phpunit` from the command line while in the mPDF root directory.
|
||||
|
||||
Any assistance writing unit tests for mPDF is greatly appreciated. If you'd like to help, please
|
||||
note that any PHP file located in the `/tests/` directory will be autoloaded when unit testing.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,260 @@
|
|||
<?php
|
||||
|
||||
class bmp
|
||||
{
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
public function __construct(mPDF $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;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,463 @@
|
|||
<?php
|
||||
|
||||
class directw
|
||||
{
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
public function __construct(mPDF $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*
|
||||
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));
|
||||
$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));
|
||||
$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 ($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 (isset($this->mpdf->CurrentFont['useOTL']) && $this->mpdf->CurrentFont['useOTL']) {
|
||||
if (preg_match("/([" . $this->mpdf->pregCURSchars . "])/u", $tmp)) {
|
||||
$inclCursive = true;
|
||||
}
|
||||
}
|
||||
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 is not fully supported for complex scripts
|
||||
// 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);
|
||||
}
|
||||
$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, $divider = '')
|
||||
{
|
||||
if ($fontfamily || $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)');
|
||||
$text = str_replace("\r", '', $text);
|
||||
//circumference
|
||||
$u = ($r * 2) * M_PI;
|
||||
$checking = true;
|
||||
$autoset = false;
|
||||
while ($checking) {
|
||||
$t = 0;
|
||||
$w = array();
|
||||
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];
|
||||
}
|
||||
}
|
||||
if ($fontsizePt >= 0 || $autoset) {
|
||||
$checking = false;
|
||||
} else {
|
||||
$t+=$this->mpdf->GetStringWidth(' ');
|
||||
if ($divider)
|
||||
$t+=$this->mpdf->GetStringWidth(' ');
|
||||
if ($fontsizePt == -2)
|
||||
$fontsizePt = $this->mpdf->FontSizePt * 0.5 * $u / $t;
|
||||
else
|
||||
$fontsizePt = $this->mpdf->FontSizePt * $u / $t;
|
||||
$this->mpdf->SetFontSize($fontsizePt);
|
||||
$autoset = true;
|
||||
}
|
||||
}
|
||||
|
||||
//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();
|
||||
|
||||
// mPDF 5.5.23
|
||||
if ($align == 'top' && $divider != '') {
|
||||
$wc = $this->mpdf->GetStringWidth($divider);
|
||||
$wc*=$kerning * $fontwidth;
|
||||
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformRotate(90, $x, $y);
|
||||
$this->mpdf->SetXY($x - $wc / 2, $y - $r);
|
||||
$this->mpdf->Cell(($wc), $this->mpdf->FontSize, $divider, 0, 0, 'C');
|
||||
$this->mpdf->StopTransform();
|
||||
|
||||
$this->mpdf->StartTransform();
|
||||
$this->mpdf->transformRotate(-90, $x, $y);
|
||||
$this->mpdf->SetXY($x - $wc / 2, $y - $r);
|
||||
$this->mpdf->Cell(($wc), $this->mpdf->FontSize, $divider, 0, 0, 'C');
|
||||
$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 = ' ' . $text . ' ';
|
||||
$this->mpdf->SetFont($font, $fontstyle, $szfont, false);
|
||||
|
||||
$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
|
||||
if (preg_match("/([" . $this->mpdf->pregRTLchars . "])/u", $text)) {
|
||||
$this->mpdf->biDirectional = true;
|
||||
} // *RTL*
|
||||
|
||||
$textvar = 0;
|
||||
$save_OTLtags = $this->mpdf->OTLtags;
|
||||
$this->mpdf->OTLtags = array();
|
||||
if ($this->mpdf->useKerning) {
|
||||
if ($this->mpdf->CurrentFont['haskernGPOS']) {
|
||||
$this->mpdf->OTLtags['Plus'] .= ' kern';
|
||||
} else {
|
||||
$textvar = ($textvar | FC_KERNING);
|
||||
}
|
||||
}
|
||||
// Use OTL OpenType Table Layout - GSUB & GPOS
|
||||
if (isset($this->mpdf->CurrentFont['useOTL']) && $this->mpdf->CurrentFont['useOTL']) {
|
||||
$text = $this->mpdf->otl->applyOTL($text, $this->mpdf->CurrentFont['useOTL']);
|
||||
$OTLdata = $this->mpdf->otl->OTLdata;
|
||||
}
|
||||
$this->mpdf->OTLtags = $save_OTLtags;
|
||||
|
||||
$this->mpdf->magic_reverse_dir($text, $this->mpdf->directionality, $OTLdata);
|
||||
|
||||
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, false);
|
||||
$sz = $this->mpdf->GetStringWidth($text, true, $OTLdata, $textvar);
|
||||
if (($r1 + $sz) > $r2)
|
||||
$szfont --;
|
||||
else
|
||||
$loop ++;
|
||||
}
|
||||
$this->mpdf->SetFont($font, $fontstyle, $szfont, true, true);
|
||||
|
||||
$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", 0, '', 0, 0, 0, 'M', 0, false, $OTLdata, $textvar);
|
||||
$this->mpdf->SetY($y1 + $y2 + 2); // +2 = mm margin below shaded box
|
||||
$this->mpdf->Reset();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,677 @@
|
|||
<?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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
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;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,975 @@
|
|||
<?php
|
||||
|
||||
class grad
|
||||
{
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
public function __construct(mPDF $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 = (isset($coords[4]) ? $coords[4] : false);
|
||||
$repeat = (isset($coords[5]) ? $coords[5] : false);
|
||||
// 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 = (isset($coords[4]) ? $coords[4] : false);
|
||||
$angle = (isset($coords[5]) ? $coords[5] : false); // ?? no effect
|
||||
$shape = (isset($coords[6]) ? $coords[6] : false);
|
||||
$size = (isset($coords[7]) ? $coords[7] : false);
|
||||
$repeat = (isset($coords[8]) ? $coords[8] : false);
|
||||
// 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) && isset($first[1]) && 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) && isset($first[1]) && 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;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,292 @@
|
|||
<?php
|
||||
|
||||
class meter
|
||||
{
|
||||
|
||||
function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function makeSVG($tag, $type, $value, $max, $min, $optimum, $low, $high)
|
||||
{
|
||||
$svg = '';
|
||||
if ($tag == 'meter') {
|
||||
|
||||
if ($type == '2') {
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
///////// CUSTOM <meter type="2">
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
$h = 10;
|
||||
$w = 160;
|
||||
$border_radius = 0.143; // Factor of Height
|
||||
|
||||
$svg = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="' . $w . 'px" height="' . $h . 'px" viewBox="0 0 ' . $w . ' ' . $h . '" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ><g>
|
||||
|
||||
|
||||
<defs>
|
||||
<linearGradient id="GrGRAY" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(222, 222, 222)" />
|
||||
<stop offset="20%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="25%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="100%" stop-color="rgb(182, 182, 182)" />
|
||||
</linearGradient>
|
||||
|
||||
</defs>
|
||||
';
|
||||
$svg .= '<rect x="0" y="0" width="' . $w . '" height="' . $h . '" fill="#f4f4f4" stroke="none" />';
|
||||
|
||||
// LOW to HIGH region
|
||||
//if ($low && $high && ($low != $min || $high != $max)) {
|
||||
if ($low && $high) {
|
||||
$barx = (($low - $min) / ($max - $min) ) * $w;
|
||||
$barw = (($high - $low) / ($max - $min) ) * $w;
|
||||
$svg .= '<rect x="' . $barx . '" y="0" width="' . $barw . '" height="' . $h . '" fill="url(#GrGRAY)" stroke="#888888" stroke-width="0.5px" />';
|
||||
}
|
||||
|
||||
// OPTIMUM Marker (? AVERAGE)
|
||||
if ($optimum) {
|
||||
$barx = (($optimum - $min) / ($max - $min) ) * $w;
|
||||
$barw = $h / 2;
|
||||
$barcol = '#888888';
|
||||
$svg .= '<rect x="' . $barx . '" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $barw . '" height="' . $h . '" fill="' . $barcol . '" stroke="none" />';
|
||||
}
|
||||
|
||||
// VALUE Marker
|
||||
if ($value) {
|
||||
if ($min != $low && $value < $low) {
|
||||
$col = 'orange';
|
||||
} else if ($max != $high && $value > $high) {
|
||||
$col = 'orange';
|
||||
} else {
|
||||
$col = '#008800';
|
||||
}
|
||||
$cx = (($value - $min) / ($max - $min) ) * $w;
|
||||
$cy = $h / 2;
|
||||
$rx = $h / 3.5;
|
||||
$ry = $h / 2.2;
|
||||
$svg .= '<ellipse fill="' . $col . '" stroke="#000000" stroke-width="0.5px" cx="' . $cx . '" cy="' . $cy . '" rx="' . $rx . '" ry="' . $ry . '"/>';
|
||||
}
|
||||
|
||||
// BoRDER
|
||||
$svg .= '<rect x="0" y="0" width="' . $w . '" height="' . $h . '" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
|
||||
$svg .= '</g></svg>';
|
||||
} else if ($type == '3') {
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
///////// CUSTOM <meter type="2">
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
$h = 10;
|
||||
$w = 100;
|
||||
$border_radius = 0.143; // Factor of Height
|
||||
|
||||
$svg = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="' . $w . 'px" height="' . $h . 'px" viewBox="0 0 ' . $w . ' ' . $h . '" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ><g>
|
||||
|
||||
|
||||
<defs>
|
||||
<linearGradient id="GrGRAY" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(222, 222, 222)" />
|
||||
<stop offset="20%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="25%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="100%" stop-color="rgb(182, 182, 182)" />
|
||||
</linearGradient>
|
||||
|
||||
</defs>
|
||||
';
|
||||
$svg .= '<rect x="0" y="0" width="' . $w . '" height="' . $h . '" fill="#f4f4f4" stroke="none" />';
|
||||
|
||||
// LOW to HIGH region
|
||||
if ($low && $high && ($low != $min || $high != $max)) {
|
||||
//if ($low && $high) {
|
||||
$barx = (($low - $min) / ($max - $min) ) * $w;
|
||||
$barw = (($high - $low) / ($max - $min) ) * $w;
|
||||
$svg .= '<rect x="' . $barx . '" y="0" width="' . $barw . '" height="' . $h . '" fill="url(#GrGRAY)" stroke="#888888" stroke-width="0.5px" />';
|
||||
}
|
||||
|
||||
// OPTIMUM Marker (? AVERAGE)
|
||||
if ($optimum) {
|
||||
$barx = (($optimum - $min) / ($max - $min) ) * $w;
|
||||
$barw = $h / 2;
|
||||
$barcol = '#888888';
|
||||
$svg .= '<rect x="' . $barx . '" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $barw . '" height="' . $h . '" fill="' . $barcol . '" stroke="none" />';
|
||||
}
|
||||
|
||||
// VALUE Marker
|
||||
if ($value) {
|
||||
if ($min != $low && $value < $low) {
|
||||
$col = 'orange';
|
||||
} else if ($max != $high && $value > $high) {
|
||||
$col = 'orange';
|
||||
} else {
|
||||
$col = 'orange';
|
||||
}
|
||||
$cx = (($value - $min) / ($max - $min) ) * $w;
|
||||
$cy = $h / 2;
|
||||
$rx = $h / 2.2;
|
||||
$ry = $h / 2.2;
|
||||
$svg .= '<ellipse fill="' . $col . '" stroke="#000000" stroke-width="0.5px" cx="' . $cx . '" cy="' . $cy . '" rx="' . $rx . '" ry="' . $ry . '"/>';
|
||||
}
|
||||
|
||||
// BoRDER
|
||||
$svg .= '<rect x="0" y="0" width="' . $w . '" height="' . $h . '" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
|
||||
$svg .= '</g></svg>';
|
||||
} else {
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
///////// DEFAULT <meter>
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
$h = 10;
|
||||
$w = 50;
|
||||
$border_radius = 0.143; // Factor of Height
|
||||
|
||||
$svg = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="' . $w . 'px" height="' . $h . 'px" viewBox="0 0 ' . $w . ' ' . $h . '" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ><g>
|
||||
|
||||
<defs>
|
||||
<linearGradient id="GrGRAY" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(222, 222, 222)" />
|
||||
<stop offset="20%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="25%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="100%" stop-color="rgb(182, 182, 182)" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="GrRED" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(255, 162, 162)" />
|
||||
<stop offset="20%" stop-color="rgb(255, 218, 218)" />
|
||||
<stop offset="25%" stop-color="rgb(255, 218, 218)" />
|
||||
<stop offset="100%" stop-color="rgb(255, 0, 0)" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="GrGREEN" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(102, 230, 102)" />
|
||||
<stop offset="20%" stop-color="rgb(218, 255, 218)" />
|
||||
<stop offset="25%" stop-color="rgb(218, 255, 218)" />
|
||||
<stop offset="100%" stop-color="rgb(0, 148, 0)" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="GrBLUE" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(102, 102, 230)" />
|
||||
<stop offset="20%" stop-color="rgb(238, 238, 238)" />
|
||||
<stop offset="25%" stop-color="rgb(238, 238, 238)" />
|
||||
<stop offset="100%" stop-color="rgb(0, 0, 128)" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="GrORANGE" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(255, 186, 0)" />
|
||||
<stop offset="20%" stop-color="rgb(255, 238, 168)" />
|
||||
<stop offset="25%" stop-color="rgb(255, 238, 168)" />
|
||||
<stop offset="100%" stop-color="rgb(255, 155, 0)" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect x="0" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $w . '" height="' . $h . '" fill="url(#GrGRAY)" stroke="none" />
|
||||
';
|
||||
|
||||
if ($value) {
|
||||
$barw = (($value - $min) / ($max - $min) ) * $w;
|
||||
if ($optimum < $low) {
|
||||
if ($value < $low) {
|
||||
$barcol = 'url(#GrGREEN)';
|
||||
} else if ($value > $high) {
|
||||
$barcol = 'url(#GrRED)';
|
||||
} else {
|
||||
$barcol = 'url(#GrORANGE)';
|
||||
}
|
||||
} else if ($optimum > $high) {
|
||||
if ($value < $low) {
|
||||
$barcol = 'url(#GrRED)';
|
||||
} else if ($value > $high) {
|
||||
$barcol = 'url(#GrGREEN)';
|
||||
} else {
|
||||
$barcol = 'url(#GrORANGE)';
|
||||
}
|
||||
} else {
|
||||
if ($value < $low) {
|
||||
$barcol = 'url(#GrORANGE)';
|
||||
} else if ($value > $high) {
|
||||
$barcol = 'url(#GrORANGE)';
|
||||
} else {
|
||||
$barcol = 'url(#GrGREEN)';
|
||||
}
|
||||
}
|
||||
$svg .= '<rect x="0" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $barw . '" height="' . $h . '" fill="' . $barcol . '" stroke="none" />';
|
||||
}
|
||||
|
||||
|
||||
// Borders
|
||||
//$svg .= '<rect x="0" y="0" rx="'.($h*$border_radius).'px" ry="'.($h*$border_radius).'px" width="'.$w.'" height="'.$h.'" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
if ($value) {
|
||||
// $svg .= '<rect x="0" y="0" rx="'.($h*$border_radius).'px" ry="'.($h*$border_radius).'px" width="'.$barw.'" height="'.$h.'" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
}
|
||||
|
||||
|
||||
$svg .= '</g></svg>';
|
||||
}
|
||||
} else { // $tag == 'progress'
|
||||
if ($type == '2') {
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
///////// CUSTOM <progress type="2">
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
} else {
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
///////// DEFAULT <progress>
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
$h = 10;
|
||||
$w = 100;
|
||||
$border_radius = 0.143; // Factor of Height
|
||||
|
||||
if ($value or $value === '0') {
|
||||
$fill = 'url(#GrGRAY)';
|
||||
} else {
|
||||
$fill = '#f8f8f8';
|
||||
}
|
||||
|
||||
$svg = '<svg width="' . $w . 'px" height="' . $h . 'px" viewBox="0 0 ' . $w . ' ' . $h . '"><g>
|
||||
|
||||
<defs>
|
||||
<linearGradient id="GrGRAY" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(222, 222, 222)" />
|
||||
<stop offset="20%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="25%" stop-color="rgb(232, 232, 232)" />
|
||||
<stop offset="100%" stop-color="rgb(182, 182, 182)" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="GrGREEN" x1="0" y1="0" x2="0" y2="1" gradientUnits="boundingBox">
|
||||
<stop offset="0%" stop-color="rgb(102, 230, 102)" />
|
||||
<stop offset="20%" stop-color="rgb(218, 255, 218)" />
|
||||
<stop offset="25%" stop-color="rgb(218, 255, 218)" />
|
||||
<stop offset="100%" stop-color="rgb(0, 148, 0)" />
|
||||
</linearGradient>
|
||||
|
||||
</defs>
|
||||
|
||||
<rect x="0" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $w . '" height="' . $h . '" fill="' . $fill . '" stroke="none" />
|
||||
';
|
||||
|
||||
if ($value) {
|
||||
$barw = (($value - $min) / ($max - $min) ) * $w;
|
||||
$barcol = 'url(#GrGREEN)';
|
||||
$svg .= '<rect x="0" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $barw . '" height="' . $h . '" fill="' . $barcol . '" stroke="none" />';
|
||||
}
|
||||
|
||||
|
||||
// Borders
|
||||
$svg .= '<rect x="0" y="0" rx="' . ($h * $border_radius) . 'px" ry="' . ($h * $border_radius) . 'px" width="' . $w . '" height="' . $h . '" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
if ($value) {
|
||||
// $svg .= '<rect x="0" y="0" rx="'.($h*$border_radius).'px" ry="'.($h*$border_radius).'px" width="'.$barw.'" height="'.$h.'" fill="none" stroke="#888888" stroke-width="0.5px" />';
|
||||
}
|
||||
|
||||
|
||||
$svg .= '</g></svg>';
|
||||
}
|
||||
}
|
||||
|
||||
return $svg;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,484 @@
|
|||
<?php
|
||||
|
||||
class MYANMAR
|
||||
{
|
||||
/* FROM hb-ot-shape-complex-indic-private.hh */
|
||||
|
||||
// indic_category
|
||||
const OT_X = 0;
|
||||
const OT_C = 1;
|
||||
const OT_V = 2;
|
||||
const OT_N = 3;
|
||||
const OT_H = 4;
|
||||
const OT_ZWNJ = 5;
|
||||
const OT_ZWJ = 6;
|
||||
const OT_M = 7; /* Matra or Dependent Vowel */
|
||||
const OT_SM = 8;
|
||||
const OT_VD = 9;
|
||||
const OT_A = 10;
|
||||
const OT_NBSP = 11;
|
||||
const OT_DOTTEDCIRCLE = 12; /* Not in the spec, but special in Uniscribe. /Very very/ special! */
|
||||
const OT_RS = 13; /* Register Shifter, used in Khmer OT spec */
|
||||
const OT_Coeng = 14;
|
||||
const OT_Repha = 15;
|
||||
const OT_Ra = 16; /* Not explicitly listed in the OT spec, but used in the grammar. */
|
||||
const OT_CM = 17;
|
||||
|
||||
/* FROM hb-ot-shape-complex-myanmar.hh */
|
||||
|
||||
// myanmar_category
|
||||
const OT_DB = 3; // same as INDIC::OT_N; /* Dot below */
|
||||
const OT_GB = 12; // same as INDIC::OT_DOTTEDCIRCLE;
|
||||
const OT_As = 18; /* Asat */
|
||||
const OT_D = 19; /* Digits except zero */
|
||||
const OT_D0 = 20; /* Digit zero */
|
||||
const OT_MH = 21; /* Various consonant medial types */
|
||||
const OT_MR = 22; /* Various consonant medial types */
|
||||
const OT_MW = 23; /* Various consonant medial types */
|
||||
const OT_MY = 24; /* Various consonant medial types */
|
||||
const OT_PT = 25; /* Pwo and other tones */
|
||||
|
||||
const OT_VAbv = 26;
|
||||
const OT_VBlw = 27;
|
||||
const OT_VPre = 28;
|
||||
const OT_VPst = 29;
|
||||
const OT_VS = 30; /* Variation selectors */
|
||||
|
||||
// Based on myanmar_category used to make string to find syllables
|
||||
// OT_ to string character (using e.g. OT_C from MYANMAR) hb-ot-shape-complex-myanmar-private.hh
|
||||
public static $myanmar_category_char = array(
|
||||
'x',
|
||||
'C',
|
||||
'V',
|
||||
'N',
|
||||
'H',
|
||||
'Z',
|
||||
'J',
|
||||
'x',
|
||||
'S',
|
||||
'x',
|
||||
'A',
|
||||
'x',
|
||||
'D',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'R',
|
||||
'x',
|
||||
'a', /* As Asat */
|
||||
'd', /* Digits except zero */
|
||||
'o', /* Digit zero */
|
||||
'k', /* Medial types */
|
||||
'l', /* Medial types */
|
||||
'm', /* Medial types */
|
||||
'n', /* Medial types */
|
||||
'p', /* Pwo and other tones */
|
||||
'v', /* Vowel aboVe */
|
||||
'b', /* Vowel Below */
|
||||
'e', /* Vowel prE */
|
||||
't', /* Vowel posT */
|
||||
's', /* variation Selector */
|
||||
);
|
||||
|
||||
/* Visual positions in a syllable from left to right. */
|
||||
/* FROM hb-ot-shape-complex-myanmar-private.hh */
|
||||
|
||||
// myanmar_position
|
||||
const POS_START = 0;
|
||||
|
||||
const POS_RA_TO_BECOME_REPH = 1;
|
||||
const POS_PRE_M = 2;
|
||||
const POS_PRE_C = 3;
|
||||
|
||||
const POS_BASE_C = 4;
|
||||
const POS_AFTER_MAIN = 5;
|
||||
|
||||
const POS_ABOVE_C = 6;
|
||||
|
||||
const POS_BEFORE_SUB = 7;
|
||||
const POS_BELOW_C = 8;
|
||||
const POS_AFTER_SUB = 9;
|
||||
|
||||
const POS_BEFORE_POST = 10;
|
||||
const POS_POST_C = 11;
|
||||
const POS_AFTER_POST = 12;
|
||||
|
||||
const POS_FINAL_C = 13;
|
||||
const POS_SMVD = 14;
|
||||
|
||||
const POS_END = 15;
|
||||
|
||||
public static function set_myanmar_properties(&$info)
|
||||
{
|
||||
$u = $info['uni'];
|
||||
$type = self::myanmar_get_categories($u);
|
||||
$cat = ($type & 0x7F);
|
||||
$pos = ($type >> 8);
|
||||
/*
|
||||
* Re-assign category
|
||||
* http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm#analyze
|
||||
*/
|
||||
if (self::in_range($u, 0xFE00, 0xFE0F))
|
||||
$cat = self::OT_VS;
|
||||
else if ($u == 0x200C)
|
||||
$cat = self::OT_ZWNJ;
|
||||
else if ($u == 0x200D)
|
||||
$cat = self::OT_ZWJ;
|
||||
|
||||
switch ($u) {
|
||||
case 0x002D: case 0x00A0: case 0x00D7: case 0x2012:
|
||||
case 0x2013: case 0x2014: case 0x2015: case 0x2022:
|
||||
case 0x25CC: case 0x25FB: case 0x25FC: case 0x25FD:
|
||||
case 0x25FE:
|
||||
$cat = self::OT_GB;
|
||||
break;
|
||||
|
||||
case 0x1004: case 0x101B: case 0x105A:
|
||||
$cat = self::OT_Ra;
|
||||
break;
|
||||
|
||||
case 0x1032: case 0x1036:
|
||||
$cat = self::OT_A;
|
||||
break;
|
||||
|
||||
case 0x103A:
|
||||
$cat = self::OT_As;
|
||||
break;
|
||||
|
||||
case 0x1041: case 0x1042: case 0x1043: case 0x1044:
|
||||
case 0x1045: case 0x1046: case 0x1047: case 0x1048:
|
||||
case 0x1049: case 0x1090: case 0x1091: case 0x1092:
|
||||
case 0x1093: case 0x1094: case 0x1095: case 0x1096:
|
||||
case 0x1097: case 0x1098: case 0x1099:
|
||||
$cat = self::OT_D;
|
||||
break;
|
||||
|
||||
case 0x1040:
|
||||
$cat = self::OT_D; /* XXX The spec says D0, but Uniscribe doesn't seem to do. */
|
||||
break;
|
||||
|
||||
case 0x103E: case 0x1060:
|
||||
$cat = self::OT_MH;
|
||||
break;
|
||||
|
||||
case 0x103C:
|
||||
$cat = self::OT_MR;
|
||||
break;
|
||||
|
||||
case 0x103D: case 0x1082:
|
||||
$cat = self::OT_MW;
|
||||
break;
|
||||
|
||||
case 0x103B: case 0x105E: case 0x105F:
|
||||
$cat = self::OT_MY;
|
||||
break;
|
||||
|
||||
case 0x1063: case 0x1064: case 0x1069: case 0x106A:
|
||||
case 0x106B: case 0x106C: case 0x106D: case 0xAA7B:
|
||||
$cat = self::OT_PT;
|
||||
break;
|
||||
|
||||
case 0x1038: case 0x1087: case 0x1088: case 0x1089:
|
||||
case 0x108A: case 0x108B: case 0x108C: case 0x108D:
|
||||
case 0x108F: case 0x109A: case 0x109B: case 0x109C:
|
||||
$cat = self::OT_SM;
|
||||
break;
|
||||
}
|
||||
|
||||
if ($cat == self::OT_M) {
|
||||
switch ($pos) {
|
||||
case self::POS_PRE_C:
|
||||
$cat = self::OT_VPre;
|
||||
$pos = self::POS_PRE_M;
|
||||
break;
|
||||
case self::POS_ABOVE_C: $cat = self::OT_VAbv;
|
||||
break;
|
||||
case self::POS_BELOW_C: $cat = self::OT_VBlw;
|
||||
break;
|
||||
case self::POS_POST_C: $cat = self::OT_VPst;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$info['myanmar_category'] = $cat;
|
||||
$info['myanmar_position'] = $pos;
|
||||
}
|
||||
|
||||
// syllable_type
|
||||
const CONSONANT_SYLLABLE = 0;
|
||||
const BROKEN_CLUSTER = 3;
|
||||
const NON_MYANMAR_CLUSTER = 4;
|
||||
|
||||
public static function set_syllables(&$o, $s, &$broken_syllables)
|
||||
{
|
||||
$ptr = 0;
|
||||
$syllable_serial = 1;
|
||||
$broken_syllables = false;
|
||||
|
||||
while ($ptr < strlen($s)) {
|
||||
$match = '';
|
||||
$syllable_length = 1;
|
||||
$syllable_type = self::NON_MYANMAR_CLUSTER;
|
||||
// CONSONANT_SYLLABLE Consonant syllable
|
||||
// From OT spec:
|
||||
if (preg_match('/^(RaH)?([C|R]|V|d|D)[s]?(H([C|R|V])[s]?)*(H|[a]*[n]?[l]?((m[k]?|k)[a]?)?[e]*[v]*[b]*[A]*(N[a]?)?(t[k]?[a]*[v]*[A]*(N[a]?)?)*(p[A]*(N[a]?)?)*S*[J|Z]?)/', substr($s, $ptr), $ma)) {
|
||||
$syllable_length = strlen($ma[0]);
|
||||
$syllable_type = self::CONSONANT_SYLLABLE;
|
||||
}
|
||||
|
||||
// BROKEN_CLUSTER syllable
|
||||
else if (preg_match('/^(RaH)?s?(H|[a]*[n]?[l]?((m[k]?|k)[a]?)?[e]*[v]*[b]*[A]*(N[a]?)?(t[k]?[a]*[v]*[A]*(N[a]?)?)*(p[A]*(N[a]?)?)*S*[J|Z]?)/', substr($s, $ptr), $ma)) {
|
||||
if (strlen($ma[0])) { // May match blank
|
||||
$syllable_length = strlen($ma[0]);
|
||||
$syllable_type = self::BROKEN_CLUSTER;
|
||||
$broken_syllables = true;
|
||||
}
|
||||
}
|
||||
for ($i = $ptr; $i < $ptr + $syllable_length; $i++) {
|
||||
$o[$i]['syllable'] = ($syllable_serial << 4) | $syllable_type;
|
||||
}
|
||||
$ptr += $syllable_length;
|
||||
$syllable_serial++;
|
||||
if ($syllable_serial == 16)
|
||||
$syllable_serial = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public static function reordering(&$info, $GSUBdata, $broken_syllables, $dottedcircle)
|
||||
{
|
||||
if ($broken_syllables && $dottedcircle) {
|
||||
self::insert_dotted_circles($info, $dottedcircle);
|
||||
}
|
||||
$count = count($info);
|
||||
if (!$count)
|
||||
return;
|
||||
$last = 0;
|
||||
$last_syllable = $info[0]['syllable'];
|
||||
for ($i = 1; $i < $count; $i++) {
|
||||
if ($last_syllable != $info[$i]['syllable']) {
|
||||
self::reordering_syllable($info, $GSUBdata, $last, $i);
|
||||
$last = $i;
|
||||
$last_syllable = $info[$last]['syllable'];
|
||||
}
|
||||
}
|
||||
self::reordering_syllable($info, $GSUBdata, $last, $count);
|
||||
}
|
||||
|
||||
public static function insert_dotted_circles(&$info, $dottedcircle)
|
||||
{
|
||||
$idx = 0;
|
||||
$last_syllable = 0;
|
||||
while ($idx < count($info)) {
|
||||
$syllable = $info[$idx]['syllable'];
|
||||
$syllable_type = ($syllable & 0x0F);
|
||||
if ($last_syllable != $syllable && $syllable_type == self::BROKEN_CLUSTER) {
|
||||
$last_syllable = $syllable;
|
||||
$dottedcircle[0]['syllable'] = $info[$idx]['syllable'];
|
||||
array_splice($info, $idx, 0, $dottedcircle);
|
||||
} else
|
||||
$idx++;
|
||||
}
|
||||
// In case of final bloken cluster...
|
||||
$syllable = $info[$idx]['syllable'];
|
||||
$syllable_type = ($syllable & 0x0F);
|
||||
if ($last_syllable != $syllable && $syllable_type == self::BROKEN_CLUSTER) {
|
||||
$dottedcircle[0]['syllable'] = $info[$idx]['syllable'];
|
||||
array_splice($info, $idx, 0, $dottedcircle);
|
||||
}
|
||||
}
|
||||
|
||||
/* Rules from:
|
||||
* https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx */
|
||||
|
||||
public static function reordering_syllable(&$info, $GSUBdata, $start, $end)
|
||||
{
|
||||
/* vowel_syllable: We made the vowels look like consonants. So uses the consonant logic! */
|
||||
/* broken_cluster: We already inserted dotted-circles, so just call the standalone_cluster. */
|
||||
|
||||
$syllable_type = ($info[$start]['syllable'] & 0x0F);
|
||||
if ($syllable_type == self::NON_MYANMAR_CLUSTER) {
|
||||
return;
|
||||
}
|
||||
if ($syllable_type == self::BROKEN_CLUSTER) {
|
||||
//if ($uniscribe_bug_compatible) {
|
||||
/* For dotted-circle, this is what Uniscribe does:
|
||||
* If dotted-circle is the last glyph, it just does nothing.
|
||||
* i.e. It doesn't form Reph. */
|
||||
if ($info[$end - 1]['myanmar_category'] == self::OT_DOTTEDCIRCLE) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$base = $end;
|
||||
$has_reph = false;
|
||||
$limit = $start;
|
||||
|
||||
if (($start + 3 <= $end) &&
|
||||
$info[$start]['myanmar_category'] == self::OT_Ra &&
|
||||
$info[$start + 1]['myanmar_category'] == self::OT_As &&
|
||||
$info[$start + 2]['myanmar_category'] == self::OT_H) {
|
||||
$limit += 3;
|
||||
$base = $start;
|
||||
$has_reph = true;
|
||||
}
|
||||
|
||||
if (!$has_reph)
|
||||
$base = $limit;
|
||||
|
||||
for ($i = $limit; $i < $end; $i++) {
|
||||
if (self::is_consonant($info[$i])) {
|
||||
$base = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Reorder! */
|
||||
$i = $start;
|
||||
for (; $i < $start + ($has_reph ? 3 : 0); $i++)
|
||||
$info[$i]['myanmar_position'] = self::POS_AFTER_MAIN;
|
||||
for (; $i < $base; $i++)
|
||||
$info[$i]['myanmar_position'] = self::POS_PRE_C;
|
||||
if ($i < $end) {
|
||||
$info[$i]['myanmar_position'] = self::POS_BASE_C;
|
||||
$i++;
|
||||
}
|
||||
$pos = self::POS_AFTER_MAIN;
|
||||
/* The following loop may be ugly, but it implements all of
|
||||
* Myanmar reordering! */
|
||||
for (; $i < $end; $i++) {
|
||||
if ($info[$i]['myanmar_category'] == self::OT_MR) /* Pre-base reordering */ {
|
||||
$info[$i]['myanmar_position'] = self::POS_PRE_C;
|
||||
continue;
|
||||
}
|
||||
if ($info[$i]['myanmar_position'] < self::POS_BASE_C) /* Left matra */ {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($pos == self::POS_AFTER_MAIN && $info[$i]['myanmar_category'] == self::OT_VBlw) {
|
||||
$pos = self::POS_BELOW_C;
|
||||
$info[$i]['myanmar_position'] = $pos;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($pos == self::POS_BELOW_C && $info[$i]['myanmar_category'] == self::OT_A) {
|
||||
$info[$i]['myanmar_position'] = self::POS_BEFORE_SUB;
|
||||
continue;
|
||||
}
|
||||
if ($pos == self::POS_BELOW_C && $info[$i]['myanmar_category'] == self::OT_VBlw) {
|
||||
$info[$i]['myanmar_position'] = $pos;
|
||||
continue;
|
||||
}
|
||||
if ($pos == self::POS_BELOW_C && $info[$i]['myanmar_category'] != self::OT_A) {
|
||||
$pos = self::POS_AFTER_SUB;
|
||||
$info[$i]['myanmar_position'] = $pos;
|
||||
continue;
|
||||
}
|
||||
$info[$i]['myanmar_position'] = $pos;
|
||||
}
|
||||
|
||||
|
||||
/* Sit tight, rock 'n roll! */
|
||||
self::bubble_sort($info, $start, $end - $start);
|
||||
}
|
||||
|
||||
public static function is_one_of($info, $flags)
|
||||
{
|
||||
if (isset($info['is_ligature']) && $info['is_ligature'])
|
||||
return false; /* If it ligated, all bets are off. */
|
||||
return !!(self::FLAG($info['myanmar_category']) & $flags);
|
||||
}
|
||||
|
||||
/* Vowels and placeholders treated as if they were consonants. */
|
||||
|
||||
public static function is_consonant($info)
|
||||
{
|
||||
return self::is_one_of($info, (self::FLAG(self::OT_C) | self::FLAG(self::OT_CM) | self::FLAG(self::OT_Ra) | self::FLAG(self::OT_V) | self::FLAG(self::OT_NBSP) | self::FLAG(self::OT_GB)));
|
||||
}
|
||||
|
||||
// From hb-private.hh
|
||||
public static function in_range($u, $lo, $hi)
|
||||
{
|
||||
if ((($lo ^ $hi) & $lo) == 0 && (($lo ^ $hi) & $hi) == ($lo ^ $hi) && (($lo ^ $hi) & (($lo ^ $hi) + 1)) == 0)
|
||||
return ($u & ~($lo ^ $hi)) == $lo;
|
||||
else
|
||||
return $lo <= $u && $u <= $hi;
|
||||
}
|
||||
|
||||
// From hb-private.hh
|
||||
public static function FLAG($x)
|
||||
{
|
||||
return (1 << ($x));
|
||||
}
|
||||
|
||||
public static function FLAG_RANGE($x, $y)
|
||||
{
|
||||
self::FLAG(y + 1) - self::FLAG(x);
|
||||
}
|
||||
|
||||
// BELOW from hb-ot-shape-complex-indic.cc
|
||||
// see INDIC for details
|
||||
|
||||
public static $myanmar_table = array(
|
||||
/* Myanmar (1000..109F) */
|
||||
|
||||
/* 1000 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1008 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1010 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1018 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1020 */ 3841, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
|
||||
/* 1028 */ 3842, 3842, 3842, 2823, 2823, 1543, 1543, 2055,
|
||||
/* 1030 */ 2055, 775, 1543, 1543, 1543, 1543, 3848, 3843,
|
||||
/* 1038 */ 3848, 3844, 1540, 3857, 3857, 3857, 3857, 3841,
|
||||
/* 1040 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1048 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1050 */ 3841, 3841, 3842, 3842, 3842, 3842, 2823, 2823,
|
||||
/* 1058 */ 2055, 2055, 3841, 3841, 3841, 3841, 3857, 3857,
|
||||
/* 1060 */ 3857, 3841, 2823, 3843, 3843, 3841, 3841, 2823,
|
||||
/* 1068 */ 2823, 3843, 3843, 3843, 3843, 3843, 3841, 3841,
|
||||
/* 1070 */ 3841, 1543, 1543, 1543, 1543, 3841, 3841, 3841,
|
||||
/* 1078 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1080 */ 3841, 3841, 3857, 2823, 775, 1543, 1543, 3843,
|
||||
/* 1088 */ 3843, 3843, 3843, 3843, 3843, 3843, 3841, 3843,
|
||||
/* 1090 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1098 */ 3840, 3840, 3843, 3843, 2823, 1543, 3840, 3840,
|
||||
/* Myanmar Extended-A (AA60..AA7F) */
|
||||
|
||||
/* AA60 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA68 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA70 */ 3840, 3841, 3841, 3841, 3840, 3840, 3840, 3840,
|
||||
/* AA78 */ 3840, 3840, 3841, 3843, 3840, 3840, 3840, 3840,
|
||||
);
|
||||
|
||||
// from "hb-ot-shape-complex-indic-table.cc"
|
||||
public static function myanmar_get_categories($u)
|
||||
{
|
||||
if (0x1000 <= $u && $u <= 0x109F)
|
||||
return self::$myanmar_table[$u - 0x1000 + 0]; // offset 0 for Most "myanmar"
|
||||
if (0xAA60 <= $u && $u <= 0xAA7F)
|
||||
return self::$myanmar_table[$u - 0xAA60 + 160]; // offset for extensions
|
||||
if ($u == 0x00A0)
|
||||
return 3851; // (ISC_CP | (IMC_x << 8))
|
||||
if ($u == 0x25CC)
|
||||
return 3851; // (ISC_CP | (IMC_x << 8))
|
||||
return 3840; // (ISC_x | (IMC_x << 8))
|
||||
}
|
||||
|
||||
public static function bubble_sort(&$arr, $start, $len)
|
||||
{
|
||||
if ($len < 2) {
|
||||
return;
|
||||
}
|
||||
$k = $start + $len - 2;
|
||||
while ($k >= $start) {
|
||||
for ($j = $start; $j <= $k; $j++) {
|
||||
if ($arr[$j]['myanmar_position'] > $arr[$j + 1]['myanmar_position']) {
|
||||
$t = $arr[$j];
|
||||
$arr[$j] = $arr[$j + 1];
|
||||
$arr[$j + 1] = $t;
|
||||
}
|
||||
}
|
||||
$k--;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,383 @@
|
|||
<?php
|
||||
|
||||
class SEA
|
||||
{
|
||||
// South East Asian shaper
|
||||
// sea_category
|
||||
const OT_X = 0;
|
||||
|
||||
const OT_C = 1;
|
||||
|
||||
const OT_IV = 2; # Independent Vowel
|
||||
|
||||
const OT_T = 3; # Tone Marks
|
||||
|
||||
const OT_H = 4; # Halant
|
||||
|
||||
const OT_A = 10; # Anusvara
|
||||
|
||||
const OT_GB = 12; # Generic Base (OT_DOTTEDCIRCLE in Indic)
|
||||
|
||||
const OT_CM = 17; # Consonant Medial
|
||||
|
||||
const OT_MR = 22; # Medial Ra
|
||||
|
||||
const OT_VAbv = 26;
|
||||
|
||||
const OT_VBlw = 27;
|
||||
|
||||
const OT_VPre = 28;
|
||||
|
||||
const OT_VPst = 29;
|
||||
|
||||
// ? From Indic categories
|
||||
const OT_ZWNJ = 5;
|
||||
|
||||
const OT_ZWJ = 6;
|
||||
|
||||
const OT_M = 7;
|
||||
|
||||
const OT_SM = 8;
|
||||
|
||||
const OT_VD = 9;
|
||||
|
||||
const OT_NBSP = 11;
|
||||
|
||||
const OT_RS = 13;
|
||||
|
||||
const OT_Coeng = 14;
|
||||
|
||||
const OT_Repha = 15;
|
||||
|
||||
const OT_Ra = 16;
|
||||
|
||||
// Based on sea_category used to make string to find syllables
|
||||
// OT_ to string character (using e.g. OT_C from INDIC) hb-ot-shape-complex-sea-private.hh
|
||||
public static $sea_category_char = array(
|
||||
'x',
|
||||
'C',
|
||||
'V',
|
||||
'T',
|
||||
'H',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'A',
|
||||
'x',
|
||||
'G',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'M',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'R',
|
||||
'x',
|
||||
'x',
|
||||
'x',
|
||||
'a',
|
||||
'b',
|
||||
'p',
|
||||
't',
|
||||
);
|
||||
|
||||
/* Visual positions in a syllable from left to right. */
|
||||
// sea_position
|
||||
const POS_START = 0;
|
||||
|
||||
const POS_RA_TO_BECOME_REPH = 1;
|
||||
|
||||
const POS_PRE_M = 2;
|
||||
|
||||
const POS_PRE_C = 3;
|
||||
|
||||
const POS_BASE_C = 4;
|
||||
|
||||
const POS_AFTER_MAIN = 5;
|
||||
|
||||
const POS_ABOVE_C = 6;
|
||||
|
||||
const POS_BEFORE_SUB = 7;
|
||||
|
||||
const POS_BELOW_C = 8;
|
||||
|
||||
const POS_AFTER_SUB = 9;
|
||||
|
||||
const POS_BEFORE_POST = 10;
|
||||
|
||||
const POS_POST_C = 11;
|
||||
|
||||
const POS_AFTER_POST = 12;
|
||||
|
||||
const POS_FINAL_C = 13;
|
||||
|
||||
const POS_SMVD = 14;
|
||||
|
||||
const POS_END = 15;
|
||||
|
||||
public static function set_sea_properties(&$info, $scriptblock)
|
||||
{
|
||||
$u = $info['uni'];
|
||||
$type = self::sea_get_categories($u);
|
||||
$cat = ($type & 0x7F);
|
||||
$pos = ($type >> 8);
|
||||
|
||||
/*
|
||||
* Re-assign category
|
||||
*/
|
||||
// Medial Ra
|
||||
if ($u == 0x1A55 || $u == 0xAA34) {
|
||||
$cat = self::OT_MR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Re-assign position.
|
||||
*/
|
||||
if ($cat == self::OT_M) { // definitely "OT_M" in HarfBuzz - although this does not seem to have been defined ? should be OT_MR
|
||||
switch ($pos) {
|
||||
case self::POS_PRE_C: $cat = self::OT_VPre;
|
||||
break;
|
||||
case self::POS_ABOVE_C: $cat = self::OT_VAbv;
|
||||
break;
|
||||
case self::POS_BELOW_C: $cat = self::OT_VBlw;
|
||||
break;
|
||||
case self::POS_POST_C: $cat = self::OT_VPst;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$info['sea_category'] = $cat;
|
||||
$info['sea_position'] = $pos;
|
||||
}
|
||||
|
||||
// syllable_type
|
||||
const CONSONANT_SYLLABLE = 0;
|
||||
|
||||
const BROKEN_CLUSTER = 1;
|
||||
|
||||
const NON_SEA_CLUSTER = 2;
|
||||
|
||||
public static function set_syllables(&$o, $s, &$broken_syllables)
|
||||
{
|
||||
$ptr = 0;
|
||||
$syllable_serial = 1;
|
||||
$broken_syllables = false;
|
||||
while ($ptr < strlen($s)) {
|
||||
$match = '';
|
||||
$syllable_length = 1;
|
||||
$syllable_type = self::NON_SEA_CLUSTER;
|
||||
|
||||
// CONSONANT_SYLLABLE Consonant syllable
|
||||
if (preg_match('/^(C|V|G)(p|a|b|t|HC|M|R|T|A)*/', substr($s, $ptr), $ma)) {
|
||||
$syllable_length = strlen($ma[0]);
|
||||
$syllable_type = self::CONSONANT_SYLLABLE;
|
||||
}
|
||||
// BROKEN_CLUSTER syllable
|
||||
else if (preg_match('/^(p|a|b|t|HC|M|R|T|A)+/', substr($s, $ptr), $ma)) {
|
||||
$syllable_length = strlen($ma[0]);
|
||||
$syllable_type = self::BROKEN_CLUSTER;
|
||||
$broken_syllables = true;
|
||||
}
|
||||
|
||||
for ($i = $ptr; $i < $ptr + $syllable_length; $i++) {
|
||||
$o[$i]['syllable'] = ($syllable_serial << 4) | $syllable_type;
|
||||
}
|
||||
$ptr += $syllable_length;
|
||||
$syllable_serial++;
|
||||
if ($syllable_serial == 16)
|
||||
$syllable_serial = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public static function initial_reordering(&$info, $GSUBdata, $broken_syllables, $scriptblock, $dottedcircle)
|
||||
{
|
||||
|
||||
if ($broken_syllables && $dottedcircle) {
|
||||
self::insert_dotted_circles($info, $dottedcircle);
|
||||
}
|
||||
|
||||
$count = count($info);
|
||||
if (!$count)
|
||||
return;
|
||||
$last = 0;
|
||||
$last_syllable = $info[0]['syllable'];
|
||||
for ($i = 1; $i < $count; $i++) {
|
||||
if ($last_syllable != $info[$i]['syllable']) {
|
||||
self::initial_reordering_syllable($info, $GSUBdata, $scriptblock, $last, $i);
|
||||
$last = $i;
|
||||
$last_syllable = $info[$last]['syllable'];
|
||||
}
|
||||
}
|
||||
self::initial_reordering_syllable($info, $GSUBdata, $scriptblock, $last, $count);
|
||||
}
|
||||
|
||||
public static function insert_dotted_circles(&$info, $dottedcircle)
|
||||
{
|
||||
$idx = 0;
|
||||
$last_syllable = 0;
|
||||
while ($idx < count($info)) {
|
||||
$syllable = $info[$idx]['syllable'];
|
||||
$syllable_type = ($syllable & 0x0F);
|
||||
if ($last_syllable != $syllable && $syllable_type == self::BROKEN_CLUSTER) {
|
||||
$last_syllable = $syllable;
|
||||
$dottedcircle[0]['syllable'] = $info[$idx]['syllable'];
|
||||
array_splice($info, $idx, 0, $dottedcircle);
|
||||
} else
|
||||
$idx++;
|
||||
}
|
||||
}
|
||||
|
||||
public static function initial_reordering_syllable(&$info, $GSUBdata, $scriptblock, $start, $end)
|
||||
{
|
||||
/* broken_cluster: We already inserted dotted-circles, so just call the standalone_cluster. */
|
||||
|
||||
$syllable_type = ($info[$start]['syllable'] & 0x0F);
|
||||
if ($syllable_type == self::NON_SEA_CLUSTER) {
|
||||
return;
|
||||
}
|
||||
if ($syllable_type == self::BROKEN_CLUSTER) {
|
||||
/* For dotted-circle, this is what Uniscribe does:
|
||||
* If dotted-circle is the last glyph, it just does nothing. */
|
||||
if ($info[$end - 1]['sea_category'] == self::OT_GB) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$base = $start;
|
||||
$i = $start;
|
||||
for (; $i < $base; $i++)
|
||||
$info[$i]['sea_position'] = self::POS_PRE_C;
|
||||
if ($i < $end) {
|
||||
$info[$i]['sea_position'] = self::POS_BASE_C;
|
||||
$i++;
|
||||
}
|
||||
for (; $i < $end; $i++) {
|
||||
if (isset($info[$i]['sea_category']) && $info[$i]['sea_category'] == self::OT_MR) { /* Pre-base reordering */
|
||||
$info[$i]['sea_position'] = self::POS_PRE_C;
|
||||
continue;
|
||||
}
|
||||
if (isset($info[$i]['sea_category']) && $info[$i]['sea_category'] == self::OT_VPre) { /* Left matra */
|
||||
$info[$i]['sea_position'] = self::POS_PRE_M;
|
||||
continue;
|
||||
}
|
||||
$info[$i]['sea_position'] = self::POS_AFTER_MAIN;
|
||||
}
|
||||
|
||||
/* Sit tight, rock 'n roll! */
|
||||
self::bubble_sort($info, $start, $end - $start);
|
||||
}
|
||||
|
||||
public static function final_reordering(&$info, $GSUBdata, $scriptblock)
|
||||
{
|
||||
$count = count($info);
|
||||
if (!$count)
|
||||
return;
|
||||
$last = 0;
|
||||
$last_syllable = $info[0]['syllable'];
|
||||
for ($i = 1; $i < $count; $i++) {
|
||||
if ($last_syllable != $info[$i]['syllable']) {
|
||||
self::final_reordering_syllable($info, $GSUBdata, $scriptblock, $last, $i);
|
||||
$last = $i;
|
||||
$last_syllable = $info[$last]['syllable'];
|
||||
}
|
||||
}
|
||||
self::final_reordering_syllable($info, $GSUBdata, $scriptblock, $last, $count);
|
||||
}
|
||||
|
||||
public static function final_reordering_syllable(&$info, $GSUBdata, $scriptblock, $start, $end)
|
||||
{
|
||||
/*
|
||||
* Nothing to do here at present!
|
||||
*/
|
||||
}
|
||||
|
||||
public static $sea_table = array(
|
||||
/* New Tai Lue (1980..19DF) */
|
||||
|
||||
/* 1980 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1988 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1990 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1998 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 19A0 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 19A8 */ 3841, 3841, 3841, 3841, 3840, 3840, 3840, 3840,
|
||||
/* 19B0 */ 2823, 2823, 2823, 2823, 2823, 775, 775, 775,
|
||||
/* 19B8 */ 2823, 2823, 775, 2823, 2823, 2823, 2823, 2823,
|
||||
/* 19C0 */ 2823, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
|
||||
/* 19C8 */ 3843, 3843, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 19D0 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 19D8 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* Tai Tham (1A20..1AAF) */
|
||||
|
||||
/* 1A20 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1A28 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1A30 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1A38 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1A40 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* 1A48 */ 3841, 3841, 3841, 3841, 3841, 3842, 3842, 3842,
|
||||
/* 1A50 */ 3842, 3842, 3842, 3841, 3841, 3857, 3857, 3857,
|
||||
/* 1A58 */ 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3840,
|
||||
/* 1A60 */ 3844, 2823, 1543, 2823, 2823, 1543, 1543, 1543,
|
||||
/* 1A68 */ 1543, 2055, 2055, 1543, 2055, 2823, 775, 775,
|
||||
/* 1A70 */ 775, 775, 775, 1543, 1543, 3843, 3843, 3843,
|
||||
/* 1A78 */ 3843, 3843, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1A80 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1A88 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1A90 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1A98 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1AA0 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* 1AA8 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* Cham (AA00..AA5F) */
|
||||
|
||||
/* AA00 */ 3842, 3842, 3842, 3842, 3842, 3842, 3841, 3841,
|
||||
/* AA08 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA10 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA18 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA20 */ 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841,
|
||||
/* AA28 */ 3841, 1543, 1543, 1543, 1543, 2055, 1543, 775,
|
||||
/* AA30 */ 775, 1543, 2055, 3857, 3857, 3857, 3857, 3840,
|
||||
/* AA38 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* AA40 */ 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
|
||||
/* AA48 */ 3857, 3857, 3857, 3857, 3857, 3857, 3840, 3840,
|
||||
/* AA50 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
/* AA58 */ 3840, 3840, 3840, 3840, 3840, 3840, 3840, 3840,
|
||||
);
|
||||
|
||||
public static function sea_get_categories($u)
|
||||
{
|
||||
if (0x1980 <= $u && $u <= 0x19DF)
|
||||
return self::$sea_table[$u - 0x1980]; // offset 0 for New Tai Lue
|
||||
if (0x1A20 <= $u && $u <= 0x1AAF)
|
||||
return self::$sea_table[$u - 0x1A20 + 96]; // offset for Tai Tham
|
||||
if (0xAA00 <= $u && $u <= 0xAA5F)
|
||||
return self::$sea_table[$u - 0xAA00 + 96 + 144]; // Cham
|
||||
if ($u == 0x00A0)
|
||||
return 3851; // (ISC_CP | (IMC_x << 8))
|
||||
if ($u == 0x25CC)
|
||||
return 3851; // (ISC_CP | (IMC_x << 8))
|
||||
return 3840; // (ISC_x | (IMC_x << 8))
|
||||
}
|
||||
|
||||
public static function bubble_sort(&$arr, $start, $len)
|
||||
{
|
||||
if ($len < 2) {
|
||||
return;
|
||||
}
|
||||
$k = $start + $len - 2;
|
||||
while ($k >= $start) {
|
||||
for ($j = $start; $j <= $k; $j++) {
|
||||
if ($arr[$j]['sea_position'] > $arr[$j + 1]['sea_position']) {
|
||||
$t = $arr[$j];
|
||||
$arr[$j] = $arr[$j + 1];
|
||||
$arr[$j + 1] = $t;
|
||||
}
|
||||
}
|
||||
$k--;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,778 @@
|
|||
<?php
|
||||
|
||||
class tocontents
|
||||
{
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
var $_toc;
|
||||
|
||||
var $TOCmark;
|
||||
|
||||
var $TOCoutdent; // mPDF 5.6.31
|
||||
|
||||
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 $TOC_resetpagenum; // mPDF 6
|
||||
|
||||
var $TOC_pagenumstyle; // mPDF 6
|
||||
|
||||
var $TOC_suppress; // mPDF 6
|
||||
|
||||
var $m_TOC;
|
||||
|
||||
public function __construct(mPDF $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 = '', $tocoutdent = '', $toc_resetpagenum = '', $toc_pagenumstyle = '', $toc_suppress = '')
|
||||
{ // mPDF 5.6.19 // mPDF 6
|
||||
if (strtoupper($toc_id) == 'ALL') {
|
||||
$toc_id = '_mpdf_all';
|
||||
} else if (!$toc_id) {
|
||||
$toc_id = 0;
|
||||
} else {
|
||||
$toc_id = strtolower($toc_id);
|
||||
}
|
||||
|
||||
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]['TOCoutdent'] = $tocoutdent;
|
||||
$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]['TOC_resetpagenum'] = $toc_resetpagenum; // mPDF 6
|
||||
$this->m_TOC[$toc_id]['TOC_pagenumstyle'] = $toc_pagenumstyle; // mPDF 6
|
||||
$this->m_TOC[$toc_id]['TOC_suppress'] = $toc_suppress; // mPDF 6
|
||||
$this->m_TOC[$toc_id]['TOCsheetsize'] = $toc_sheetsize;
|
||||
} else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCoutdent = $tocoutdent;
|
||||
$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->TOC_resetpagenum = $toc_resetpagenum; // mPDF 6
|
||||
$this->TOC_pagenumstyle = $toc_pagenumstyle; // mPDF 6
|
||||
$this->TOC_suppress = $toc_suppress; // mPDF 6
|
||||
$this->TOCsheetsize = $toc_sheetsize;
|
||||
}
|
||||
}
|
||||
|
||||
// Initiate, and Mark a place for the Table of Contents to be inserted
|
||||
function TOC($tocfont = '', $tocfontsize = 0, $tocindent = 0, $resetpagenum = '', $pagenumstyle = '', $suppress = '', $toc_orientation = '', $TOCusePaging = true, $TOCuseLinking = false, $toc_id = 0, $tocoutdent = '', $toc_resetpagenum = '', $toc_pagenumstyle = '', $toc_suppress = '')
|
||||
{ // mPDF 5.6.19 // mPDF 6
|
||||
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 ($toc_id) {
|
||||
$this->m_TOC[$toc_id]['TOCmark'] = $this->mpdf->page;
|
||||
$this->m_TOC[$toc_id]['TOCoutdent'] = $tocoutdent;
|
||||
$this->m_TOC[$toc_id]['TOCorientation'] = $toc_orientation;
|
||||
$this->m_TOC[$toc_id]['TOCuseLinking'] = $TOCuseLinking;
|
||||
$this->m_TOC[$toc_id]['TOCusePaging'] = $TOCusePaging;
|
||||
$this->m_TOC[$toc_id]['TOC_resetpagenum'] = $toc_resetpagenum; // mPDF 6
|
||||
$this->m_TOC[$toc_id]['TOC_pagenumstyle'] = $toc_pagenumstyle; // mPDF 6
|
||||
$this->m_TOC[$toc_id]['TOC_suppress'] = $toc_suppress; // mPDF 6
|
||||
} else {
|
||||
$this->TOCmark = $this->mpdf->page;
|
||||
$this->TOCoutdent = $tocoutdent;
|
||||
$this->TOCorientation = $toc_orientation;
|
||||
$this->TOCuseLinking = $TOCuseLinking;
|
||||
$this->TOCusePaging = $TOCusePaging;
|
||||
$this->TOC_resetpagenum = $toc_resetpagenum; // mPDF 6
|
||||
$this->TOC_pagenumstyle = $toc_pagenumstyle; // mPDF 6
|
||||
$this->TOC_suppress = $toc_suppress; // mPDF 6
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
$tocoutdent = $this->TOCoutdent;
|
||||
$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_resetpagenum = $this->TOC_resetpagenum; // mPDF 6
|
||||
$toc_pagenumstyle = $this->TOC_pagenumstyle; // mPDF 6
|
||||
$toc_suppress = $this->TOC_suppress; // mPDF 6
|
||||
$toc_sheet_size = (isset($this->TOCsheetsize) ? $this->TOCsheetsize : '');
|
||||
} else {
|
||||
$arr = current($this->m_TOC);
|
||||
|
||||
$toc_id = key($this->m_TOC);
|
||||
$toc_page = $this->m_TOC[$toc_id]['TOCmark'];
|
||||
$tocoutdent = $this->m_TOC[$toc_id]['TOCoutdent'];
|
||||
$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_resetpagenum = $this->m_TOC[$toc_id]['TOC_resetpagenum']; // mPDF 6
|
||||
$toc_pagenumstyle = $this->m_TOC[$toc_id]['TOC_pagenumstyle']; // mPDF 6
|
||||
$toc_suppress = $this->m_TOC[$toc_id]['TOC_suppress']; // mPDF 6
|
||||
$toc_sheet_size = (isset($this->m_TOC[$toc_id]['TOCsheetsize']) ? $this->m_TOC[$toc_id]['TOCsheetsize'] : '');
|
||||
next($this->m_TOC);
|
||||
}
|
||||
|
||||
// mPDF 5.6.31
|
||||
if (!$toc_orientation) {
|
||||
$toc_orientation = $this->mpdf->DefOrientation;
|
||||
}
|
||||
|
||||
// mPDF 6 number style and suppress now picked up from section preceding ToC
|
||||
list($tp_pagenumstyle, $tp_suppress, $tp_reset) = $this->mpdf->docPageSettings($toc_page - 1);
|
||||
|
||||
if ($toc_resetpagenum)
|
||||
$tp_reset = $toc_resetpagenum; // mPDF 6
|
||||
if ($toc_pagenumstyle)
|
||||
$tp_pagenumstyle = $toc_pagenumstyle; // mPDF 6
|
||||
if ($toc_suppress || $toc_suppress === '0')
|
||||
$tp_suppress = $toc_suppress; // mPDF 6
|
||||
|
||||
$this->mpdf->AddPage($toc_orientation, '', $tp_reset, $tp_pagenumstyle, $tp_suppress, $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); // mPDF 6
|
||||
|
||||
|
||||
$this->mpdf->writingToC = true; // mPDF 5.6.38
|
||||
// mPDF 5.6.31
|
||||
$tocstart = count($this->mpdf->pages);
|
||||
if (isset($toc_preHTML) && $toc_preHTML) {
|
||||
$this->mpdf->WriteHTML($toc_preHTML);
|
||||
}
|
||||
|
||||
|
||||
// mPDF 5.6.19
|
||||
$html = '<div class="mpdf_toc" id="mpdf_toc_' . $toc_id . '">';
|
||||
foreach ($this->_toc as $t) {
|
||||
if ($t['toc_id'] === '_mpdf_all' || $t['toc_id'] === $toc_id) {
|
||||
$html .= '<div class="mpdf_toc_level_' . $t['l'] . '">';
|
||||
if ($TOCuseLinking) {
|
||||
$html .= '<a class="mpdf_toc_a" href="#__mpdfinternallink_' . $t['link'] . '">';
|
||||
}
|
||||
$html .= '<span class="mpdf_toc_t_level_' . $t['l'] . '">' . $t['t'] . '</span>';
|
||||
if ($TOCuseLinking) {
|
||||
$html .= '</a>';
|
||||
}
|
||||
if (!$tocoutdent) {
|
||||
$tocoutdent = '0';
|
||||
}
|
||||
if ($TOCusePaging) {
|
||||
$html .= ' <dottab outdent="' . $tocoutdent . '" /> ';
|
||||
if ($TOCuseLinking) {
|
||||
$html .= '<a class="mpdf_toc_a" href="#__mpdfinternallink_' . $t['link'] . '">';
|
||||
}
|
||||
$html .= '<span class="mpdf_toc_p_level_' . $t['l'] . '">' . $this->mpdf->docPageNum($t['p']) . '</span>';
|
||||
if ($TOCuseLinking) {
|
||||
$html .= '</a>';
|
||||
}
|
||||
}
|
||||
$html .= '</div>';
|
||||
}
|
||||
}
|
||||
$html .= '</div>';
|
||||
$this->mpdf->WriteHTML($html);
|
||||
|
||||
if (isset($toc_postHTML) && $toc_postHTML) {
|
||||
$this->mpdf->WriteHTML($toc_postHTML);
|
||||
}
|
||||
$this->mpdf->writingToC = false; // mPDF 5.6.38
|
||||
$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' . $this->mpdf->uniqstr . ')/', "\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['OUTDENT']) && $attr['OUTDENT']) {
|
||||
$tocoutdent = $attr['OUTDENT'];
|
||||
} else {
|
||||
$tocoutdent = '';
|
||||
} // mPDF 5.6.19
|
||||
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('', 0, 0, $resetpagenum, $pagenumstyle, $suppress, $toc_orientation, $paging, $links, $toc_id, $tocoutdent); // mPDF 5.6.19 5.6.31
|
||||
}
|
||||
|
||||
function openTagTOCPAGEBREAK($attr)
|
||||
{
|
||||
if (isset($attr['NAME']) && $attr['NAME']) {
|
||||
$toc_id = strtolower($attr['NAME']);
|
||||
} else {
|
||||
$toc_id = 0;
|
||||
}
|
||||
if ($toc_id) {
|
||||
if (isset($attr['OUTDENT']) && $attr['OUTDENT']) {
|
||||
$this->m_TOC[$toc_id]['TOCoutdent'] = $attr['OUTDENT'];
|
||||
} else {
|
||||
$this->m_TOC[$toc_id]['TOCoutdent'] = '';
|
||||
} // mPDF 5.6.19
|
||||
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-RESETPAGENUM']) && $attr['TOC-RESETPAGENUM']) {
|
||||
$this->m_TOC[$toc_id]['TOC_resetpagenum'] = $attr['TOC-RESETPAGENUM'];
|
||||
} else {
|
||||
$this->m_TOC[$toc_id]['TOC_resetpagenum'] = '';
|
||||
} // mPDF 6
|
||||
if (isset($attr['TOC-PAGENUMSTYLE']) && $attr['TOC-PAGENUMSTYLE']) {
|
||||
$this->m_TOC[$toc_id]['TOC_pagenumstyle'] = $attr['TOC-PAGENUMSTYLE'];
|
||||
} else {
|
||||
$this->m_TOC[$toc_id]['TOC_pagenumstyle'] = '';
|
||||
} // mPDF 6
|
||||
if (isset($attr['TOC-SUPPRESS']) && ($attr['TOC-SUPPRESS'] || $attr['TOC-SUPPRESS'] === '0')) {
|
||||
$this->m_TOC[$toc_id]['TOC_suppress'] = $attr['TOC-SUPPRESS'];
|
||||
} else {
|
||||
$this->m_TOC[$toc_id]['TOC_suppress'] = '';
|
||||
} // mPDF 6
|
||||
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['OUTDENT']) && $attr['OUTDENT']) {
|
||||
$this->TOCoutdent = $attr['OUTDENT'];
|
||||
} else {
|
||||
$this->TOCoutdent = '';
|
||||
} // mPDF 5.6.19
|
||||
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-RESETPAGENUM']) && $attr['TOC-RESETPAGENUM']) {
|
||||
$this->TOC_resetpagenum = $attr['TOC-RESETPAGENUM'];
|
||||
} else {
|
||||
$this->TOC_resetpagenum = '';
|
||||
} // mPDF 6
|
||||
if (isset($attr['TOC-PAGENUMSTYLE']) && $attr['TOC-PAGENUMSTYLE']) {
|
||||
$this->TOC_pagenumstyle = $attr['TOC-PAGENUMSTYLE'];
|
||||
} else {
|
||||
$this->TOC_pagenumstyle = '';
|
||||
} // mPDF 6
|
||||
if (isset($attr['TOC-SUPPRESS']) && ($attr['TOC-SUPPRESS'] || $attr['TOC-SUPPRESS'] === '0')) {
|
||||
$this->TOC_suppress = $attr['TOC-SUPPRESS'];
|
||||
} else {
|
||||
$this->TOC_suppress = '';
|
||||
} // mPDF 6
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,446 @@
|
|||
<?php
|
||||
|
||||
require_once __DIR__ . '/../MpdfException.php';
|
||||
require_once __DIR__ . '/ttfontsuni.php';
|
||||
|
||||
class TTFontFile_Analysis extends TTFontFile
|
||||
{
|
||||
|
||||
// Used to get font information from files in directory
|
||||
function extractCoreInfo($file, $TTCfontID = 0)
|
||||
{
|
||||
$this->filename = $file;
|
||||
$this->fh = fopen($file, 'rb');
|
||||
if (!$this->fh) {
|
||||
return ('ERROR - Can\'t open file ' . $file);
|
||||
}
|
||||
$this->_pos = 0;
|
||||
$this->charWidths = '';
|
||||
$this->glyphPos = array();
|
||||
$this->charToGlyph = array();
|
||||
$this->tables = array();
|
||||
$this->otables = array();
|
||||
$this->ascent = 0;
|
||||
$this->descent = 0;
|
||||
$this->numTTCFonts = 0;
|
||||
$this->TTCFonts = array();
|
||||
$this->version = $version = $this->read_ulong();
|
||||
$this->panose = array(); // mPDF 5.0
|
||||
|
||||
if ($version == 0x4F54544F) {
|
||||
throw new MpdfException('ERROR - NOT ADDED as Postscript outlines are not supported - ' . $file);
|
||||
}
|
||||
|
||||
if ($version == 0x74746366) {
|
||||
if ($TTCfontID > 0) {
|
||||
$this->version = $version = $this->read_ulong(); // TTC Header version now
|
||||
if (!in_array($version, array(0x00010000, 0x00020000))) {
|
||||
throw new MpdfException("ERROR - NOT ADDED as Error parsing TrueType Collection: version=" . $version . " - " . $file);
|
||||
}
|
||||
} else {
|
||||
throw new MpdfException("ERROR - Error parsing TrueType Collection - " . $file);
|
||||
}
|
||||
$this->numTTCFonts = $this->read_ulong();
|
||||
for ($i = 1; $i <= $this->numTTCFonts; $i++) {
|
||||
$this->TTCFonts[$i]['offset'] = $this->read_ulong();
|
||||
}
|
||||
$this->seek($this->TTCFonts[$TTCfontID]['offset']);
|
||||
$this->version = $version = $this->read_ulong(); // TTFont version again now
|
||||
$this->readTableDirectory(false);
|
||||
} else {
|
||||
if (!in_array($version, array(0x00010000, 0x74727565))) {
|
||||
throw new MpdfException("ERROR - NOT ADDED as Not a TrueType font: version=" . $version . " - " . $file);
|
||||
}
|
||||
$this->readTableDirectory(false);
|
||||
}
|
||||
|
||||
/* Included for testing...
|
||||
$cmap_offset = $this->seek_table("cmap");
|
||||
$this->skip(2);
|
||||
$cmapTableCount = $this->read_ushort();
|
||||
$unicode_cmap_offset = 0;
|
||||
for ($i=0;$i<$cmapTableCount;$i++) {
|
||||
$x[$i]['platformId'] = $this->read_ushort();
|
||||
$x[$i]['encodingId'] = $this->read_ushort();
|
||||
$x[$i]['offset'] = $this->read_ulong();
|
||||
$save_pos = $this->_pos;
|
||||
$x[$i]['format'] = $this->get_ushort($cmap_offset + $x[$i]['offset'] );
|
||||
$this->seek($save_pos );
|
||||
}
|
||||
print_r($x); exit;
|
||||
*/
|
||||
///////////////////////////////////
|
||||
// name - Naming table
|
||||
///////////////////////////////////
|
||||
|
||||
/* Test purposes - displays table of names
|
||||
$name_offset = $this->seek_table("name");
|
||||
$format = $this->read_ushort();
|
||||
if ($format != 0 && $format != 1) // mPDF 5.3.73
|
||||
die("Unknown name table format ".$format);
|
||||
$numRecords = $this->read_ushort();
|
||||
$string_data_offset = $name_offset + $this->read_ushort();
|
||||
for ($i=0;$i<$numRecords; $i++) {
|
||||
$x[$i]['platformId'] = $this->read_ushort();
|
||||
$x[$i]['encodingId'] = $this->read_ushort();
|
||||
$x[$i]['languageId'] = $this->read_ushort();
|
||||
$x[$i]['nameId'] = $this->read_ushort();
|
||||
$x[$i]['length'] = $this->read_ushort();
|
||||
$x[$i]['offset'] = $this->read_ushort();
|
||||
|
||||
$N = '';
|
||||
if ($x[$i]['platformId'] == 1 && $x[$i]['encodingId'] == 0 && $x[$i]['languageId'] == 0) { // Roman
|
||||
$opos = $this->_pos;
|
||||
$N = $this->get_chunk($string_data_offset + $x[$i]['offset'] , $x[$i]['length'] );
|
||||
$this->_pos = $opos;
|
||||
$this->seek($opos);
|
||||
}
|
||||
else { // Unicode
|
||||
$opos = $this->_pos;
|
||||
$this->seek($string_data_offset + $x[$i]['offset'] );
|
||||
$length = $x[$i]['length'] ;
|
||||
if ($length % 2 != 0)
|
||||
$length -= 1;
|
||||
// die("PostScript name is UTF-16BE string of odd length");
|
||||
$length /= 2;
|
||||
$N = '';
|
||||
while ($length > 0) {
|
||||
$char = $this->read_ushort();
|
||||
$N .= (chr($char));
|
||||
$length -= 1;
|
||||
}
|
||||
$this->_pos = $opos;
|
||||
$this->seek($opos);
|
||||
}
|
||||
$x[$i]['names'][$nameId] = $N;
|
||||
}
|
||||
print_r($x); exit;
|
||||
*/
|
||||
|
||||
$name_offset = $this->seek_table("name");
|
||||
$format = $this->read_ushort();
|
||||
if ($format != 0 && $format != 1) // mPDF 5.3.73
|
||||
throw new MpdfException("ERROR - NOT ADDED as Unknown name table format " . $format . " - " . $file);
|
||||
$numRecords = $this->read_ushort();
|
||||
$string_data_offset = $name_offset + $this->read_ushort();
|
||||
$names = array(1 => '', 2 => '', 3 => '', 4 => '', 6 => '');
|
||||
$K = array_keys($names);
|
||||
$nameCount = count($names);
|
||||
for ($i = 0; $i < $numRecords; $i++) {
|
||||
$platformId = $this->read_ushort();
|
||||
$encodingId = $this->read_ushort();
|
||||
$languageId = $this->read_ushort();
|
||||
$nameId = $this->read_ushort();
|
||||
$length = $this->read_ushort();
|
||||
$offset = $this->read_ushort();
|
||||
if (!in_array($nameId, $K))
|
||||
continue;
|
||||
$N = '';
|
||||
if ($platformId == 3 && $encodingId == 1 && $languageId == 0x409) { // Microsoft, Unicode, US English, PS Name
|
||||
$opos = $this->_pos;
|
||||
$this->seek($string_data_offset + $offset);
|
||||
if ($length % 2 != 0)
|
||||
$length += 1;
|
||||
$length /= 2;
|
||||
$N = '';
|
||||
while ($length > 0) {
|
||||
$char = $this->read_ushort();
|
||||
$N .= (chr($char));
|
||||
$length -= 1;
|
||||
}
|
||||
$this->_pos = $opos;
|
||||
$this->seek($opos);
|
||||
} else if ($platformId == 1 && $encodingId == 0 && $languageId == 0) { // Macintosh, Roman, English, PS Name
|
||||
$opos = $this->_pos;
|
||||
$N = $this->get_chunk($string_data_offset + $offset, $length);
|
||||
$this->_pos = $opos;
|
||||
$this->seek($opos);
|
||||
}
|
||||
if ($N && $names[$nameId] == '') {
|
||||
$names[$nameId] = $N;
|
||||
$nameCount -= 1;
|
||||
if ($nameCount == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($names[6])
|
||||
$psName = preg_replace('/ /', '-', $names[6]);
|
||||
else if ($names[4])
|
||||
$psName = preg_replace('/ /', '-', $names[4]);
|
||||
else if ($names[1])
|
||||
$psName = preg_replace('/ /', '-', $names[1]);
|
||||
else
|
||||
$psName = '';
|
||||
if (!$names[1] && !$psName)
|
||||
throw new MpdfException("ERROR - NOT ADDED as Could not find valid font name - " . $file);
|
||||
$this->name = $psName;
|
||||
if ($names[1]) {
|
||||
$this->familyName = $names[1];
|
||||
} else {
|
||||
$this->familyName = $psName;
|
||||
}
|
||||
if ($names[2]) {
|
||||
$this->styleName = $names[2];
|
||||
} else {
|
||||
$this->styleName = 'Regular';
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
// head - Font header table
|
||||
///////////////////////////////////
|
||||
$this->seek_table("head");
|
||||
$ver_maj = $this->read_ushort();
|
||||
$ver_min = $this->read_ushort();
|
||||
if ($ver_maj != 1)
|
||||
throw new MpdfException('ERROR - NOT ADDED as Unknown head table version ' . $ver_maj . '.' . $ver_min . " - " . $file);
|
||||
$this->fontRevision = $this->read_ushort() . $this->read_ushort();
|
||||
$this->skip(4);
|
||||
$magic = $this->read_ulong();
|
||||
if ($magic != 0x5F0F3CF5)
|
||||
throw new MpdfException('ERROR - NOT ADDED as Invalid head table magic ' . $magic . " - " . $file);
|
||||
$this->skip(2);
|
||||
$this->unitsPerEm = $unitsPerEm = $this->read_ushort();
|
||||
$scale = 1000 / $unitsPerEm;
|
||||
$this->skip(24);
|
||||
$macStyle = $this->read_short();
|
||||
$this->skip(4);
|
||||
$indexLocFormat = $this->read_short();
|
||||
|
||||
///////////////////////////////////
|
||||
// OS/2 - OS/2 and Windows metrics table
|
||||
///////////////////////////////////
|
||||
$sFamily = '';
|
||||
$panose = '';
|
||||
$fsSelection = '';
|
||||
if (isset($this->tables["OS/2"])) {
|
||||
$this->seek_table("OS/2");
|
||||
$this->skip(30);
|
||||
$sF = $this->read_short();
|
||||
$sFamily = ($sF >> 8);
|
||||
$this->_pos += 10; //PANOSE = 10 byte length
|
||||
$panose = fread($this->fh, 10);
|
||||
$this->panose = array();
|
||||
for ($p = 0; $p < strlen($panose); $p++) {
|
||||
$this->panose[] = ord($panose[$p]);
|
||||
}
|
||||
$this->skip(20);
|
||||
$fsSelection = $this->read_short();
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
// post - PostScript table
|
||||
///////////////////////////////////
|
||||
$this->seek_table("post");
|
||||
$this->skip(4);
|
||||
$this->italicAngle = $this->read_short() + $this->read_ushort() / 65536.0;
|
||||
$this->skip(4);
|
||||
$isFixedPitch = $this->read_ulong();
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
// cmap - Character to glyph index mapping table
|
||||
///////////////////////////////////
|
||||
$cmap_offset = $this->seek_table("cmap");
|
||||
$this->skip(2);
|
||||
$cmapTableCount = $this->read_ushort();
|
||||
$unicode_cmap_offset = 0;
|
||||
for ($i = 0; $i < $cmapTableCount; $i++) {
|
||||
$platformID = $this->read_ushort();
|
||||
$encodingID = $this->read_ushort();
|
||||
$offset = $this->read_ulong();
|
||||
$save_pos = $this->_pos;
|
||||
if (($platformID == 3 && $encodingID == 1) || $platformID == 0) { // Microsoft, Unicode
|
||||
$format = $this->get_ushort($cmap_offset + $offset);
|
||||
if ($format == 4) {
|
||||
if (!$unicode_cmap_offset)
|
||||
$unicode_cmap_offset = $cmap_offset + $offset;
|
||||
}
|
||||
}
|
||||
else if ((($platformID == 3 && $encodingID == 10) || $platformID == 0)) { // Microsoft, Unicode Format 12 table HKCS
|
||||
$format = $this->get_ushort($cmap_offset + $offset);
|
||||
if ($format == 12) {
|
||||
$unicode_cmap_offset = $cmap_offset + $offset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$this->seek($save_pos);
|
||||
}
|
||||
|
||||
if (!$unicode_cmap_offset)
|
||||
throw new MpdfException('ERROR - Font (' . $this->filename . ') NOT ADDED as it is not Unicode encoded, and cannot be used by mPDF');
|
||||
|
||||
$rtl = false;
|
||||
$indic = false;
|
||||
$cjk = false;
|
||||
$sip = false;
|
||||
$smp = false;
|
||||
$pua = false;
|
||||
$puaag = false;
|
||||
$glyphToChar = array();
|
||||
$unAGlyphs = '';
|
||||
// Format 12 CMAP does characters above Unicode BMP i.e. some HKCS characters U+20000 and above
|
||||
if ($format == 12) {
|
||||
$this->seek($unicode_cmap_offset + 4);
|
||||
$length = $this->read_ulong();
|
||||
$limit = $unicode_cmap_offset + $length;
|
||||
$this->skip(4);
|
||||
$nGroups = $this->read_ulong();
|
||||
for ($i = 0; $i < $nGroups; $i++) {
|
||||
$startCharCode = $this->read_ulong();
|
||||
$endCharCode = $this->read_ulong();
|
||||
$startGlyphCode = $this->read_ulong();
|
||||
if (($endCharCode > 0x20000 && $endCharCode < 0x2A6DF) || ($endCharCode > 0x2F800 && $endCharCode < 0x2FA1F)) {
|
||||
$sip = true;
|
||||
}
|
||||
if ($endCharCode > 0x10000 && $endCharCode < 0x1FFFF) {
|
||||
$smp = true;
|
||||
}
|
||||
if (($endCharCode > 0x0590 && $endCharCode < 0x077F) || ($endCharCode > 0xFE70 && $endCharCode < 0xFEFF) || ($endCharCode > 0xFB50 && $endCharCode < 0xFDFF)) {
|
||||
$rtl = true;
|
||||
}
|
||||
if ($endCharCode > 0x0900 && $endCharCode < 0x0DFF) {
|
||||
$indic = true;
|
||||
}
|
||||
if ($endCharCode > 0xE000 && $endCharCode < 0xF8FF) {
|
||||
$pua = true;
|
||||
if ($endCharCode > 0xF500 && $endCharCode < 0xF7FF) {
|
||||
$puaag = true;
|
||||
}
|
||||
}
|
||||
if (($endCharCode > 0x2E80 && $endCharCode < 0x4DC0) || ($endCharCode > 0x4E00 && $endCharCode < 0xA4CF) || ($endCharCode > 0xAC00 && $endCharCode < 0xD7AF) || ($endCharCode > 0xF900 && $endCharCode < 0xFAFF) || ($endCharCode > 0xFE30 && $endCharCode < 0xFE4F)) {
|
||||
$cjk = true;
|
||||
}
|
||||
|
||||
$offset = 0;
|
||||
// Get each glyphToChar - only point if going to analyse un-mapped Arabic Glyphs
|
||||
if (isset($this->tables['post'])) {
|
||||
for ($unichar = $startCharCode; $unichar <= $endCharCode; $unichar++) {
|
||||
$glyph = $startGlyphCode + $offset;
|
||||
$offset++;
|
||||
$glyphToChar[$glyph][] = $unichar;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // Format 4 CMap
|
||||
$this->seek($unicode_cmap_offset + 2);
|
||||
$length = $this->read_ushort();
|
||||
$limit = $unicode_cmap_offset + $length;
|
||||
$this->skip(2);
|
||||
|
||||
$segCount = $this->read_ushort() / 2;
|
||||
$this->skip(6);
|
||||
$endCount = array();
|
||||
for ($i = 0; $i < $segCount; $i++) {
|
||||
$endCount[] = $this->read_ushort();
|
||||
}
|
||||
$this->skip(2);
|
||||
$startCount = array();
|
||||
for ($i = 0; $i < $segCount; $i++) {
|
||||
$startCount[] = $this->read_ushort();
|
||||
}
|
||||
$idDelta = array();
|
||||
for ($i = 0; $i < $segCount; $i++) {
|
||||
$idDelta[] = $this->read_short();
|
||||
}
|
||||
$idRangeOffset_start = $this->_pos;
|
||||
$idRangeOffset = array();
|
||||
for ($i = 0; $i < $segCount; $i++) {
|
||||
$idRangeOffset[] = $this->read_ushort();
|
||||
}
|
||||
|
||||
for ($n = 0; $n < $segCount; $n++) {
|
||||
if (($endCount[$n] > 0x0590 && $endCount[$n] < 0x077F) || ($endCount[$n] > 0xFE70 && $endCount[$n] < 0xFEFF) || ($endCount[$n] > 0xFB50 && $endCount[$n] < 0xFDFF)) {
|
||||
$rtl = true;
|
||||
}
|
||||
if ($endCount[$n] > 0x0900 && $endCount[$n] < 0x0DFF) {
|
||||
$indic = true;
|
||||
}
|
||||
if (($endCount[$n] > 0x2E80 && $endCount[$n] < 0x4DC0) || ($endCount[$n] > 0x4E00 && $endCount[$n] < 0xA4CF) || ($endCount[$n] > 0xAC00 && $endCount[$n] < 0xD7AF) || ($endCount[$n] > 0xF900 && $endCount[$n] < 0xFAFF) || ($endCount[$n] > 0xFE30 && $endCount[$n] < 0xFE4F)) {
|
||||
$cjk = true;
|
||||
}
|
||||
if ($endCount[$n] > 0xE000 && $endCount[$n] < 0xF8FF) {
|
||||
$pua = true;
|
||||
if ($endCount[$n] > 0xF500 && $endCount[$n] < 0xF7FF) {
|
||||
$puaag = true;
|
||||
}
|
||||
}
|
||||
// Get each glyphToChar - only point if going to analyse un-mapped Arabic Glyphs
|
||||
if (isset($this->tables['post'])) {
|
||||
$endpoint = ($endCount[$n] + 1);
|
||||
for ($unichar = $startCount[$n]; $unichar < $endpoint; $unichar++) {
|
||||
if ($idRangeOffset[$n] == 0)
|
||||
$glyph = ($unichar + $idDelta[$n]) & 0xFFFF;
|
||||
else {
|
||||
$offset = ($unichar - $startCount[$n]) * 2 + $idRangeOffset[$n];
|
||||
$offset = $idRangeOffset_start + 2 * $n + $offset;
|
||||
if ($offset >= $limit)
|
||||
$glyph = 0;
|
||||
else {
|
||||
$glyph = $this->get_ushort($offset);
|
||||
if ($glyph != 0)
|
||||
$glyph = ($glyph + $idDelta[$n]) & 0xFFFF;
|
||||
}
|
||||
}
|
||||
$glyphToChar[$glyph][] = $unichar;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$bold = false;
|
||||
$italic = false;
|
||||
$ftype = '';
|
||||
if ($macStyle & (1 << 0)) {
|
||||
$bold = true;
|
||||
} // bit 0 bold
|
||||
else if ($fsSelection & (1 << 5)) {
|
||||
$bold = true;
|
||||
} // 5 BOLD Characters are emboldened
|
||||
|
||||
if ($macStyle & (1 << 1)) {
|
||||
$italic = true;
|
||||
} // bit 1 italic
|
||||
else if ($fsSelection & (1 << 0)) {
|
||||
$italic = true;
|
||||
} // 0 ITALIC Font contains Italic characters, otherwise they are upright
|
||||
else if ($this->italicAngle <> 0) {
|
||||
$italic = true;
|
||||
}
|
||||
|
||||
if ($isFixedPitch) {
|
||||
$ftype = 'mono';
|
||||
} else if ($sFamily > 0 && $sFamily < 8) {
|
||||
$ftype = 'serif';
|
||||
} else if ($sFamily == 8) {
|
||||
$ftype = 'sans';
|
||||
} else if ($sFamily == 10) {
|
||||
$ftype = 'cursive';
|
||||
}
|
||||
// Use PANOSE
|
||||
if ($panose) {
|
||||
$bFamilyType = ord($panose[0]);
|
||||
if ($bFamilyType == 2) {
|
||||
$bSerifStyle = ord($panose[1]);
|
||||
if (!$ftype) {
|
||||
if ($bSerifStyle > 1 && $bSerifStyle < 11) {
|
||||
$ftype = 'serif';
|
||||
} else if ($bSerifStyle > 10) {
|
||||
$ftype = 'sans';
|
||||
}
|
||||
}
|
||||
$bProportion = ord($panose[3]);
|
||||
if ($bProportion == 9 || $bProportion == 1) {
|
||||
$ftype = 'mono';
|
||||
} // ==1 i.e. No Fit needed for OCR-a and -b
|
||||
} else if ($bFamilyType == 3) {
|
||||
$ftype = 'cursive';
|
||||
}
|
||||
}
|
||||
|
||||
fclose($this->fh);
|
||||
return array($this->familyName, $bold, $italic, $ftype, $TTCfontID, $rtl, $indic, $cjk, $sip, $smp, $puaag, $pua, $unAGlyphs);
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,271 @@
|
|||
<?php
|
||||
|
||||
class wmf
|
||||
{
|
||||
|
||||
var $mpdf = null;
|
||||
|
||||
var $gdiObjectArray;
|
||||
|
||||
public function __construct(mPDF $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]);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,110 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
728 => 711,
|
||||
65 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
259 => 97,
|
||||
258 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
263 => 99,
|
||||
262 => 99,
|
||||
269 => 99,
|
||||
268 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
271 => 100,
|
||||
270 => 100,
|
||||
273 => 100,
|
||||
272 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
283 => 101,
|
||||
282 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
314 => 108,
|
||||
313 => 108,
|
||||
318 => 108,
|
||||
317 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
328 => 110,
|
||||
327 => 110,
|
||||
79 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
337 => 111,
|
||||
336 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
341 => 114,
|
||||
340 => 114,
|
||||
345 => 114,
|
||||
344 => 114,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
351 => 115,
|
||||
350 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
357 => 116,
|
||||
356 => 116,
|
||||
355 => 116,
|
||||
354 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
367 => 117,
|
||||
366 => 117,
|
||||
369 => 117,
|
||||
368 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
221 => 253,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1570 => 1575,
|
||||
1606 => 1722,
|
||||
1729 => 1607,
|
||||
1726 => 1607,
|
||||
1572 => 1608,
|
||||
1746 => 1610,
|
||||
1574 => 1610,
|
||||
);
|
79
application/third_party/mpdf-6.1.4/collations/Azeri_(Cyrillic)_Azerbaijan.php
vendored
Normal file
79
application/third_party/mpdf-6.1.4/collations/Azeri_(Cyrillic)_Azerbaijan.php
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
65 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
88 => 120,
|
||||
73 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
81 => 113,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
80 => 112,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1040 => 1072,
|
||||
1041 => 1073,
|
||||
1042 => 1074,
|
||||
1043 => 1075,
|
||||
1107 => 1075,
|
||||
1027 => 1075,
|
||||
1168 => 1169,
|
||||
1044 => 1076,
|
||||
1026 => 1106,
|
||||
1045 => 1077,
|
||||
1105 => 1077,
|
||||
1025 => 1077,
|
||||
1028 => 1108,
|
||||
1046 => 1078,
|
||||
1047 => 1079,
|
||||
1029 => 1109,
|
||||
1048 => 1080,
|
||||
1031 => 1111,
|
||||
1049 => 1081,
|
||||
1032 => 1112,
|
||||
1050 => 1082,
|
||||
1116 => 1082,
|
||||
1036 => 1082,
|
||||
1067 => 1099,
|
||||
1051 => 1083,
|
||||
1033 => 1113,
|
||||
1052 => 1084,
|
||||
1053 => 1085,
|
||||
1034 => 1114,
|
||||
1054 => 1086,
|
||||
1055 => 1087,
|
||||
1056 => 1088,
|
||||
1057 => 1089,
|
||||
1058 => 1090,
|
||||
1035 => 1115,
|
||||
1059 => 1091,
|
||||
1118 => 1091,
|
||||
1038 => 1091,
|
||||
1060 => 1092,
|
||||
1061 => 1093,
|
||||
1062 => 1094,
|
||||
1063 => 1095,
|
||||
1039 => 1119,
|
||||
1064 => 1096,
|
||||
1065 => 1097,
|
||||
1066 => 1098,
|
||||
1068 => 1100,
|
||||
1069 => 1101,
|
||||
1070 => 1102,
|
||||
1071 => 1103,
|
||||
);
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
199 => 231,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
286 => 287,
|
||||
72 => 104,
|
||||
88 => 120,
|
||||
73 => 105,
|
||||
305 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
304 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
81 => 113,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
214 => 246,
|
||||
80 => 112,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
350 => 351,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
220 => 252,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
89 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
);
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
65 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1040 => 1072,
|
||||
1041 => 1073,
|
||||
1042 => 1074,
|
||||
1043 => 1075,
|
||||
1107 => 1075,
|
||||
1027 => 1075,
|
||||
1168 => 1169,
|
||||
1044 => 1076,
|
||||
1026 => 1106,
|
||||
1045 => 1077,
|
||||
1105 => 1077,
|
||||
1025 => 1077,
|
||||
1028 => 1108,
|
||||
1046 => 1078,
|
||||
1047 => 1079,
|
||||
1029 => 1109,
|
||||
1048 => 1080,
|
||||
1031 => 1111,
|
||||
1049 => 1081,
|
||||
1032 => 1112,
|
||||
1050 => 1082,
|
||||
1116 => 1082,
|
||||
1036 => 1082,
|
||||
1051 => 1083,
|
||||
1033 => 1113,
|
||||
1052 => 1084,
|
||||
1053 => 1085,
|
||||
1034 => 1114,
|
||||
1054 => 1086,
|
||||
1055 => 1087,
|
||||
1056 => 1088,
|
||||
1057 => 1089,
|
||||
1058 => 1090,
|
||||
1035 => 1115,
|
||||
1059 => 1091,
|
||||
1118 => 1091,
|
||||
1038 => 1091,
|
||||
1060 => 1092,
|
||||
1061 => 1093,
|
||||
1062 => 1094,
|
||||
1063 => 1095,
|
||||
1039 => 1119,
|
||||
1064 => 1096,
|
||||
1065 => 1097,
|
||||
1066 => 1098,
|
||||
1067 => 1099,
|
||||
1068 => 1100,
|
||||
1069 => 1101,
|
||||
1070 => 1102,
|
||||
1071 => 1103,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
65 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1040 => 1072,
|
||||
1041 => 1073,
|
||||
1042 => 1074,
|
||||
1043 => 1075,
|
||||
1107 => 1075,
|
||||
1027 => 1075,
|
||||
1168 => 1169,
|
||||
1044 => 1076,
|
||||
1026 => 1106,
|
||||
1045 => 1077,
|
||||
1105 => 1077,
|
||||
1025 => 1077,
|
||||
1028 => 1108,
|
||||
1046 => 1078,
|
||||
1047 => 1079,
|
||||
1029 => 1109,
|
||||
1048 => 1080,
|
||||
1031 => 1111,
|
||||
1049 => 1081,
|
||||
1032 => 1112,
|
||||
1050 => 1082,
|
||||
1116 => 1082,
|
||||
1036 => 1082,
|
||||
1051 => 1083,
|
||||
1033 => 1113,
|
||||
1052 => 1084,
|
||||
1053 => 1085,
|
||||
1034 => 1114,
|
||||
1054 => 1086,
|
||||
1055 => 1087,
|
||||
1056 => 1088,
|
||||
1057 => 1089,
|
||||
1058 => 1090,
|
||||
1035 => 1115,
|
||||
1059 => 1091,
|
||||
1118 => 1091,
|
||||
1038 => 1091,
|
||||
1060 => 1092,
|
||||
1061 => 1093,
|
||||
1062 => 1094,
|
||||
1063 => 1095,
|
||||
1039 => 1119,
|
||||
1064 => 1096,
|
||||
1065 => 1097,
|
||||
1066 => 1098,
|
||||
1067 => 1099,
|
||||
1068 => 1100,
|
||||
1069 => 1101,
|
||||
1070 => 1102,
|
||||
1071 => 1103,
|
||||
);
|
79
application/third_party/mpdf-6.1.4/collations/Bosnian_(Cyrillic)_Bosnia_and_Herzegovina.php
vendored
Normal file
79
application/third_party/mpdf-6.1.4/collations/Bosnian_(Cyrillic)_Bosnia_and_Herzegovina.php
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
65 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1040 => 1072,
|
||||
1041 => 1073,
|
||||
1042 => 1074,
|
||||
1043 => 1075,
|
||||
1107 => 1075,
|
||||
1027 => 1075,
|
||||
1168 => 1169,
|
||||
1044 => 1076,
|
||||
1026 => 1106,
|
||||
1045 => 1077,
|
||||
1105 => 1077,
|
||||
1025 => 1077,
|
||||
1028 => 1108,
|
||||
1046 => 1078,
|
||||
1047 => 1079,
|
||||
1029 => 1109,
|
||||
1048 => 1080,
|
||||
1031 => 1111,
|
||||
1049 => 1081,
|
||||
1032 => 1112,
|
||||
1050 => 1082,
|
||||
1116 => 1082,
|
||||
1036 => 1082,
|
||||
1051 => 1083,
|
||||
1033 => 1113,
|
||||
1052 => 1084,
|
||||
1053 => 1085,
|
||||
1034 => 1114,
|
||||
1054 => 1086,
|
||||
1055 => 1087,
|
||||
1056 => 1088,
|
||||
1057 => 1089,
|
||||
1058 => 1090,
|
||||
1035 => 1115,
|
||||
1059 => 1091,
|
||||
1118 => 1091,
|
||||
1038 => 1091,
|
||||
1060 => 1092,
|
||||
1061 => 1093,
|
||||
1062 => 1094,
|
||||
1063 => 1095,
|
||||
1039 => 1119,
|
||||
1064 => 1096,
|
||||
1065 => 1097,
|
||||
1066 => 1098,
|
||||
1067 => 1099,
|
||||
1068 => 1100,
|
||||
1069 => 1101,
|
||||
1070 => 1102,
|
||||
1071 => 1103,
|
||||
);
|
106
application/third_party/mpdf-6.1.4/collations/Bosnian_(Latin)_Bosnia_and_Herzegovina.php
vendored
Normal file
106
application/third_party/mpdf-6.1.4/collations/Bosnian_(Latin)_Bosnia_and_Herzegovina.php
vendored
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
728 => 711,
|
||||
65 => 97,
|
||||
259 => 97,
|
||||
258 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
268 => 269,
|
||||
262 => 263,
|
||||
68 => 100,
|
||||
271 => 100,
|
||||
270 => 100,
|
||||
272 => 273,
|
||||
69 => 101,
|
||||
283 => 101,
|
||||
282 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
318 => 108,
|
||||
317 => 108,
|
||||
314 => 108,
|
||||
313 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
328 => 110,
|
||||
327 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
79 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
337 => 111,
|
||||
336 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
345 => 114,
|
||||
344 => 114,
|
||||
341 => 114,
|
||||
340 => 114,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
351 => 115,
|
||||
350 => 115,
|
||||
223 => 115,
|
||||
352 => 353,
|
||||
84 => 116,
|
||||
357 => 116,
|
||||
356 => 116,
|
||||
355 => 116,
|
||||
354 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
367 => 117,
|
||||
366 => 117,
|
||||
369 => 117,
|
||||
368 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
90 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
381 => 382,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
65 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1040 => 1072,
|
||||
1041 => 1073,
|
||||
1042 => 1074,
|
||||
1043 => 1075,
|
||||
1107 => 1075,
|
||||
1027 => 1075,
|
||||
1168 => 1169,
|
||||
1044 => 1076,
|
||||
1026 => 1106,
|
||||
1045 => 1077,
|
||||
1105 => 1077,
|
||||
1025 => 1077,
|
||||
1028 => 1108,
|
||||
1046 => 1078,
|
||||
1047 => 1079,
|
||||
1029 => 1109,
|
||||
1048 => 1080,
|
||||
1031 => 1111,
|
||||
1049 => 1081,
|
||||
1032 => 1112,
|
||||
1050 => 1082,
|
||||
1116 => 1082,
|
||||
1036 => 1082,
|
||||
1051 => 1083,
|
||||
1033 => 1113,
|
||||
1052 => 1084,
|
||||
1053 => 1085,
|
||||
1034 => 1114,
|
||||
1054 => 1086,
|
||||
1055 => 1087,
|
||||
1056 => 1088,
|
||||
1057 => 1089,
|
||||
1058 => 1090,
|
||||
1035 => 1115,
|
||||
1059 => 1091,
|
||||
1118 => 1091,
|
||||
1038 => 1091,
|
||||
1060 => 1092,
|
||||
1061 => 1093,
|
||||
1062 => 1094,
|
||||
1063 => 1095,
|
||||
1039 => 1119,
|
||||
1064 => 1096,
|
||||
1065 => 1097,
|
||||
1066 => 1098,
|
||||
1067 => 1099,
|
||||
1068 => 1100,
|
||||
1069 => 1101,
|
||||
1070 => 1102,
|
||||
1071 => 1103,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
106
application/third_party/mpdf-6.1.4/collations/Croatian_(Latin)_Bosnia_and_Herzegovina.php
vendored
Normal file
106
application/third_party/mpdf-6.1.4/collations/Croatian_(Latin)_Bosnia_and_Herzegovina.php
vendored
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
728 => 711,
|
||||
65 => 97,
|
||||
259 => 97,
|
||||
258 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
268 => 269,
|
||||
262 => 263,
|
||||
68 => 100,
|
||||
271 => 100,
|
||||
270 => 100,
|
||||
272 => 273,
|
||||
69 => 101,
|
||||
283 => 101,
|
||||
282 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
318 => 108,
|
||||
317 => 108,
|
||||
314 => 108,
|
||||
313 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
328 => 110,
|
||||
327 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
79 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
337 => 111,
|
||||
336 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
345 => 114,
|
||||
344 => 114,
|
||||
341 => 114,
|
||||
340 => 114,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
351 => 115,
|
||||
350 => 115,
|
||||
223 => 115,
|
||||
352 => 353,
|
||||
84 => 116,
|
||||
357 => 116,
|
||||
356 => 116,
|
||||
355 => 116,
|
||||
354 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
367 => 117,
|
||||
366 => 117,
|
||||
369 => 117,
|
||||
368 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
90 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
381 => 382,
|
||||
);
|
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
728 => 711,
|
||||
65 => 97,
|
||||
259 => 97,
|
||||
258 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
268 => 269,
|
||||
262 => 263,
|
||||
68 => 100,
|
||||
271 => 100,
|
||||
270 => 100,
|
||||
272 => 273,
|
||||
69 => 101,
|
||||
283 => 101,
|
||||
282 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
318 => 108,
|
||||
317 => 108,
|
||||
314 => 108,
|
||||
313 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
328 => 110,
|
||||
327 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
79 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
337 => 111,
|
||||
336 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
345 => 114,
|
||||
344 => 114,
|
||||
341 => 114,
|
||||
340 => 114,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
351 => 115,
|
||||
350 => 115,
|
||||
223 => 115,
|
||||
352 => 353,
|
||||
84 => 116,
|
||||
357 => 116,
|
||||
356 => 116,
|
||||
355 => 116,
|
||||
354 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
367 => 117,
|
||||
366 => 117,
|
||||
369 => 117,
|
||||
368 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
90 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
381 => 382,
|
||||
);
|
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
728 => 711,
|
||||
65 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
259 => 97,
|
||||
258 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
263 => 99,
|
||||
262 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
268 => 269,
|
||||
68 => 100,
|
||||
271 => 100,
|
||||
270 => 100,
|
||||
273 => 100,
|
||||
272 => 100,
|
||||
69 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
283 => 101,
|
||||
282 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
314 => 108,
|
||||
313 => 108,
|
||||
318 => 108,
|
||||
317 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
328 => 110,
|
||||
327 => 110,
|
||||
79 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
337 => 111,
|
||||
336 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
341 => 114,
|
||||
340 => 114,
|
||||
344 => 345,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
351 => 115,
|
||||
350 => 115,
|
||||
223 => 115,
|
||||
352 => 353,
|
||||
84 => 116,
|
||||
357 => 116,
|
||||
356 => 116,
|
||||
355 => 116,
|
||||
354 => 116,
|
||||
85 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
367 => 117,
|
||||
366 => 117,
|
||||
369 => 117,
|
||||
368 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
90 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
381 => 382,
|
||||
);
|
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
252 => 121,
|
||||
220 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
198 => 230,
|
||||
228 => 230,
|
||||
196 => 230,
|
||||
216 => 248,
|
||||
246 => 248,
|
||||
214 => 248,
|
||||
197 => 229,
|
||||
);
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
173 => 8205,
|
||||
1600 => 8205,
|
||||
1611 => 8205,
|
||||
1612 => 8205,
|
||||
1613 => 8205,
|
||||
1614 => 8205,
|
||||
1615 => 8205,
|
||||
1616 => 8205,
|
||||
1618 => 8205,
|
||||
1617 => 8205,
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
224 => 97,
|
||||
226 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
232 => 101,
|
||||
234 => 101,
|
||||
235 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
238 => 105,
|
||||
239 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
79 => 111,
|
||||
244 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
249 => 117,
|
||||
251 => 117,
|
||||
252 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
90 => 122,
|
||||
1573 => 1575,
|
||||
1571 => 1575,
|
||||
1606 => 1722,
|
||||
1726 => 1729,
|
||||
1572 => 1608,
|
||||
1574 => 1746,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
104
application/third_party/mpdf-6.1.4/collations/English_Republic_of_the_Philippines.php
vendored
Normal file
104
application/third_party/mpdf-6.1.4/collations/English_Republic_of_the_Philippines.php
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
104
application/third_party/mpdf-6.1.4/collations/English_Trinidad_and_Tobago.php
vendored
Normal file
104
application/third_party/mpdf-6.1.4/collations/English_Trinidad_and_Tobago.php
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
222 => 254,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
222 => 254,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,93 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
257 => 97,
|
||||
256 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
261 => 97,
|
||||
260 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
263 => 99,
|
||||
262 => 99,
|
||||
269 => 99,
|
||||
268 => 99,
|
||||
68 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
279 => 101,
|
||||
278 => 101,
|
||||
275 => 101,
|
||||
274 => 101,
|
||||
281 => 101,
|
||||
280 => 101,
|
||||
70 => 102,
|
||||
71 => 103,
|
||||
291 => 103,
|
||||
290 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
299 => 105,
|
||||
298 => 105,
|
||||
303 => 105,
|
||||
302 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
311 => 107,
|
||||
310 => 107,
|
||||
76 => 108,
|
||||
316 => 108,
|
||||
315 => 108,
|
||||
322 => 108,
|
||||
321 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
324 => 110,
|
||||
323 => 110,
|
||||
326 => 110,
|
||||
325 => 110,
|
||||
79 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
333 => 111,
|
||||
332 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
343 => 114,
|
||||
342 => 114,
|
||||
83 => 115,
|
||||
347 => 115,
|
||||
346 => 115,
|
||||
223 => 115,
|
||||
352 => 353,
|
||||
90 => 122,
|
||||
378 => 122,
|
||||
377 => 122,
|
||||
380 => 122,
|
||||
379 => 122,
|
||||
381 => 382,
|
||||
84 => 116,
|
||||
85 => 117,
|
||||
363 => 117,
|
||||
362 => 117,
|
||||
371 => 117,
|
||||
370 => 117,
|
||||
86 => 118,
|
||||
119 => 118,
|
||||
87 => 118,
|
||||
213 => 245,
|
||||
196 => 228,
|
||||
214 => 246,
|
||||
220 => 252,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
86 => 118,
|
||||
119 => 118,
|
||||
87 => 118,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
252 => 121,
|
||||
220 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
197 => 229,
|
||||
196 => 228,
|
||||
214 => 246,
|
||||
248 => 246,
|
||||
216 => 246,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
104
application/third_party/mpdf-6.1.4/collations/French_Principality_of_Monaco.php
vendored
Normal file
104
application/third_party/mpdf-6.1.4/collations/French_Principality_of_Monaco.php
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
$collation = array (
|
||||
710 => 94,
|
||||
189 => 188,
|
||||
190 => 179,
|
||||
65 => 97,
|
||||
170 => 97,
|
||||
225 => 97,
|
||||
193 => 97,
|
||||
224 => 97,
|
||||
192 => 97,
|
||||
226 => 97,
|
||||
194 => 97,
|
||||
228 => 97,
|
||||
196 => 97,
|
||||
227 => 97,
|
||||
195 => 97,
|
||||
229 => 97,
|
||||
197 => 97,
|
||||
230 => 97,
|
||||
198 => 97,
|
||||
66 => 98,
|
||||
67 => 99,
|
||||
231 => 99,
|
||||
199 => 99,
|
||||
68 => 100,
|
||||
240 => 100,
|
||||
208 => 100,
|
||||
69 => 101,
|
||||
233 => 101,
|
||||
201 => 101,
|
||||
232 => 101,
|
||||
200 => 101,
|
||||
234 => 101,
|
||||
202 => 101,
|
||||
235 => 101,
|
||||
203 => 101,
|
||||
70 => 102,
|
||||
402 => 102,
|
||||
71 => 103,
|
||||
72 => 104,
|
||||
73 => 105,
|
||||
237 => 105,
|
||||
205 => 105,
|
||||
236 => 105,
|
||||
204 => 105,
|
||||
238 => 105,
|
||||
206 => 105,
|
||||
239 => 105,
|
||||
207 => 105,
|
||||
74 => 106,
|
||||
75 => 107,
|
||||
76 => 108,
|
||||
77 => 109,
|
||||
78 => 110,
|
||||
241 => 110,
|
||||
209 => 110,
|
||||
79 => 111,
|
||||
186 => 111,
|
||||
243 => 111,
|
||||
211 => 111,
|
||||
242 => 111,
|
||||
210 => 111,
|
||||
244 => 111,
|
||||
212 => 111,
|
||||
246 => 111,
|
||||
214 => 111,
|
||||
245 => 111,
|
||||
213 => 111,
|
||||
248 => 111,
|
||||
216 => 111,
|
||||
339 => 111,
|
||||
338 => 111,
|
||||
80 => 112,
|
||||
81 => 113,
|
||||
82 => 114,
|
||||
83 => 115,
|
||||
353 => 115,
|
||||
352 => 115,
|
||||
223 => 115,
|
||||
84 => 116,
|
||||
254 => 116,
|
||||
222 => 116,
|
||||
85 => 117,
|
||||
250 => 117,
|
||||
218 => 117,
|
||||
249 => 117,
|
||||
217 => 117,
|
||||
251 => 117,
|
||||
219 => 117,
|
||||
252 => 117,
|
||||
220 => 117,
|
||||
86 => 118,
|
||||
87 => 119,
|
||||
88 => 120,
|
||||
89 => 121,
|
||||
253 => 121,
|
||||
221 => 121,
|
||||
255 => 121,
|
||||
376 => 121,
|
||||
90 => 122,
|
||||
382 => 122,
|
||||
381 => 122,
|
||||
);
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue